Автор Тема: Цифровое аудио своими руками (интерфейсы, эффекты, процы и подобное).  (Прочитано 15929 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Ок. Простой вопрос. Как мне с помощью ардуины прочитать импульс (ок, пусть даже всего 700 сэмплов - это 2800 байтов) с карты памяти и передать его в DSP, при том что у ардуины всего 2.5кБ оперативной памяти, из которой часть будет занята под уже существующие переменные?

А по нормальному - пользователь должен отдать файлик WAV на карту памяти - а микроконтроллер должен уже его прочитать, переконвертить в таблицу коэффициентов и передать в DSP. - И опять же мы упираемся в то, что чтобы конвертировать файлик - его нужно загрузить его в оперативную память микроконтроллера - он туда просто не влезет. ))

Второй момент. Мощь и жирнота - сколько стоит нынче? RPi Pico - 5 баксов оф.цена (у нас по крайней мере за столько продают официальные ресселеры), ESP32 на али - 4,5 бакса? а если брать "core module" смд-шный - то там вообще цена 3 бакса в среднем. При том, что ардуина нано стоит примерно те же 3 бакса в китае.
« Последнее редактирование: Июля 08, 2021, 12:04:08 от Tander »

Оффлайн akl

  • Живу на форуме
  • *******
  • Сообщений: 8114
  • Репутация: +2265/-69
  • не шарю ваще
Ок. Простой вопрос. Как мне с помощью ардуины прочитать импульс (ок, пусть даже всего 700 сэмплов - это 2800 байтов) с карты памяти и передать его в DSP, при том что у ардуины всего 2.5кБ оперативной памяти, из которой часть будет занята под уже существующие переменные?
а если по кускам? :hmmm:

... и добавил:

RPi вряд ли найдутся желающие повторять, там надо с каким-то дополнительным софтом страдать наверно, я вот ваще этих питонов в глаза не видел ни разу и не знаю что это за звери.

ЕСП уже лучше - можно ардуино использовать. но все равно избыточно как-то. есть же например ардуина мега - там 8кб
« Последнее редактирование: Июля 08, 2021, 12:16:32 от akl »

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Ок. Можно пробовать по кускам. А стоит ли?
Разница на уровне 1-2 долларов между ардуиной и ESP32 той же, и 2-3 доллара между ардуиной и RPi Pico. Да и ардуине нужно будет покупать конвертор уровней (да, всего за бакс, но все же) с 5 на 3.3в.
ESP32 может программироватся с того же IDE что и ардуина, после установки нужного "плагина".


... и добавил:

Я на ардуине пробовал - написав только базовые функции типа подключение нужных библиотек и функции конвертирования параметров с двух энкодеров в понятные для DSP команды, инициализирование карты памяти и чтение списка файлов на ней - я выюзал 70% доступных ресурсов. А добавив простейший UI на дисплее от нокии - я выюзал 80% ресурсов, и борда начала время от времени подвисать (памяти не хватало под динамические переменные - например если вдруг список файлов на карте памяти стал больше). Конечно - ардуино-мега может частично решить проблему - но ее габариты... ее ж даже в 0473 гаинту то впихнуть трудно... Да, в китае есть в меньшем корпусе - я юзал, пробовал - в целом норм. Но - она дороже ESP32 и RPi Pico, и опять же - конвертеры уровней (5в->3.3в) для работы с картой памяти и для работы с i2c (DSP, экранчик и может что-то еще).

Небольшое сравнение возможностей трех платформ.
2387787-0

RPi Pico - это обычный ARM-микроконтроллер, как STM32 или ESP32. На простом ядре Cortex-M0+. Ардуины кстати тоже начали делать на подобном ядре.
Есть SDK под С, которое ставится и настраивается вполне не сложно, есть различные редакторы и прочее.
А Python - это просто другой язык программирования, на котором можно хоть в блокноте писать (хотя есть куча простых редакторов с подсветкой синтаксиса и тп). И потом "как на флешку" - написаный скрипт закидывается на память контроллера и работает. Python - это мой основной язык, на котором я работаю работу - поэтому я взял его как альтернативу для С. У него очень простой и понятный синтаксис, плюс он значительно более компактный. Для сравнения - для того чтобы запустить полноценный веб-сервер на C - нужно подтянуть 1-2 библиотеки и написать примерно 100 строчек кода. Та же задача на Python - 1 Библиотека и 10-12 строк кода (а в некоторых случаях и того меньше)
« Последнее редактирование: Июля 08, 2021, 12:49:25 от Tander »

Оффлайн akl

  • Живу на форуме
  • *******
  • Сообщений: 8114
  • Репутация: +2265/-69
  • не шарю ваще
вроде атмеги могут и от 3 вольт работать. но не факт что на 16 мгц, возможно придется на 8 переключать.

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

Есть SDK под С, которое ставится и настраивается вполне не сложно
для потенциального того, кто спаял пару примочек, помигал светодиодом ардуины и решил повторить этот проект - "не сложно" понятие относительное  :lam:
а с другой стороны тот, кто непринужденно ставит и настраивает себе сдк - сам себе подберет микросхему по вкусу.
« Последнее редактирование: Июля 08, 2021, 13:31:46 от akl »

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Да, ардуино про мини есть в версии 3.3в, но работает только на 8мгц. Именно на ней я и пробовал делать тестовый проект - т.к. маленькая и вроде бы все умеет... Но - не вытянула от слова совсем. ))

Интересно - под что изначально заточен питон? )) Т.к. любой учебник начинает фразой - "Python - высокоуровневый язык программирования общего назначения" и честно - я пока не встречался с задачей, для которой Python не справился бы, а задачи у меня разные.

Ну такое, мне в целом - без разницы - может быть С. ))

Оффлайн yami

  • Опытный
  • ****
  • Сообщений: 750
  • Репутация: +4091/-1005
  • GuitarPlayer.Ru fan!
Кстати, обратил внимание, что большая часть тем о "IR-кабсимах" у нас на форуме заглохла без какого либо конкретного окончания/проекта. Либо людям это не нужно, либо - не хватает умений-знаний для завершения, либо - просто заканчивают проект, но переводят его в коммерческий.
 
И вот я задумался - а все же наверное хорошо бы иметь проект открытый для повторения, и может кому-то это все же и будет интересно.
Я вот уже почти месяц регулярно на большой сцене играю на своем прототипе, но останавливаться на этом не собираюсь... ))
Мне интересно. Но готового проекта под сборку нет.

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Будет, все будет. :)

... и добавил:

Ну в общем... Ок, идем в сторону ESP32 c Cи в качестве основного языка программирования. )

Но - сначала железо.

Под задачу были заказаны SMD-модули ESP-WROOM-32D c 8 и 16мБ памяти на борту, а так же простенький программатор для них - чтобы можно было программировать данный прибор без "впаивания/выпаивания". В качестве DSP - DSPmini с aliexpress c ADAU1401 на борту - готовая плата.

По быстрому нарисовал схему, и прикинул плату - открытый проект тут - https://oshwlab.com/Aiefremov/adau_main_board_gainta_bs13

В качестве корпуса - Gainta BS13 - она чуть-чуть побольше, чем G0124, что в данном случае очень критично.
Плата двухсторонняя, разведенная автороутом. Если кто хочет и может помочь развести более "по-человечески" - приглашаю в проект по ссылке выше - достаточно зарегистрироваться - и можно развлекаться.  :p Например убрать дорожки с области антены ESP32 - т.к. они будут сильно влиять на радиус связи - если мы вдруг будем хотеть добавить какой-то www-сервис еще к прибору. ))

Кстати - большинство китайских готовых плат на али - сделаны именно автороутом, и ничо, даже работает. )

Важный момент - пока что все указывает что плата в любом случае останется двухсторонней - так что данный онлайн ресурс был выбран потому, что позволяет "передать" плату на китайское производство (JLCPCB.com) без каких либо проволочек, где за 5 плат с меня взяли 2 бакса + доставка (4 бакса). Это куда предпочтительнее, чем возится с ЛУТ и прочим как по мне. Даже если у вас останутся платы - можно подарить другим форумчанам в вашем регионе, которые будут заинтересованы проектом.
Ну и как ни крути - но почти все компоненты - SMD в размере 0805 (это тот размер, который еще можно вполне успешно паять обычным паяльником с тонким жалом). Если есть желание - можно обсудить какие из элементов стоит перевести на THT - может будет попроще с платой тогда. ))

С одной стороны платы (SMD-сторона) - у нас все SMD, ESP32, экран и энкодеры (экран стоит "над" ESP32. в сумме - они получаются ровно такой же высоты как корпус энкодера (с небольшим зазором на прокладку между ними)) и светодиоды, кнопка.
С другой стороны (THT-сторона) - все функциональные разъемы и колодки, так же колодка под плату ADAU и кардридер. При предварительной проверке - толщина платы с со всеми элементами по SMD-стороне - имеет высоту около 7мм. Т.е. в "пустые" места по стороне THT - как раз помещаются необходимые разъемы (Jack-вход, XLR-выход, стандартный 12мм разъем питания). Входов - на плате выведено 2, выходы - все 4. По входу добавлен буфер на ОУ, который питается от входного питания 9в.

ESP32 соеднияется с ADAU через I2C, и I2S (только на получение данных от адау - например если мы захотим добавить тюнер). Так же выведен специальный разъем, чтобы можно было с программатора подключиться (прокинуть проводки) к уже впаяной ESP32 и изменить прошивку.

Так же - кроме двух энкодеров добавлен дополнительный элемент управления - кнопка. На нее можно повесить включение-отключение какой-то из функций в программе DSP-процессора. Изначально хотелось сделать их две - но ног у ESP32 не хватило.

Комментарии, обсуждение, предложения - приветсвуются. Сделаем доступный толковый амп-каб сим вместе!


... и добавил:

может данный пост вынести в отдельную тему?
« Последнее редактирование: Июля 09, 2021, 15:07:49 от Tander »

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Проект не умер, просто у меня мало времени. ))
Пришли платки под ESP32 + адау. Собрал прототип - обнаружил ошибку в разводке платы (поправил, ссылка не изменилась, если что). Заказал новые платы - тоже пришли уже. Потихоньку хочу дособирать уже более рабочий прототип.
Из проблем - Пока не влезает по высоте в Gainta B013/BS13 - Я хотел в качестве выхода использовать XLR разьем, и вот толщина всего не позволяет закрыть корпус.  Прототип все равно дособираю на уже имеющиейся плате, и попробую сделать небольшую, на пару мм, проставку между корпусом и крышкой из плекси или еще чего.

Параллельно изучаю как запустить DSP-движок на самой ESP32 (тогда можно будет либо вообще обойтись чем-то вроде ESP32-A1S c аудиокодеками на борту, либо купить отдельные кодеки - и ESP и кодеки - уже заказаны и едут.) Если качество будет адекватным - ну тогда буду двигаться в этом направлении, т.к. ADAU с платкой - и места занимает не мало, да и к цене добавляет ощутимый вес. ))

Кстати - тема все меньше имеет смысл, т.к. китайцы впереди планеты всей. Недавно появился прибор под названием Famma FS07 - https://www.youtube.com/watch?v=CkLvkAa1Mqs&ab_channel=FlammaInnovation
Вполне неплохой кабсим (к тому же умеющий стерео с разными импульсами на канал), с возможностью загрузки внешних IR, за 88 баксов.... Так что, для себя я наверное все же доведу до конца (да и мне просто интересно), а там уже - видно будет. ))
« Последнее редактирование: Августа 09, 2021, 16:10:00 от Tander »

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
Последние пару месяцев много основной работы, так что кабсиму внимания уделяю меньше. Но из того что имеем на сегодняшний день -

2393329-0

Вполне рабочий прототип.
По железу -
  • ESP-Wroom-32D, c 16мб флеша. (а вот пусть будет на всякий случай) В качестве основного управляющего элемента.
  • ADAU1401 - готовый модуль dsp-mini. их полно на али в вполне адекватной цене. Может со временем сделаю свой модуль, более компактный.
  • Двухканальный буфер на ОУ
  • 2 энкодера  - крутилкой выбираем громкость усилителя или кабинета, кнопкой - включаем-выключаем его. Крутя энкодер в "нажатом" положении - выбираем из списка импульс кабинета или модель усилителя (в зависимости от того, какой энкодер нажат). Одновременное удержание обоих энкодеров в нажатом положении больше 2х секунд - приводит к выключению выходов (mute). В верхней, правой части платы - имеется дополнительная кнопка которая вклюает-выключает сатурацию/насыщение/подгруз оконечника.
  • Экран 1.3 дюйма, OLED
  • MicroSD card reader
  • 2 моно входа (или 1 стерео). Пользую пока один. Второй можно вывести как вход AUX для того, чтобы играть с минусом например.
  • Симметричный (балансный) выход на XLR, и два выхода небалансных в принципе даже напрямую из адау - вполне неплохо тянут наушники. Подумаю что с ними делать еще.
  • ESP32 подключена на выход i2s дополнительно - т.е. на нее можно отдать звук в цифре и что-то с ним делать. Я думаю реализовать тюнер софтовый средствами ESP32

Из функционала на сегодняшний день:
  • 2 модели басовых усилителей. Один - SVT4PRO style - из-за ограниченных возможностей адау это именно "похожий" по звуку усилитель, а не полноценная эмуляция усилителя. Но звучит очень неплохо. Второй - SWR SM-400 Style - тоже просто похожий по звуку усилитель. При сравнении в лоб с "железным" усилителем (в наличии и SVT4PRO и SWR SM400) - отличие конечно же есть, но в миксе это отличие уже малозаметно, и в целом - звучит очень похоже.
  • 4 встроенных  импульса басовых кабинетов на родном флеше - 2x10 (кабинет собственной конструкции), Hartke 410XL, Ampeg 610hlf,  Mesa Boogie Subway 2x12
  • При наличии карты памяти - список доступных импульсов будет строится на базе того, что на карте памяти. Выбранный импульс конвертируется из Wav и записывается на флеш контроллера как "пользовательский" к уже существующим четырем. При извлечении карты - работаем с импульсами на флеше, включая 1 пользовательский.
  • возможность отключать подгруз оконечника. Это не перегруз/драйв в общепринятом смысле. Это мягкий клиппинг частотнозависимый (разные частоты режутся с разной интенсивность.), в целом - дает гармоническое насыщение достаточно красивое. Мне понравилось - оставил и вывел управление отдельной кнопкой.

Так что такие вот дела. Доделаю еще усилтель марк-баса и галлен-крюгера и в целом басовую версию можно будет считать законченной. И можно будет приступать к работе с гитарной версией. Там будет так же 4 "стиля усилителя" - Фендер, маршал, меса, сло, и штук 8 импульсов в комплекте соответсвующих.

Из текущих проблем - пока чот не влазит в запланированный корпус (Gainta B013). Боюсь что придется все же Gainta G0473 использовать (тогда экран получается по центру корпуса почти, кнопки-крутилки внизу, а вверху по бокам - разъемы все нужные).

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
мдя... в мелкую гаинту (B013 - которая чуть-чуть побольше чем народная G0124) - не влазит... а конкретно - не влазит XLR. Сумма высоты корпуса энкодера, толщины платы (1мм), и минимального расстояния от платы, чтобы разъем XLR не касался никаких контактов (около 0.5мм) и потом собственно сам корпус XLR разъема (при том что я взял достаточно "худенький" вариант) - больше, чем высота корпуса на почти 3мм. Т.е. даже "углублять крышку" нет никакого смысла... а проставку между крышкой и корпусом - я честно не хочу так заморачиваться. )

Так что - корпусом будет  GAINTA G0473. Кстати - экран выпаял и перенес его на шлефе чуток выше - более гармонично будет смотреться в корпусе.
Более-менее определился с дизайном готового девайса, цвета - поподбираю еще, но то, что будет двухцветный - это точно. ))
2394020-0 2394022-1 2394024-2

Бóльший по размеру корпус позволяет реализовать дополнительные хотелки:
1. вход AUX (для внешнего устройства - метроном, телефон, и тп). Пока что моно, но думаю что если заморочится о внешний ADC - то можно и 2 инструмента подключать одновременно, и стерео-AUX иметь. для меня AUX на подобных приборах - это возможность позаниматся под минус, метроном или еще как.
2. Заюзал все выходы - 1-2 используются для организации "симметрии" на XLR, 3 - выход "Thru" - без какого либо DSP-процессинга - только конвертация в цифру и назад (чтобы задержка совпадала с главным выходом). 4ый выход - отдается на усилитель для наушников на MAX4410 - опять же - для того, чтобы можно было без проблем поиграть под минус c нормальным звуком, никому не мешая. Входной сигнал - моно, но на оба наушника. ))

Видео работы UI -
 

https://www.youtube.com/watch?v=DwJQXNcv-uU

Оффлайн ГитарДжет

  • Завсегдатай
  • ***
  • Сообщений: 333
  • Репутация: +118/-21
это очень круто друг!

Оффлайн Tander Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3731
  • Репутация: +475/-0
    • Efremoff
В общем - поиграв на прототипе с пару месяцев, я понял что не хватает еще пары важных опций.
1. Насыщением "оконечника" хотелось бы управлять.
3. EQ усилителя тоже хочется управлять.

В итоге прибор был пределан на 3 крутилки - Amp, Saturation, Cab
Стало проще с управлением - короткое нажатие на каждую крутилку соответсвенно выключает свой эффект, а кручение крутилки - меняет громкость эффекта. В случае с Saturation - был задйствован более мягкий клиппинг, который подмешивается к чистому сигналу. Можно накрутить от "вообще ничего" до "вполне клевый перегруз". ))
Длинное нажатие на AMP - ведет к выбору усилителя.
Длинное нажатие на Saturation - ведет к возможности регулировать EQ выбранного усилителя.
Длинное нажатие на Сab - ведет к выбору кабинета.

Длинное нажатие на AMP + Saturation - выключает DAC - т.е. получаем Mute выхода. В планах - на длинным нажатии Saturation + Cab - cделать тюнер - ESP32 соеденина по i2s c Адау - т.е. можно получить цифровой звук на ESP и с ним работать. Пока еще не пробовал.

Видео как работает UI. В ближайшее время выложу сэмплы и обновлю проект на гитхабе. ))


https://www.youtube.com/watch?v=h_cJ5471jJI