Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.218.1.38] |
|
Страницы: (4) 1 2 [3] 4 все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
Самое простое - это с применением WinAPI: mcisendstring (для WAV, MIDI).
Какой звук ты хочешь издавать ? Добавлено Графика и мультимедиа->Работа со звуком Добавлено Windows.Beep(Freq,Duration); для w2k, XP Freq - частота Duration - длительность Добавлено Delphi: Multimedia Добавлено Всё, что можно в Дельфи, можно сделать и в FPC. |
Сообщ.
#32
,
|
|
|
А как можно сыграть определённую миди ноту, определённым инструментом?
|
Сообщ.
#33
,
|
|
|
Цитата Ash @ Этот вопрос лучше задать в разделе Программирование звука А как можно сыграть определённую миди ноту, определённым инструментом? |
Сообщ.
#34
,
|
|
|
Вот написал маленький пример для озвучивания MIDI:
uses CRT, Windows, MMSystem; var midimsg: DWORD; hmidi_out: HMIDIOUT; hmidi_in: HMIDIIN; err_cd: integer; Down:boolean; ch : char; begin //открытие миди выхода err_cd:=midioutopen(@hmidi_out,1,0,0,0); writeln ('Нажмите пробел для произведения звука или Esc для выхода.'); repeat ch := readkey; if ch = ' ' then begin midimsg:=$7f3a90; // поменять константу для других инструментов midioutshortmsg(hmidi_out,midimsg); end; until ch = #27; end. Добавлено Программа написана на для Free Pascal и тестирована в версии 2.0.0 Должна работать в любых 32-битных компиляторах Паскаля. |
Сообщ.
#35
,
|
|
|
FPC 2.0.0
Пишет Error while linking Указатель на последнем end'е. Чё ему надо? |
Сообщ.
#36
,
|
|
|
Бывает такое. Пробуй перезапустить IDE.
|
Сообщ.
#37
,
|
|
|
Перезапускаю, всё равно ошибка.
Добавлено А, всё. В опциях\линкер другие установочки зделал, всё пошло |
Сообщ.
#38
,
|
|
|
Ноту меняю, громкость тоже, однако как инструмент менять не погимаю.
|
Сообщ.
#39
,
|
|
|
Ну так поиск для чего создан?
Гугл тебе в помощь, MSDN, ... |
Сообщ.
#40
,
|
|
|
Всё, разобрался. Спасибо за помощь.
Если кому интересно: http://www-camil.music.uiuc.edu/Classes/199E/MIDI/midimessages.html |
Сообщ.
#41
,
|
|
|
Покажи пример, мне тоже интересно
|
Сообщ.
#42
,
|
|
|
uses CRT, Windows, MMSystem; var midimsg: DWORD; hmidi_out: HMIDIOUT; hmidi_in: HMIDIIN; err_cd: integer; Down:boolean; ch : char; begin //открытие миди выхода clrscr; err_cd:=midioutopen(@hmidi_out,0,0,0,0); writeln ('Нажмите пробел для произведения звука или Esc для выхода.'); repeat ch := readkey; if ch = ' ' then begin midimsg:=$0023c0; // $с - установка инструмента($23=35 - Fretless Bass) channel=0 midioutshortmsg(hmidi_out,midimsg); midimsg:=$903090; // $9 - проигрывание ноты $30(пока точно не знаю какая нота) channel=0 midioutshortmsg(hmidi_out,midimsg); delay(1000); midimsg:=$903080; // $8 - выключение ноты channel=0 midioutshortmsg(hmidi_out,midimsg); end; until ch = #27; end. |
Сообщ.
#43
,
|
|
|
Ты наверно с константами плохо разобрался. Надо копать дальше.
|
Сообщ.
#44
,
|
|
|
Да нее... Всё понятно, а чё не понятного?
|
Сообщ.
#45
,
|
|
|
У меня к примеру не издаёт звуков твой пример.
Добавлено Задание: Составить пример для проигрывания нот любой октавы. Можешь написать? Добавлено Вот нашёл интересную функцию: function MidiOutMessage(hMidi:HMIDIOUT; iStatus, iChannel, iData1, iData2: integer): DWORD; var dwMessage:DWORD; begin dwMessage:= iStatus or iChannel or (iData1 shl 8) or (longint( iData2 shl 16)) ; result:= midiOutShortMsg (hMidi, dwMessage) ; end; |