The Beatsqueezer (STM32 sampler)

Блог им. Hypnotriod


Всем привет. Меня зовут Илья, и я хочу поделится с вами информацией о моем проекте, над которым я работаю уже около года.
The Beatsqueezer — это аудио сэмплер основанный на STM32F407 168MHz микроконтроллере. Так-же были использованы CS4334 ЦАП, AD8532 операционный усилитель, Samsung K9F1G08U0M 1 Гбит NAND Flash память (с возможностью замены на K9F8G08U0M 8 Гбит).

Устройство воспроизводит стерео звук с частотой дискретизации 44100 Hz 16 bit. Максимальная полифония 16 звуков.
На борту располагаются 4 ручки (переменные резисторы), один энкодер с кнопкой, 3 светодиода, 16x2 символьный дисплей, DIN5 MDI вход, 3.5 stereo jack для вывода аудио сигнала, слот для micro SD карты, и mini USB разъем для питания устройства и коммуникации с компьютером или другим устройством (например планшет) по USB-MIDI протоколу.
Используется простая и интуитивно понятная навигация по меню при помощи единственного энкодера.
Устройство имеет встроенный bootloader, что позволяет загружать новые версии прошивок с SD карты.
Для ручек реализован «smart knobs» режим, при котором значение фильтра изменяется только тогда, когда положение ручки будет соответствовать эго значению. Обусловлено тем, что каждая ручка может управлять различными свойствами различных фильтров, в соответствии с выбранным шаблоном.
Сэмплы собираются в банки (файлы специального формата) при помощи редактора банков, где каждой из 128 нот соответствует один сэмпл. Сэмплы хранятся в моно 44100 Hz 16 bit PCM. Для каждого сэмпла может быть назначена точка зацикливания (для бесконечного проигрывания звука). Группа, в которой только один сэмпл будет звучать одновременно, останавливая другие сэмплы. Динамическая или фиксированная громкость сэмпла. Игнорирование Note Off сообщения для звуков ударных, эффектов и т.п. Стерео панорама. При установленной точке зацикливания и игнорировании сообщения Note Off сэмпл переходит в «Live looping» режим, при котором первым нажатием клавиши (или пэда) миди контроллера, он начинает играет в бесконечном цикле, а при повторном нажатии — прекращает воспроизведение.
Так-же Beatsqueezer имеет ряд фильтров и эффектов, таких как: Low Pass Resonant фильтр, Ring Modulation, Flanger, Stereo Rotary Vibrato, Limiter, Bitcrusher, Granular Glitch, Delay с Low Pass и High Pass фильтрами, ADSR огибающая для амплитуды и ADSR для Low Pass фильтра. Имеется возможность настроить значения по умолчанию для свойств фильтров в банке.







Основные фичи:
  • CD качество звука 44100Hz 16 bit стерео
  • 16-ти голосная полифония
  • 128 сэмплов на банк
  • до 64 банков (можно и больше, но нужно ли?)
  • 3 светодиода для индикации MIDI сообщений Note On, Control Change и воспроизведение сэмплов
  • 4 ручки
  • 1 поворотный энкодер с кнопкой
  • 16x2 символьный LCD дисплей
  • питание через mini USB разъем
  • MIDI через DIN5 MDI вход и по USB-MIDI одновременно
  • загрузка банков с SD карты
  • от 128Mbytes до 1GByte flash памяти для пользовательских банков
  • встроенный bootloader для обновления прошивки
  • интуитивная и простая навигация по меню, используя только один поворотный энкодер
  • точка зацикливания для каждого сэмпла
  • cut группа
  • динамическая или фиксированная громкость сэмпла
  • игнорирование Note Off сообщения
  • стерео панорама
  • возможность назначить значения по умолчанию свойств фильтров для банка
  • «Smart knobs» режим
  • «Live looping» режим
  • изменяемый MIDI канал (1-16)
  • минимальная MIDI velocity (0-127)
  • стаккато или легато атака для LP ADSR фильтра

Фильтры и эффекты:
  • Low Pass Resonant фильтр
  • Ring Modulation
  • Flanger
  • Stereo Rotary Vibrato
  • Limiter
  • Bitcrusher
  • Granular Glitch
  • Delay с Low Pass и High Pass фильтрами
  • ADSR огибающая для амплитуды
  • ADSR огибающая для Low Pass фильтра

Зачения ручек:
  • 40 — Low Pass Cut Off
  • 41 — Low Pass Resonance
  • 42 — Ring modulation frequency
  • 43 — Ring modulation value
  • 44 — Flanger frequency
  • 45 — Flanger value
  • 46 — Rotary Vibrato frequency
  • 47 — Rotary Vibrato value
  • 48 — Limiter value
  • 49 — Bitcrusher value
  • 50 — Granular Glitch Shift
  • 51 — Granular Glitch Length
  • 52 — Delay High Pass filter value
  • 53 — Delay Low Pass filter value
  • 54 — Delay value
  • 55 — Delay time
  • 56 — Amplitude Attack value
  • 57 — Amplitude Decay value
  • 58 — Amplitude Sustain value
  • 59 — Amplitude Release value
  • 60 — Low Pass filter Attack value
  • 61 — Low Pass filter Decay value
  • 62 — Low Pass filter Sustain value
  • 63 — Low Pass filter Release value

Настройки устройства:
  • channel (1-16)
  • velocity (0-127)
  • mixing volume(0% — 100%)
  • LP envelope (staccato or legato)
  • smart knobs mode (enable disable)
  • reset knobs on bank change (yes no)
  • show pressed note info (yes no)
  • show switched knob info (yes no)
  • banks information: количество занятых банков на максимум (64) и количество занятой памяти на максимум
  • информация про прошивку

Навигация по меню при помощи поворотного энкодера:
  • поворот энкодера для навигации по элементам меню, изменения параметров, поиска файлов и т.п.
  • нажатие кнопки энкодера (кнопка вниз и вверх) для выбора элемента меню, навигации по папкам, подтверждения выбора в диалогах и т.п.
  • удержание кнопки энкодера для выхода в предыдущее меню
  • удержание кнопки энкодера и поворот для быстрой навигации через элементы главного меню, с переходом в подменю после отжатия кнопки (quick mode)

Страничка устройства

Видеообзор и демонстрация работы устройства:



«Семплированная» Флейта:

21 комментарий

avatar
Помойму это просто мегакруто!
avatar
Спасибо :)
avatar
я извиняюсь за серость- а зачем такое нужно?
avatar
Не извиняйтесь. Я вам прощаю ;)
avatar
Я серьезно:) это для музыкантов?
avatar
Ну собственно в целом да, для них самых.
Как-бы я и сам музыкант, и в первую очередь это для меня :)
Комментарий отредактирован 2015-10-22 00:12:44 пользователем Hypnotriod
avatar
Почему не раскрыл все возможности ЦАП-а?
24-Bit, 96 kHz!!!
avatar
Ну такое качество не целесообразно для аудиосэмплера, т.к. он нацелен на живую игру. Поначалу хотел использовать частоту в 48KHz. Но большинство библиотек сэмплов идут в 44,1KHz, т.к. это стандарт, и при ресемплинге в 48K мы уже теряем в качестве исходного сигнала, как не крути.
И опять-же это увеличит размер сэмплов в четыре раза, и собственно уменьшит полифонию в два :)

Но вот для аудиоплеера это было бы круто.
Комментарий отредактирован 2015-10-22 11:39:31 пользователем Hypnotriod
avatar
Загрузил видеообзор устройства.
avatar
великолепный девайс, компактный и главное автономный!
avatar
Спасибо. Ну он не на 100% автономен. Ну т.е. в любом случае требуется MIDI контроллер и внешний источник питания. Но если этот проект доживет до релизной версии, у меня есть планы добавить небольшую клавиатуру на октаву, отсек для батарей и, возможно, небольшой динамик…
avatar
Только сейчас заметил новые видео — отличная работа! Как видно, софт позволяет записывать свои сэмпл банки — это нереально, diy mpc прямо! Скажите, а можно параллельно воспроизвести два сэмпла (простите, я не силен в терминологии — имеется ввиду, когда не отпуская нажатый пад, нажимаешь второй и второй сэмпл не прерывает первый, а накладывается сверху)?
avatar
Да, конечно. До 16 семплов одновременно.
avatar
А можно поитересоваться — как такое вообще реализовывается, в теории? Если что-то очень хитрое или не хотите разглашать тайну, я пойму! Просто никогда не понимал как это работает.
avatar
Ну а вас интересует именно вообще работа в целом, или как данный дивас реализован? Ны семплы в программе собираются в бинарник, где указаны начало, конец, loop point ну и всякие настройки. Этот файл потом скачивается с SD карты во флэш память. Т.к. читать непосредственно файлы с SD карты не очень хорошая затея, из-за, допустим, низких классов(скоростей) SD карт, из-за файловой системы и фрагмнтации данных. Ну а дальше все просто, считываются данные из флэш, складываются, перемножаются на кооффициенты фильтров и сливаются на DAC :) Как-то так…
avatar
Спасибо! Я больше имел ввиду именно реализацию проигрывания двух сэмплов одновременно. Как сложить два pcm сигнала N-ной разрядности, чтобы результирующий сигнал не был срезан и не искажен? Я правильно понимаю там что-то хитрое, какая нибудь децимация или что-то подобное? Или я заведомо усложняю задачу?:)
avatar
Ну т.е. как сложить? Обычной операцией сложения :) Вы ж берете уже подготовленные заранее семплы, приведенные к единой частоте дискретизации. Зачем вам обрезать частоты? Элиасинг возникает при понижении частоты дискретизации сигнала, или изменении скорости воспроизведения например. Ну а всякие там маскировки частот, амплитудный резонанс это дело естественное, и лежит уже на совести пользователя :)
Комментарий отредактирован 2016-01-03 03:15:14 пользователем Hypnotriod
avatar
Не-не, ну вот приведу конкретный пример, экстремальный случай. Пусть есть два идентичных сэмпла — 16 бит, синусоида 440Гц. И, например я их запускаю одновременно (сигналы максимально совпадают по фазе). Если их просто сложить, то результатом будет все та же синусоида 440Гц с амплитудой вдвое большей исходных сигналов. Результирующий сигнал в итоге выйдет за рамки разрядности в 16 бит, а значит какая-то часть сигнала срежется, внося искажение. Т.е. как я понимаю, надо как-то нормализировать сложение, чтобы результирующий сигнал по амплитуде «вмещался» в заданную разрядность. А если это 16 таких сложенных сигналов, то задача усложняется… Или я вообще не так все понял? :)
avatar
Ну будет «перегруз» clipping. Для таких дел есть такая вещь как look ahead limiter. Он у меня реализован с 1 миллисекундой этого самого look ahead времени, т.е. от больших перегрузов он не спасет. Можно понижать уровень срабатывания лимитера — threshold. А вообще никто не смешивает аудио сигналы при 100% громкости. У меня, к примеру, по умолчанию уровень смешения сигналов стоит 65%.
Вообще есть более эффективные методы и алгоритмы для лимитеров и компрессоров, чем тот что я использовал, но я ими не распологаю :)
avatar
Я понял, спасибо.
Очень интересный проект — желаю энтузиазма развивать его дальше.
Комментарий отредактирован 2016-01-04 17:43:12 пользователем honeycomb0
avatar
Спасибо! Это как-раз та самая вещь, которой всегда не хватает)))
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.