MIDI плейер для AVR
Добавлено: Вт окт 01, 2013 22:44:01
он научил котов мило мурлыкать. Код: Выделить всё
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;
Код: Выделить всё
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};hax писал(а):Откройте midi файл в каком-нибудь редакторе и перепишите ноты в массив вручную.
Ничего себе задачка, для людей с очень устойчивой психикой.hax писал(а):Откройте midi файл в каком-нибудь редакторе и перепишите ноты в массив вручную.

Ну да... Там одноголосые мелодии по 20-30 нот, плейер похож на тот, что во втором видео об AVR Batterfly.FreshMan писал(а):и все ?![]()
вот так просто ?
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 писал(а):Касаемо самих МИДИ-файлов... Кстати, там вроде, до четырёх байт на дельту, а у Вас, три (могу ошибаться, давно дело было).
У меня attack/sustain/decay/release не используются, вот я о них и не рассказывал.Dmitry Dubrovenko писал(а):Кстати, у Чана как-раз хорошо расписанно, что звук у него разбит на атаку и сустейн, с наложением огибающей.
Использование "своего" формата с меньшим количеством бит на переменные вместо MIDI даёт уменьшение данных мелодии раз в 10. Накладывает ограничение на длину дельты ( до 32 сек ) и точность ( 1/255 сек).Dmitry Dubrovenko писал(а):а вот насколько эффективно работает описанное в статье сжатие, и не накладывает ли оно ограничения на используемые мелодии?