2015-01-12 5 views
6

Python audioop documentation afferma che la maggior parte delle funzioni disponibili richiede "frammenti di suono".Che tipo di file è il parametro "sound fragment" per audioop?

Il modulo audioop contiene alcune operazioni utili sui frammenti di suono. Funziona su frammenti sonori composti da campioni interi con segno di 8, 16 o 32 bit di larghezza, memorizzati in stringhe Python.

Che cos'è esattamente un frammento di suono e come posso trasformare un file .wav esistente in uno?

Grazie.

risposta

4

È possibile farlo utilizzando la wave module

Il metodo open() apre il file e readframes(n) rendimenti (massimo) n cornici di audio come una stringa di byte, proprio ciò che vuole audioop.

Ad esempio, supponiamo che sia necessario utilizzare il metodo avg() da audioop. Questo è come si potesse fare:

import wave 
import audioop 


wav = wave.open("piano2.wav") 
print(audioop.avg(wav.readframes(wav.getnframes()), wav.getsampwidth())) 

Uscite:

-2 

Inoltre, si può essere interessati nel metodo rewind() dal modulo onda. Riporta la posizione di lettura all'inizio del file wav.

Se avete bisogno di leggere attraverso il file wav per due volte è possibile scrivere questo:

wav = wave.open("piano2.wav") 
print(audioop.avg(wav.readframes(wav.getnframes()), wav.getsampwidth())) 

# if you don't call rewind, next readframes() call 
# will return nothing and audioop will fail 

wav.rewind() 
print(audioop.max(wav.readframes(wav.getnframes()), wav.getsampwidth())) 

Oppure, in alternativa è possibile memorizzare nella cache la stringa:

wav = wave.open("piano2.wav") 
string_wav = wav.readframes(wav.getnframes()) 
print(audioop.avg(string_wav, wav.getsampwidth())) 
# wav.rewind() 
print(audioop.max(string_wav, wav.getsampwidth())) 
+0

Grazie per questo, molto approfondito! – Will

3

Si consiglia di esaminare il modulo wave. Probabilmente si desidera aprire un file in modalità di lettura e utilizzare readframes per ottenere il campione necessario per audiooop.

1

Per rispondere a ciò che esattamente un frammento è, è a bytes object, che è solo una stringa di byte. Credo che per i file audio a 8 bit, ci sarebbe un byte per ogni frame per audio a 8 bit, due byte per frame per audio a 16 bit e quattro byte per audio a 32 bit.