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.
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.
Puisque SSL est fait en Python brut, le résultat est reçu dans OSC à partir de ce processus.
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
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.
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?
— hatbot (@hatbot3) November 13, 2020
Aussi, voici une vidéo d'une coche à portée de main.
— hatbot (@hatbot3) November 13, 2020
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.