[Python] Localisez la source sonore uniquement sur la voix humaine avec ReSpeaker

Qu'est-ce que la localisation de la source sonore?

La localisation de la source sonore est l'endroit où le son est entendu et imaginez un son stéréophonique ou binoral. Pour un son stéréophonique, la source sonore est localisée afin que l'instrument puisse être entendu par l'arrière.

Cette fois, nous utiliserons ReSpeaker Mic Array v2.0.

image.png

En gros, toutes les utilisations et autres options sont écrites ici, mais je vais les résumer brièvement.

Implémentation de la localisation des sources sonores

environnement

ubuntu 18.04 python3


Environnement


sudo apt-get update
sudo pip install pyusb click
git clone https://github.com/respeaker/usb_4_mic_array.git
cd usb_4_mic_array
sudo python dfu.py --download 6_channels_firmware.bin

Je pense que le dossier usb_4_mic_array a été créé. Créez et exécutez le code suivant sous celui-ci.

DOA.py


from tuning import Tuning
import usb.core
import usb.util
import time
 
dev = usb.core.find(idVendor=0x2886, idProduct=0x0018)
 
if dev:
    Mic_tuning = Tuning(dev)
    print(Mic_tuning.direction)
    while True:
        try:
            print(Mic_tuning.direction)
            time.sleep(1)
        except KeyboardInterrupt:
            break

Résultat de sortie ↓

~/usb_4_mic_array$ python3 DOA.py 
122
121
120
122

Si vous obtenez une erreur

Quand j'exécute ce code ImportError: No module named usb.core Quand ça sort


sudo apt-get install python-usb python3-usb

Éxécuter.

De plus, si l'autorisation est refusée, donnez à udev l'accès à l'appareil.

sudo touch /etc/udev/rules.d/10-any_name_is_ok.rules
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="2886", ATTR{idProduct}=="0018", MODE="0666", GROUP="plugdev"' | sudo tee 10-any_name_is_ok.rules
sudo gpasswd -un nom d'utilisateur plugdev
sudo chmod a+r /etc/udev/rules.d/10-any_name_is_ok.rules
sudo udevadm control --reload-rules
udevadm trigger

Après cela, il sera reflété lors du redémarrage.


Répondez uniquement à la voix humaine

Il existe de nombreuses options pour ReSpeaker. [Liste des paramètres facultatifs (questions fréquemment posées Q1)] (https://wiki.seeedstudio.com/ReSpeaker_Mic_Array_v2.0/#faq)

À titre d'exemple, nous utiliserons SPEECHDETECTED pour implémenter la localisation du son pour la voix humaine uniquement. 0 = false (no speech detected) 1 = true (speech detected) Donc, modifiez DOA.py comme suit.

voise_angle.py


from tuning import Tuning
import usb.core
import usb.util
import time
 
dev = usb.core.find(idVendor=0x2886, idProduct=0x0018)
 
if dev:
    Mic_tuning = Tuning(dev)
    while True:
        try:
            if Mic_tuning.read('SPEECHDETECTED') == 1:
                 print(Mic_tuning.direction)
                 time.sleep(1)
        except KeyboardInterrupt:
            break

Avec cela, vous pouvez empêcher la sortie de l'angle même si vous applaudissez, par exemple.


Mise en garde

Comme ces codes utilisent usb_4_mic_array / Tuning.py, vous devez mettre Tuning.py dans un dossier ou écrire la fonction de Tuning.py dans le code pour l'exécuter en dehors de ce dossier.

Voici un exemple de réécriture pour qu'il puisse être utilisé dans n'importe quel dossier.

get_angle.py


from time import sleep

import usb
import usb.core
import usb.util
import struct

dev = usb.core.find(idVendor=0x2886,idProduct=0x0018)
TIMEOUT = 100000

# PARAMETERS for sound localization
PARAMETERS = {
    'DOAANGLE': (21, 0, 'int', 359, 0, 'ro', 'DOA angle. Current value. Orientation depends on build configuration.'),
    'SPEECHDETECTED': (19, 22, 'int', 1, 0, 'ro', 'Speech detection status.', '0 = false (no speech detected)',
                       '1 = true (speech detected)'),
    }

def read(param_name):
    try:
        data = PARAMETERS[param_name]
    except KeyError:
        return

    id = data[0]

    cmd = 0x80 | data[1]
    if data[2] == 'int':
        cmd |= 0x40

    length = 8

    response = dev.ctrl_transfer(
        usb.util.CTRL_IN | usb.util.CTRL_TYPE_VENDOR | usb.util.CTRL_RECIPIENT_DEVICE,
        0, cmd, id, length, TIMEOUT)

    response = struct.unpack(b'ii', response.tostring())

    if data[2] == 'int':
        result = response[0]
    else:
        result = response[0] * (2. ** response[1])

    return result

# Find angular
if dev:

    while True:
        if read('SPEECHDETECTED') == 1:
            print(read('DOAANGLE'))
            sleep(1)

Avec cela, vous pouvez localiser la source sonore dans n'importe quel dossier.


Bonus: contrôle LED

Faites ce qui suit où vous voulez (à la maison ou dans usb_4_mic_array)

python


git clone https://github.com/respeaker/pixel_ring.git
cd pixel_ring
sudo python setup.py install
sudo python examples/usb_mic_array.py

Quand tu fais ça, Comment se réveiller pendant 3 secondes Comment briller Pensez pendant 3 secondes parler 6 secondes pour briller off Comment briller pendant 3 secondes Faire. Pour d'autres façons de briller, reportez-vous à pixel_ring / pixel_ring / usb_pixel_ring_v2.py.

Recommended Posts

[Python] Localisez la source sonore uniquement sur la voix humaine avec ReSpeaker
python à retenir uniquement avec bonjour, mondes
Analyse vocale par python
Analyse vocale par python
J'ai essayé de faire une simulation de séparation de source sonore en temps réel avec l'apprentissage automatique Python
Connectez-vous à BigQuery avec Python
Connectez-vous à Wikipedia avec Python
Publiez sur Slack avec Python 3
Basculer python vers 2.7 avec des alternatives
Écrire en csv avec Python
[Raspi4; Introduction au son] Enregistrement stable de l'entrée sonore avec python ♪
Récupérez la source de la page à charger indéfiniment avec python.
Comment changer le SQLite3 de Django téléchargé sur python n'importe où avec juste une interface graphique
Je veux résoudre APG4b avec Python (seulement 4.01 et 4.04 au chapitre 4)
Essayez d'obtenir des métriques CloudWatch avec la source de données python re: dash
Python: comment utiliser async avec
Lien pour commencer avec python
[Python] Ecrire dans un fichier csv avec Python
Installez Python à partir des sources avec Ansible
Ravi de vous rencontrer avec python
Essayez d'exploiter Facebook avec Python
Sortie vers un fichier csv avec Python
Convertir la liste en DataFrame avec python
Conversion MP3 → WAV avec Python
Pour faire une récursion avec Python2
Comment démarrer avec Python
Que faire avec la sortie de PYTHON?
Comment calculer la date avec python
Publiez facilement sur Twitter avec Python 3
Je veux déboguer avec Python
Analysons la voix avec Python # 1 FFT
Défiez Fizz Buzz! Problèmes avec Python en 5 modèles (seulement pour l'instant, nombres jusqu'à 398)
Code source pour la séparation des sources sonores (série de pratiques d'apprentissage automatique) appris avec Python
Essayez de reproduire un film couleur avec Python
Essayez de vous connecter à qiita avec Python
Changer l'environnement Python 64 bits en environnement 32 bits avec Anaconda
Reconnaissance vocale en anglais avec python [speech to text]
Convertir un mémo à la fois avec Python 2to3
mail html avec image à envoyer avec python
Mémo pour demander des KPI avec python
Sortir les caractères de couleur en joli avec python
Introduction au remplissage d'image Python Remplissage d'image à l'aide d'ImageDataGenerator
Sortie du journal Python vers la console avec GAE
Convertir des données Excel en JSON avec python
Convertir Hiragana en Romaji avec Python (bêta)
Fractal pour faire et jouer avec Python
Je voulais résoudre ABC160 avec Python
Connectez-vous à MySQL avec Python dans Docker
Comment utiliser BigQuery en Python
[Introduction à Python] Utilisons foreach avec Python
Caméra à pixel unique à expérimenter avec Python
Faisons la voix lentement avec Python
Convertissez des données FX 1 minute en données 5 minutes avec Python
Je veux analyser les journaux avec Python
Comment faire un test de sac avec python
Je veux jouer avec aws avec python