Страница 2 из 3

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 13:15:41
FreshMan
metan писал(а):
FreshMan писал(а):в инете вразумительного ответа не сыскал
В инете может и нету, а прям на этом сайте искали? Ключевые слова в наличии так-то...
Вот на мой взгляд, обалденный по качеству изложения и исполнения, и по полноте материал (мой пламенный респект и уважуха автору):
Midi player для AVR
статья конечно обалденная, но:
написана под CV(маленько недолюбливаю я его, хотя с него и начинал) :))
надо разгонять МК
тот вариант проги для воспроизведения мелодий, что есть у меня, спокойно пиликает на 1МГц
мне непонятен вот этот момент
Изображение
как понимать сколько времени должна звучать целая нота ?

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 13:28:33
Dmitry Dubrovenko
FreshMan писал(а):как понимать сколько времени должна звучать целая нота
Для этого необходимо знать темп исполнения, который задаётся в ударах (четвертях) в минуту (bpm).
Из этого находится время звучания целой ноты, половины, четверти, и т.д.

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 13:36:05
FreshMan
Dmitry Dubrovenko писал(а):Для этого необходимо знать темп исполнения, который задаётся в ударах (четвертях) в минуту (bpm).
а где он указывается ?
Изображение

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 13:54:41
Шурики
После скрипичного знака указано 3/4 (читается "три четверти") - это значит, что в одном такте может содержаться 3 ноты 1/4 (четверть) по предыдущему рисунку (где длительность нот. Это базовая величина. Теперь, такты разделяются вертикальной чертой - её видно. от ключа и от размера находится 1-й такт, за ним 2-й и т.д.

В первом такте три ноты по 1/4 (сверху) - наитого 1/4+1/4+1/4 = 3/4. В восьмом такте (2 строка 2-ё такт) там одна нота 1/2 и 1/4. 1/2 + 1/4 = тоже 3/4. и т.д.
Т.е. сумма длительностей всех нот и пауз в 1 такте всегда равна ведичине 3/4.

Сейчас поищу примеры и программки, чтобы разбирать один и тот же пример из миди. Так будет наглядней.

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 13:58:22
FreshMan
хорошо...., назначение 3 в числителе стало понятно, а 4 что означает ?

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 14:00:49
Шурики
Отписался выше, правила чтобы не нарушать...

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 14:05:36
FreshMan
уточняющий вопрос: под тактом надо понимать темп воспроизведения мелодии ?
тоесть если наша мелодия на нотном стане разбита по 3 такта, а иная разбита по 10 тактов то первую мы сыграем быстрее ?

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 14:07:23
Dmitry Dubrovenko
FreshMan писал(а):а где он указывается ?
В Вашем примере, нигде.
Почитайте вот.

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 14:27:13
Шурики
Предлагаемый список файлов для тренировки
Нотный редактор, WINhex и миди-файл для препарирования.

Список на согласование

http://yadi.sk/d/dJMvLRRwC6usy

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 15:05:15
FreshMan
хорошо......, ну и где там начинеаются эти ноты ?

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 15:16:57
Шурики
Список принимается?

Если да, тогда надо загрузить нотный редактор по торрент-ссылке и установить его.
Файл миди для тренировке внутри, ВинХексь внутри.


Если нет, то предложения

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 15:22:25
FreshMan
принимается...., мне все-ровно....., лишь бы понять суть :))

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 15:38:25
Шурики
Открываем в нотном редакторе файл .mid - и видим ноты.

Открываем тот же миди-файл в Винхексе и изучаем.
Инфо для расшифровки берём http://ru.wikipedia.org/wiki/MIDI

Сейчас сам немного его расшифрую и отпишусь.

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 15:46:44
Шурики
с нулевого адреса поехали:

Заголовок
0000 4В 54 68 64 - заголовок MThd (собственно, основной заголовок миди файла, общая информация)
0004 00 00 00 06 - количество дополнительных байт далее (6)
допбайты
0008 00 01 - тип миди файла (type1) содержит несколько треков
000A 00 08 - количество треков (NumTracks) =8
000С 01 E0 - а вот это уже относится к скорости (PPQN) =480 тиков на ноту 1/4
Конец Заголовка

Смотрим записи:
8 штук по адресам 0E, BE0F, 20C9, 2CAE, 417C, 41A3, 41D3, 569D

Слегка скорректировал - устаканил сумбур

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 15:57:40
Шурики
Трек 1 (0E - BE0E)
000E 4D 54 72 6B - MTrk заголовок
0012 00 00 0B E9 - количество допбайт (=3049)
допбайты

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 16:17:37
FreshMan
Шурики писал(а):0000 4В 54 68 64 - заголовок MThd (собственно, основной заголовок миди файла, общая информация)
что такое у вас сдесь 0000 ?
это адрес?

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 16:30:50
Шурики
адрес внутри миди файла - откройте в винхексе, будет видно

Изображение

то же самое в виде нот

Изображение

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 18:19:22
FreshMan
а что сдесь под оффсетом понимается ?
Изображение

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 19:00:32
Шурики
Вот смотри: любой файл - это набор байтов.
Каждый байт внутри файла имеет свой уникальный адрес от 0 и до конца файла.

Теперь, HEX-редактор предназначен для просмотра этих байтов.
Вообще раньше, в старых компьютерах была такая программа, называлась МОНИТОР. Эта программа могла показывать значения байта по определённому адресу. Выглядело это, примерно, так:

0000 3E
0001 25
0002 12
.
.
и т.д.
.
.
001F AA
0020 EE
как-то так
Понятно, что это не удобно.

Поэтому цифры для удобства чтения группируют по 8, 16, просто для удобства вывода на экран и чтения. Получаются блоки типа
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Что здесь неудобно, легко запутаться, сбиться с адреса, глазёнки-то прыгают.

Что можно сделать - дописать по горизонтали адрес перед каждым байтом. Например, вот так:
0000:00 0001:00 0002:00 0004:00 0005:00 0006:00 0007:00 0008:00 0009:00 000A:00 000B:00 000C:00 000D:00 000E:00 000F:00
и т.д.

Опять неудобно, надо экономить место на экране. Тогда будем для блока из 16 байт записывать слева адрес только первого байта, остальные проще, в пределах одной строчки, досчитать
0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0020: 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

А теперь ещё чуть-чуть выпендримся и для удобства самих же себя надпишем сверху ещё одну строчку, где

Изображение

Теперь ищем запись "MTrk". Нашли первая строка последний байт и 3 байта на второй строке. Какие адреса?
складываем значение слева 0000 со смещением сверху F, получаем адрес 00000000h+Fh = 0000000Fh.
Т.о. байты в строке, образующие надпись, имеют адреса 0000000Fh, 00000010h, 00000011h, 00000012h
Так вот строка сверху - это смещение байта внутри блока 16 байтов.

Долгое объяснение, но вреде всё что знал рассказал
А, ещё, справа буквы и цифры - это соответствие значения байта его буквенному представлению по таблице кодировки символов.

Красненьким обведённый столбец в вопросе - адреса начала блоков из 16 байт, сверху - смещение внутри блока (зелёненьким обведённое).

Re: AVR & MIDI

Добавлено: Пн ноя 04, 2013 19:24:19
FreshMan
вау....., оказывается все намного проще :)) спасибо :beer: уразумел :))
теперь по поводу формата midi
давайте еще раз с начала :
midi файл состоит из n-го количества сообщений ?