Например TDA7294

Форум РадиоКот :: Просмотр темы - MIDI плейер для AVR
Форум РадиоКот
https://radiokot.ru/forum/

MIDI плейер для AVR
https://radiokot.ru/forum/viewtopic.php?f=25&t=95076
Страница 1 из 6

Автор:  hax [ Вт окт 01, 2013 22:44:01 ]
Заголовок сообщения:  MIDI плейер для AVR

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

http://radiokot.ru/circuit/digital/game/51/

Автор:  onivan [ Ср окт 02, 2013 18:15:02 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

Спасибо за статью!
Для меня были очень полезными разборы теоретических основ и примеров кода. Теперь руки чешутся забацать такую же шкатулку.
Жаль, что многие недооценили Вашу статью...

Автор:  EDSedov [ Чт окт 03, 2013 13:05:49 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

Присоединяюсь к благодарностям :)

Автор:  hax [ Чт окт 03, 2013 14:50:38 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

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

Для ATTiny85 все фъюзы должны быть в "1", то есть НЕ запрограммированы, то есть в PonyProg и Codevision AVR снять все галочки.

Автор:  MadOrc [ Чт окт 03, 2013 16:07:45 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

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

Автор:  hax [ Чт окт 03, 2013 16:30:23 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

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

По даташиту "This fuse is not accessible in SPI programming mode."
CVAvr его не показывает. Специально расчехлил x86 десктоп, потому что PonyProg на x64 не устанавливается - там этот бит загреен.
Изображение
Изображение

Автор:  MadOrc [ Чт окт 03, 2013 16:33:05 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

Тогда прошу прощения, сто лет пони не юзал, у меня в sinaprog оно доступно :oops:

Автор:  jersey [ Пт окт 04, 2013 10:43:31 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

Прежде всего, присоединяюсь к благодарностям !Если бы в номинации был радел "измерительные приборы" , то данная статья заняла бы совсем другое место , но это мое личное мнение , да и затрагивать это здесь наверное не к чему , ведь в этой теме надо обсуждать статью Midi player для AVR , а мнения пускай останутся у каждого свое , свое я уже сказал :) Есть огромное желание сделать маленький подарок , и повод как раз есть , праздники не за горами :)) И конечно же есть пару вопросов , ATTiny85 нашел , только они есть в smd , а хотелось бы в dip.Хочу спросить , для шкатулки и воспроизведении одной мелодии (Yiruma - River Flows in You) однозначно нужна ATTiny85 , или можно что нибудь еще , например ATTiny15 , просто они у меня еть :))

Автор:  hax [ Пт окт 04, 2013 10:56:30 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

ATTiny15 - 1Кб flash - слишком мало. При выборе микроконтроллера играет роль только размер flash. Плейер 4 канала, sine+envelope, компрессия - ~1.7Кб, RiverFlows in you - ~1.5Кб, итого минимум 4Кб. Например, можно ATMega48, ATTiny44.

Автор:  jersey [ Пт окт 04, 2013 11:17:09 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

Понятно . Тогда ATmega48PA-AU подойдет ? Как никак дешевле в 2 раза :))

Вложения:
ATmega48PA-AU.png [38.51 KiB]
Скачиваний: 1026

Автор:  hax [ Пт окт 04, 2013 11:31:24 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

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

Автор:  jersey [ Пт окт 04, 2013 11:45:43 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

Тогда конечно на ATTiny85 , я наверное как- то не так вбивал в поиск ATTiny85 ,т.к. был ответ " К сожалению, ничего не найдено" .Ну теперь вроде все понятно ,будем собирать :)

Автор:  minakan [ Сб окт 05, 2013 15:37:59 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

Спаял платку для шкатулки на tiny85. Сразу не завелось, при прошивке пищит, а звука нет.
Оказалось что выполнил дословно инструкцию автора "Фъюзы выставляем для работы от внешнего кварцевого резонатора, остальное не важно."
Важно - у камня по умолчанию включен делитель на 8!
Итого:
AVREAL32.EXE -as -p1 +TINY85 -fcksel=E,fckdiv=1 -e -w -v MusicBox.hex
Статья очень даже очень. Благодарность автору. :beer: он научил котов мило мурлыкать.
Моя платка, кварц - трухольный.
Изображение
И еще - у меня лекарство не подействовало, пришлось перерисовать печатку.

Вложения:
Комментарий к файлу: печатки под утюг, может кому надо
midi-all.pdf [59.33 KiB]
Скачиваний: 606
Комментарий к файлу: как танк после боя, платка вся в копоти.
midi.jpg [87.62 KiB]
Скачиваний: 1112

Автор:  FreshMan [ Ср окт 23, 2013 10:44:36 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

вопрос к автору, я вот пытаюсь собрать простой проигрыватель 8 битных мелодия для часиков
как переводить ноты определонной мелодии в массив чисел которые потом будут подставляться в регистр сравнения Т1 ?

Автор:  hax [ Ср окт 23, 2013 11:09:48 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

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 [ Ср окт 23, 2013 15:36:51 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

hax, у меня имеется рабочий проэкт (прилагаю) воспроизведения элементарных мелодий, проблемма состоит в том что я не могу осмыслить как переводить ноты мелодии в массив цифр :dont_know:
помогите пожалуйста :)

Вложения:
sound.c [5.62 KiB]
Скачиваний: 576

Автор:  hax [ Ср окт 23, 2013 15:57:21 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

Мой 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 [ Ср окт 23, 2013 19:52:00 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

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

и все ? :shock:
вот так просто ? :shock:

Автор:  Dmitry Dubrovenko [ Ср окт 23, 2013 20:23:13 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

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

Теперь вопросы.
В одной своей разработке я тоже использовал повторное воспроизведение одинаковых фрагментов, а вот насколько эффективно работает описанное в статье сжатие, и не накладывает ли оно ограничения на используемые мелодии?

Автор:  hax [ Чт окт 24, 2013 00:14:38 ]
Заголовок сообщения:  Re: MIDI плейер для AVR

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.

Страница 1 из 6 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/