Python-Sound Gerät ASIO akustisches Signalverarbeitungsmodul [Basic]

Was ist das Soundgerät des Python-Moduls?

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.

Gute Punkte des Audiogeräts

・ 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 behandelte Elemente

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.

Installation

(1) In Linux-, MacOS- und Anaconda-Umgebungen kann es von conda-forge installiert werden.

(2) Sie können von PyPl mit pip installieren.

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.

Wie benutzt man

importieren

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.

Grundeinstellung

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.

Abtastrateneinstellung

default_fs.py


fs = 44100 #Normalerweise 41000Hz oder 48000Hz
sd.default.samplerate = fs

Einstellen der Anzahl der Kanäle

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

Einstellung der verwendeten Ausrüstung

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.

Festlegen des aufzuzeichnenden Datentyps

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'

Setzen Sie alle Standardeinstellungen zurück

Bricht die eingestellten Grundeinstellungen ab

default_reset.py


sd.default.reset()

Wiedergabe

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 zu spielen (hör auf)

Hör auf, den Sound abzuspielen.

stop.py


sd.stop()

Aufzeichnung

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)

Gleichzeitige Wiedergabe und Aufnahme

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)

Streaming (Stream zurückrufen)

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)

Soweit vorerst

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.

Referenz

Offizieller Vertreter des Python-Soundgeräts Sound-Signalverarbeitungsmodul, das mit Python Sounddevice ASIO [Anwendung] verwendet werden kann

Recommended Posts

Python-Sound Gerät ASIO akustisches Signalverarbeitungsmodul [Basic]
Akustisches Signalverarbeitungsmodul, das mit Python-Sounddevice ASIO [Anwendung] verwendet werden kann
Dateitypen, die mit Go verwendet werden können
Grundlegende Algorithmen, die bei Wettkampfprofis eingesetzt werden können
Hinweise zu Python-Kenntnissen, die mit AtCoder verwendet werden können
Akustische Signalverarbeitung mit Python (2)
Python-Standardmodul, das in der Befehlszeile verwendet werden kann
Einfaches Auffüllen von Daten, die in der Verarbeitung natürlicher Sprache verwendet werden können
Bis Sie youtube-dl mit Synology (DS120j) verwenden können
Kein Modul namens'distutils.util 'kann nicht mit get-pip.py verwendet werden
Linux-Befehl (Basic Edition), der ab heute verwendet werden kann, wenn Sie wissen
Listen Sie Pakete auf, die mit pip aktualisiert werden können
Kratzmodul "Gaspacho", das einfacher zu verwenden ist als Beautiful Soup
Konvertieren Sie Bilder aus dem FlyCapture SDK in ein Formular, das mit openCV verwendet werden kann
[Python] Einführung in das WEB-Scraping | Zusammenfassung der Methoden, die mit dem Webdriver verwendet werden können
Mit Raspberry Pi erstellter Dateifreigabeserver, der für Remote-Arbeiten verwendet werden kann
Um Japanisch mit Python in der Docker-Umgebung verwenden zu können
Liste der Farben, die mit tkinter (Denkmal) eingestellt werden können
ANTs Bildregistrierung, die in 5 Minuten verwendet werden kann
[Django] Über Benutzer, die für Vorlagen verwendet werden können
Grenzwerte, die mit MeCab sofort analysiert werden können
Formatübersicht der Formate, die mit gensim serialisiert werden können
Es scheint, dass Skeleton Tracking mit RealSense durchgeführt werden kann
Grundkenntnisse in DNS, die jetzt nicht zu hören sind
pd.tseries.offsets.DateOffset kann sehr langsam sein, wenn es nicht mit Vorsicht verwendet wird
Goroutine (parallele Steuerung), die im Feld eingesetzt werden kann
Goroutine, die im Feld verwendet werden kann (errgroup.Group Edition)
SSD 1306 OLED kann mit Raspeye + Python verwendet werden (Hinweis)
Skripte, die bei der Verwendung von Bottle in Python verwendet werden können
Akustische Signalverarbeitung beginnend mit Python-Lassen Sie uns ein dreidimensionales akustisches System erstellen
Ich habe die Vorbehandlung untersucht, die mit PyCaret durchgeführt werden kann
Lassen Sie uns ein Diagramm erstellen, auf das mit IPython geklickt werden kann
Verstehen Sie die Wahrscheinlichkeiten und Statistiken, die für das Fortschrittsmanagement mit einem Python-Programm verwendet werden können
Über die Sache, dass Fackelzusammenfassung wirklich verwendet werden kann, wenn ein Modell mit Pytorch erstellt wird
[Python] Erstellen Sie ein Diagramm, das mit Plotly verschoben werden kann
Bis Fackelgeometrie kann nur mit Windows (oder Mac) CPU verwendet werden
Erstellen Sie eine Spinbox, die mit Tkinter in Binär angezeigt werden kann
Ein Timer (Ticker), der im Feld verwendet werden kann (kann überall verwendet werden)
Ich habe ein Shuffle gemacht, das mit Python zurückgesetzt (zurückgesetzt) werden kann
Erstellen Sie ein Währungsdiagramm, das mit Plotly (2) verschoben werden kann.
Zusammenfassung der Standardeingabe von Python, die in Competition Pro verwendet werden kann
Vergleich von 4 Stilen, die mit set_context an seaborn übergeben werden können
Erstellen Sie eine Spinbox, die mit Tkinter in HEX angezeigt werden kann
Erstellen Sie ein Währungsdiagramm, das mit Plotly (1) verschoben werden kann.