MIDI плейер для AVR

Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Аватара пользователя
hax
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Вт окт 25, 2011 17:39:42
Откуда: Киев
Контактная информация:

MIDI плейер для AVR

Сообщение hax »

Обсуждение статьи "MIDI плейер для AVR"

http://radiokot.ru/circuit/digital/game/51/
onivan
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вс дек 30, 2012 17:01:53

Re: MIDI плейер для AVR

Сообщение onivan »

Спасибо за статью!
Для меня были очень полезными разборы теоретических основ и примеров кода. Теперь руки чешутся забацать такую же шкатулку.
Жаль, что многие недооценили Вашу статью...
Аватара пользователя
EDSedov
Вымогатель припоя
Сообщения: 573
Зарегистрирован: Вс ноя 04, 2012 20:20:13
Откуда: Рязань

Re: MIDI плейер для AVR

Сообщение EDSedov »

Присоединяюсь к благодарностям :)
Последний раз редактировалось EDSedov Пт окт 04, 2013 10:46:11, всего редактировалось 1 раз.
Выше нос! жизнь прекрасна! :))
Аватара пользователя
hax
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Вт окт 25, 2011 17:39:42
Откуда: Киев
Контактная информация:

Re: MIDI плейер для AVR

Сообщение hax »

>хотел спросить на счет фьюзов ,как их правильно выставить в "понипрог"?

Для ATTiny85 все фъюзы должны быть в "1", то есть НЕ запрограммированы, то есть в PonyProg и Codevision AVR снять все галочки.
Аватара пользователя
MadOrc
Сверлит текстолит когтями
Сообщения: 1215
Зарегистрирован: Чт дек 27, 2012 15:38:20
Откуда: Казахстан, Алма-Ата

Re: MIDI плейер для AVR

Сообщение MadOrc »

Вы так зря шутите, начинающий народ сейчас SPIEN отключит и много доброго вам скажет :)))
Радиофил-затейник.
Аватара пользователя
hax
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Вт окт 25, 2011 17:39:42
Откуда: Киев
Контактная информация:

Re: MIDI плейер для AVR

Сообщение hax »

MadOrc писал(а):Вы так зря шутите, начинающий народ сейчас SPIEN отключит и много доброго вам скажет :)))

По даташиту "This fuse is not accessible in SPI programming mode."
CVAvr его не показывает. Специально расчехлил x86 десктоп, потому что PonyProg на x64 не устанавливается - там этот бит загреен.
Изображение
Изображение
Аватара пользователя
MadOrc
Сверлит текстолит когтями
Сообщения: 1215
Зарегистрирован: Чт дек 27, 2012 15:38:20
Откуда: Казахстан, Алма-Ата

Re: MIDI плейер для AVR

Сообщение MadOrc »

Тогда прошу прощения, сто лет пони не юзал, у меня в sinaprog оно доступно :oops:
Радиофил-затейник.
jersey
Открыл глаза
Сообщения: 63
Зарегистрирован: Пн янв 24, 2011 14:54:56

Re: MIDI плейер для AVR

Сообщение jersey »

Прежде всего, присоединяюсь к благодарностям !Если бы в номинации был радел "измерительные приборы" , то данная статья заняла бы совсем другое место , но это мое личное мнение , да и затрагивать это здесь наверное не к чему , ведь в этой теме надо обсуждать статью Midi player для AVR , а мнения пускай останутся у каждого свое , свое я уже сказал :) Есть огромное желание сделать маленький подарок , и повод как раз есть , праздники не за горами :)) И конечно же есть пару вопросов , ATTiny85 нашел , только они есть в smd , а хотелось бы в dip.Хочу спросить , для шкатулки и воспроизведении одной мелодии (Yiruma - River Flows in You) однозначно нужна ATTiny85 , или можно что нибудь еще , например ATTiny15 , просто они у меня еть :))
Аватара пользователя
hax
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Вт окт 25, 2011 17:39:42
Откуда: Киев
Контактная информация:

Re: MIDI плейер для AVR

Сообщение hax »

ATTiny15 - 1Кб flash - слишком мало. При выборе микроконтроллера играет роль только размер flash. Плейер 4 канала, sine+envelope, компрессия - ~1.7Кб, RiverFlows in you - ~1.5Кб, итого минимум 4Кб. Например, можно ATMega48, ATTiny44.
jersey
Открыл глаза
Сообщения: 63
Зарегистрирован: Пн янв 24, 2011 14:54:56

Re: MIDI плейер для AVR

Сообщение jersey »

Понятно . Тогда ATmega48PA-AU подойдет ? Как никак дешевле в 2 раза :))
Вложения
ATmega48PA-AU.png
(38.51 КБ) 1073 скачивания
Аватара пользователя
hax
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Вт окт 25, 2011 17:39:42
Откуда: Киев
Контактная информация:

Re: MIDI плейер для AVR

Сообщение hax »

Подойдёт.
Только учтите, что из-за 10 грн разницы вам придётся самостоятельно настраивать и компилировать проект, и разводить печатку, а для ATTiny85 это всё уже сделано.
http://radiomarket.lg.ua/advanced_searc ... 100&y=-127
http://imrad.com.ua/catalog_search?comm ... =%E2%9C%93
jersey
Открыл глаза
Сообщения: 63
Зарегистрирован: Пн янв 24, 2011 14:54:56

Re: MIDI плейер для AVR

Сообщение jersey »

Тогда конечно на ATTiny85 , я наверное как- то не так вбивал в поиск ATTiny85 ,т.к. был ответ " К сожалению, ничего не найдено" .Ну теперь вроде все понятно ,будем собирать :)
Аватара пользователя
minakan
Поставщик валерьянки для Кота
Сообщения: 2209
Зарегистрирован: Вт июл 27, 2010 11:31:59
Откуда: Кххх

Re: MIDI плейер для AVR

Сообщение minakan »

Спаял платку для шкатулки на tiny85. Сразу не завелось, при прошивке пищит, а звука нет.
Оказалось что выполнил дословно инструкцию автора "Фъюзы выставляем для работы от внешнего кварцевого резонатора, остальное не важно."
Важно - у камня по умолчанию включен делитель на 8!
Итого:
AVREAL32.EXE -as -p1 +TINY85 -fcksel=E,fckdiv=1 -e -w -v MusicBox.hex
Статья очень даже очень. Благодарность автору. :beer: он научил котов мило мурлыкать.
Моя платка, кварц - трухольный.
Изображение
И еще - у меня лекарство не подействовало, пришлось перерисовать печатку.
Вложения
midi-all.pdf
печатки под утюг, может кому надо
(59.33 КБ) 680 скачиваний
midi.jpg
как танк после боя, платка вся в копоти.
(87.62 КБ) 1150 скачиваний
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: MIDI плейер для AVR

Сообщение FreshMan »

вопрос к автору, я вот пытаюсь собрать простой проигрыватель 8 битных мелодия для часиков
как переводить ноты определонной мелодии в массив чисел которые потом будут подставляться в регистр сравнения Т1 ?
Tell Me The Truth
Аватара пользователя
hax
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Вт окт 25, 2011 17:39:42
Откуда: Киев
Контактная информация:

Re: MIDI плейер для AVR

Сообщение hax »

1. Нужно сгенерить код мелодии без компрессии.

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

Из частоты вычисляется делитель для таймера = частота_таймера / частота ноты
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: MIDI плейер для AVR

Сообщение FreshMan »

hax, у меня имеется рабочий проэкт (прилагаю) воспроизведения элементарных мелодий, проблемма состоит в том что я не могу осмыслить как переводить ноты мелодии в массив цифр :dont_know:
помогите пожалуйста :)
Вложения
sound.c
(5.62 КБ) 616 скачиваний
Tell Me The Truth
Аватара пользователя
hax
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Вт окт 25, 2011 17:39:42
Откуда: Киев
Контактная информация:

Re: MIDI плейер для AVR

Сообщение hax »

Мой midi player тут ничем не поможет.

Откройте 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
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: MIDI плейер для AVR

Сообщение FreshMan »

hax писал(а):Откройте midi файл в каком-нибудь редакторе и перепишите ноты в массив вручную.

и все ? :shock:
вот так просто ? :shock:
Tell Me The Truth
Аватара пользователя
Dmitry Dubrovenko
Поставщик валерьянки для Кота
Сообщения: 2349
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград
Контактная информация:

Re: MIDI плейер для AVR

Сообщение Dmitry Dubrovenko »

hax писал(а):Откройте midi файл в каком-нибудь редакторе и перепишите ноты в массив вручную.
Ничего себе задачка, для людей с очень устойчивой психикой. :)
Но о всём по порядку.
Автор, безусловно, проделал большую и кропотливую работу, за что ему респект и уважуха. :beer:
Однако, как мне кажется, больно уж огромный диапазон материала, для такой маленькой статьи.
То, что не упоминается про другие строи, кроме равномерно темперированного, это - мелочи, но вот про основные разновидности синтеза, и фазы сэмпла, всё-таки, сказать следовало. И честно говоря, я бы не стал относить тон-генераторы меандра к синтезаторам.
В 8-битном сэмпле, без знака, нет значения 00h (иначе сэмпл будет несимметричным). Собственно, в представленной таблице его и нет. И вообще, странноватая какая-то таблица. Если там и синус, то очень "хилый". Или это специально?
При разговоре о МИДИ, я бы всё-таки употреблял терминологию, согласно протокола МИДИ.
Касаемо самих МИДИ-файлов, там такая жуть, что выудить оттуда что-нибудь вручную, по-моему просто нереально. Кстати, там вроде, до четырёх байт на дельту, а у Вас, три (могу ошибаться, давно дело было).
Я когда усовершенствовал синтезатор Чана, тоже помаялся с ручным написанием в родном формате, а потом плюнул, и тоже программку-конвертер написАл.
Кстати, у Чана как-раз хорошо расписанно, что звук у него разбит на атаку и сустейн, с наложением огибающей. В общем, после экспериментов с меандрами, мне звук очень понравился, и я его, доработав, использовал в музыкальной шкатулке. Деталей минимум. Я даже включение сделал размыканием, что позволило отказаться от специализированных микровыключателей, и использовать простые токопроводящие контактные площадки. Так что габариты определяются аккумулятором и динамической головкой.
Это я плавно перешёл к практическому использованию.
В статье правильно сказано, что полноценного синтезатора из неё не получить, поэтому лично я тоже, в дальнейшем ушёл от этих попыток. Но можно развивать тему, например, речевого информатора. Однако, это уже для другой статьи.

Теперь вопросы.
В одной своей разработке я тоже использовал повторное воспроизведение одинаковых фрагментов, а вот насколько эффективно работает описанное в статье сжатие, и не накладывает ли оно ограничения на используемые мелодии?
ICQ нет, и, в ближайшее время, не будет.
Аватара пользователя
hax
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Вт окт 25, 2011 17:39:42
Откуда: Киев
Контактная информация:

Re: MIDI плейер для AVR

Сообщение hax »

FreshMan писал(а):и все ? :shock:
вот так просто ? :shock:
Ну да... Там одноголосые мелодии по 20-30 нот, плейер похож на тот, что во втором видео об AVR Batterfly.
По сути вам нужны ноты мелодии, вот такие:
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
    };
По ошибке вставил в статью синус с амплитудой 0x16 ( отскейлен для 6 каналов ). Исправлю.

Dmitry Dubrovenko писал(а):Касаемо самих МИДИ-файлов... Кстати, там вроде, до четырёх байт на дельту, а у Вас, три (могу ошибаться, давно дело было).
У меня - 13 бит. Время считается в 1/255 сек. Это позволяет делать дельты до 32 сек. Этого достаточно в любом случае.
По сути, получаемый исходник для AVR не является Midi плейером - он играет "свой" формат, оптимизированный под минимальный размер данных и кода.

Dmitry Dubrovenko писал(а):Кстати, у Чана как-раз хорошо расписанно, что звук у него разбит на атаку и сустейн, с наложением огибающей.
У меня attack/sustain/decay/release не используются, вот я о них и не рассказывал.
Если кому интересно - bsvi рассказывает:http://www.youtube.com/watch?v=eWXMaQ6ZpRc

Dmitry Dubrovenko писал(а):а вот насколько эффективно работает описанное в статье сжатие, и не накладывает ли оно ограничения на используемые мелодии?
Использование "своего" формата с меньшим количеством бит на переменные вместо MIDI даёт уменьшение данных мелодии раз в 10. Накладывает ограничение на длину дельты ( до 32 сек ) и точность ( 1/255 сек).
Сжатие c частотным анализом дает дополнительное уменьшение раза в 2, никаких ограничений не накладывает т.к. алгоритм сжимает байтовый поток и о природе данных не знает. Грубо говоря, это сильно упрощённый zip.
Ответить

Вернуться в «Статьи»