Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];

Вниз

midi библиотеки   Найти похожие ветки 

 
Igors   (2006-06-06 10:12) [0]

Не подскажите библиотеки для проигрывания midi файлов умеющие менять тональность?

и второе, может кто подскажет как это программно делается?

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

Буду очень благодарен за любой ответ!


 
Сергей М. ©   (2006-06-06 10:51) [1]


> спецификацию найти не могу


http://www.midi.org/about-midi/specshome.shtml


 
Igors   (2006-06-06 11:45) [2]

> Сергей М.

Спасибо, я уже был смотрел эту ссылку,
возможно из-за плохого знания английского я так и не понял как сменить тональность midi:(


 
Сергей М. ©   (2006-06-06 12:14) [3]


> из-за плохого знания английского


На русском:

http://www.ispras.ru/~demakov/DOC/FAQ/mididesc.html


 
Igors   (2006-06-06 13:19) [4]

> Сергей М.

Спасибо большое.

Я так понимаю нужно копать:
En ll mm - Pitch Bend Change (смена значения Pitch Bend)

n - как понимаю номер канала, т.е. пройтись с 1 по 16 для всех.

Осталось догнать как менять чувствительность Pitch Bend  при помощи  RPN  0:)

Спасибо ещё раз!


 
Сергей М. ©   (2006-06-06 14:52) [5]

Неправильно ты понимаешь.

Менять нужно параметр nn в кан.сообщениях

8n nn vv - Note Off (выключение ноты)
9n nn vv - Note On (включение ноты)

ПРичем делать это следует не от балды для всех без разбору каналов, а только для каналов, не относящихся к перкуссионным.


 
Igors   (2006-06-06 16:09) [6]

Хреново,
я думал есть какое-то системное сообщение для синтезатора, говорящее ему что бы он сам менял тональность при получении ноты на определённое значение.

вообщем отлавливаем включение\выключение и меняем ноту (nn).

Объясни пожалуйста что такое за "перкуссионный" канал и почему если на нем идет sysex включения\выключения нельзя менять ноты?

Кстати, а на 10 канале где ударные то же ноты есть?


 
Сергей М. ©   (2006-06-06 16:22) [7]


> что такое за "перкуссионный" канал


Для простоты считай, что это канал ударных.

В GM принято считать, что канал ударных - это 10-й канал.


> sysex включения\выключения


Включение/выключение "ноты" не относится к SysEx-событиям.


> на 10 канале где ударные то же ноты есть?


Назвать "нотами" канальные сообщения включения/выключения для ударных можно лишь с большой натяжкой. Номер "ноты" там соответствует определенному ударному инструменту, так что изменение номера ноты приведет к включению/выключению звучания совершенно иного инструмента, нежели записано в оригинале: вместо барабана, к примеру прозвучит тарелка.


 
Igors   (2006-06-06 16:27) [8]

Все понятно, спасибо Сергей.
Попробую сейчас реализовать всё это..


 
test'er   (2006-09-25 12:54) [9]

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


 
Сергей М. ©   (2006-09-25 14:01) [10]

Что-то я не пойму, при чем здесь темп ...

Есть поток данных в формате MIDI, в нем присутствуют канальные сообщения "Note On", "Note Off"

Получая канальное сообщение "Note On" или "Note Off" плейер перед его исполнением просто инкрементирует 2-й параметр (номер ноты) на некую величину delta (смещение строя на такое-то число полутонов), если сообщение не относится к каналу перкуссионных.

?


 
test'er   (2006-09-25 14:28) [11]


> Что-то я не пойму, при чем здесь темп ...Есть поток данных
> в формате MIDI, в нем присутствуют канальные сообщения "Note
> On", "Note Off"Получая канальное сообщение "Note On" или
> "Note Off" плейер перед его исполнением просто инкрементирует
> 2-й параметр (номер ноты) на некую величину delta (смещение
> строя на такое-то число полутонов), если сообщение не относится
> к каналу перкуссионных.


Сережа извини, я имел ввиду не темп а тон.
А ты вообще теоретически мыслишь или писал что-то подобное?
Дело в том, что делая так как ты написал я обнаружил, что после смены очередного темпа включенные ноты "зависали".
Тут много не пришлось думать и так понятно, само просто:
- пришо сообщение включения (коэфф тона пока = 0)
- юзер увеличил коэф. тона на 1
- пришло сообщение об выключении ноты
- тут в твоём случаи я должен увеличить 2-й параметр и в результате выключу не ту ноту.
В случаи когда юзер часто меняет тональность нужно всё это как-то отследить какая нота включалась с каким коэфф. и откорректировать изменение выключения учитывая текущий коэфф. и тот что былпри включении.
Но это я приблизительно понимаю, но как реализовать пока алгоритм не созрел в голове.
Допустим пришло сообщение выключения ноты с номеров 100.
И тут хер его знает, может я включал ноту 99 с коэф. тона 1 или 98 с коэф. 2 или 103 с коэфф. -3.
Надеюсь примерно понятно изложил свою траблу.


 
test'er   (2006-09-25 14:31) [12]

извини, опять "очередного темпа" я про тональность конечно, точнее про свой коэффициент в проге корректировки 2-го параметра сообщения on\off


 
Сергей М. ©   (2006-09-25 14:37) [13]


> test"er   (25.09.06 14:28) [11]


Понятно.

В этом случае, очевидно, следует вести список выполненных канальных команд Note On с соответствующим delta.
При каждом смещении строя просматривать этот список на предмет коррекции  delta для каждого элемента.
При выполнении Note Off просматривать список и удалять соотв.элемент.


> ты вообще теоретически мыслишь или писал что-то подобное?


Зачем изобретать велосипеды ?)


 
test'er   (2006-09-25 14:47) [14]


> Зачем изобретать велосипеды ?)

ну нескажи, в этой области большой упадок.
или ты знаешь нормальный плеер?
один VanBasco`s возможно, но в нем есть также свои минусы.

Сереж, последний вопрос если можно.
Насколько я понимаю всякого рода неприятные стуки при воспроизведении миди XG формата через GM обусловлено тем, что в XG ударные могут прописываться  не только в 10 канале? если так, то неподскажешь номера ударных в XG что бы отсеивать их включение?

Cпасибо за тональность, примерно картина вырисовывается:)


 
Сергей М. ©   (2006-09-25 15:06) [15]


> один VanBasco`s возможно


Ну, положим, VanBasco-плейер не столько миди-плейер, сколько караоке-плейер ..


> в XG ударные могут прописываться  не только в 10 канале?


Почитай вот это

http://www.artone.ru/termins.html


 
brother ©   (2006-09-25 20:23) [16]

имхо, миди уже не актуально... для домашнего пользования


 
tst   (2006-09-26 09:36) [17]


> имхо, миди уже не актуально... для домашнего пользования


Возможно, но LG CD и Samsung DVD караоке диски используют миди :)
Да и вообще имея нормальную звуковуху или софт. синтезатор очень даже ничего получается.
А что по твоему актуально для дома?

Трабла с тональностью решилась сохранением в массиве нот для каждого канала [0..15, 0..127] команд Note On с соответствующим delta.



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.049 c
10-1133297958
volser
2005-11-29 23:59
2007.06.03
Создать Client/Server CORBA в Delphi7


9-1152615355
aKirill.INFO
2006-07-11 14:55
2007.06.03
Nebula 2


2-1179379997
Alkinoos
2007-05-17 09:33
2007.06.03
MDI окна


3-1173875512
Сергей М.
2007-03-14 15:31
2007.06.03
Логика работы ADO-компонентов


1-1175767593
SamProf
2007-04-05 14:06
2007.06.03
Как в Excel учтановить тип ячейки (строка)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский