Python-Sound device Module de traitement du signal acoustique ASIO [Basic]

Quel est le périphérique Sound du module Python?

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.

Bons points de son appareil

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

Éléments traités dans cet article

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.

Installation

(1) Dans les environnements Linux, macOS et Anaconda, il peut être installé à partir de conda-forge.

(2) Vous pouvez installer à partir de PyPl en utilisant pip.

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.

Comment utiliser

importer

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.

Réglage initial

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.

Réglage de la fréquence d'échantillonnage

default_fs.py


fs = 44100 #Habituellement 41000Hz ou 48000Hz
sd.default.samplerate = fs

Réglage du nombre de canaux

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

Réglage du matériel utilisé

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.

Définition du type de données à enregistrer

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'

Réinitialiser tous les paramètres par défaut

Annule les paramètres initiaux définis

default_reset.py


sd.default.reset()

Relecture

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êter de jouer (arrêter)

Arrêtez de jouer le son.

stop.py


sd.stop()

Enregistrement

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)

Lecture et enregistrement simultanés

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)

Streaming (flux de rappel)

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)

Jusqu'ici pour le moment

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.

référence

Officiel du périphérique audio Python Module de traitement du signal sonore qui peut être utilisé avec Python Sounddevice ASIO [Application]

Recommended Posts

Python-Sound device Module de traitement du signal acoustique ASIO [Basic]
Module de traitement du signal acoustique qui peut être utilisé avec Python-Sounddevice ASIO [Application]
Types de fichiers pouvant être utilisés avec Go
Algorithmes de base utilisables par les pros de la compétition
Notes sur les connaissances Python utilisables avec AtCoder
Traitement du signal acoustique avec Python (2)
Traitement du signal acoustique avec Python
Module standard Python utilisable en ligne de commande
Remplissage facile des données pouvant être utilisées dans le traitement du langage naturel
Optimisation mathématique pour un travail gratuit avec Python + PuLP
Jusqu'à ce que vous puissiez utiliser youtube-dl avec Synology (DS120j)
Aucun module nommé'distutils.util 'ne peut être utilisé avec get-pip.py
Commande Linux (édition de base) utilisable à partir d'aujourd'hui si vous connaissez
Répertorier les packages pouvant être mis à jour avec pip
Module de grattage "Gaspacho" qui peut être utilisé plus facilement que Beautiful Soup
Convertir des images du SDK FlyCapture en un formulaire pouvant être utilisé avec openCV
[Python] Introduction au scraping WEB | Résumé des méthodes pouvant être utilisées avec webdriver
Serveur de partage de fichiers réalisé avec Raspberry Pi pouvant être utilisé pour le travail à distance
Pour pouvoir utiliser le japonais avec Python dans l'environnement Docker
Liste des couleurs pouvant être définies avec tkinter (mémorial)
Enregistrement d'image ANT qui peut être utilisé en 5 minutes
[Django] À propos des utilisateurs pouvant être utilisés sur un modèle
Limites qui peuvent être analysées à la fois avec MeCab
Récapitulatif du format des formats qui peuvent être sérialisés avec gensim
Il semble que le suivi des squelettes puisse être effectué avec RealSense
Connaissance de base du DNS qui ne peut pas être entendue maintenant
pd.tseries.offsets.DateOffset peut être assez lent s'il n'est pas utilisé avec prudence
Goroutine (contrôle parallèle) utilisable sur le terrain
Goroutine utilisable sur le terrain (édition errgroup.Group)
SSD 1306 OLED peut être utilisé avec Raspeye + python (Remarque)
Scripts pouvant être utilisés lors de l'utilisation de Bottle en Python
Traitement du signal acoustique à partir de Python - Faisons un système acoustique en trois dimensions
J'ai étudié le prétraitement qui peut être fait avec PyCaret
Faisons un diagramme sur lequel on peut cliquer avec IPython
Comprendre les probabilités et les statistiques qui peuvent être utilisées pour la gestion des progrès avec un programme python
À propos du fait que le résumé de la torche peut être vraiment utilisé lors de la construction d'un modèle avec Pytorch
[Python] Créez un graphique qui peut être déplacé avec Plotly
Jusqu'à ce que la géométrie de la torche ne puisse être utilisée qu'avec le processeur Windows (ou Mac)
Créez une Spinbox qui peut être affichée en binaire avec Tkinter
Un minuteur (ticker) qui peut être utilisé sur le terrain (peut être utilisé n'importe où)
J'ai fait un shuffle qui peut être réinitialisé (inversé) avec Python
Créez un graphique des devises qui peut être déplacé avec Plotly (2)
Résumé de l'entrée standard de Python pouvant être utilisée dans Competition Pro
Comparaison de 4 styles pouvant être passés à seaborn avec set_context
Créez une Spinbox pouvant être affichée dans HEX avec Tkinter
Créez un graphique des devises qui peut être déplacé avec Plotly (1)