Ну такая «с понтом экономия» на лог. элементах что-ли :) Хотя компилятор в обоих случаях выдает одинаковое количество используемых ячеек. Так что ваш вариант понятнее.
Я уж, наверное, с пол года не ковырял MAX и Verilog :)
Заганьбили, замордували вороженьки! )))
Я уже переписал код, с учетом всех «пожеланий» с хабра. Модуль похудел на 25%. Перевел все на сдвиговые регистры, добавил этот самый мажоритарный элемент для rxIN, счетчики теперь идут сверху вниз к нулю. Короче на днях буду переписывать статью.
Ну это уже конечно зависит от задач. Можно реализовать свой буффер, например кольцевой, и свою систему генерации прирываний. Просто у меня главная проблема это количество макроячеек в Max II EPM240, их там всего 240 :) Особо не развернешься…
Ну будет «перегруз» clipping. Для таких дел есть такая вещь как look ahead limiter. Он у меня реализован с 1 миллисекундой этого самого look ahead времени, т.е. от больших перегрузов он не спасет. Можно понижать уровень срабатывания лимитера — threshold. А вообще никто не смешивает аудио сигналы при 100% громкости. У меня, к примеру, по умолчанию уровень смешения сигналов стоит 65%.
Вообще есть более эффективные методы и алгоритмы для лимитеров и компрессоров, чем тот что я использовал, но я ими не распологаю :)
Ну т.е. как сложить? Обычной операцией сложения :) Вы ж берете уже подготовленные заранее семплы, приведенные к единой частоте дискретизации. Зачем вам обрезать частоты? Элиасинг возникает при понижении частоты дискретизации сигнала, или изменении скорости воспроизведения например. Ну а всякие там маскировки частот, амплитудный резонанс это дело естественное, и лежит уже на совести пользователя :)
Ну а вас интересует именно вообще работа в целом, или как данный дивас реализован? Ны семплы в программе собираются в бинарник, где указаны начало, конец, loop point ну и всякие настройки. Этот файл потом скачивается с SD карты во флэш память. Т.к. читать непосредственно файлы с SD карты не очень хорошая затея, из-за, допустим, низких классов(скоростей) SD карт, из-за файловой системы и фрагмнтации данных. Ну а дальше все просто, считываются данные из флэш, складываются, перемножаются на кооффициенты фильтров и сливаются на DAC :) Как-то так…
Спасибо. Ну он не на 100% автономен. Ну т.е. в любом случае требуется MIDI контроллер и внешний источник питания. Но если этот проект доживет до релизной версии, у меня есть планы добавить небольшую клавиатуру на октаву, отсек для батарей и, возможно, небольшой динамик…
Ну такое качество не целесообразно для аудиосэмплера, т.к. он нацелен на живую игру. Поначалу хотел использовать частоту в 48KHz. Но большинство библиотек сэмплов идут в 44,1KHz, т.к. это стандарт, и при ресемплинге в 48K мы уже теряем в качестве исходного сигнала, как не крути.
И опять-же это увеличит размер сэмплов в четыре раза, и собственно уменьшит полифонию в два :)
Я уж, наверное, с пол года не ковырял MAX и Verilog :)
Я уже переписал код, с учетом всех «пожеланий» с хабра. Модуль похудел на 25%. Перевел все на сдвиговые регистры, добавил этот самый мажоритарный элемент для rxIN, счетчики теперь идут сверху вниз к нулю. Короче на днях буду переписывать статью.
Вообще есть более эффективные методы и алгоритмы для лимитеров и компрессоров, чем тот что я использовал, но я ими не распологаю :)
И опять-же это увеличит размер сэмплов в четыре раза, и собственно уменьшит полифонию в два :)
Но вот для аудиоплеера это было бы круто.
Как-бы я и сам музыкант, и в первую очередь это для меня :)