MIDI плейер для AVR
Re: MIDI плейер для AVR
Спасибо за статью!
Для меня были очень полезными разборы теоретических основ и примеров кода. Теперь руки чешутся забацать такую же шкатулку.
Жаль, что многие недооценили Вашу статью...
Для меня были очень полезными разборы теоретических основ и примеров кода. Теперь руки чешутся забацать такую же шкатулку.
Жаль, что многие недооценили Вашу статью...
Re: MIDI плейер для AVR
Присоединяюсь к благодарностям 
Последний раз редактировалось EDSedov Пт окт 04, 2013 10:46:11, всего редактировалось 1 раз.
Выше нос! жизнь прекрасна! 
- hax
- Нашел транзистор. Понюхал.
- Сообщения: 160
- Зарегистрирован: Вт окт 25, 2011 17:39:42
- Откуда: Киев
- Контактная информация:
Re: MIDI плейер для AVR
>хотел спросить на счет фьюзов ,как их правильно выставить в "понипрог"?
Для ATTiny85 все фъюзы должны быть в "1", то есть НЕ запрограммированы, то есть в PonyProg и Codevision AVR снять все галочки.
Для ATTiny85 все фъюзы должны быть в "1", то есть НЕ запрограммированы, то есть в PonyProg и Codevision AVR снять все галочки.
- MadOrc
- Сверлит текстолит когтями
- Сообщения: 1215
- Зарегистрирован: Чт дек 27, 2012 15:38:20
- Откуда: Казахстан, Алма-Ата
Re: MIDI плейер для AVR
Вы так зря шутите, начинающий народ сейчас SPIEN отключит и много доброго вам скажет 
Радиофил-затейник.
- MadOrc
- Сверлит текстолит когтями
- Сообщения: 1215
- Зарегистрирован: Чт дек 27, 2012 15:38:20
- Откуда: Казахстан, Алма-Ата
Re: MIDI плейер для AVR
Тогда прошу прощения, сто лет пони не юзал, у меня в sinaprog оно доступно 
Радиофил-затейник.
Re: MIDI плейер для AVR
Прежде всего, присоединяюсь к благодарностям !Если бы в номинации был радел "измерительные приборы" , то данная статья заняла бы совсем другое место , но это мое личное мнение , да и затрагивать это здесь наверное не к чему , ведь в этой теме надо обсуждать статью Midi player для AVR , а мнения пускай останутся у каждого свое , свое я уже сказал
Есть огромное желание сделать маленький подарок , и повод как раз есть , праздники не за горами
И конечно же есть пару вопросов , ATTiny85 нашел , только они есть в smd , а хотелось бы в dip.Хочу спросить , для шкатулки и воспроизведении одной мелодии (Yiruma - River Flows in You) однозначно нужна ATTiny85 , или можно что нибудь еще , например ATTiny15 , просто они у меня еть 
- hax
- Нашел транзистор. Понюхал.
- Сообщения: 160
- Зарегистрирован: Вт окт 25, 2011 17:39:42
- Откуда: Киев
- Контактная информация:
Re: MIDI плейер для AVR
ATTiny15 - 1Кб flash - слишком мало. При выборе микроконтроллера играет роль только размер flash. Плейер 4 канала, sine+envelope, компрессия - ~1.7Кб, RiverFlows in you - ~1.5Кб, итого минимум 4Кб. Например, можно ATMega48, ATTiny44.
Re: MIDI плейер для AVR
Понятно . Тогда ATmega48PA-AU подойдет ? Как никак дешевле в 2 раза 
- Вложения
-
- ATmega48PA-AU.png
- (38.51 КБ) 1073 скачивания
- hax
- Нашел транзистор. Понюхал.
- Сообщения: 160
- Зарегистрирован: Вт окт 25, 2011 17:39:42
- Откуда: Киев
- Контактная информация:
Re: MIDI плейер для AVR
Подойдёт.
Только учтите, что из-за 10 грн разницы вам придётся самостоятельно настраивать и компилировать проект, и разводить печатку, а для ATTiny85 это всё уже сделано.
http://radiomarket.lg.ua/advanced_searc ... 100&y=-127
http://imrad.com.ua/catalog_search?comm ... =%E2%9C%93
Только учтите, что из-за 10 грн разницы вам придётся самостоятельно настраивать и компилировать проект, и разводить печатку, а для ATTiny85 это всё уже сделано.
http://radiomarket.lg.ua/advanced_searc ... 100&y=-127
http://imrad.com.ua/catalog_search?comm ... =%E2%9C%93
Re: MIDI плейер для AVR
Тогда конечно на ATTiny85 , я наверное как- то не так вбивал в поиск ATTiny85 ,т.к. был ответ " К сожалению, ничего не найдено" .Ну теперь вроде все понятно ,будем собирать 
- minakan
- Поставщик валерьянки для Кота
- Сообщения: 2209
- Зарегистрирован: Вт июл 27, 2010 11:31:59
- Откуда: Кххх
Re: MIDI плейер для AVR
Спаял платку для шкатулки на tiny85. Сразу не завелось, при прошивке пищит, а звука нет.
Оказалось что выполнил дословно инструкцию автора "Фъюзы выставляем для работы от внешнего кварцевого резонатора, остальное не важно."
Важно - у камня по умолчанию включен делитель на 8!
Итого:
AVREAL32.EXE -as -p1 +TINY85 -fcksel=E,fckdiv=1 -e -w -v MusicBox.hex
Статья очень даже очень. Благодарность автору.
он научил котов мило мурлыкать.
Моя платка, кварц - трухольный.

И еще - у меня лекарство не подействовало, пришлось перерисовать печатку.
Оказалось что выполнил дословно инструкцию автора "Фъюзы выставляем для работы от внешнего кварцевого резонатора, остальное не важно."
Важно - у камня по умолчанию включен делитель на 8!
Итого:
AVREAL32.EXE -as -p1 +TINY85 -fcksel=E,fckdiv=1 -e -w -v MusicBox.hex
Статья очень даже очень. Благодарность автору.
он научил котов мило мурлыкать. Моя платка, кварц - трухольный.
И еще - у меня лекарство не подействовало, пришлось перерисовать печатку.
- Вложения
-
- midi-all.pdf
- печатки под утюг, может кому надо
- (59.33 КБ) 680 скачиваний
-
- midi.jpg
- как танк после боя, платка вся в копоти.
- (87.62 КБ) 1150 скачиваний
Re: MIDI плейер для AVR
вопрос к автору, я вот пытаюсь собрать простой проигрыватель 8 битных мелодия для часиков
как переводить ноты определонной мелодии в массив чисел которые потом будут подставляться в регистр сравнения Т1 ?
как переводить ноты определонной мелодии в массив чисел которые потом будут подставляться в регистр сравнения Т1 ?
Tell Me The Truth
- hax
- Нашел транзистор. Понюхал.
- Сообщения: 160
- Зарегистрирован: Вт окт 25, 2011 17:39:42
- Откуда: Киев
- Контактная информация:
Re: MIDI плейер для AVR
1. Нужно сгенерить код мелодии без компрессии.
2. Выборка очередного события:
получили:
delta - сколько подождать 1/255 сек перед тем, как обрабатывать это событие
channelIndex - номер канала
noteIndex - номер ноты (или ноль - выключить ).
Номер ноты соответствует частоте:
http://subsynth.sourceforge.net/midinote2freq.html
Из частоты вычисляется делитель для таймера = частота_таймера / частота ноты
2. Выборка очередного события:
Код: Выделить всё
delta = s_playerState.m_pMelody->m_delta;
noteNumber = s_playerState.m_pMelody->m_noteNumber;
s_playerState.m_pMelody++;
channelIndex = delta & 0x7;
delta >>= 3;
if ( delta == 0 )
{
//конец мелодии
return;
}
channelIndex |= ( noteNumber >> (7 - 3 ) ) & 8;
noteNumber &= 0x7f;
получили:
delta - сколько подождать 1/255 сек перед тем, как обрабатывать это событие
channelIndex - номер канала
noteIndex - номер ноты (или ноль - выключить ).
Номер ноты соответствует частоте:
http://subsynth.sourceforge.net/midinote2freq.html
Из частоты вычисляется делитель для таймера = частота_таймера / частота ноты
Re: MIDI плейер для AVR
hax, у меня имеется рабочий проэкт (прилагаю) воспроизведения элементарных мелодий, проблемма состоит в том что я не могу осмыслить как переводить ноты мелодии в массив цифр
помогите пожалуйста
помогите пожалуйста
- Вложения
-
- sound.c
- (5.62 КБ) 616 скачиваний
Tell Me The Truth
- hax
- Нашел транзистор. Понюхал.
- Сообщения: 160
- Зарегистрирован: Вт окт 25, 2011 17:39:42
- Откуда: Киев
- Контактная информация:
Re: MIDI плейер для AVR
Мой midi player тут ничем не поможет.
Откройте midi файл в каком-нибудь редакторе и перепишите ноты в массив вручную.
Так и было сделано для мелодий, которые в вашем исходнике.
Там в массиве темп,
имя ноты_октава ( A3,B2,C4, .... )
http://help.secondnetworks.net/gfx/NotesHelp.gif
длительность (N8, N16 == 1/8, 1/16)
http://www.guitarsite.de/pics/notedur.gif
Откройте midi файл в каком-нибудь редакторе и перепишите ноты в массив вручную.
Так и было сделано для мелодий, которые в вашем исходнике.
Код: Выделить всё
int kuznechik[] PROGMEM={130.000,P,N16,A2,N8,E2,N8,A2,N8,E2,N8,A2,N8,G2d,N8,G2,N8,P,N8,G2d,N8,E2,N8,G2d,N8,E2,N8,G2d,N8,A2,N8,End};Там в массиве темп,
имя ноты_октава ( A3,B2,C4, .... )
http://help.secondnetworks.net/gfx/NotesHelp.gif
длительность (N8, N16 == 1/8, 1/16)
http://www.guitarsite.de/pics/notedur.gif
Re: MIDI плейер для AVR
hax писал(а):Откройте midi файл в каком-нибудь редакторе и перепишите ноты в массив вручную.
и все ?
вот так просто ?
Tell Me The Truth
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2349
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: MIDI плейер для AVR
Ничего себе задачка, для людей с очень устойчивой психикой.hax писал(а):Откройте midi файл в каком-нибудь редакторе и перепишите ноты в массив вручную.
Но о всём по порядку.
Автор, безусловно, проделал большую и кропотливую работу, за что ему респект и уважуха.

Однако, как мне кажется, больно уж огромный диапазон материала, для такой маленькой статьи.
То, что не упоминается про другие строи, кроме равномерно темперированного, это - мелочи, но вот про основные разновидности синтеза, и фазы сэмпла, всё-таки, сказать следовало. И честно говоря, я бы не стал относить тон-генераторы меандра к синтезаторам.
В 8-битном сэмпле, без знака, нет значения 00h (иначе сэмпл будет несимметричным). Собственно, в представленной таблице его и нет. И вообще, странноватая какая-то таблица. Если там и синус, то очень "хилый". Или это специально?
При разговоре о МИДИ, я бы всё-таки употреблял терминологию, согласно протокола МИДИ.
Касаемо самих МИДИ-файлов, там такая жуть, что выудить оттуда что-нибудь вручную, по-моему просто нереально. Кстати, там вроде, до четырёх байт на дельту, а у Вас, три (могу ошибаться, давно дело было).
Я когда усовершенствовал синтезатор Чана, тоже помаялся с ручным написанием в родном формате, а потом плюнул, и тоже программку-конвертер написАл.
Кстати, у Чана как-раз хорошо расписанно, что звук у него разбит на атаку и сустейн, с наложением огибающей. В общем, после экспериментов с меандрами, мне звук очень понравился, и я его, доработав, использовал в музыкальной шкатулке. Деталей минимум. Я даже включение сделал размыканием, что позволило отказаться от специализированных микровыключателей, и использовать простые токопроводящие контактные площадки. Так что габариты определяются аккумулятором и динамической головкой.
Это я плавно перешёл к практическому использованию.
В статье правильно сказано, что полноценного синтезатора из неё не получить, поэтому лично я тоже, в дальнейшем ушёл от этих попыток. Но можно развивать тему, например, речевого информатора. Однако, это уже для другой статьи.
Теперь вопросы.
В одной своей разработке я тоже использовал повторное воспроизведение одинаковых фрагментов, а вот насколько эффективно работает описанное в статье сжатие, и не накладывает ли оно ограничения на используемые мелодии?
ICQ нет, и, в ближайшее время, не будет.
- hax
- Нашел транзистор. Понюхал.
- Сообщения: 160
- Зарегистрирован: Вт окт 25, 2011 17:39:42
- Откуда: Киев
- Контактная информация:
Re: MIDI плейер для AVR
Ну да... Там одноголосые мелодии по 20-30 нот, плейер похож на тот, что во втором видео об AVR Batterfly.FreshMan писал(а):и все ?![]()
вот так просто ?
По сути вам нужны ноты мелодии, вот такие:
http://blflute.com/wp-content/uploads/2013/05/03.jpg
Просто переписываете ноты одну за одной в массив.
Преимущество моего плейера в том, что с нотами не нужно разбираться, почему вы не возьмёте его?
Dmitry Dubrovenko писал(а):В 8-битном сэмпле, без знака, нет значения 00h (иначе сэмпл будет несимметричным). Собственно, в представленной таблице его и нет. И вообще, странноватая какая-то таблица. Если там и синус, то очень "хилый". Или это специально?
Код: Выделить всё
static const flash uint8_t s_sineTable[ 64 ] = {
0x80, 0x82, 0x84, 0x86, 0x88, 0x8A, 0x8C, 0x8D, 0x8F, 0x90, 0x91, 0x93, 0x93, 0x94, 0x95, 0x95,
0x95, 0x95, 0x95, 0x94, 0x93, 0x93, 0x91, 0x90, 0x8F, 0x8D, 0x8C, 0x8A, 0x88, 0x86, 0x84, 0x82,
0x80, 0x7E, 0x7C, 0x7A, 0x78, 0x76, 0x74, 0x73, 0x71, 0x70, 0x6F, 0x6D, 0x6D, 0x6C, 0x6B, 0x6B,
0x6B, 0x6B, 0x6B, 0x6C, 0x6D, 0x6D, 0x6F, 0x70, 0x71, 0x73, 0x74, 0x76, 0x78, 0x7A, 0x7C, 0x7E
};У меня - 13 бит. Время считается в 1/255 сек. Это позволяет делать дельты до 32 сек. Этого достаточно в любом случае.Dmitry Dubrovenko писал(а):Касаемо самих МИДИ-файлов... Кстати, там вроде, до четырёх байт на дельту, а у Вас, три (могу ошибаться, давно дело было).
По сути, получаемый исходник для AVR не является Midi плейером - он играет "свой" формат, оптимизированный под минимальный размер данных и кода.
У меня attack/sustain/decay/release не используются, вот я о них и не рассказывал.Dmitry Dubrovenko писал(а):Кстати, у Чана как-раз хорошо расписанно, что звук у него разбит на атаку и сустейн, с наложением огибающей.
Если кому интересно - bsvi рассказывает:http://www.youtube.com/watch?v=eWXMaQ6ZpRc
Использование "своего" формата с меньшим количеством бит на переменные вместо MIDI даёт уменьшение данных мелодии раз в 10. Накладывает ограничение на длину дельты ( до 32 сек ) и точность ( 1/255 сек).Dmitry Dubrovenko писал(а):а вот насколько эффективно работает описанное в статье сжатие, и не накладывает ли оно ограничения на используемые мелодии?
Сжатие c частотным анализом дает дополнительное уменьшение раза в 2, никаких ограничений не накладывает т.к. алгоритм сжимает байтовый поток и о природе данных не знает. Грубо говоря, это сильно упрощённый zip.