Je pense que Pyaudio est le module de traitement du signal acoustique qui peut être utilisé en Python, mais c'est difficile à utiliser personnellement! De plus, Pyaudio a un léger traumatisme car il est devenu inutilisable pendant le développement sous Windows, je voudrais donc vous présenter un périphérique Sound qui peut contrôler l'interface audio basée sur ASIO.
・ Peut contrôler les appareils ASIO ・ Mappage facile des canaux d'entrée / sortie (distribution des microphones et des haut-parleurs) ・ Contrôle facile de WASAPI et de l'audio principal ・ Facile à écrire et facile à utiliser ・ L'enregistrement et la lecture simultanés peuvent être effectués très facilement (je suis heureux qu'il soit très facile pour les personnes qui font de l'ingénierie acoustique de mesurer la réponse impulsionnelle)
Dans cet article, j'écrirai sur la préparation avant d'utiliser le périphérique audio, la méthode de réglage initial pour l'utiliser, et la méthode de lecture de base, la méthode d'enregistrement, la méthode d'enregistrement / lecture simultanée et la méthode de diffusion en continu sur le périphérique audio.
Pour la méthode de mappage des canaux (entrée de votre microphone préféré et sortie de votre haut-parleur préféré dans un environnement multicanal) et la méthode de réglage détaillée de ASIO, WASAPI, Core Audio, etc., voir la deuxième partie Module de traitement du signal sonore qui peut être utilisé avec Python Sounddevice ASIO [ Application] Je voudrais écrire.
Si vous utilisez pip pour installer Sounddevice sur macOS ou Windows, la bibliothèque PortAudio sera téléchargée automatiquement. Si vous souhaitez installer sur d'autres plates-formes, veuillez installer chaque bibliothèque.
import sounddevice as sd
import numpy as np #NumPy est fondamentalement requis. Veuillez importer.
import wave #Importez si vous souhaitez travailler avec des fichiers audio
Étant donné que sounddevice gère les données du tableau NumPy de base, il est nécessaire d'importer NumPy. Cependant, il existe également un moyen de gérer les données sans utiliser NumPy, qui sera décrit plus tard.
Avec sounddevice, vous pouvez également prérégler la fréquence d'échantillonnage et le nombre de canaux utilisables par défaut, ainsi que l'interface audio à utiliser. Bien sûr, vous pouvez le régler à chaque fois sans le régler. Dans cet article, je décrirai à la fois le cas où le paramètre par défaut est défini et le cas où il n'est pas défini, mais pour le moment, j'écrirai comment définir le paramètre par défaut.
default_fs.py
fs = 44100 #Habituellement 41000Hz ou 48000Hz
sd.default.samplerate = fs
Le nombre de canaux à sortir est automatiquement défini à partir de l'entrée de données vers la fonction, mais vous devez spécifier vous-même le nombre de canaux d'entrée.
default_ch.py
channels = 2
sd.default.channels = channels
#sd.default.channels = 1,Vous pouvez également définir le nombre de canaux sur 2 respectivement
Tout d'abord, obtenez l'ID de périphérique du système audio installé ou connecté à votre environnement.
default_system.py
sd.query_devices()
Lorsque je l'ai tapé dans l'invite de commande, la sortie était la suivante dans mon environnement.
> 0 Built-in Microphone, Core Audio (2 in, 0 out)
< 1 Built-in Output, Core Audio (0 in, 2 out)
Ensemble de 2 équipements Pro Tools, Core Audio (2 in, 2 out)
Actuellement, l'entrée est définie sur ID 0 et la sortie sur ID 1. Si vous avez une machine connectée à un périphérique ASIO
3 〇〇Audio system, ASIO (24 in, 24 out)
Est sortie comme. Après avoir confirmé l'ID d'appareil que vous souhaitez utiliser, définissez-le comme suit.
default_system.py
sd.default.device = 3
# sd.default.device = [4, 5]Vous pouvez également définir chaque entrée et sortie comme.
Lors de l'enregistrement, il est enregistré avec «float32» par défaut, mais si vous souhaitez enregistrer avec un type de données différent, réglez comme suit.
default_dtype.py
sd.default.dtype = 'float64'
Annule les paramètres initiaux définis
default_reset.py
sd.default.reset()
Une fois exécutée, la fonction reviendra immédiatement mais continuera à jouer en arrière-plan.
playback.py
sd.play(myarray,fs)
# myarray :Tableau NumPy contenant des données audio
# fs :Taux d'échantillonnage
Vous pouvez réduire le nombre d'arguments lors de l'initialisation de la fréquence d'échantillonnage.
playback.py
sd.play(myarray)
Voici à quoi ressemblent les autres options.
playback.py
sd.play(data,
samplerate=None,
mapping=None, #Paramètres de mappage des canaux (expliqués dans la deuxième partie)
blocking=False, #True pour empêcher le retour de la fonction (attend pendant la lecture)
loop=False, #Jouer en boucle avec True
**kwargs)
Arrêtez de jouer le son.
stop.py
sd.stop()
Enregistrez les données audio acquises dans un tableau NumPy. Par défaut, les données de la matrice sont enregistrées comme «float32». Lorsqu'elle est exécutée, la fonction retourne immédiatement, mais continue l'enregistrement en arrière-plan.
rec.py
duration = 10.5 #Temps de lecture[Secondes]
recdata = sd.rec(int(duration * fs), samplerate = fs,channels = 2)
#Nombre de taps, fréquence d'échantillonnage, nombre de canaux
Vous pouvez réduire le nombre d'arguments lorsque vous définissez les paramètres initiaux.
rec.py
recdata = sd.rec(int(duration * fs))
Si vous voulez savoir si l'enregistrement est terminé, utilisez la fonction suivante. Cette fonction revient immédiatement si l'enregistrement est terminé et revient une fois l'enregistrement terminé si ce n'est pas le cas. Il peut également être utilisé lorsque vous souhaitez passer à la phase suivante une fois l'enregistrement terminé.
rec.py
sd.wait()
Les autres options sont les suivantes
rec.py
recdata = sd.rec(frames=None,#Option: non requise si le nombre d'images enregistrées en sortie est spécifié
samplerate=None,
channels=None,#Nombre de canaux Non requis si le mappage ou la sortie est spécifié
dtype=None,#Paramètre du type de données
out=None,#Écrire les données enregistrées sur n'importe quelle baie
mapping=None,#Paramètres de mappage des canaux (expliqués dans la deuxième partie)
blocking=False,#Il est vrai d'attendre pendant l'enregistrement
**kwargs)
Vous pouvez lire et enregistrer la matrice en même temps. Le nombre de canaux de sortie est automatiquement défini à partir des données données, mais vous pouvez définir vous-même le nombre de canaux d'entrée.
playrec.py
recdata = sd.playrec(myarray,fs,channels = 2)
Si la fréquence d'échantillonnage par défaut et le nombre de canaux sont définis par défaut, la description peut être omise comme d'habitude.
playrec.py
recdata = sd.playrec(myarray)
Cliquez ici pour d'autres options
playrec.py
recdata = sd.playrec(data,
samplerate=None,
channels=None,#S'il n'y a pas de réglage du nombre de canaux de sortie, il est automatiquement déterminé à partir des données
dtype=None,#Paramètre du type de données
out=None,#Écrire les données enregistrées sur n'importe quelle baie
input_mapping=None,#Paramètres de mappage des canaux d'entrée
output_mapping=None,#Paramètres de mappage des canaux de sortie
blocking=False,#Il est vrai d'attendre pendant l'enregistrement
**kwargs)
Le son capté par le microphone est envoyé au haut-parleur tel quel.
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))
Notez également que sd.sleep ici peut geler le prochain appel à tout moment, mais ce n'est pas très précis.
sleep.py
sd.sleep(msec)
Je pense que c'est suffisant pour une utilisation facile. Pour la méthode de mappage des canaux (entrée de votre microphone préféré et sortie de votre haut-parleur préféré dans un environnement multicanal) et la méthode de réglage détaillée de ASIO, WASAPI, Core Audio, etc., voir la deuxième partie Module de traitement du signal sonore qui peut être utilisé avec Python Sounddevice ASIO [ Application] Je voudrais écrire.
Officiel du périphérique audio Python Module de traitement du signal sonore qui peut être utilisé avec Python Sounddevice ASIO [Application]
Recommended Posts