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

maxlab

★✩✩✩✩✩✩
9 Май 2021
24
12
Ну правильно... фастЛед не врет :). Ну чуть-чуть... 80гц - истинная частота в лупе. Меандр инвертированием ноги получается при каждом проходе
 
  • Лойс +1
Реакции: bort707

kDn

★★★★★★★
18 Ноя 2019
3,946
2,308
Ну правильно... фастЛед не врет :). Ну чуть-чуть... 80гц - истинная частота в лупе. Меандр инвертированием ноги получается при каждом проходе
Я хз какая у вас частота в лупе, у меня к примеру простейший код вида:
C++:
    static uint32_t cnt = 0;
    static unsigned long cur_ms = millis();
    if(millis()>cur_ms+1000){
        Serial.printf("cnt=%u, fps=%d\n", cnt, FastLED.getFPS());
        cnt=0;
        cur_ms = millis();
    }
    cnt++;
дает при включенной ленте:
C++:
02:06:42.410 > cnt=219, fps=34
02:06:43.413 > cnt=208, fps=35
02:06:44.422 > cnt=181, fps=34
02:06:45.428 > cnt=202, fps=36
02:06:46.435 > cnt=207, fps=34
02:06:47.444 > cnt=192, fps=36
и
C++:
02:07:42.854 > cnt=7347, fps=45
02:07:43.856 > cnt=7394, fps=45
02:07:44.856 > cnt=7324, fps=45
02:07:45.858 > cnt=7348, fps=45
02:07:46.858 > cnt=7369, fps=45
02:07:47.859 > cnt=7358, fps=45
при выключенной, как следствие - есть расчет на выключенной несколько некорректный. но на включенной - все более-менее сходится
Но к FPS вывода на матрицу у нас это никакого отношения не имеет, если что :)

Вставьте подобный код себе и покажите вывод :), а то осциллограф это замечательно, но как я уже сказал без описания условий замера - мне ни о чем не говорит :)
 

kDn

★★★★★★★
18 Ноя 2019
3,946
2,308
@maxlab, спасибо теперь вижу :), ну с учётом того что вы ещё разложение Фурье делаете - результат хороший, буду иметь в виду ;), есть у меня некоторые задумки :).
 

bort707

★★★★★✩✩
21 Сен 2020
1,120
323
у меня к примеру простейший код вида:
интересно, у вас все интервалы в проекте таким образом измеряются или вы это впопыхах написали? :)
C++:
if(millis()>cur_ms+1000){
Хотя грамотный программист даже для примера так не написал бы :)
 
Изменено:

maxlab

★✩✩✩✩✩✩
9 Май 2021
24
12
@maxlab, спасибо теперь вижу :), ну с учётом того что вы ещё разложение Фурье делаете - результат хороший, буду иметь в виду ;), есть у меня некоторые задумки :).
У меня тоже есть :)... на esp8266. Только надо догадаться как внешние данные с 24bit дельта-сигма кодека через DMA на обработку гнать через шину i2s. На ESP32 примеры видел, на 8266 нет. И в API никаких упоминаний... Хоть STM32F4XX бери. Досадно... :)
 

maxlab

★✩✩✩✩✩✩
9 Май 2021
24
12
@bort707, неожиданно... :) вроде продвинутое core внутри стоит. Скорее всего API не опубликовали, а энтузиасты еще библиотеки не вскрыли. имхо
 

kDn

★★★★★★★
18 Ноя 2019
3,946
2,308
Хотя грамотный программист даже для примера так не написал бы :)
Расслабтесь, у меня вообще образования программиста нет, так что я могу писать как хочу, куда хочу и совершенно по этому поводу не заморачиваться. Потому как могу. А вы, на мое предложение включили мороз, потому как не можете))). См. ниже:
Ну так и напишите свой код для расчете FPS, если вы в библиотечном не уверены))).
:)
 

bort707

★★★★★✩✩
21 Сен 2020
1,120
323
@maxlab, при нынешних ценах на есп32 и 8266 начинать новые проекты на последнем нет смысла, ядро есп32 устойчивее и богаче по функционалу

На самом деле, на 256 пикселях не вижу никакого смысла связываться с ДМА.

потому как не можете
сойдемся на этом, пусть вам будет приятно. :)
 
Изменено:

novvel

★★✩✩✩✩✩
29 Сен 2018
318
75
А можно как то прикрутить фоновую подсветку в оригинальную прошивку от гайвера??))
 

kDn

★★★★★★★
18 Ноя 2019
3,946
2,308
@bort707, мне не для визуализации это интересно. Аутентификация и управление голосом. Оказывается не все так печально... https://github.com/espressif/ESP8266_MP3_DECODER/blob/master/mp3/driver/i2s_freertos.c
Можно разобраться.
Оперативной памяти скорее всего не хватит на что-то более-менее интересное/сложное. Для видео/звука лучше сразу ориентироваться на esp32, более того есть уже готовые модули esp32 со встроенной дополнительной SRAM. Просто для понимания - из 80кб доступно где-то 40кб (в Arduino SDKv3.0.0 потенциально под кучу еще можно 16кб получить, но я это еще не тестировал). Но вообще можете попробовать, задача достаточно увлекательная сделать что-то в заданных ограничениях :)
 

maxlab

★✩✩✩✩✩✩
9 Май 2021
24
12
@kDn,ну... если оперативы не хватит, у меня для этого есть микрочиповские spi sram. С адресацией придется повозиться конечно, но матричные данные крутить там - самое то
 

andruxoidus

✩✩✩✩✩✩✩
7 Июл 2021
5
0
Может ли кто нибудь подсказать где в скетче "зашифрован" диапазон отображаемых частот? Также нигде не нашел параметры отображаемых "столбиков", теоретически звуковой диапазон 20Гц-20кГц, тогда при 16 столбиках на жк экране примерно 1250Гц в каждой полосе? Интересует возможность сильно заузить отображаемый диапазон, например 1й столбик 0-5Гц, 2й столбик 5-10Гц, 3й 10-15Гц и так далее. это примерно, интересует любая подобная возможность и любой минимально возможный шаг для версии на экране 1602. за вознаграждением можно сюда
 

kDn

★★★★★★★
18 Ноя 2019
3,946
2,308

@andruxoidus, правильно делать логарифмическую зависимость, а не линейную.

А, блин... Вам для вашей задачи... Так я же вроде в теме сказал чего делать.
 

andruxoidus

✩✩✩✩✩✩✩
7 Июл 2021
5
0
Чего делать я и сам знаю, знал бы я как это сделать то и вопросов не было...
 

novvel

★★✩✩✩✩✩
29 Сен 2018
318
75
@andruxoidus, частоты там "зашифрованы" в тонах, я там делал прошивку для версии под ленту, погляди мой диапазон до 7кГц, только я хз, он так же сделан в прошивке для дисплея или нет. Ниже 30-50гц работать не будет, сразу говорю.

C++:
// массив тонов, расположены примерно по параболе. От 80 Гц до 16 кГц
byte posOffset[11] = {2, 3, 4, 6, 10, 16, 25, 40, 55, 70, 80}; //под 10 полос с микрофоном до ~7кГц // {2, 3, 4, 6, 10, 16, 20, 25, 37, 55, 75} - 6кГц //{2, 3, 4, 6, 10, 16, 25, 55, 70, 85, 120}-9
//byte posOffset[17] = {2, 3, 4, 6, 8, 10, 12, 14, 16, 20, 25, 30, 35, 60, 80, 100, 120}; //оригинал AlexGyver для 16 полос
// ---------------------НАСТРОЙКИ ---------------------------
 
  • Лойс +1
Реакции: andruxoidus

kDn

★★★★★★★
18 Ноя 2019
3,946
2,308
Чего делать я и сам знаю, знал бы я как это сделать то и вопросов не было...
Как собрать нужное число семплов за промежуток времени? Достаточно написать функцию в цикле читающую аналоговый пин с рассчитанной задержкой между чтениями. Далее полученный массив данных используйте для разложения на гармоники.