Ich denke, Pyaudio ist das akustische Signalverarbeitungsmodul, das in Python verwendet werden kann, aber es ist schwer, es persönlich zu verwenden! Außerdem hat Pyaudio ein leichtes Trauma, da es während der Entwicklung unter Windows unbrauchbar wurde. Daher möchte ich ein Soundgerät vorstellen, das das Audio-Interface basierend auf ASIO steuern kann.
・ Kann ASIO-Geräte steuern ・ Einfache Zuordnung der Ein- / Ausgabekanäle (Verteilung von Mikrofonen und Lautsprechern) ・ Einfache Steuerung von WASAPI und Core Audio ・ Einfach zu schreiben und einfach zu bedienen ・ Die gleichzeitige Aufnahme und Wiedergabe ist sehr einfach (ich bin froh, dass es für Leute, die Akustik betreiben, sehr einfach ist, die Impulsantwort zu messen).
In diesem Artikel werde ich über die Vorbereitung vor der Verwendung des Audiogeräts, die anfängliche Einstellungsmethode für die Verwendung und die grundlegende Wiedergabemethode, Aufnahmemethode, simultane Aufnahme- / Wiedergabemethode und Streaming-Methode auf dem Audiogerät schreiben.
Informationen zur Kanalzuordnungsmethode (Eingabe von Ihrem Lieblingsmikrofon und Ausgabe von Ihrem Lieblingslautsprecher in einer Mehrkanalumgebung) und zur detaillierten Einstellungsmethode für ASIO, WASAPI, Core Audio usw. finden Sie im zweiten Teil Sound-Signalverarbeitungsmodul, das mit Python Sounddevice ASIO verwendet werden kann [ Anwendung] Ich möchte schreiben.
Wenn Sie Sounddevice mit pip unter macOS oder Windows installieren, wird die PortAudio-Bibliothek automatisch heruntergeladen. Wenn Sie auf anderen Plattformen installieren möchten, installieren Sie bitte jede Bibliothek.
import sounddevice as sd
import numpy as np #NumPy ist grundsätzlich erforderlich. Bitte importieren.
import wave #Importieren, wenn Sie mit Audiodateien arbeiten möchten
Da sounddevice Daten im Basis-NumPy-Array verarbeitet, muss NumPy importiert werden. Es gibt jedoch auch eine Möglichkeit, Daten ohne Verwendung von NumPy zu verarbeiten, was später beschrieben wird.
Mit sounddevice können Sie auch die Samplerate und die Anzahl der standardmäßig verwendbaren Kanäle sowie das zu verwendende Audio-Interface voreinstellen. Natürlich können Sie es jedes Mal einstellen, ohne es einzustellen. In diesem Artikel werde ich sowohl den Fall beschreiben, in dem die Standardeinstellung festgelegt ist, als auch den Fall, in dem sie nicht festgelegt ist. Vorerst werde ich jedoch schreiben, wie die Standardeinstellung festgelegt wird.
default_fs.py
fs = 44100 #Normalerweise 41000Hz oder 48000Hz
sd.default.samplerate = fs
Die Anzahl der auszugebenden Kanäle wird automatisch von der Dateneingabe zur Funktion festgelegt, Sie müssen jedoch die Anzahl der Eingangskanäle selbst festlegen.
default_ch.py
channels = 2
sd.default.channels = channels
#sd.default.channels = 1,Sie können auch die Anzahl der Kanäle auf 2 einstellen
Holen Sie sich zunächst die Geräte-ID des installierten oder mit Ihrer Umgebung verbundenen Audiosystems.
default_system.py
sd.query_devices()
Als ich es in die Eingabeaufforderung eingab, war die Ausgabe in meiner Umgebung wie folgt.
> 0 Built-in Microphone, Core Audio (2 in, 0 out)
< 1 Built-in Output, Core Audio (0 in, 2 out)
2 Pro Tools-Ausrüstungssatz, Core Audio (2 in, 2 out)
Derzeit ist der Eingang auf ID 0 und der Ausgang auf ID 1 eingestellt. Wenn Sie ein Gerät an ein ASIO-Gerät angeschlossen haben
3 〇〇Audio system, ASIO (24 in, 24 out)
Wird ausgegeben als. Stellen Sie nach Bestätigung der zu verwendenden Geräte-ID Folgendes ein.
default_system.py
sd.default.device = 3
# sd.default.device = [4, 5]Sie können auch jeden Ein- und Ausgang als einstellen.
Bei der Aufnahme wird standardmäßig mit 'float32' aufgenommen. Wenn Sie jedoch mit einem anderen Datentyp aufnehmen möchten, stellen Sie Folgendes ein.
default_dtype.py
sd.default.dtype = 'float64'
Bricht die eingestellten Grundeinstellungen ab
default_reset.py
sd.default.reset()
Bei Ausführung kehrt die Funktion sofort zurück, wird jedoch im Hintergrund weiter abgespielt.
playback.py
sd.play(myarray,fs)
# myarray :NumPy-Array mit Audiodaten
# fs :Beispielrate
Sie können die Anzahl der Argumente reduzieren, wenn Sie die Abtastrate initialisieren.
playback.py
sd.play(myarray)
So sehen die anderen Optionen aus.
playback.py
sd.play(data,
samplerate=None,
mapping=None, #Einstellungen für die Kanalzuordnung (im zweiten Teil erläutert)
blocking=False, #True, um zu verhindern, dass die Funktion zurückkehrt (wartet während der Wiedergabe)
loop=False, #Loop-Spiel mit True
**kwargs)
Hör auf, den Sound abzuspielen.
stop.py
sd.stop()
Zeichnen Sie die erfassten Audiodaten in einem NumPy-Array auf. Standardmäßig werden Array-Daten als 'float32' aufgezeichnet. Bei Ausführung kehrt die Funktion sofort zurück, setzt die Aufnahme jedoch im Hintergrund fort.
rec.py
duration = 10.5 #Wiedergabezeit[Sekunden]
recdata = sd.rec(int(duration * fs), samplerate = fs,channels = 2)
#Anzahl der Abgriffe, Abtastrate, Anzahl der Kanäle
Sie können die Anzahl der Argumente reduzieren, wenn Sie die Anfangseinstellungen vornehmen.
rec.py
recdata = sd.rec(int(duration * fs))
Wenn Sie wissen möchten, ob die Aufnahme abgeschlossen ist, verwenden Sie die folgende Funktion. Diese Funktion kehrt sofort zurück, wenn die Aufnahme abgeschlossen ist, und kehrt nach Abschluss der Aufnahme zurück, wenn dies nicht der Fall ist. Es kann auch verwendet werden, wenn Sie nach Abschluss der Aufnahme mit der nächsten Phase fortfahren möchten.
rec.py
sd.wait()
Andere Optionen sind wie folgt
rec.py
recdata = sd.rec(frames=None,#Option: Nicht erforderlich, wenn die Anzahl der aufgezeichneten Frames angegeben ist
samplerate=None,
channels=None,#Anzahl der Kanäle Nicht erforderlich, wenn Mapping oder Out angegeben ist
dtype=None,#Datentypeinstellung
out=None,#Schreiben Sie aufgezeichnete Daten in ein beliebiges Array
mapping=None,#Einstellungen für die Kanalzuordnung (im zweiten Teil erläutert)
blocking=False,#Richtig, um während der Aufnahme zu warten
**kwargs)
Sie können das Array gleichzeitig abspielen und aufnehmen. Die Anzahl der Ausgangskanäle wird automatisch anhand der angegebenen Daten festgelegt. Sie können die Anzahl der Eingangskanäle jedoch selbst festlegen.
playrec.py
recdata = sd.playrec(myarray,fs,channels = 2)
Wenn die Standardabtastrate und die Anzahl der Kanäle standardmäßig eingestellt sind, kann die Beschreibung wie gewohnt weggelassen werden.
playrec.py
recdata = sd.playrec(myarray)
Klicken Sie hier für weitere Optionen
playrec.py
recdata = sd.playrec(data,
samplerate=None,
channels=None,#Wenn die Anzahl der Ausgangskanäle nicht eingestellt ist, wird dies automatisch aus den Daten ermittelt
dtype=None,#Datentypeinstellung
out=None,#Schreiben Sie aufgezeichnete Daten in ein beliebiges Array
input_mapping=None,#Einstellungen für die Eingangskanalzuordnung
output_mapping=None,#Ausgabekanalzuordnungseinstellungen
blocking=False,#Richtig, um während der Aufnahme zu warten
**kwargs)
Der vom Mikrofon aufgenommene Ton wird unverändert an den Lautsprecher gesendet.
stream.py
duration = 5.5 # seconds
def callback(indata, outdata, frames, time, status):
if status:
print(status)
outdata[:] = indata
with sd.Stream(channels=2, callback=callback):
sd.sleep(int(duration * 1000))
Beachten Sie auch, dass sd.sleep hier den nächsten Anruf jederzeit einfrieren kann, aber nicht sehr genau ist.
sleep.py
sd.sleep(msec)
Ich denke, das ist genug für eine einfache Verwendung. Informationen zur Kanalzuordnungsmethode (Eingabe von Ihrem Lieblingsmikrofon und Ausgabe von Ihrem Lieblingslautsprecher in einer Mehrkanalumgebung) und zur detaillierten Einstellungsmethode für ASIO, WASAPI, Core Audio usw. finden Sie im zweiten Teil Sound-Signalverarbeitungsmodul, das mit Python Sounddevice ASIO verwendet werden kann [ Anwendung] Ich möchte schreiben.
Offizieller Vertreter des Python-Soundgeräts Sound-Signalverarbeitungsmodul, das mit Python Sounddevice ASIO [Anwendung] verwendet werden kann