2015-01-12 4 views
6

Die Python audioop documentation besagt, dass die meisten der verfügbaren Funktionen "Soundfragmente" erfordern.Welcher Dateityp ist der Parameter "Sound Fragment" für audioop?

Das Audioop-Modul enthält einige nützliche Funktionen für Klangfragmente. Es arbeitet mit Tonfragmenten, die aus vorzeichenbehafteten ganzzahligen Samples mit einer Breite von 8, 16 oder 32 Bits bestehen und in Python-Strings gespeichert sind.

Was genau ist ein Soundfragment und wie kann ich eine vorhandene .wav-Datei in eine konvertieren?

Danke.

Antwort

4

Sie durch die wave module

Die open() Methode öffnet die Datei und readframes(n) kehrt mit so tun können, müssen zu erhalten (maximal) n Frames von Audio als eine Folge von Bytes, genau was Audioop will.

Nehmen wir zum Beispiel an, Sie müssen die avg()-Methode von audioop verwenden. Dies ist, wie Sie es tun könnte:

import wave 
import audioop 


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

Ausgänge:

-2 

Auch können Sie in der rewind() Methode aus dem Wellenmodul interessiert. Es setzt die Leseposition zurück an den Anfang der WAV-Datei.

Wenn Sie durch Ihre WAV-Datei lesen, müssen zweimal Sie dieses schreiben kann:

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())) 

Oder alternativ können Sie die Zeichenfolge Cache:

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

Danke dafür, sehr gründlich! – Will

3

Vielleicht möchten Sie in das wave Modul schauen. Sie wollen wahrscheinlich eine Datei im Lesemodus öffnen und verwenden readframes die Probe Sie audiooop.

1

zu beantworten, was genau ein Fragment ist, ist es a bytes object, die nur eine Zeichenfolge von Bytes ist. Ich glaube, dass es für 8-Bit-Audiodateien ein Byte für jeden Rahmen für 8-Bit-Audio, zwei Bytes für 16-Bit-Audio und vier Bytes für 32-Bit-Audio geben würde.

Verwandte Themen