Als ich versuchte, ein Programm zu erstellen, das Sprache eingibt und mit einer Art Filter ausgibt, habe ich es zusammengefasst, weil es mit Eingabe und Ausgabe abgedeckt war. Schreiben Sie basierend auf dem Dateistandard einer allgemeinen Audiodatei (Abtastrate 44100 Hz, Quantisierungsbitgröße 16 Bit).
Die Eingabe / Ausgabe verwendet eine Wave-Datei und importiert ein Wave-Paket.
input
import numpy as np
import wave
name = "filename.wav"
wavefile = wave.open(name, "r")
framerate = wavefile.getframerate()
data = wavefile.readframes(wavefile.getnframes())
x = np.frombuffer(data, dtype="int16")
Die Informationen, die bei der Eingabe von Audio aus einer Wave-Datei erforderlich sind, sind der Wert für jede Abtastung.
.getnframes ()
ruft die Gesamtzahl der Samples ab. Das heißt, die Länge der Daten.
Ruft die Daten für die durch .readframes ()
angegebene Länge ab.
Da es jedoch so wie es ist in binärer Notation erfasst wird, wird es mit frombuffer ()
in den Typ int konvertiert.
Jetzt können Sie mit Werten im numpy-Array arbeiten. Der Wert zu diesem Zeitpunkt ist int16. Dies ist ein Wert zwischen -32768 und 32767. Passen Sie ihn daher an, indem Sie ihn bei der Sprachverarbeitung teilen.
Außerdem erhält .getframerate ()
die Abtastrate. Ich denke, dass die Abtastrate der Datei für die Sprachverarbeitung notwendig ist, deshalb habe ich sie aufgenommen.
Danach wird es gekocht oder gebacken ...
Ich mache einfach das Gegenteil von der Eingabe. .. ..
output
w = wave.Wave_write("output.wav")
w.setnchannels(1)
w.setsampwidth(2)
w.setframerate(44100)
w.writeframes(x)
w.close()
Da die Wave-Datei Header-Informationen benötigt,
.setnchannels()
.setsampwidth()
.setframerate()
Scheint zumindest notwendig zu sein.
.setsampwidth ()
ist die Stichprobengröße (Quantisierung), aber 16 Bit sind 2 (Bytes).
Im Fall von ".writeframes ()" werden nframes automatisch durch die Anzahl der Daten geändert, sodass es kein Problem gibt, auch wenn Sie es nicht festlegen. Im Fall von ".writeframesraw ()" wird nframes jedoch nicht geändert, aber das ausgegebene Audio sind Daten ordnungsgemäß. Es wird eine Minute lang gespielt. (Ist die Einstellung von nframes bedeutungslos?)
Wenn Sie es ausführen, wird die Wave-Datei ausgegeben.
** ・ Verwendung von Pyaudio ** Das Pyaudio-Paket scheint nicht standardmäßig enthalten zu sein, daher habe ich es noch nicht ausprobiert. Es ist praktisch für die Wiedergabe / Aufnahme von Streams, und Pyaudio ist möglicherweise besser für die Verarbeitung dynamischer Dateien geeignet.
Wenn Sie Audiodaten als Dezimaldatenarray behandeln möchten, können Sie sie mit dieser Methode abrufen. In diesem Fall wird angenommen, dass die Abtastbitgröße 16 Bit beträgt, was bei Mono üblich ist. Wenn Sie also spezielles Audio wie 8 Bit und 24 Bit eingeben, erscheint es zum Zeitpunkt der Binärkonvertierung erforderlich, mit dieser Typgröße zu konvertieren. ist. In Bezug auf die Ausgabe dachte ich, dass es ohne binäre Konvertierung nicht möglich wäre, aber es scheint in Ordnung zu sein, nur Array-Daten vom Typ int zu übergeben. Wenn der Datenarray-Typ jedoch 16 Bit beträgt, scheint er nutzlos zu sein, es sei denn, er ist int16.
21.5. Wave - Lesen und Schreiben von WAV-Dateien - Python 2.7.x-Dokumentation Generierung von Wave-Dateien mit Python | Weboo! Returns. Sound Spectrogram in Python - Ein Durchbruch in der künstlichen Intelligenz [Python] Wellenformanzeige (Mono / Stereo) [Soundprogrammierung] - Leicht mysteriös.
Recommended Posts