ARDUINO Анализатор аудиоспектра

Олег Поляков

★★✩✩✩✩✩
18 Янв 2022
86
95
www.1812.ru
@novvel,
доработал ваш скетч.

1. Вынес все эффекты в функции и разместил отдельным файлов в проект.
2. Убрал багу с пиковой точкой в нечетных полосах, когда при падении в ноль точка пика перескакивала на соседний столбец.
3. Убрал багу с увеличением яркости и сам алгоритм изменения яркости переписал. Теперь изменяется плавней с шагом 10.
4. Сделал динамическую заставку при включении, которая проверяет все точки матрицы.
5. Сделал сохранение и загрузку настроек через EEPROM.
6. Сделал световую индикацию изменений параметров визуализации по двойному, тройному, четверному и пятерному нажатию на кнопку: красный - выключено, зелёный - включено.
7. Добавлено несколько дополнительных палитр в уже существующий набор режимов визуализации (кто-то на форуме просил - пользуйтесь!). Таким образом общее количество режимов достигло 12.

Сообщения об ошибках и разумные предложения по улучшению приветствуются.
 

Вложения

Изменено:
  • Лойс +1
Реакции: 00zzz00 и novvel

Олег Поляков

★★✩✩✩✩✩
18 Янв 2022
86
95
www.1812.ru
Допилил скетч до следующего состояния:
1. Для некоторых режимов визуализации реализована возможность изменять цветовую схему отображения через параметры соответствующих функций в effects.ino. Смысл параметров прокомментирован в коде.
2. Добавлен новый режим визуализации "Зебра". Общее количество режимов - 16.
3. По 6-кратному нажатию на кнопку можно вкл./выкл. режим случайной смены режима визуализации.
4. Добавлена возможность перевода устройства в режим лампы. В этом режиме микрофонная часть не используется, а на светодиодной матрице отображаются разные динамические цветовые эффекты (в текущей версии их 5). Эффекты вынесены в отдельный файл проекта l_effects.ino. Для перехода в режим "Лампа" нужно включать спектроанализатор с нажатой кнопкой.
5. В основной файл проекта добавил памятку, как управлять устройством через кнопку.
 

Вложения

  • Лойс +1
Реакции: novvel и 00zzz00

Олег Поляков

★★✩✩✩✩✩
18 Янв 2022
86
95
www.1812.ru
Доработанная прошивка.
Самое главное в этой прошивке - обоснованная рекомендация и возможность перестроить ширину спектра с 16 кГц на 6.4 кГц.
Практика показала что 16 кГц - избыточно широкая полоса. Как следствие:
1. Впустую тратится динамическая память, которой и так мало.
2. Основной цикл тормозится и не успевает обрабатывать звук в реальном режиме времени.
3. Удивительно, но на НЕ mp3 звуковых файлах отсекаются (удивительно, правда?!) высокие частоты. Этот парадокс обнаружил участник форума Алекса Гайвера с ником 00zzz00.
По вышеизложенным причинам рекомендую использовать ширину спектра звука в 6.4 кГц.

На 4-х кратное нажатие кнопки повешено включение/выключение плавной смены кадров для всех режимов аудио-анализатора (тоски пиков при падении превращаются в капельки, а столбики в некоторых режимах плавно гаснут как электрические лампочки). Эффект имеет глобальную настройку плавности.

Кроме того, устранены мелкие погрешности в скетче. В режиме обработки звука в полосе 6.4 кГц освобождается достаточное количество динамической памяти и скетч на Ардуино Нано работает стабильно.

Вернул и подчистил погрешности в реализации псевдо-стереофонических эффектов.
Добавил целый ряд новых режимов визуализации.
Общее количество настроенных по умолчанию режимов визуализации - 31.
Все режимы визуализации спектроанализатора реализованы через функции в файле effects.ino. Функции снабжены описанием параметров для удобства кастомизации.

Список функций визуализации:
1. Классический Гайвер
2. Градиент
3. Волна
4. Кометы
5. Костёр (огонь)
6. Радуга
7. Зебра
8. Два канала: Дорожка
9. Два канала: Триколор
10. Два канала: Радуга

ВЕРСИЯ: 1.4 от 03.02.2023
 

Вложения

Олег Поляков

★★✩✩✩✩✩
18 Янв 2022
86
95
www.1812.ru
Финальная версия прошивки 1.4.03 от 20.02.2023.
Дальнейшая разработка спектроанализатора под Arduino Nano мной прекращена. Все наработки перенесены под платформу Arduino ESP32.

В финальной версии исправлены все обнаруженные при тестировании ошибки.
Общее количество настроенных по умолчанию режимов визуализации - 38.

Список функций визуализации:
1. Классический Гайвер
2. Градиент
3. Синус
4. Волна
5. Кометы
5. Костёр (огонь)
6. Радуга
7. Зебра
8. Два канала: Дорожка
9. Два канала: Синус
10. Два канала: Радуга
 

Вложения

  • Лойс +1
Реакции: novvel, FerA и 00zzz00

Avatar

✩✩✩✩✩✩✩
20 Фев 2023
7
2
Второй день пытаюсь запустить прошивку Олега Полякова. Ничего не получается. В настройках выставлено
Width 16 не менял.
Height 16 тоже не менял.
Reverse 1 поменял. Был 0. 1 направление столбцов снизу, 0 сверху. Мне нужно, чтоб столбцы снизу прыгали.
Brightness 120 не менял.
Schem 1 поменял. Был 0. 0 схема с микрофоном без конденсатора, 1 схема с микрофоном с конденсатором или схема Гайвера. У меня схема с кнопкой, но аудио вход не микрофон, а провод. Такое как 1 надо ставить. Хотя пробовал и то, и то. Результаты одинаковые.
Offset 1,24 не менял
Reference 1,41//2,03 не менял. Написано замерить мультиметром и вписать, но не знаю, где мерить.
Correction 0xE6E0FF не менял.
Далее Lev1 4//5
Lev2 8//10
Lev3 12//13
Lev4 15 написано, что выставить под свою высоту столбцов. Ничего не менял оставил как есть.
Далее ниже ничего не менял.
Результаты. Включаю, идёт заставка, попеременно загораются диоды по всему полю, затем загорается первый столбик примерно до половины, под музыку не двигается. Горит не зависимо есть звук или нет. Кнопкой судя по всему режимы переключаются, так как столбик меняет свой цвет. Где-то после десяти нажатий появляется режим с горизонтальной полосой и тогда уже от центра вверх вниз горят несколько диодов. Но тоже ничего не двигается.
Оригинальная прошивка Гайвера та что на один режим работает, столбики скачут и все нормально, а здесь пока не получается. Может кто-то подскажет куда копать.
Вот короткое видео https://youtube.com/shorts/RNOSudSh47g?feature=share3
На видео заставка, где мигает по всему полю, затем режим с горизонтальной полосой и далее я нажимал следующие режимы. Музыку не слышно, но она есть, наушники просто на столе лежали, а колонок у меня нет.
 
Изменено:

Avatar

✩✩✩✩✩✩✩
20 Фев 2023
7
2
аудио-пин Вы правильно в скетче прописали?
У меня в скетче стоит Audio in 5
а звук подаю на А0 (если расположить плату USB разъемом вверх, то с левой стороны 4-й сверху, на шелкографии платы напечатано А0. Так было на схеме Алекса, которая не микрофон, а провод)
 

Вложения

Avatar

✩✩✩✩✩✩✩
20 Фев 2023
7
2
Олег Поляков спасибо вам за наводку. В общем методом тыка, подсмотрел в скетче Гайвера, что Audio in 0, поставил 0 все заработало. Диоды мигают.
Но первый столбик все равно светится до половины постоянно, хоть есть звук, хоть нету. Ещё заметил, что активно двигаются столбики только в левой части матрицы. Примерно до 9-го столбика. После девятого матрица молчит, изредка выдавая короткие невысокие всплески, примерно до 14-го столбика. Пятнадцатый и шестнадцатый вообще мертвые. И так почти на всех музыкальных треках, что только не пробовал и рок и металл - одинаково. Так и должно быть или это у меня так?
Если ничего не подключать к анализатору спектра, то первый столбик горит до половины постоянно (он вообще постоянно горит), а второй и третий загораются изредка по два три диода. Завтра сниму, наверное, видео. А то как-то я сумбурно всё описал.
P.S. Звук на вход наваливал на максимум.
 
Изменено:
  • Лойс +1
Реакции: Олег Поляков

Олег Поляков

★★✩✩✩✩✩
18 Янв 2022
86
95
www.1812.ru
@Avatar,
для того, чтобы левый столбик не зависал, а частоты были равномерно распределены по остальным столбикам Вам необходимо отредактировать массив тонов под линейный вход, т.к. изначально он был настроен на работу с микрофонным модулем.
В коде это тут:
C++:
#if (SPECTRUM == 0)
#define FHT_N 256   // ширина спектра х2
byte posOffset[17] = {2, 3, 4, 6, 8, 10, 12, 16, 20, 30, 40, 50, 60, 70, 80, 90, 110}; //Экспериментальная (самая удачная)
#else
#define FHT_N 128  // ширина спектра х
byte posOffset[17] = {1, 2, 3, 5, 8, 10, 12, 16, 20, 24, 27, 30, 35, 41, 48, 52, 63}; //Экспериментальная (для дискриминации 128 по Хартли)
#endif
 
  • Лойс +1
Реакции: Avatar

Avatar

✩✩✩✩✩✩✩
20 Фев 2023
7
2
@Avatar,
необходимо отредактировать массив тонов
Ну на этом, как говорится "вот и приплыли"... 😔 Как это сделать я не знаю. Не умею я программировать... В моем случае придется либо довольствоваться тем, что получилось, либо допаять микрофон. Как думаете, электретник таблетку от китайского плеера можно допаять или нужен именно модуль, который на маленькой плате с усилителем?
 

Олег Поляков

★★✩✩✩✩✩
18 Янв 2022
86
95
www.1812.ru
@Avatar, настоятельно рекомендую использовать микрофонный модуль MAX9814. Стоит он недорого.

Если хотите поэкспериментировать в настройке массива тонов, то Владимир описал методику, которая не требует программирования:
 
Изменено:
  • Лойс +1
Реакции: Avatar

Avatar

✩✩✩✩✩✩✩
20 Фев 2023
7
2
настоятельно рекомендую использовать микрофонный модуль MAX9814
Установил микрофонный модуль. Все заработало как надо, но первый столбик при отсутствии звука светится до половины все равно. Когда звук есть, то работает нормально, двигается и в большую и в меньшую сторону.

Если хотите поэкспериментировать в настройке массива тонов, то Владимир описал методику, которая не требует программирования
Прочитал методику, то есть беру генератор, выставляю например 100 герц для первого столбика к примеру, подаю на вход, но не совсем понял про цифры в скетче. Вот есть ряд цифр byte posOffset[17] = {2, 3, 4, 6, 8, 10, 12, 16, 20, 30, 40, 50, 60, 70, 80, 90, 110} там 17 цифр почему-то, а столбиков в матрице 16. Вот подал я с генератора звук частотой 100 герц и получается нужно подбирать первую цифру, чтоб засветился первый столбик? Потом 200 герц, второй столбик, вторая цифра. 400 герц третий столбик, подбираем третью цифру. Что-то темный лес для меня. Что такое 2, 3, 4, 6, 8, 10, 12, 16, 20 и т.д. И там эта строка с цифрами встречается 2 раза, первый раз после define FHT_N 256 // ширина спектра х2 второй раз после define FHT_N 128 // ширина спектра х. Что такое ширина спектра х и х2 это когда половина матрицы светится и полная матрица? Напишите пожалуйста если не сложно. Что-то я запутался.

Вот короткое видео, что получилось с микрофонным модулем
в начале видео видно, как музыки еще нет, но первый столбик светится до половины.
 

Олег Поляков

★★✩✩✩✩✩
18 Янв 2022
86
95
www.1812.ru
Все заработало как надо, но первый столбик при отсутствии звука светится до половины все равно. Когда звук есть, то работает нормально, двигается и в большую и в меньшую сторону
Очень похоже на наличие низкочастотной помехи. Откуда она берется?
Тут возможны варианты.
1. Звуковой провод от микрофонной платы крайне желательно делать коротким и экранированным на массу проводом.
2. Возможной причиной наводки может быть работающий вентилятор охлаждения ноутбука.
 
Изменено:

Садриддин

✩✩✩✩✩✩✩
16 Ноя 2023
4
0
Добрый день Олег . Походу только вы и занялись доработкой этой идеи , за это вам огромное спасибо. Хочу попробовать вашу прошивку . А есть ли возможность добавить возможность смены цветов ? Либо автоматическую , либо в ручную каким либо резистором ?
 

Садриддин

✩✩✩✩✩✩✩
16 Ноя 2023
4
0
@Олег Поляков, Прошивку Гайвера на нано я загрузил легко , сразу скомпилировалась и сразу загрузилась . Загружаю с телефона программой Arduino droid . Вашу прошивку я попробовал скомпилировать и понеслось , ошибка за ошибкой . Помошите пожалуйста. Для начала думаю нужны все требуемые библиотеки , немогли бы вы дать ссылку на файл с требуемыми библиотеками , а после посмотрим какие ещё покажет ошибки .комп мой устаревшей модели поэтому делаю это с телефона . Я думаю найдется огромное количество людей желающих загружать прошивку с телефона . А ещё кстати esp32 ведь много разновидностей , ко всем ли подойдёт ваша прошивка ?
 
Изменено:

Олег Поляков

★★✩✩✩✩✩
18 Янв 2022
86
95
www.1812.ru
@Садриддин, все необходимые библиотеки находятся в папке libraries архива скетча.
Arduino droid - программа мне незнакомая. Сборку и прошивку производил в Arduino IDE. Если там возникают ошибки по библиотекам, то давайте разберёмся. Лучше со скриншотами и в личной переписке.
 

Serg70

✩✩✩✩✩✩✩
20 Янв 2022
7
1
Вот и я сегодня добил этот анализатор. Будет он в сгоревшем мониторе. Прошивка 1.4.04 spektrum_pov_2023.

 
  • Лойс +1
Реакции: Олег Поляков