вторник, 22 февраля 2011 г.

Музыка на микроконтроллерах AVR. Часть 2

В прошлый раз я выбрал для эксперимента микроконтроллер ATMEGA48, но, наверное, для таких целей как музыкальная открытка лучше взять что-нибудь попроще и помельче.
Поэтому на этот раз я выбрал ATTINY11-8. Объем ПЗУ там в 4 раза меньше, чем в мега48 - ровно 1024 Байт, а оперативной памяти и энергонезависимой флеш-памяти нет совсем.
В первой части наш контроллер издавал один звук на одной частоте. Я решил заставить его проигрывать мелодии. В результате получилась компактная программа размером 272 байта, под ноты осталось 752 байта (по 1 байту на ноту), то есть 752 ноты. Это почти 3 минуты звучания.
Ноты двух длительностей, 8-е и 16-е + две паузы 8 и 16. Всего 2 октавы.
Мелодии записываются через запятую в конце программы после директивы .db в виде констант: C - до, D - ре, E - ми, F - фа, G - соль, A - ля, B - си. Знаком диеза служит подчеркивание (_), ставится после ноты. Чтобы обозначить ноты второй октавы - после знака ноты и если есть диез после знака диеза ставится двойка (2).
Пример:
.db e2, d_2, e2, d_2, e2, b, d2, c2, a, p

Короткие (16-е) ноты и паузы предваряются иксом (x).
Пример:
.db xc2, xp

В каждой строчке количество значений должно быть четным.
Общее количество нот указывается перед мелодией (см. исходный код).

Так выглядит симуляция в Proteus ISIS:
Для примера я вбил по памяти 162 ноты. Вот как это все звучит в симуляции (сюрприз для поклонников сериала Rozen Maiden): ПОСЛУШАТЬ (Комментарии приветствуются.)

В следующей части я попытаюсь на основе AVR создать секвенсор.

воскресенье, 20 февраля 2011 г.

Музыка на микроконтроллерах AVR. Часть 1

Микроконтроллеры AVR завоевали популярность благодаря своей простоте, небольшой цене и универсальности.
На сайте-производителе этих контроллеров - Atmel можно бесплатно скачать программу для разработки программ - AVR Studio 4. С помощью этой же программы можно прошить контроллер, там же есть симулятор.
Неплохие обучающие материалы по AVR есть на сайтах http://radiokot.ru, http://www.123avr.com, http://nikolaew.org/avr_old/learn.htm
С помощью программы ISIS, которая входит в комплекс Proteus (ссылку на скачку легко найти, если вбить в поиск Proteus) можно соединить виртуальную копию любого микроконтроллера AVR с другими устройствами - с теми же контроллерами, моторчиками, диодами, кнопками, электронными компонентами и спикерами (звучание которых можно услышать, запустив симуляцию (при условии, что прошивка контроллера посылает туда сигналы) ). Программа (код в формате hex), скомпилированная в AVR Studio прекрасно запускается на виртуальном микроконтроллере AVR в Proteus ISIS.

Простая пищалка:
Вот текст моей программы-пищалки для микроконтроллера ATMEGA48 (компилируется в AVR):
.include "m48def.inc"
ldi r16,0xFF
out ddrb,r16
start:
ldi r17,5
loop2:
ldi r16,255
loop:
dec r16
brne loop
dec r17
brne loop2
com r15
out portb,r15
rjmp start
Волна получается square. Изменяя выделенные выше числа (значения от 0 до 255) можно добиваться разной частоты звука и таким образом проигрывать разные ноты. Сочетание 5 и 255 даёт 130Hz (похоже, это До).

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

четверг, 17 февраля 2011 г.

Генерируем звук барабанов с нуля в аудио-редакторе

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

Вот моя пошаговая инструкция.

Малый барабан:
Создадим пустой файл, сгенерируем 0.1 секунды шума, шума мягкого, не такого шипящего как белый - коричневый подойдет (generate - noise - brown/15/0.1).
Добавим в конец нашего аудио немного тишины (g
enerate - silence - 0.5 sec)
Выделим наш шум (можно захватить чуть тишины, чем больше тишины захватим, тем протяжнее выйдет звук нашего барабана). Я захватил только шум). Применим к выделению фильтр Envelope (amplitude - envelope). Нарисуем кривую, которая резко уходит вниз \. Можно взять пресет Bell Curve (см изображение кривой)






Теперь нужно нормализовать (amplitude - normalize - 100%).
Ко всему файлу добавим немного реверба по вкусу (я выбрал пресет tight and close в delay effects - reverb).
Всё, - готов сэмпл малого барабана (snare).

Сделаем теперь большой барабан (kick, bass drum):
Generate - Tones. Частоту возьм
ем 65 Hz (первый параметр), длительность - 0.2 секунды (последний параметр).
Применяем Envelope как и в первом варианте. Но применяем несколько раз - 3-4. Видимые колебания должны закончиться на трети всего файла. А вообще делайте по своему вкусу, экспериментируйте. Дальше нормализация.
В эквалайзере поднимем в районах 50-100 Hz и 5000-8000 Hz на 5-8 dB. Готово.

В мультидорожечном режиме (в CoolEdit это F12) составим небольшую партию, чтобы послушать как звучат полученные сэмплы вместе.




Закрытый хай-хет (closed hi-hat):
Делается весьма просто - белый шум (generate - noise - white/14/0.1 sec) и один раз Envelope (такой же как и везде). В конец немного тишины, ко всему файлу - небольшой реверб.
Чтобы получить открытый hi-hat, порядок тот же, просто шума нужно примерно в три раза больше.

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

И напоследок - небольшой пример, основанный на этих сэмплах + генератор шумов и тонов + эффекты (я добавил столько эффектов, что snare кое-где стал похож на clap).