Vista general del Paquete Sampled (Parte 2 de 4)

¿Qué son los Datos de Audio con Formato?

Los Datos de Audio con Formato se refieren al sonido que está en cualquier formato de un número de formatos estándar. La API Java Sound distingue entre formatos de datos y formatos de archivo.

Formatos de Datos

Un formato de datos te dice como interpretar una serie de bytes de datos de audio muestreado "sin refinar", como muestras que ya han sido leídas desde un archivo de sonido, o muestras que han sido capturadas desde la entrada de micrófono. Quizás necesites saber, por ejemplo, cuántos bits constituyen una muestra (la representación del instante mas corto de sonido), y similarmente quizás necesites saber la velocidad de la muestra de sonido (qué tan rápido las muestras se supone que se encuentran unas con otras). Cuando se configura una reproducción o captura, especificas el formato de datos del sonido que estás capturando o reproduciendo.

En la API Java Sound, un formato de datos es representados por un objeto AudioFormat, el cuál incluye los siguientes atributos:

  • Técnica de codificación, usualmente modulación por pulsos codificados (en inglés PCM)
  • Número de canales (1 para mono, 2 para estéreo, etc.)
  • Velocidad de muestra (número de muestras por segundo, por canal)
  • Número de bits por muestra (por canal)
  • Velocidad de marco
  • Tamaño de marco en bytes
  • Orden de los bytes (big-endian o little-endian)

  • PCM es un tipo de codificación de la onda de sonido. La API Java Sound incluye 2 codificaciones PCM que usan cuantización linear de amplitud, y valores enteros con y sin signo. Cuantización linear quiere decir que el número guardado en cada muestreo es directamente proporcional (excepto por cualquier distorsión) a la presión del sonido original en dicho instante-y similarmente proporcional al desplazamiento de un altavoz o tímpano que está vibrando con el sonido en el mismo instante. Los discos compactos por ejemplo, usan un sonido codificado PCM lineal. la codificación mu-law y la codificación a-law son codificaciones comunes no lineales que proveen un version mas comprimida de datos de audio; estas codificaciones son típicamente usadas para la telefonía o grabaciones de conversaciones. Una codificación no lineal traza un mapa de la amplitud del sonido original para al valor guardado usando una función no lineal, la cual puede ser designada para dar mayor resolución de amplitud a sonidos suaves mas que a sonidos fuertes.

    Un marco contiene los datos de todos los canales en un tiempo particular. Para los datos codificados en PCM, el marco es simplemente el conjunto de muestras simultáneas
    en todos los canales, para un dado intante en el tiempo, sin ninguna información adicional. En este caso, la velocidad de marco es igual a la velocidad de muestra, y el tamaño de marco en bytes es el número de canales multiplicado por el tamaño de muestra en bits, dividido por le número de bits en un byte.

    Para otros tipos de codificación, un marco debe contener información adicional junto a las muestras, y la velocidad de marco quizás sea completamente diferente de la velocidad de muestra. Por ejemplo, consideremos la codificación MP3 (MPEG-1 Audio Layer 3), la cual no esta explícitamente mencionada en la versión actual de la API Java Sound, pero la cual prodría ser soportada por medio de una impletancion de la API Java Sound o por prestación de servicios por parte de terceros. En MP3, cada marco contiene un fardo de datos comprimidos por una serie de muestras, no solo una muestra por canal, debido a que cada marco encapsula una serie complete de muestras, la velocidad de marco es menor a la velocidad de muestra. El marco contiene además una cabecera. A pesar de la cabecera, el tamaño del marco en bytes es menor al tamaño en bytes del número equivalente de marcos PCM. (Después de todo, el propósito de MP3 es ser más compacto que los datos PCM.) Para tal codificación, la velocidad de muestra y el tamaño de muestra se refeieren a los datos PCM que el sonido codificado eventualmente serán convertidos antes de ser entregados a un convertidos análogo-digital (DAC, en inglés).

    Formatos de Archivo

    Un formato de archivo especifica la estructura de un archivo de sonido, incluyendo no solo el formato de los datos de audio sin refinar en el archivo, sino que también otra información que puede ser almacenada en el archivo. Los archivos de sonido vienen en varios estándares, como los es WAVE (también conocido como WAV, y a menudo asociado a los PCs), AIFF (a menudo asociado con los Macintosh), y AU (a menudo asocioado con los sistemas UNIX). Los diferentes tipos de archivos de audio tienen diferentes estructuras. Por ejemplo, quizás tengan un arreglo de datos distinto en la "cabecera" del archivo. Una cabecera contiene información descriptiva que típicamente precede a las muestras de audio del archivo actual, a pesar de que algunos formatos de archivo permitan "pedazos" sucesivos de datos de audio y descipción. La cabecera incluye un especificación del formato de datos que fue usado para almacenar el audio en el archivo de sonido. Cualquiera de estos tipos de sonido puede contener varios formatos de datos (a pesar de que usualmente hay solo un formato de dato dentro de un archivo dado), y el mismo formato de datos puede ser usado en archivos que tengan distintos formatos de archivo.

    En la API Java Sound, un formato de archivo es representado por un objecto AudioFileFormat el cual contiene:

  • El tipo de archivo (WAVE, AIFF, etc.)
  • El largo del archivo en bytes
  • El largo, en marcos, de los datos de audio contenidos en el archivo
  • Un objeto AudioFormat que especifica el formato de datos de los datos de audio contenidos en el archivo

  • La clase AudioSystem provee de métodos para lee y escribir sonidos en diferentes formatos de archivo, y para convertir entre distintos formatos de datos. Algunos de los métodos que te dejan acceder a los contenidos del archivo a través de un tipo de flujo llamado un AudioInputStream. Un AudioInputStream es una subclase de la clase InputStream, la cual encapsula una serie de bytes que pueden ser leídos secuencialmente. A su superclase, la clase AudioInputStream agrega conocimiento del formatos de datos de audio de los bytes (representado por un objeto AudioFormat). Gracias a la lectura de un archivo de sonido como un AudioInputStream, obtiene acceso inmediato a las muestras, sin tener que preocuparte acerca de la estructura del archivo de sonido (su cabecera,trozos,etc.). Una simple invocación de método te da toda la información que necesitas acerca de el formato de datos y el tipo de archivo

    traducido desde http://java.sun.com/docs/books/tutorial/sound/sampled-overview.html
    Copyright © 1995-2009 Sun Microsystems, Inc. 4150 Network Circle, Santa Clara, California 95054, U.S.A. All rights reserved.

    0 comentarios: