Hola Mi primera serie de artículos tendrá como objetivo estudiar métodos de compresión y almacenamiento de imágenes / sonido, como JPEG (imagen) y WAVE (sonido), y también incluirán ejemplos de programas que utilizan estos formatos (.jpg, .wav) en la práctica. En esta parte consideraremos WAVE.
La historia
WAVE (Waveform Audio File Format) es un formato de archivo contenedor para almacenar grabaciones de flujo de audio. Este contenedor se usa típicamente para almacenar sonido sin comprimir en modulación de código de pulso. (Adaptado de Wikipedia)
Fue inventado y publicado en 1991 junto con RIFF por Microsoft e IBM (las principales compañías de TI de la época).
Estructura de archivo
El archivo tiene una parte de encabezado, los datos en sí, pero no hay pie de página. El encabezado pesa un total de 44 bytes.
El encabezado contiene configuraciones para el número de bits en la muestra, la frecuencia de la descripción, la profundidad del sonido, etc. información necesaria para una tarjeta de sonido. (Todos los valores numéricos de la tabla deben escribirse en orden Little-Endian)
Ejemplo de WAVE
La tabla anterior se puede traducir fácilmente a una estructura C, pero hoy nuestro lenguaje es Python. Lo más fácil de hacer con la onda es un generador de ruido. Para esta tarea, no necesitamos un alto byteRate y compresión.
Para comenzar, importamos los módulos necesarios:
Luego, necesitamos crear todas las variables necesarias de la tabla de acuerdo con sus tamaños. Los valores variables en él dependen aquí solo de numSamples (el número de muestras). Cuanto más haya, más tiempo durará nuestro ruido.
numSamples = int(argv[1]) output_path = argv[2] chunkId = b'RIFF' Format = b'WAVE' subchunk1ID = b'fmt ' subchunk1Size = b'\x10\x00\x00\x00'
Solo queda escribirlos en la secuencia necesaria (como en la tabla):
with open(output_path, 'wb') as fh: fh.write(chunkId + chunkSize + Format + subchunk1ID + subchunk1Size + audioFormat + numChannels + sampleRate + byteRate + blockAlign + bitsPerSample + subchunk2ID + subchunk2Size + data)
Y así, hecho. Para usar el script, necesitamos agregar los argumentos de línea de comando necesarios:
python3 WAV.py [num of samples] [output]
cantidad de muestras - cuenta muestras
salida - ruta al archivo de salida
Aquí hay un enlace a un archivo de audio de prueba con ruido, pero para ahorrar memoria, bajé BPS a 1b / sy bajé el número de canales a 1 (con una transmisión de audio estéreo sin comprimir de 32 bits a 64kbs obtuvimos 80M de un archivo .wav limpio, y solo 10): https: / /instaud.io/3Dcy
El código completo (WAV.py) (el código tiene muchos valores duplicados de variables, esto es solo un boceto):
from struct import pack
Resumen
Entonces aprendiste un poco más sobre el sonido digital y cómo se almacena. En esta publicación no utilizamos la compresión (audioFormat), pero para revisar cada uno de los artículos populares necesitará los artículos 10. Espero que haya aprendido algo nuevo para usted y esto lo ayudará en futuros desarrollos.
Gracias
Fuentes
Estructura de archivos WAV
WAV - Wikipedia