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

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

1 7 26

IDiod: (в посте Арс-а "октаву" читать как "декаду")
Да, правильно, перепутал я октавы с декадами...

 

IDiod:
более продвинутый чип
Так, а в чём будет его продвинутость, в конкретно данной ситуации? В смысле, допустим, что со скоростью обработки данных у нас полный порядок. Как можно улучшить сам ЦАП? И, сколько это будет стоить?
Кстати, в той конторе, и МК стоят в три раза дороже. Зато все наименования есть (по крайней мере, в каталоге). Есть даже одинаковые позиции, с разными ценами. Даже интересно стало. Надо будет позвонить.

Не любой
Поясните, пожалуйста свою мысль.
Вы подразумеваете, что число отсчётов не может быть любым (и тогда какое надо), или что не любую периодическую функцию можно представить в виде таблицы?

достаточно затабулировать 12
Он это и имел ввиду. Просто так изложил. Я тоже не сразу понял.

 

2 IDiod
== Вычислять ничего не надо, достаточно затабулировать 12...
++ вы не прочитали пункт 5 начинающийся со слова "считать", пункт 4 пояснял что именно необходимо записать для вычисления ноты.
Не указывалось откуда надо "считать ноту" намеренно, т.к. эту константу можно разместить непосредственно в "партитуре" - поясню:
способ 1 - который предполагаете вы - запись партитуры "условным номером" ноты, затем считывание константы из таблицы - экономит место для записи партитуры, но требует многократного чтения памяти -> медленно.
способ 2 - запись партитуры непосредственно "константой ноты" - требует больше места для записи паритуры, но меньше чтений памяти -> быстрее и не требует "нотной таблицы"(экономия места).
кроме того способ 2 позволяет исполнять ноту с "любой" нестандартной частотой например 440 - 445, 449... т.к. частота ноты(константа) читается непосредственно из партитуры и не ограничена значениями "нотной таблицы".

2 Gregory
я писал что MEGA8(можно48) дешевле 628.
большая оперативка(регистры) позволяет организовать таблицу в оперативке, а не во флеше, а это позволит использовать вместо call/retlw косвеное чтение -> быстрее.
Если ограничить таблицу 128(пик628) значениями, то можно читать её из епрома - тоже быстрее - рекомендую выполнять код в основном в банке1 - ближе к регистрам епрома.

 

AnSi:
медленно
Ну, тут главное, что б в отведённый интервал укладывалось.
Кроме того, теряется большое преимущество - удобная запись музыкальных фрагментов. И это возможно только для "будильника". При управлении через МИДИ, всё-равно придётся переходить на вариант с преобразованием номера ноты.

косвеное чтение -> быстрее
Опять-таки, надо посмотреть "в общей массе".

ограничить таблицу
Так всё-таки, какого размера она должна быть для синуса?

 

Gregory: Так, а в чём будет его продвинутость
В большей разрядности, развитости системы команд, аппаратной поддержке некоторых операций, большей памяти на борту и т.д.
Многие вещи, которые бы потребовали усилий на PIC-е (танцы вокруг нескольких регистров), решатся тривиально.

Gregory: В смысле, допустим, что со скоростью обработки данных у нас полный порядок
Разве такое бывает? И вам не хочется повысить частоту дискретизации (чтобы обойтись без "крутых" фильтров), увеличить количество одновременно звучащих голосов, ввести спецэффекты?

AnSi: Не указывалось откуда надо "считать ноту" .... способ 1 .... способ 2
Тоже не понял вначале. Да, все так.

Gregory: Вы подразумеваете, что число отсчётов не может быть любым (и тогда какое надо), или что не любую периодическую функцию можно представить в виде таблицы?

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

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

 

IDiod:
На практике идут на компромисс -- таблица не на каждую ноту, а на группу нот
Вернулись к началу. Я об этом уже говорил.

Разве такое бывает?
Конечно.
Вот сейчас я сижу в Инете на P-266MMX. Зачем мне тратить штуку вечнозелёных, что бы у меня ДрВэб меньше тормозил? Не стоит это того. Это я к тому, что всегда должен быть разумный компромис, иначе получается ситуация Интел-Майкрософт.
Зачем вбухивать в будильник, или детскую игрушку профессиональные музыкальные инструменты? Я подозреваю, что упомянутые Вами МК стоят даже не в два раза дороже тех же ПИКов. Вы же игнорировали ценовой вопрос.

 

Gregory
== Так всё-таки, какого размера она должна быть для синуса?
++ принято считать что не менее 2отсчётов на период колебаний - т.е. максимальный "шаг по таблице", рассчёт которого приводился выше, не должен привышать половины таблицы - исходя из этого и "наивысшей" требуемой вам ноты можно рассчитать размер таблицы.
следует учесть что при слишком маленькой таблице появятся "шаги" меньше единицы, а это ухудшит точность вычисления ноты - т.к. с уменьшением шага(константы) "вес" младшего разряда увеличивается. Кроме того появится составляющая с дробной частоты отсчёта - 1/2, 1/3, 1/4. --> накладывает ограничения "низшая" частота.
в общем чтоб шаг был меньше половины таблицы, но больше необходимой погрешности установки частоты.

 

AnSi:
не менее 2отсчётов
Не всё так просто с Найквистом-Котельниковым. Посудите сами. Разве можно описАть синус двумя отсчётами?
Полагаю, что мы вернулись к тому, что я предлагал в начале: Оцифровать самую низкую ноту, с той лишь разницей, что, вроде, теперь ясно, как получать из неё "корень 12-й степени" (т.е. весь диапазон). Правда, даже для одной самой-самой низкой ноты, всё-равно, слишком мало места в памяти.

 

Gregory: Разве можно описАть синус двумя отсчётами?
можно.
Один отсчет задает положительную амплитуду, второй отрицательную, растояние между отсчетами — период.
Синус восстанавливается ФНЧ

 

Арс:
растояние между отсчетами — период
Тогда уж - полупериод. Только что-то у меня сомнения, однако...