2016-04-08 6 views
1

Ich verwende eine Python-Bibliothek sounddevice für einige Audio-Verarbeitung. Wenn ich die Stream-Klasse verwenden, um die Eingabedaten von der Eingabevorrichtung (MHK) gesammelt, um durch an den Ausgang hat die Callback-Funktion eine NumPy Array, das die Tondaten repräsentiert:Wie verwende ich das NumPy-Array, das von der Sounddevice-Stream-Klasse zurückgegeben wurde, um zusätzliche Verarbeitung durchzuführen?

def callback(indata, outdata, frames, time, status): 
    outdata[:] = indata 

INDATA ist ein NumPy Array das enthält Arrays von Schwimmern. Was repräsentieren diese Schwimmer? Wie kann ich Time Stretching oder Pitch Shifting für diese Daten durchführen?

Antwort

1

Zunächst einmal eine Warnung: Wenn Sie eine effiziente und zuverlässige Echtzeit-Audioverarbeitung wünschen, ist Python wahrscheinlich keine sehr gute Wahl (weil es eine interpretierte Sprache ist, verwendet Garbage Collection und natürlich wegen der berüchtigten GIL).

Wenn Sie Python trotzdem verwenden möchten, gibt es ein paar Bibliotheken für die Echtzeit-Audiosignalverarbeitung; pyo und LibROSA in den Sinn kommen, mehr können Sie bei der PythonInMusic wiki page finden.

Nun zur Beantwortung Ihrer Frage: Die Gleitkommawerte (standardmäßig float32) in indata sind Amplitudenwerte, die den Schalldruck darstellen. Man kann es sich auch als Spannung vorstellen, wenn das hilft.

Beachten Sie, dass die Werte von der Soundkarte auf einen Bereich von -1.0 bis +1.0 beschränkt sind. Wenn Sie Ihr (e) Ausgangssignal (e) auf schreiben, müssen Sie darauf achten, dass sie auch auf diesen Bereich beschränkt sind, sonst werden Sie hässliche Verzerrungen hören. Die Arrays indata und outdata sind 2-dimensional, wobei die Spalten die Audiokanäle darstellen. Jede Zeile repräsentiert eine Zeitinstanz.

Vielleicht möchten Sie auch meine kleine page about creating simple audio signals with Python lesen.

Die aktuellen Algorithmen für Time Stretching/Pitch Shifting sind hier nicht verfügbar, wenn Sie Hilfe benötigen, können Sie unter https://dsp.stackexchange.com/ fragen.

Verwandte Themen