Свежие обсуждения
Микроконтроллеры

Вэйвтэйбл синтезатор

1 26

Здесь затронули данную тему. Продолжаем.

IDiod:
динамический диапазон оркестра ужимают
Кто это Вам такое сказал? Это попсню ужимают, а симфонический оркестр как-раз славится своим большим динамическим диапазоном.

а потом результат поделить
Можно, конечно, и так, но процедура получится более длинной.
Собственно я это к тому, что 4-битный источник опорного напряжения, вряд ли, в данном случае, подойдёт в качестве ЦАП.

иногда используют такой трюк
Получим "цифровой дисторшн". Для драм-модуля, наверное, "прокатит", но, для воспроизведения синуса, вряд ли.

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

 

Теперь о самом синусе. Я тут прикинул. Если записывать самую нижнюю октаву, а для других октав, пропускать "лишние" отсчёты, то для одной ноты понадобится отсчётов: Fдискретизации / Fноты. При 22,050 KHz, и 8-ми битного квантования (что, согласитесь, мягко говоря, не очень качественно), для ноты До понадобится: 22 050 / 8,175798916 ~ 2 697 отсчётов. Даже, если выкинуть первые две октавы, получится около 675 отсчётов. А их надо 12 штук...
Можно, конечно, записАть верхнюю октаву, а при более низких, заполнять промежутки усреднёнными значениями, но, по-моему, понадобится довольно сложный алгоритм.

Далее, по поводу "сборки" звуковых данных, для прошивки.
В 7-м номере, за 2005 год, нашёл статью "Речевой информатор". Там автор прилагает программу, которая, из RAWов собирает прошивку. В начале помещается информация о фрагментах (адреса в массиве, названия). Но вот, как там эти адреса шифруются, не сказано. Пытался сам понять. Пока не понял. Может кто разобралсязобрался, или знает другую программу?

 

Почему тема раздваиваится?
Причём в одном разделе.
ИМХО преимущества волновых таблиц - сэмплов, не в основных гармониках (легко поддающихся FM синтезированию), а в реально записанных с источника звука.
Чем шире база сэмплов, тем лучше. Здесь экономить - грех.
PS Сам юзаю древнюю как кал археоптерикса AWE64, на которой предусмотрены слоты расширения для этих ...64. Уж не знаю, до какой цифры предполагалось расширить...

 

если делать "звонок"(не профессиональный инструмент), то достаточно, как было уже сказано , записать одну таблицу например на 256(можно больше) значений, а частоту ноты(любой) вычислять - легко и что важно в данном примменении -быстро. При таблице 256значений в наихудшем варианте получится около 1% гармоник, а при 8битном ЦАПе это сопоставимо с младшим разрядом. Зачем забивать таблицу порожняком(одинаковыми цифрами).
промежуточные значения вставятся сами после аналогового фильтра.
если писать чистый синус и позволяет скорость, то можно записать четверть таблицы.

 

AnSi:
на 256(можно больше) значений
В том-то и дело, что и 256 - довольно большое значение.
Но оставим пока эту проблему в стороне, обратимся к другой.
То, что Вы называете "порожняком", есть значения нот октавы. Я предлагаю так сделать, поскольку плохо представляю, как получить корень двеннадцатой степени. Вообще же, как уже говорил ранее, обычно делают как-раз по Вашему методу. Т.е. записывают сэмпл для каждой октавы, и "гоняют" его, по октаве, изменением "скорости воспроизведения".
Я же предлагаю записАть таблицу синусов для самой низкой октавы, и "гонять" их по всем октавам, также изменением "скорости". Просто, в этом случае, делить надо на 2, что гораздо удобнее. Безусловно, если кто прояснит ситуацию, с делением на корень двеннадцатой степени из двух, то можно будет сэкономить кучу места.

Промежуточные же значения сами не вставятся, поскольку частота ЦАПа - постоянна, и в каждый отсчёт туда надо будет что-то записывать. Но, как рассчитать промежуточные значения (опять-таки, при умножении на два), я примерно представляю.
Кстати, о выходном фильтре. Так понимаю, если собираемся использовать ШИМ, на выходе надо поставить "амплитудный детектор". Как его рассчитать?

По поводу четверти таблицы. Я посмотрел сэмпл синуса, с уровнем 0 дебилов, сгенерированный в СоундФорже. Нулевой уровень там - 80h, а значение 00h не наблюдается вовсе (что, кстати, можно использовать, как "флаг" окончания сэмпла).

 

И всё-таки, как подготовить прошивку с сэмплами?
Пока речь идёт о синусе, можно его и вручную записывать (кстати, кто подскажет удобный хекс-редактор?). Но, когда встанет вопрос о сэмплах... Даже, если удастся понять адресацию, в в/у программе, то, насколько понял, никакой информации о фазе сэмпла она не содержит. Опять-таки, если речь идёт о драм-аппарате, или о том же речевом информаторе, там это не надо. А если идёт о нормальном сэмплере, даже хотя бы об упоминавшейся "музыкальной шкатулке", без этой информации не обойтись.

 

По ходу вопрос может кто занимался воспроизведением *.mid файлов ?

 

Diko:
занимался воспроизведением
В каком смысле? К ранее упомянутому тон-генератору, я подцепил миди-интерфейс и воспроизводил ноты через него.
Только прошу, если что-нибудь хотите обсудить по этой теме, создайте отдельную ветку.

 

По ходу вопрос может кто занимался воспроизведением *.mid файлов ?

 

уп-ссс, глючки.
ОК. Gregory спасибо.