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

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

1 2 8

У меня на выходе стояла RC-цепочка. Про искажения сигнала страшно подумать

 

Здесь обсудили расчёт частот музыкального звукоряда.

AnSi:
почему не используете встроенный в 628 ЦАП
Потому, что, как уже говорил выше, это будет не тон-генератор, а сэплер (выше так же давал очень полезную ссылку). Кстати, ЦАПа, в чистом виде, в 628 нет. Мне встречались два пути реализации:
- цифровой код выводится на порты, а далее - резистивная матрица R-2R
- используют ШИМ.
Второй способ, мне кажется более оптимальным. Пока ещё не пробовал.

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

AHTOXA:
звучало очень прилично
Как музыкальная шкатулка, не более. Демка, она и есть - демка.

 

Короче говоря, промежуточный итог следующий:

8-ми битные версии отбрасываются.

Для версии звонка, к часам, (условное название ) придётся пожертвовать памятью мелодий, поскольку таблицы нот (а это 256 строк) придётся разместить в памяти программ, а не описАть директивой EQU, как это сделано в 8-ми битной версии. Парадокс, но сам программный код увеличится не на много. А может, даже, и уменьшится.

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

 

Gregory: Как музыкальная шкатулка, не более. Демка, она и есть - демка.

Может, выложите для сравнения небольшой пример звучания Вашего устройства?

 

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

 

> поскольку таблицы нот (а это 256 строк)
Достаточно таблицы из 12-и значений -- всего для одной октавы, самой низкой. Значения коэффициентов для других октав получаются элементарными делениями на 2. Код немного усложнится. Но вам, видимо, это будет в радость (вы же сами выбрали 628-й для данной задачи ).

> с формантными фильтрами?
Это предполагает цифровую обработку аудиопотока в реальном времени, что опять возвращает нас к вопросу об адекватности выбора.

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

> когда строй смещается).
А зачем это надо? Транспонировать мелодию или ее фрагменты можно в процессе ее подготовки.

 

IDiod: ...самой низкой. Значения коэффициентов для других октав получаются элементарными делениями на 2.
Либо не низкой, а высокой, либо не делением, а умножением . ИМХО.

 

Мелкий: Либо не низкой, а высокой, либо не делением, а умножением . ИМХО.

Не Низкая частота - длинный период. Его и делить

 

AHTOXA: Низкая частота - длинный период. Его и делить
А, ну, тады - да, тады - ой
Просто, мне почему-то запомнилось, что в музыке определения "выше/ниже" относятся именно к частоте, а не к периоду ...

 

AHTOXA:
Может, выложите
Сперва его надо до ума довести.

AnSi:
сэмплер "любит" прямоугольный сигнал
Сэмплер "воспроизводит" заранее оцифрованные и записанные звуковые фрагменты - сэмплы. Поэтому, он "любит" качественный ЦАП и хорошие сэмплы.

вполне реально запихать
Как раз мелодии запихивать не обязательно. У меня поместилось три сложных и одна простая мелодии. Для будильника вполне хватит. Надоест, прошью другие. А вот сэмплы можно и попробовать. Я уже над этим думал.

вы генерите частоты тремя таймерами
Именно так. Только это уже как бы три отдельных мелодии, засинхронизированные между собой, и являющиеся тремя голосами одной песни. Это, что касаемо будильника. Где и когда будет звучать, известно заранее и сведено в таблицу. Главное достоинство, что составить её может человек абсолютно не владеющий программированием, но немного понимающий в нотной грамоте. Что же относительно варианта МИДИ, то там, по приходу команды NoteON, меандр соответствующей частоты появляется на первом свободном канале. Если все каналы уже заняты, он просто игнорируется.