2009-05-08 18 views
8

Estoy interesado en extraer con precisión partes de un archivo PCM WAV, hasta el nivel de muestra. La mayoría de los módulos de audio parecen depender de bibliotecas de audio específicas de la plataforma. Quiero hacer esta plataforma cruzada y la velocidad no es un problema, ¿hay algún módulo de audio python nativo que pueda hacer esto?¿Cómo editar datos de audio PCM sin procesar sin una biblioteca de audio?

Si no, tendré que interpretar el binario PCM. Aunque estoy seguro de que puedo desenterrar las especificaciones de PCM con bastante facilidad, y los formatos crudos son lo suficientemente fáciles de recorrer, nunca antes había manejado datos binarios en Python. ¿Hay algún buen recurso que explique cómo hacer esto? Específicamente en relación con el audio sería simplemente guinda.

+0

Esto debería ser muy complicado en Python. Debes escribir un blog sobre eso si tienes que hacer tu propio. –

Respuesta

6

leí la pregunta y las respuestas y siento que debo estar perdiendo algo completamente obvio, porque nadie menciona los dos módulos siguientes:

  • audioop: manipular los datos de audio primas
  • wave: leer y Los archivos WAV escritura

Tal vez provienen de un universo paralelo y la máquina del tiempo de Guido es en realidad una máquina de espacio-tiempo :)

Si necesita un código de ejemplo, no dude en preguntar.

PD Suponiendo una frecuencia de muestreo de 48kHz, un cuadro de video a 24/1.001 == 23.976023976 ... fps es 2002 muestras de audio largas, y a 25 fps son 1920 muestras de audio de largo.

+0

ISTM que RTFMing es un arte perdido hace mucho tiempo. – tzot

+0

Wow, no estoy seguro de cómo me perdí eso, pero supongo que simplemente quedó enterrado debajo de todos los contenedores de audio de la biblioteca. Esperemos que esto sea multiplataforma y lo suficientemente preciso, pero parece que sí lo es. – Soviut

1

¿Es realmente importante que su solución sea Python puro, o aceptaría algo que pueda funcionar con bibliotecas de audio nativas en varias plataformas (por lo que es efectivamente multiplataforma)? Hay varios ejemplos de este último a http://wiki.python.org/moin/PythonInMusic

1

parece una combinación de abierto (..., "rb"), struct module, y algunos detalles sobre el wav/riff file format (mejor referencia, probablemente, por ahí) hará el trabajo.

Simplemente curioso, ¿qué piensas hacer con los datos de muestra sin formato?

+0

Necesito cortar un wav largo en pedazos que corresponden a una serie de puntos de entrada y salida. Tiene que ser preciso para que pueda coincidir exactamente con el video a cualquier velocidad de cuadro.La mayoría de las bibliotecas solo tienen una precisión de 1/10 de segundo, mientras que incluso nuestros framerates más bajos comienzan en 12 fps. Preferiría tener 44,000 de precisión. – Soviut

5

Solo he escrito un lector de PCM en C++ y Java, pero el formato en sí es bastante simple. Una descripción decente se puede encontrar aquí: http://ccrma.stanford.edu/courses/422/projects/WaveFormat/

Pasado que usted debería poder simplemente leerlo (lectura de archivo binario, http://www.johnny-lin.com/cdat_tips/tips_fileio/bin_array.html) y simplemente tratar con la matriz resultante. Es posible que deba usar algunos cambios de bit para obtener las alineaciones correctas (https://docs.python.org/reference/expressions.html#shifting-operations), pero dependiendo de cómo lo lea, es posible que no sea necesario.

Dicho todo esto, todavía me inclino por el enfoque de David.

Cuestiones relacionadas