¿Qué y cómo es la codificación de un archivo de audio sin formato (sin encabezado)?

8

He hecho esto:

me@riverbrain:~/sgf$ echo "test" | text2wave -otype raw -F 16000 >> test.raw

que produjo un archivo de audio sin encabezado. Lo maravilloso de este archivo es que se puede concatenar (usando cat, como texto) con otro archivo de audio sin formato.

Por supuesto que tengo un problema. El problema es que todavía no puedo jugarlo.

me@riverbrain:~/sgf$ play test.raw 

play FAIL formats: bad input format for file `test.raw': sampling rate was not specified

y también, al especificar la frecuencia de muestreo

me@riverbrain:~/sgf$ play -r 16000 test.raw 
play FAIL formats: bad input format for file `test.raw': data encoding was not specified

Cuando busqué 'codificación' de información tuve la sensación de que tenía mucho que ver con la arquitectura de su procesador, pero tal vez me equivoque. De todos modos, no puedo encontrar ninguna documentación sobre cómo 'preguntar' a la computadora cuál es la codificación de datos del archivo de audio sin formato. Y también sé cuál es la frecuencia de muestreo, debido a que lo configuré yo mismo, pero eso es todo lo que puedo obtener.

ixtmixilix
fuente
2
No hay formato sin formato estándar. Debe averiguar qué parámetros utilizó la aplicación que lo produjo. Desafortunadamente, eso no siempre está bien documentado.
Gilles 'SO- deja de ser malvado'

Respuestas:

8

Puede variar, pero al menos para mí, text2wave produce PCM entero de 1 canal y 16 bits con signo. Estos son bastante normales, y quedará muy claro cuando los tenga en su lugar (p. Ej., Si por error enteras sin firmar, obtendrás un sonido extremadamente distorsionado)

Con el juego, se ve así:

play -r 16000 -b 16 -c 1 -e signed-integer /tmp/foo.raw
play -r 16000 -2 -s -c 1 /tmp/foo.raw # obsolete way for older versions of Sox

Sospecho que estos parámetros están configurados en algún lugar del Festival. Algunos de ellos también pueden estar codificados.

La única cosa dependiente de la arquitectura que puede encontrar es grande versus pequeño endian; en mi máquina little-endian Festival está escribiendo little-endian; si moviera ese archivo a una máquina big endian, probablemente necesite agregarlo -L. Si text2wavse ejecutara en una máquina big endian, no estoy seguro de si escribiría datos big o little endian.

derobert
fuente
gracias. todas estas respuestas fueron geniales, pero esta es la solución que terminé usando.
ixtmixilix
2

Probablemente pueda crear su propio encabezado RIFF. Un poco de golpe debería hacerlo ... y simplemente conecta el encabezado a tu (s) otra (s) pieza (s) ...

Este enlace muestra el diseño del encabezado: el formato de archivo Canonical WAVE

También hay un enlace relacionado en SO: convertir datos de audio RAW a WAV con scripting , pero las respuestas de mplayer / mencoder tienen un recuento marcado cero. Sin embargo, parece que SoX funciona.

SoX recibe una mención en los dos enlaces anteriores y está disponible en el repositorio de Ubuntu; Supongo que también está en otros.

PD ... ¡Intenté usarlo play(no sabía que existía) y descubrí que es SoX! ... El enlace SO da un ejemplo, copiado aquí:sox -r 44100 -e unsigned -b 8 -c 1 <RAW_FILE> <TARGET_FILE>

Si no puede hacerlo funcionar con sox , tal vez mplayer / mencoder o el encabezado RIFF lo harán funcionar por usted.

Peter.O
fuente
2

Use en aplaylugar de playreproducir un archivo sin formato, de esta manera puede especificar que es un audio sin formato con el modificador -t:

aplay -q -c 2 -t raw -f s16 test.raw
neurona34
fuente