Gewusst wie: Bearbeiten von wav-Datei in Python?
Ich versuche zu Lesen, eine wav-Datei, dann manipulieren Sie die Inhalte, sample-by-sample
Hier ist, was ich habe, so weit:
import scipy.io.wavfile
import math
rate, data = scipy.io.wavfile.read('xenencounter_23.wav')
for i in range(len(data)):
data[i][0] = math.sin(data[i][0])
print data[i][0]
Den Ergebnissen, die ich bekomme, ist:
0
0
0
0
0
0
etc
Lesen richtig, denn wenn ich Schreibe print data[i]
stattdessen bekomme ich in der Regel nicht-null-arrays der Größe 2.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Array
data
zurückgegebenwavfile.read
ist ein numpy-array mit einer integer Daten geben. Der Datentyp numpy-array kann nicht geändert werden, so dass diese Zeile:CASTET das Ergebnis der
math.sin
zu einer ganzen Zahl, also immer 0.Anstelle von dieser Linie, erstellen Sie eine neue floating-point-array speichern Ihr Ergebnis.
Oder verwenden Sie
numpy.sin
zum berechnen des Sinus alle Elemente im array auf einmal:Aus Sie Ihre weiteren Kommentare, es scheint, dass Sie wollen, um den Sinus von jedem Wert und schreibt das Ergebnis als neue wav-Datei.
Hier ist ein Beispiel, dass (glaube ich) tut, was Sie wollen. Ich werde die Datei 'M1F1-int16-AFsp.wav' von hier: http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Samples.html. Die Funktion
show_info
ist nur eine bequeme Art und Weise zu veranschaulichen, die Ergebnisse von jedem Schritt. Wenn Sie eine interaktive shell, Sie können es verwenden, um überprüfen Sie die Variablen und deren Attribute.Hier ist die Ausgabe. (Die erste Warnung bedeutet, dass es vielleicht einige Metadaten in der Datei, die Sie nicht verstanden
scipy.io.wavfile.read
.)Die neue Datei " newname.wav' enthält zwei Kanäle, signed 16-bit-Werte.
np.sin(...)
. Das ist definitiv der Weg zu gehen, und es wird Art schneller.AttributeError: 'list' object has no attribute 'ndim'
for i in range(len(data)): data2.append([math.sin(data[i][0]), math.sin(data[i][1])])
mit einem initialisierten Liste data2, dann schrieb ichscipy.io.wavfile.write('newname.wav',rate,data2)
mitrate
wird die ursprüngliche Quote aus der Lektüre der original-Datei