2009-05-08 18 views
8

Sono interessato a estrarre con precisione porzioni di un file WAV PCM, fino al livello di esempio. La maggior parte dei moduli audio sembra basarsi su librerie audio specifiche della piattaforma. Voglio fare questo multipiattaforma e la velocità non è un problema, ci sono dei moduli audio Python nativi che possono farlo?Come modificare i dati audio PCM non elaborati senza una libreria audio?

In caso contrario, dovrò interpretare il binario PCM. Mentre sono sicuro di poter recuperare le specifiche PCM abbastanza facilmente, e i formati grezzi sono abbastanza facili da girare, non ho mai avuto a che fare con i dati binari in Python. Ci sono delle buone risorse che spiegano come farlo? In particolare per quanto riguarda l'audio sarebbe solo la ciliegina.

+0

Questo dovrebbe essere molto intimo in python. Dovresti blog su di esso se devi girare il tuo. –

risposta

6

ho letto la domanda e le risposte e mi sento che devo essere perso qualcosa del tutto ovvia, perché nessuno ha menzionato i seguenti due moduli:

  • audioop: manipolare i dati audio grezzi
  • wave: leggere e I file WAV scrittura

Forse vengono da un universo parallelo e macchina del tempo di Guido è in realtà una macchina spazio-tempo :)

Se hai bisogno di codice di esempio, non esitare a chiedere.

PS Supponendo una frequenza di campionamento di 48 kHz, un fotogramma video a 24/1.001 == 23.976023976 ... fps è un campionamento audio del 2002 lungo, ea 25fps sono 1920 campioni audio lunghi.

+0

ISTM che RTFMing è un'arte perduta da tempo. – tzot

+0

Wow, non sono sicuro di quanto mi sia mancato, ma immagino che sia appena stato sepolto da tutti i wrapper della libreria audio. Spero che questo sia multipiattaforma e abbastanza preciso, ma sembra che lo sia. – Soviut

1

È davvero importante che la tua soluzione sia pura Python, o accetteresti qualcosa che possa funzionare con librerie audio native su varie piattaforme (quindi è effettivamente multipiattaforma)? Ci sono molti esempi di questi ultimi a http://wiki.python.org/moin/PythonInMusic

1

sembra una combinazione di aperta (..., "RB"), struct module, e alcuni dettagli circa la (probabilmente di riferimento di meglio là fuori) wav/riff file format farà il lavoro.

Solo curioso, cosa intendi fare con i dati di esempio non elaborati?

+0

Ho bisogno di dividere un wav lungo in pezzi che corrispondono a una serie di punti di entrata e di uscita. Deve essere preciso in modo che possa essere adattato con precisione al video a qualsiasi frame rate.La maggior parte delle librerie ha una precisione di 1/10 di secondo, mentre anche i framerate più bassi iniziano a 12 fps. Preferirei avere 44.000 di secondo di precisione. – Soviut

5

Ho solo scritto un lettore PCM in C++ e Java, ma il formato stesso è abbastanza semplice. Una descrizione decente può essere trovata qui: http://ccrma.stanford.edu/courses/422/projects/WaveFormat/

Oltre a ciò dovresti essere in grado di leggerlo solo in (lettura di file binari, http://www.johnny-lin.com/cdat_tips/tips_fileio/bin_array.html) e gestire solo l'array risultante. Potrebbe essere necessario utilizzare un po 'di spostamento per ottenere gli allineamenti corretti (https://docs.python.org/reference/expressions.html#shifting-operations) ma a seconda di come lo si legge, potrebbe non essere necessario.

Tutto ciò detto, mi piacerebbe ancora orientarmi verso l'approccio di David.

Problemi correlati