- Первый и самый простой – это забить.
- Второй – это использовать внешнюю звуковух вместе с Nexus 7
- третий – это отказаться от использования планшета и собрать мультимедиа систему на базе одноплатного компьютера типа Raspberry Pi 2 или ODROID C1+. Вместе с HiFi Shield-ом (Для Raspberry Pi вот и Odroid C1 вот)
Пока что решено забить. Тогда нужно каким-то образом оцифровывать звук и разложить на частоты, чтобы принять решение о том, какой канал светодиодной ленты нужно включить.
- Первый, очевидный способ – это взять уже имеющийся EasyCap, по сколько он не только оцифровывает видео, но и аудио.
- Второй – взять USB звуковуху специально для этой задачи.
Решил попробовать оба. EasyCap на основе utv007 у меня уже был, а вот звуковуху пришлось купить, к счастью стоит она ~500р.
Lightshowpi – cофт, который я использовал в прошлый раз для управления светодиодной лентой на основе проигрываемой композиции, так же может работать и в режиме аудио захвата. Для этого нужно сделать конфиг, который укажет, что нужно работать именно с внешним аудио сигналом и какую звуковуху использовать для этих целей.
Для того, чтобы указать название звуковой карты нужно запустить скрипт (audio_in_cards.py), который идёт в комплекте – он то и выдаст список подключенных звуковых устройств. В моем случае правда он ничего не принтит и мне пришлось сделать небольшую модификацию в нём, чтобы он заработал:
cd lightshowpi/tools vim audio_in_cards.py
надо на последнюю строчку добавить print
import alsaaudio as aa if __name__ == "__main__": print aa.cards()
теперь всё как надо – запускаем:
pi@rpitestmusic ~/lightshowpi/tools $ sudo python audio_in_cards.py [u'ALSA', u'usbtv']
Тут видно, что для EasyCap – это usbtv. Соответственно просто пропишем это в конфиг.
vim /home/pi/.lights.cfg
там уже есть секция hardware, которая переопределяет какие пины использовать для управления лентой. Теперь нужно поменять, чтобы скрипт работал в режиме захвата звука со звуковухи и указать с какой:
[hardware] gpio_pins = 0,1,2 [lightshow] mode = audio-in audio_in_card = usbtv
Собственно, надо попробовать – как это работает. Запускаем скрипт в режиме захвата
sudo python py/synchronized_lights.py
Первое, чтоб бросается в глаза – это “шум”. Даже если нет никаких звуков лента всё равно моргает.
Теперь заменим EasyCap на купленную USB звуковуху. Честно взял некую рандомную. Вот dmesg если вдруг интересно:
Снова запустив скрипт, который показывает название аудио устройств в системе, увидим, что имя, которое нужно поместить в конфиг – это просто Device.
pi@rpitestmusic ~/lightshowpi/tools $ sudo python audio_in_cards.py [u'ALSA', u'Device']
Заменим usbtv на Device, используя любимый редактор vim /home/pi/.lights.cfg
[hardware] gpio_pins = 0,1,2 [lightshow] mode = audio-in #audio_in_card = usbtv audio_in_card = Device
И ребутнем Raspberry для профилактики возможных USB глитчей. После чего запустим скрипт syncronized_lights.py теперь уже с USB звуковой картой.
Заодно прикинул как это будет выглядеть если прилепить светодиодную ленту за телевизором:
Выглядет неплохо, хотя лучше прикрепить за картиной или зеркалом.
Что скажите?