Python-Audioeingabe / -ausgabe

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).

Spracheingabe

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 ...

Audioausgang

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.

Zusammenfassung

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.

Referenz

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

Python-Audioeingabe / -ausgabe
Tipps zur Eingabe / Ausgabe von Python-Dateien
Eingabe / Ausgabe mit Python (Python-Lernnotiz ⑤)
Hinweise zur Eingabe / Ausgabe von Python-Dateien
Python-Lernausgabe
Dateneingabe / -ausgabe in Python (CSV, JSON)
[Python] Kapitel 02-03 Grundlagen von Python-Programmen (Eingabe / Ausgabe)
Tastenanschlag in Python
Ausführungszeit für Python ausgeben
Japanische Ausgabe mit Python
Tastenanschlag in Python
[Python] Informationen zur Standardeingabe
Grundlagen von Python: Ausgabe
Zusammenfassung der Standardeingabe / -ausgabe
Cisco Memorandum _ Eingabekonfiguration mit Python
[Python3] Standardeingabe [Cheet Sheet]
Python3-Standardeingabe (Competition Pro)
Standardeingabe / Zusammenfassung / Python, Ruby
Empfangen von Standardeingabetipps @ python
Python-Eingabehinweis in AtCoder
[Python] Verwendung von input ()
Lesen Sie die Fortran-Ausgabe mit Python
Python-Anwendung: Datenverarbeitung Teil 1: Datenformatierung und Dateieingabe / -ausgabe
Python3-Standardeingabe für wettbewerbsfähige Programmierung
Ausgabe 2017 Premium Friday List in Python
Python
[Python] Variablen (Definition, Ausgabe, Wertänderung)
Machen Sie die Standardausgabe in Python nicht blockierend
Audio-Wellenform-Anzeige in Python
[Hinweis] Hallo Weltausgabe mit Python
Unit Test Log Ausgabe mit Python
Lassen Sie Python die Befehlsausgabe lesen
Mal sehen, wie man Eingaben in Python verwendet
[ev3dev × Python] Anzeige, Sprache, LED-Steuerung
Exportieren und Ausgeben von Dateien in Python
Interaktives Ausgeben von BPE mithilfe von Python-Flüchen
Versuchen Sie, Audio mit M5 STACK auszugeben
CSV-Ausgabe von Pulsdaten mit Raspberry Pi (Analogeingang mit Python prüfen)
Setzen Sie OpenCV in OS X mit Homebrew ein und geben Sie Video mit Python ein / aus
Python-Eingabe und Ausgabe
Python-Audioeingabe / -ausgabe
Zusammenfassung der Standardeingabe / -ausgabe
Tipps (Eingabe / Ausgabe), die Sie beim Programmieren von Wettbewerben mit Python2 kennen sollten
Python Paiza - Verschiedene Fähigkeitsüberprüfungen und Standardeingaben
Datenverarbeitung 1 Datenformatierung und Dateieingabe / -ausgabe
Spielen Sie eine Audiodatei von Python mit Interrupt ab
Geben Sie Farbzeichen mit Python zu hübsch aus
Ausgabebaumstruktur von Dateien in Python
Hinweise zur Standardeingabe / -ausgabe von Go
Python-Protokoll mit GAE an die Konsole ausgeben
Python3-Standardeingabe habe ich versucht zusammenzufassen
[Einführung in die Udemy Python3 + -Anwendung] 41. Eingabefunktion
UnicodeEncodeError hat Probleme mit der Standardausgabe von Python3
Python> Ausgaben von 1 bis 100, 501 bis 600> Für CSV
[Python] Unterschied zwischen Rand- und Randn-Ausgabe
Mayungos Python Learning Episode 8: Ich habe versucht, Eingaben zu machen
Atcoder-Standardeingabesatz für Anfänger (Python)
[Python] Fügen Sie der Standardeingabedatei einen Kommentar hinzu