Сейчас появились дешевые полифонические синтезаторы HOLTEK. Стоят от 40 центов (бескорпусные) до 2,5$ - корпусные навороченные (стерео, и т д). Обычные в дипе16 - 70 центов. Шести или шестнадцатиголосые, 16...48 инструментов (в том числе ударные) 16бит 48кГц ЦАП(ы) внутри. Бывают двух видов: HT38A2 (HT38A5) - с зашитыми 12ю мелодиями. От контроллера только приходят команды: играть X мелодию, остановить, громкость Y. Можно и без контроллера, привесить кнопку. HT38A1 (HT38A3) - синтезатор, которому с микроконтроллера льются ноты (протокол - упрощённый MIDI). То есть - сами мелодии лежат в ОЗУ/ПЗУ/флеши микроконтроллера или отдельно, и контроллер периодически проверяет занятость синтезатора и пхает ему новую ноту / пачку нот. Документацию и конвертор мелодий (из MIDI) поставщик микросхем даёт (не помню, российская фирма какая-то), но он убогий. Свой писать - месяцев 5 ушло, но сделан мощный редактор. Дешевый вариант (dip16, без кварца, моно) звучит так: http://www.gals.com.ua/files/all.mp3.
мне качество звука не понравилось.... интересно есть ли достойные по звучанию? ) эти синты такое ощущение для будильников создаваливь, не для музыки )
по идее лучше держать в памяти МК то что нужно выводить.. а с МК отдавать все это на нормальный ЦАП для звука предназначенный...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!» В этом мире меня подводит доброта и порядочность... "двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Duhas не совсем ясно, какие данные держать в памяти, не разъясните ?
vadinator спасибо за ссылки, щас будем изучать )
Кстати знает ли кто-нибудь новые микрухи которые выпускаются сейчас? конечно можно найти старую ямаху, но я думаю есть смысл поискать более современные ) хочется быть в курсе новинок =)
Последний раз редактировалось mtbiker 13 мар 2010, 12:12, всего редактировалось 1 раз.
ну тебе же синус нужно на выходе ? ) таблицу значений держать в памяти.. и выгружать в ЦАП...
вопрос в том что тебе нужно.. какие звуки. синус с переменной частотой или модулированный синус... чем модулирвоанный... хотя те ИМС для синтов вполне вариант наверное...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!» В этом мире меня подводит доброта и порядочность... "двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Duhas не только синус, нет это конечно вариант, если не ошибаюсь у Белова в книге про авр, такой метод ) просто хочется в реальном времени менять эти параметры... а этот вариант получится как дешёвая "самоиграйка" типо только предустановленные звуки... но всё равно на первых порах и это не плохо )
Ну управлять частотой сэмпла, относительно не сложно...надо в подпрограмму обработки прерывания, добавить сумматор с большим количеством разрядов (24-32 бит) и выводить на ЦАП - данные из таблицы используя старшие (7-8 бит) в качестве адреса... реализовать управление громкостью, можно либо побитным сдвигом данных (в сторону младших разрядов), перед выводом в цап...или использовать, разные волновые формы (в сложных звуках, форма волны зависит от амплитуды)
Роботы, уже среди нас... Прошу прощения за аватар, никак схему динамической индикации не могу настроить :)
дааа ) причем довольно не плохо ) Хочу клавиатуру подключить к нему... Кто может подсказать как подрубить к нему моном (то что в первом посте) или как припаять миди i/o (это вроде на аурдуино.сс где-то было)
void loop() { // The loop is pretty simple - it just updates the parameters for the oscillators. // // Avoid using any functions that make extensive use of interrupts, or turn interrupts off. // They will cause clicks and poops in the audio.
// Smooth frequency mapping //syncPhaseInc = mapPhaseInc(analogRead(SYNC_CONTROL)) / 4;
// Stepped mapping to MIDI notes: C, Db, D, Eb, E, F... //syncPhaseInc = mapMidi(analogRead(SYNC_CONTROL));
// Stepped pentatonic mapping: D, E, G, A, B syncPhaseInc = mapPentatonic(analogRead(SYNC_CONTROL));
syncPhaseAcc += syncPhaseInc; if (syncPhaseAcc < syncPhaseInc) { // Time to start the next grain grainPhaseAcc = 0; grainAmp = 0x7fff; grain2PhaseAcc = 0; grain2Amp = 0x7fff; LED_PORT ^= 1 << LED_BIT; // Faster than using digitalWrite }
// Increment the phase of the grain oscillators grainPhaseAcc += grainPhaseInc; grain2PhaseAcc += grain2PhaseInc;
// Convert phase into a triangle wave value = (grainPhaseAcc >> 7) & 0xff; if (grainPhaseAcc & 0x8000) value = ~value; // Multiply by current grain amplitude to get sample output = value * (grainAmp >> 8);
// Repeat for second grain value = (grain2PhaseAcc >> 7) & 0xff; if (grain2PhaseAcc & 0x8000) value = ~value; output += value * (grain2Amp >> 8);
// Make the grain amplitudes decay by a factor every sample (exponential decay) grainAmp -= (grainAmp >> 8) * grainDecay; grain2Amp -= (grain2Amp >> 8) * grain2Decay;
// Scale output to the available range, clipping if necessary output >>= 9; if (output > 255) output = 255;
// Output to PWM (this is faster than using analogWrite) PWM_VALUE = output; }
Вложения
Последний раз редактировалось mtbiker 14 мар 2010, 17:11, всего редактировалось 2 раз(а).
в общем, требуется понять, что передаёт клавиатура и как можно приняв эти данные, превратить её в ноту...бегло просмотрев программу синтезатора, предполагаю, что это что-то вроде секвенсера (воспроизводящее ноты по кругу)... нужно сделать так, что бы секвенсер играл только одну ноту...а её уровнем и частотой, надо управлять через последовательный порт...
Добавлено спустя 16 минут 9 секунд: неи вроде не секвенсер, тогда в основном цикле "loop", нужно организовать приём данных из com-а...и записывать принятые данные в те переменные, которые отвечают за тон и амплитуду... понять это не сложно, покрутив резисторы в готовой конструкции...
Добавлено спустя 3 минуты 45 секунд: вначале, лучше поэкспериментировать с передачей данных от ПК...а когда получится эмулировать моном... тогда и подключать реальную клаву...только не через USB, а тремя проводками между контроллерами ардуинок...
Добавлено спустя 1 час 48 минут 32 секунды: Кстати, ещё один вариант подключения правда "детский какой-то" использовать ШИМ в мономе и через фильтр НЧ подавать его на нужный аналоговый вход синтезатора... такой вот вариант "аналогового" модуля
Добавлено спустя 1 минуту 30 секунд: Вообще вариантов может получиться море...чистое творчество...ограниченное возможностями аппаратуры
Роботы, уже среди нас... Прошу прощения за аватар, никак схему динамической индикации не могу настроить :)
Переменные, в которые считываются значения на аналоговых входах (я их выделил в предыдущем посте)... учите Wiring... в любом случае, программы придется корректировать по любому... Три провода, это -земля или минус по питанию -2 провода, которые соединяют приёмник первого с передатчиком второго...и наоборот... учите мат-часть
Роботы, уже среди нас... Прошу прощения за аватар, никак схему динамической индикации не могу настроить :)
Если интересует 8-битовая музыка, то наткнулся на такой вариант: http://www.hypersynth.com/hypersid.html внизу страницы, предлагаются КИТ-ы для самостоятельной сборки... ну и собранный модуль, без корпуса... там-же можно звук послушать...
Роботы, уже среди нас... Прошу прощения за аватар, никак схему динамической индикации не могу настроить :)