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

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


Ответить

MIDI плейер для AVR

Вт окт 01, 2013 22:44:01

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

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

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

Ср окт 02, 2013 18:15:02

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

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

Чт окт 03, 2013 13:05:49

Присоединяюсь к благодарностям :)
Последний раз редактировалось EDSedov Пт окт 04, 2013 10:46:11, всего редактировалось 1 раз.

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

Чт окт 03, 2013 14:50:38

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

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

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

Чт окт 03, 2013 16:07:45

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

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

Чт окт 03, 2013 16:30:23

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

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

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

Чт окт 03, 2013 16:33:05

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

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

Пт окт 04, 2013 10:43:31

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

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

Пт окт 04, 2013 10:56:30

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

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

Пт окт 04, 2013 11:17:09

Понятно . Тогда ATmega48PA-AU подойдет ? Как никак дешевле в 2 раза :))
Вложения
ATmega48PA-AU.png
(38.51 KiB) Скачиваний: 1027

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

Пт окт 04, 2013 11:31:24

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

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

Пт окт 04, 2013 11:45:43

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

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

Сб окт 05, 2013 15:37:59

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

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

Ср окт 23, 2013 10:44:36

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

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

Ср окт 23, 2013 11:09:48

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

Из частоты вычисляется делитель для таймера = частота_таймера / частота ноты

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

Ср окт 23, 2013 15:36:51

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

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

Ср окт 23, 2013 15:57:21

Мой 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

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

Ср окт 23, 2013 19:52:00

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

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

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

Ср окт 23, 2013 20:23:13

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

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

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

Чт окт 24, 2013 00:14:38

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.
Ответить