2016-11-23 1 views
0

Ich bin neu in Python, und im Allgemeinen auf die Programmierung, so nehmen Sie es bitte auf mich nicht zu harteine Zeichenfolge in eine WAV-Datei in Python konvertieren

ich zur Zeit, um herauszufinden, wie ich versuche zu schreiben eine neue wav-Datei, die eine Zeichenkette verwendet (die von den Daten einer anderen wave-Datei abgeleitet wurde)

Ich habe eine Fourier-Transformation für die Daten dieser Datei durchgeführt, also versuche ich jetzt, die Werte der Fourier-Transformation in ein neues wav zu schreiben Datei.

Ich kann nur numpy und die mitgelieferte Python-Bibliothek verwenden, nicht

Gemäß der Dokumentation SciPy, ich habe wave_write() verwenden, aber ich habe keine Ahnung, was der Code sollte wie für diese Funktion aussieht .

Ich denke, ich sollte etwas tun, um

Zusammenhang
wave_write.writeframesraw(data) 

Dann wieder, nicht ganz sicher, was zu tun ist. Jede Hilfe wird sehr geschätzt!

+1

Warum nicht scipy? Sie haben [scipy.io.wavfile.write] (https://docs.scipy.org/doc/scipy/reference/generated/scipy.io.wavfile.write.html), das Einschränkungen aufweist, aber ansonsten einfach zu handhaben ist Verwenden Sie, sobald Sie ein Numpy-Array haben. – Balzola

+0

Mein [Tutorial auf dem Wave-Modul] (http://nbviewer.jupyter.org/github/mgeier/python-audio/blob/master/audio-files/audio-files-with-wave.ipynb) könnte helfen? – Matthias

Antwort

0

Zwei Funktionen in NumPy können Ihnen dabei helfen: astype und tostring.

Wenn Sie ein Array von Sound-Samples haben, sagen Sie X, dann können Sie es mit astype in das richtige Format konvertieren. Dies hängt davon ab, welcher Datentyp in der wav-Datei verwendet wird, und von der Bibliothek, die Sie zum Speichern verwenden. Aber lassen Sie uns für dieses Beispiel sagen, dass Sie es als 16-Bit-Integer speichern möchten. Sie müssen X entsprechend dem ausgewählten Datentyp skalieren. In diesem Fall beträgt der Bereich also -32768 bis 32767 für einen vorzeichenbehafteten 16-Bit-Int. Wenn Sie Probe von -1,0 bis 1,0 geht, dann können Sie einfach mit 32767

Der nächste Teil einfach multiplizieren ist es in eine Zeichenfolge zu konvertieren tostring verwenden, könnte es etwas folgt aussehen:

scaled = X * 32767 
scaled.astype('<i2').tostring() 

Sie finden Sie die Dokumentation für die Funktionen hier: https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.tostring.html

Verwandte Themen