[PYTHON] L'histoire de la création d'une caméra sonore avec Touch Designer et ReSpeaker

J'ai créé une caméra sonore en utilisant ReSpeaker pour apprendre TouchDesigner. Je l'ai fait parce que je pensais qu'il pourrait être intéressant de visualiser le son en effectuant SSL (Sound Source Localization) avec ReSpeaker et en ajoutant des effets dans le sens de l'arrivée du son. J'ai décidé d'appeler cela une caméra sonore.

Côté Designer tactile

スクリーンショット 2020-11-13 191013.png Cela m'inquiète depuis longtemps, mais comment puis-je partager ce type de produit de programmation visuelle sur Qiita pour qu'il soit facile à voir ...? Pour le moment, j'irai avec l'image cette fois.

Le contenu est très simple. Tout ce que vous avez à faire est de lire l'image de la caméra avec vidéodevicein, de spécifier la position de l'image gif suivante et de la superposer. 2 - コピー.gif

Puisque SSL est fait en Python brut, le résultat est reçu dans OSC à partir de ce processus.

Côté ReSpeaker

ReSpeaker a utilisé la v2.0. J'ai aussi la version 1.0, qui semble être plus précise, mais pour une raison quelconque, je n'ai pas pu me connecter à mon Windows 10, alors j'ai abandonné. J'étais connecté ...

ReSpeaker v2.0 https://github.com/respeaker/usb_4_mic_array

A partir de cette bibliothèque, à partir de l'endroit où est effectué DoA (Direction of Arrival), seule la valeur dans la direction de la source sonore est extraite et envoyée par OSC. Veuillez noter que vous êtes assez accro à l'écriture de firmware. À propos, cette fois, je le fais du côté Python, mais comme la LED dans la direction de la source sonore s'allume même avec le seul réseau de microphones, il semble que le côté de l'appareil estime également la direction de la source sonore. À première vue, celui-ci est plus précis, donc si vous pouvez extraire les données, vous voudrez peut-être l'utiliser.

doa.py


from pythonosc import osc_message_builder
from pythonosc import udp_client
from tuning import Tuning
import usb.core
import usb.util
import time

osc_client = udp_client.SimpleUDPClient('127.0.0.1', 50000)

from infi.devicemanager import DeviceManager
dm = DeviceManager()
devices = dm.all_devices
for i in devices:
    try:
        print ('{} : address: {}, bus: {}, location: {}'.format(i.friendly_name, i.address, i.bus_number, i.location))
    except Exception:
        pass


import usb.backend.libusb1
backend = usb.backend.libusb1.get_backend(find_library=lambda x: "./libusb-1.0.dll")
dev = usb.core.find(idVendor=0x2886, idProduct=0x0018)
direction = 0

if dev:
    Mic_tuning = Tuning(dev)
    direction = Mic_tuning.direction
    print(Mic_tuning.direction)
    while True:
        try:
            if direction != Mic_tuning.direction:
                direction = Mic_tuning.direction
                osc_client.send_message("/direction", direction)
                print(direction)
            time.sleep(0.5)
        except KeyboardInterrupt:
            break

Réglage

Faites en sorte que l'origine du réseau de microphones et l'origine de la caméra correspondent. Cette fois, j'ai utilisé la caméra Web c920 de logicool. Vérifiez l'angle de vue de la caméra à l'avance.

Image from iOS.jpg

Contrôle de fonctionnement

Quand j'essaye de le déplacer, ça ressemble à ça. Il y a un petit décalage, mais pouvez-vous voir l'effet se produire après avoir chassé le smartphone?

Aussi, voici une vidéo d'une coche à portée de main.

Cette fois, l'effet était unidimensionnel car le réseau de microphones était disposé à plat, mais si vous organisez le réseau de microphones en trois dimensions ou utilisez deux ReSpeakers, vous devriez pouvoir ajouter l'effet à un endroit.

Recommended Posts

L'histoire de la création d'une caméra sonore avec Touch Designer et ReSpeaker
L'histoire de la création d'un bot de boîte à questions avec discord.py
L'histoire de la création d'un module qui ignore le courrier avec python
L'histoire de la création d'un robot LINE pour le petit-déjeuner d'une université de 100 yens avec Python
L'histoire de la création d'un générateur d'icônes mel
L'histoire de la fabrication d'une boîte qui interconnecte la mémoire AL de Pepper et MQTT
L'histoire de la création d'une application Web qui enregistre des lectures approfondies avec Django
L'histoire de la création d'un réseau neuronal de génération musicale
Un serveur qui renvoie le nombre de personnes devant la caméra avec bottle.py et OpenCV
L'histoire de Python et l'histoire de NaN
L'histoire de l'exportation d'un programme
Une histoire coincée avec l'installation de la bibliothèque de machine learning JAX
Une histoire sur la prédiction des préfectures à partir des noms de villes avec Jubatus
L'histoire de la création d'un outil qui fonctionne sur Mac et Windows sur le site de développement de jeux
L'histoire de la fabrication d'un moule immuable
L'histoire d'essayer deep3d et de perdre
L'histoire du traitement A du blackjack (python)
Une histoire qui visualise le présent de Qiita avec Qiita API + Elasticsearch + Kibana
L'histoire d'un capteur de stationnement en 10 minutes avec le kit de démarrage GrovePi +
Calculer l'itinéraire le plus court d'un graphe avec la méthode Dyxtra et Python
Créez DNN-CRF avec Chainer et reconnaissez la progression des accords de la musique
L'histoire de la création d'un package qui accélère le fonctionnement de Juman (Juman ++) & KNP
L'histoire de la création d'un outil pour charger une image avec Python ⇒ l'enregistrer sous un autre nom
L'histoire de l'apprentissage profond avec TPU
Représenter des conteneurs dans un cadre imbriqué (schéma) dans Jupyter, et ce que j'ai étudié en cours de création
Histoire de créer un planétarium virtuel [jusqu'à ce que les débutants créent un modèle avec un script et parviennent à l'assembler]
Une histoire sur le calcul de la vitesse d'une petite balle tombant tout en recevant la résistance de l'air avec Python et Sympy
L'histoire de la création du Mel Icon Generator version 2
Expliquez doucement le processus de création d'une simple caméra de surveillance sans serveur à l'aide de Raspeye, de l'API Gmail et de l'API Line
Essayez la touche d'un test basé sur les données avec Selenium Python Bindings et py.test
L'histoire de la création d'un Line Bot qui nous raconte le calendrier de la programmation du concours
Prise en compte des forces et faiblesses de Python
L'histoire de la fabrication de soracom_exporter (j'ai essayé de surveiller SORACOM Air avec Prometheus)
Obtenez le cours de l'action d'une entreprise japonaise avec Python et faites un graphique
Une histoire sur l'obtention du champ Atom (télégramme XML) de l'Agence météorologique avec une tarte à la râpe et de le tweeter
L'histoire du serveur Web et du DAG d'Airflow, dont le chargement prend beaucoup de temps
Le résultat de la création d'un album de cartes de jeunes mariés italiens en Python et de son partage
Une histoire sur la tentative de contribuer à l'analyse COVID-19 avec l'offre gratuite d'AWS et l'échec
L'histoire du lancement d'un serveur Minecraft depuis Discord
Une histoire qui réduit l'effort de fonctionnement / maintenance
Essayez de créer un site Web simple avec responder et sqlite3
L'histoire de Python sans opérateurs d'incrémentation et de décrémentation.
[Touch Designer] Changer la couleur d'apparence du bouton COMP
L'histoire de l'arrêt du service de production avec la commande hostname
Spécifiez le volume sous Linux et jouez le son
L'histoire du partage de l'environnement pyenv avec plusieurs utilisateurs
Une histoire d'essayer pyenv, virtualenv et virtualenvwrapper
Prenez des captures d'écran LCD avec Python-LEGO Mindstorms
Visualisez la gamme d'insertions internes et externes avec python
L'histoire de la création d'une partition de type Hanon avec Python
Créez un lot d'images et gonflez avec ImageDataGenerator
Visualisez le vocabulaire caractéristique d'un document avec D3.js
Une histoire sur le changement du nom principal de BlueZ
Le problème Zip 4 Gbyte est une histoire du passé
Une histoire qui a analysé la livraison de Nico Nama.
Un mémorandum lors de la réalisation d'une caméra de surveillance avec Raspeye