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

Трёхголосный тон-генератор

1 3 8

IDiod:
Достаточно таблицы из 12-и значений
На мой взгляд, данный путь сложнее. Ведь хранить придётся число машинных циклов. Сперва надо будет "расшифровывать" номер ноты, затем извлекать две части этого числа, потом делить на число октав, затем вычислять сколько грузить в таймер, всё это для 16-ти битных данных, затем загружать результат в младший и старший регистры таймера.
Хотя, для варианта будильника, в целях экономии памяти программ, попробовать стоит. Спасибо за идею.

цифровую обработку аудиопотока
Ну, не. Надо, конечно что-нибудь по-проще. Что-то, кроме "дисторшна", ничего на ум не приходит.

А зачем это надо
Речь идёт не о транспонировании, а именно об небольшом изменении всего строя, в процессе исполнения (речь о МИДИ-варианте). На большинстве клавиатур, имеется колесо, передающее специальную команду. С его помощью "оживляют" исполнение.

 

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

не знаю используется нижепредлагаемый алгоритм где-либо, но придумал сам
воспроизведение мелодии идёт с частотой дискретизации, т.е. порт(цап) меняется по ОДНОМУ таймеру с заданной частотой, например 22кгц (44,1кгц)
значение ЦАПа вычисляется сложением синусоид по числу голосов(хоть 10) и ограничено только скоростью проца. Значение синуса берётся из ОДНОЙ таблицы для ВСЕХ нот.
при таком варианте качество звука должно быть значительно лучше и "двигать" частоты просто и можно огибающую вставить.

 

AnSi:
нужен ЦАП а не фильтры
Возвращаемся к началу.
Существуют различные приёмы звукового синтеза.
Тот, о котором мы говорим (с ЦАПом), называется Вэйвтейбл. Как видно из названия, он использует, заранее записанные звуковые фрагменты. Кстати говоря, данные фрагменты-сэмплы разделены на фазы атаки, поддержки, спада и т.д (у SF2, например, таких фаз - 6). Так вот. Теоретически, для каждой ноты, должен быть записан свой сэмпл. Мало того, для каждого уровня громкости, каждой ноты должен быть записан свой сэмпл. При чём, каждый сэмпл должен быть качественным (читай - объёмным), и, разумеется, для каждого инструмента должен быть свой набор сэмплов. Поэтому, данный способ синтеза является самым качественным (относительно имитации реальных инструментов), но требует больших объёмов памяти. На практике, для уменьшения объёма, используют один сэмпл, для нескольких нот, "воспроизводя" его с разной частотой дискретизации (не путать с частотой дискретизации самого ЦАПа). А получения разных тембров, в зависимости от силы (скорости) нажатия клавиши, добиваются размещением сэмплов в несколько слоёв. Всё это прекрасно описано в в/у книге, которую никто почему-то смотреть не хочет (между прочим, это - не пиратское сканирование, а официальный сайт авторов).
AnSi, так понимаю, Ваш способ именно об этом?
Тот же девайс, который я изготавливаю, собственно и не синтезатор вовсе, а просто - тон-генератор, выдающий меандр. Вот я и спрашиваю, как этот "сухой" звук малость приукрасить. Только и всего.

типа "рычага" на гитаре
Именно! Кажись, я даже придумал, как это реализовать.

так надо по уарту в епром(проца)
Зачем? EEPROM имеет маленький объём, и занят уже UART. К тому же, это - обычные часы будильник, а не музыкальная шкатулка.

 

Кстати, раз уж заговорили о сложении сэмплов, интересует такой вопрос.
Получается, что для избежания переполнения разрядной сетки, при сложении, уровень громкости каждого сэмпла должен быть понижен во столько раз, сколько количество голосов. То есть, для воспроизведения восьми голосов, получаем 5-ти битное значение, вместо 8-ми битного.

 

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

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

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

 

для сжатия динамического диапазона можно недопускать "молчащие" голоса.
т.е. если звучит одна(две...) нота, то работать её(их) всеми голосами, а если пустить несколько голосов с задержкой, то получится фазовый сдвиг - типа "эхо"
получившимися "ступеньками"(голосами) громкости можно имитировать атаку-затухание.
если генерить ШИМом, то он 10-битный.

 

мужыки я не могу найти CC Studio для DSP процессоров с можете помоч

 

Попробовал тут разнести партии на большее количество тонов (транспонировать). Получилась кака. Басовая партия, ниже 3-ей октавы, делает звук хрипящим. Вообще-то, эффект появляется при воспроизведении любых двух партий. Просто на более высоких частотах он не так заметен. Как понимаю, возникает амплитудная модуляция. Есть мысль, что микшировать надо переменные составляющие. Т.е. подключить между выходом МК и резистором микшера по конденсатору.
Кроме того, надо всё-таки, собрать более качественный усилитель.

По поводу сэмплера - здесь.

 

to Gregory
== Т.е. подключить между выходом МК и резистором микшера по конденсатору

-- а вы как микшируете ??? (с этого надо было начинать

 

AnSi:
а вы как микшируете
А я микшировал просто резисторами.
Подключил конденсаторы. Существенно, увы, ничего не поменялось.
Попробую, всё-таки, с усилками поиграться.