Jump to content
ColorPlay

Анализатор спектра показывает уровень громкости звука в различных частотных диапазонах (низкий, средний, высокий) в режиме реального времени

Recommended Posts

Анализатор звукового спектра на контроллере Raspberry Pi и RGB светодиодах

spectrum_analyzer_rgb_raspi2.gif

Анализатор спектра показывает уровень громкости звука в различных частотных диапазонах (низкий, средний, высокий) в режиме реального времени, позволяя визуализировать музыку. Использование контроллера  Raspberry Pi, светодиодов  RGB и проводов, позволяет сделать вам динамическое отображение воспроизводимого звука от медиа-плеера или другого источника звука. Этот проект базируется на большой библиотеке светового кода Xmas Python из проекта Light Show Pi, и самые продвинутые пользователи могут даже настроить этот код  для голосования за определенную песню с помощью SMS!

Проект работает в среде программирования Python,  включая обработку аудио. Это позволяет просто проигрывать  и анализировать mp3 файлы в реальном времени, пока ваш контроллер Raspberry Pi не делает ничего другого.

led эквалайзер×светодиодный эквалайзер×своими руками×схема led эквалайзера×светодиодная лента эквалайзер×как сделать эквалайзер.png

Техническое обеспечение:

  • Контроллер Raspberry Pi – эта инструкция основана на одной из ранних версий  контроллера 3.10.19
  • Светодиодная полоса RGB – 1 метр (примерно 160 светодиодов), управляемая при помощи SPI (адресное управление), и ШИМ.  Этот проект использует одну изогнутую полосу, формирующую 5 столбцов. Сигнал подается на различные участки полосы, при подключении только трех проводов – земля, синхронизация и данные.    
  • Блок питания 10A 5V
  • USB Wi-Fi адаптер (RTL8188CUS драйвер чипсета встроен в ОС очень плохо!).  Он нужен, если вы не хотите использовать Ethernet.  Я использовал этот адаптер, чтобы заставите его работать.
  • SD-карта 4GB или больше
  • Колонки с подключением USB
  • USB-концентратор для подключения клавиатуры, мыши, Wi-Fi
  • Зарядное устройство сотового телефона, чтобы подключить к нему Raspberry Pi  через разъем USB 
  • USB-клавиатура, мышь, монитор HDMI
  • Провода, различные разъемы типа «мама», а также разъемы JST, если вы не хотите припаивать  RGB полосы навсегда.

Программное обеспечение:

  • Этот проект базируется на основе большого кода «Pi-based xmas lights controller code». Полностью, этот огромный программный код вам не нужен. Вам необходимо скачать лишь его небольшую часть, а именно библиотеку под названием «synchronized_lights_LED_strip.py», доступную для скачивания по ссылке: http://www.instructables.com/files/orig/F8J/J4J8/HQCWG0FE/F8JJ4J8HQCWG0FE.py 
  • Затем вам необходимо скачать библиотеку контроля светодиодной полосы по SPI (адресация светодиодов) под названием «Python control of LPD8806 RGB LED strip», доступную для скачивания по ссылке: https://github.com/adammhaile/RPi-LPD8806 
  • Это немного не относится к проекту, но для программирования контроллера Raspberry Pi я использовал программу Geany IDE. Если вам будет интересно, то ознакомится с ее возможностями и функциями можно по ссылке: http://www.geany.org/ 
 
Общий набор оборудования на одной фотографии:
 
Светодиодный эквалайзер своими руками.jpg
 
Краткий обзор, представляющий все основные компоненты. Подключите к USB концентратору, мышь, клавиатуру, колонки, Ethernet или Wi-Fi  соединение.
 
Подключение светодиодных лент RGB
 
Припаяйте четыре провода к входу светодиодной ленты согласно их схеме подключения. Обратите внимание, что на ленте есть вход и выход,  это важно для подключения. Вы можете также использовать разъемы JST, если вы не хотите припаивать светодиодные ленты навсегда. Затем присоедините провода от светодиодной ленты к контроллеру Raspberry Pi, так как указано на фотографии ниже.
 
Светодиодный эквалайзер своими руками_2.jpgСветодиодный эквалайзер своими руками_3.jpg
 
Теперь подключите провода питания к контроллеру Raspberry Pi, как показано на фотографии выше и принципиальной схеме ниже. Не забудьте подключить землю от источника питания на землю контроллера Raspberry Pi! 
 
Программирование светодиодной ленты RGB
 
Скачайте программное обеспечение для контроллера Raspberry Pi по этой ссылке, для возможности управления светодиодной лентой в режиме SPI (адресное управление): https://github.com/adammhaile/RPi-LPD8806
 
Напоминаю, что все дальнейшие команды набираются в командной строке операционной системы Linux! Если вы не знакомы с данной ОС, то на данное время, чтение дальнейшего раздела для вас бесполезно.
 
Наберите команду
sudo raspi-config
– Далее следуйте подсказкам системы, чтобы включить поддержку аппаратной функции SPI. Когда будете устанавливать аудиовыход, установите разъем jack 3,5mm, а не выход HDMI.
Также, я добавил родительский каталог установки среды Python, переменным параметром PYTHONPATH для обработчика команд Bashrc, для того, чтобы я мог вызвать любую функцию из любого места.
nano ~/.bashrc:
export PYTHONPATH=$PYTHONPATH:/home/pi/RPi-LPD8806

Вы также можете добавить строку:

PYTHONPATH=$PYTHONPATH:/home/pi/RPi-LPD8806 to /etc/environments

Но это потребует перезагрузки, для регистрации в новых терминальных окнах.

Проверьте, что полоса работает, запустив пример кода:
python example.py

Когда вы запускаете код «Xmas light» как root процесс, переменные среды, в частности, PYTHONPATH не передаются этому процессу.

Чтобы сохранить эти переменные окружения, нужно отредактировать файл /etc/sudoers by typing, набрав команду 
sudo visudo

и затем добавить снизу файла следующие строки:

Defaults env_keep=SYNCHRONIZED_LIGHTS_HOME

Defaults env_keep+=PYTHONPATH
В первой строке прописывается то, что нам нужно для работы световой библиотеки Xmas. Во второй строке прописывается переменная с постоянным нахождением среды Python, через переопределение переменных. Сама библиотека будет установлена позже.
Чтобы убедиться, что у вас все работает из-под «root» процесса, закройте все терминальные окна, откройте новое и введите следующие команды:
 
sudo pythonfrom bootstrap import *led.fill(Color(50,50,50),0,10)led.update()
 
В результате выполнения этих команд, у вас должны загореться первые 10 светодиодов. Если, что-то пошло не так, перезагрузите терминал полностью.
 
Светодиодный эквалайзер своими руками_4.jpg
 
Установка светодиодной ленты
 
Я лично провел одну общую ленту в виде змейки по деревянному решетчатому основанию, закрепив ее простыми пластиковыми хомутами. Если вы хотите сэкономить светодиодную ленту, то вы можете отрезать полоски, нужной вам длинны, и спаять их проводами. Все равно, адресация светодиодов задается программно, и нет никакой разницы, будет ли это цела полоса или отдельные полосы.
 
Ускорение программного обеспечения для управления светодиодными лентами
 
На момент написания этой инструкции, код управления на языке Python лентами RGB был немного медленный, но есть несколько способов ускорить его.
Во-первых, отредактируйте файл ledstrip.py, и установите использование аппаратного управления SPI, аргумент должен быть такого вида use_py_spi = True.
Лично у меня файл ledstrip.py был расположен по следующему пути:
 /home/pi/RPi-LPD8806/raspledstrip/ledstrip.py
И в нем содержалась строка следующего вида, но с параметром False:
def __init__(self, leds, use_py_spi = True, dev="/dev/spidev0.0", driver="LPD8806"):
Теперь внутри файла LPD8806.py, меняем скорость SPI (скорость адресации) на 16 МГц.
if self.use_py_spi:import spidevself.spi = spidev.SpiDev()self.spi.open(0,0)self.spi.max_speed_hz = 16000000print 'py-spidev MHz: %d' % (self.spi.max_speed_hz / 1000000.0 )
Последние изменения в файле LPD8806.py производятся в функции Update (). Каждый вызов функции self.spi.xfer2 (), производится с задержкой 160 мс, так что мы просто изменяем функцию обновления, так что она вызывает функцию spi.xfer2 () немного реже, что ускоряет процесс.
def update(self, buffer):temp_buffer = []if self.use_py_spi:for x in range(self.leds):temp_buffer = temp_buffer + [i for i in buffer[x]]#self.spi.xfer2([i for i in buffer[x]])self.spi.xfer2(temp_buffer)self.spi.xfer2([0x00,0x00,0x00]) #zero fill the last to prevent stray colors at the endself.spi.xfer2([0x00]) #once more with feeling - this helps  time2 = time.time()
Вот и все с ускорением. Если вы повторно запустите файл example.py, то вы увидите значительное ускорение работы.
Подробное описание установки основной библиотеки LightShow Pi, вы можете прочитать в оригинальной инструкции на английском языке по ссылке:
  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...