Lesen Sie die Daten von einem einzelnen Kanal einer stereo-wave-Datei in Python
Habe ich zum Lesen der Daten aus einem Kanal in einem stereo-wave-Datei in Python.
Für diese versuchte ich es mit scipy.io:
import scipy.io.wavfile as wf
import numpy
def read(path):
data = wf.read(path)
for frame in data[1]:
data = numpy.append(data, frame[0])
return data
Aber dieser code ist sehr langsam, vor allem, wenn ich arbeiten mit mehr Dateien.
Also weiß jemand einen schnelleren Weg, dies zu tun? Ich dachte über die standard - Welle - Modul mit Welle.readframes(), aber wie sind die frames dort gespeichert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
scipy.io.wavfile.Lesen
gibt die Tupel(rate, data)
. Wenn die Datei stereo,data
ist ein numpy-array mit Form(nsamples, 2)
. Um einen bestimmten Kanal verwenden Scheibe vondata
. Zum Beispiel,left = data[:, 0]
,right = data[:, 1]
. Siehe auch stackoverflow.com/questions/13995936/...Den
wave
Modul gibt den Rahmen, wie eine Zeichenfolge von bytes, die in zahlen umgewandelt werden, die mit derstruct
Modul. Zum Beispiel:Wenn Ihre WAV-Datei hat einige andere sample-Größe, die Sie verwenden können, die (hässlichere) - Funktion in einer anderen Antwort schrieb ich hier.
Habe ich noch nie genutzt
scipy
'swavfile
- Funktion, so kann ich nicht vergleichen, Geschwindigkeit, aber diewave
undstruct
Ansatz, den ich hier verwende, hat bei mir immer funktioniert.