Давно не отписывался. Вообщем, проект продолжает потихоньку развиваться. С чего-же начать...
В прошлой версии был ад с настройками - их было слишком много, чтобы крутить одной крутилкой. Я думал, что это решится набором пресетов, но нет, не решилось - от настроек сильно зависел звук, и сделать набор из нескольких штук было бы не правильно. По мере дописывания разных фич, настроек становилось больше и все из них - важные, поэтому был добавлен экранчик.
Плата была переработана, добавлено меню и вся эта куча настроек теперь может редактироваться. Песеты тоже остались, но теперь не жестко забитые, а настраиваемые. Можно создать группу настроек под разные задачи и быстро между ними переключаться.
Были улучшены практически все алгоритмы. К примеру, после снижения уровня сигнала ниже гистерезиса, сигнал затухает не резко, а плавно, был добавлен вейв-шейпер, итд. Но мне не хватало динамики звука - как не крути, а стример выглядел одним кустом и не было понятно, что на тесле вообще кто-то играет. В идеале, хотелось, чтобы стример пульсировал при каждой взятой ноте.
Таким образом, нужно было сделать детектор начала этих самых нот и усилить атаку. Сначала я пытался сделать это с помощью анализа амплитуды сигнала, но это работало совсем плохо - были либо пропуски, либо ложные срабатывания и их было очень много. Потом я начал изучать тему, и оказалось, что детектор начала ноты - это, до сих пор, сложная нерешенная задача. Даже есть конкурс
MIREX на лучший алгоритм. Тем не менее, я решил сделать лучшее что было более-менее доступно - детектор на основе спектрального потока (
тут есть статья, с подробным описанием как это работает). Судя по конкурсу MIREX он работает успешно в 95% случаев, чего, в принципе достаточно.
stm32f100c8 которую я использовал в первом прототипе даже близко не тянула этот алгоритм, пришлось перейти на stm32f303cb. Этот камень считает производную потока за 5мс, чего вполне достаточно.
Алгоритм заработал, и да, теперь стриммер пульсирует в такт с нотами. Правда, качество звука немного портится - придется искать компромисс.
Кроме этого, хотелось еще сделать фильтр с переменной частотой среза, чтобы можно было подогнать входной сигнал под возможности теслы. Тут была проблема - это довольно сложно в цифровой форме сделать так, чтобы не получить алиасинга. Вообщем, тыкался я и не осилил, поэтому перестраиваемый фильтр будет аналоговым.
Теперь нужно найти какого-то гитариста слегка получше чем я, который поиграет на этом всем и даст обратную связь по поводу того, что работает хорошо, и что можно улучшить, записать демку, вообщем еще кучу всего нужно сделать чтобы это стало продуктом.