Форум: "Игры";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
ВнизМузыка в игре. mid и подобное Найти похожие ветки
← →
pavel_k (2003-07-18 00:07) [0]Я пишу небольшую игру и хотелось бы устроить фоновую музыку. Я написал небольшую мелодию, она есть у меня в midi файле. Внимание, вопрос: как лучше ее проиграть? Как я понял, библиотека BASS не играет midi, с другими я не знаком. Посоветуйте, пожалуйста, библиоьеку, проигрывающую mid, или программу конвертатор в другой формат, не занимающий много места (например, я видел *.mod, но что это за такой муз. формат и как такой сделать я не знаю).
← →
r0n1n (2003-07-18 01:32) [1]возьми компонент TWinamp(помойму с midi работает)
он здесь в кладовке находится
а чем тебе TMediaPlayer не нравится???
← →
pavel_k (2003-07-19 14:32) [2]Что-то не понял я с этим TWinAmp"ом, заставить его midi играть не получилось. TMediaPlayer тормозит (когда я пытаюсь заставить мелодию играть по кругу, возникают тормоза ок. 2 сек.).
Больше ничего подобного нет?
← →
r0n1n (2003-07-20 03:20) [3]Кстати на счет BASS ты понял неправильно. Проигрывает она еще как.
Если получится я те на мыло скину компоненту.
У меня она дисках где то завалялась. Для работы с DirectShow фильтрами. По-моему там тож есть эта возможность.
Но это будет токо через несколько дней, вернее в понедельник или во вторник.
← →
r0n1n (2003-07-20 03:44) [4]http://www.torry.net/vcl/mmedia/video/hgdspack.zip
нашел тебе ссылку
посмотри может там есть чо
← →
pavel_k (2003-07-20 15:21) [5]>r0n1n
Спасибо, обязательно все посмотрю.
← →
Rouse_ (2003-07-20 15:54) [6]Например вот так делал (увы покойный) Ян Хорн
unit sound;
interface
procedure initSound;
procedure deInitSound;
implementation
uses Windows, MMsystem, Classes, SysUtils;
var wDeviceID : word;
procedure initSound;
var dwReturn : DWord;
mciOpenParms : MCI_OPEN_PARMS;
mciPlayParms : MCI_PLAY_PARMS;
mciStatusParms : MCI_STATUS_PARMS;
mciSeqSetParms : MCI_SEQ_SET_PARMS;
ResourceStream : TResourceStream;
begin
try
ResourceStream :=TResourceStream.Create(hInstance, "music", "MIDI");
ResourceStream.SaveToFile("music.mid");
finally
ResourceStream.Free;
end;
// Open the device by specifying the device and filename.
// MCI will attempt to choose the MIDI mapper as the output port.
mciOpenParms.lpstrDeviceType := "sequencer";
mciOpenParms.lpstrElementName := "music.mid";
dwReturn := mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE OR MCI_OPEN_ELEMENT, Longint(@mciOpenParms));
if dwReturn <> 0 then
exit;
// The device opened successfully; get the device ID.
wDeviceID := mciOpenParms.wDeviceID;
// Check if the output port is the MIDI mapper.
mciStatusParms.dwItem := MCI_SEQ_STATUS_PORT;
dwReturn := mciSendCommand(wDeviceID, MCI_STATUS, MCI_STATUS_ITEM, Longint(@mciStatusParms));
if dwReturn <> 0 then
begin
mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0);
exit;
end;
// The output port is not the MIDI mapper.
// Ask if the user wants to continue.
if LOWORD(mciStatusParms.dwReturn) <> Word(MIDI_MAPPER) then
begin
mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0);
exit;
end;
// Begin playback. The window procedure function for the parent
// window will be notified with an MM_MCINOTIFY message when
// playback is complete. At this time, the window procedure closes
// the device.
dwReturn := mciSendCommand(wDeviceID, MCI_PLAY, MCI_NOTIFY, Longint(@mciPlayParms));
if dwReturn <> 0 then
begin
mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0);
( wDeviceID, MCI_CLOSE, 0, 0) [6]Например вот так делал (увы покойный) Ян Хорн
unit sound;
interface
procedure initSound;
procedure deInitSound;
implementation
uses Windows, MMsystem, Classes, SysUtils;
var wDeviceID : word;
procedure initSound;
var dwReturn : DWord;
mciOpenParms : MCI_OPEN_PARMS;
mciPlayParms : MCI_PLAY_PARMS;
mciStatusParms : MCI_STATUS_PARMS;
mciSeqSetParms : MCI_SEQ_SET_PARMS;
ResourceStream : TResourceStream;
begin
try
ResourceStream :=TResourceStream.Create(hInstance, "music", "MIDI");
ResourceStream.SaveToFile("music.mid");
finally
ResourceStream.Free;
end;
// Open the device by specifying the device and filename.
// MCI will attempt to choose the MIDI mapper as the output port.
mciOpenParms.lpstrDeviceType := "sequencer";
mciOpenParms.lpstrElementName := "music.mid";
dwReturn := mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE OR MCI_OPEN_ELEMENT, Longint(@mciOpenParms));
if dwReturn <> 0 then
exit;
// The device opened successfully; get the device ID.
wDeviceID := mciOpenParms.wDeviceID;
// Check if the output port is the MIDI mapper.
mciStatusParms.dwItem := MCI_SEQ_STATUS_PORT;
dwReturn := mciSendCommand(wDeviceID, MCI_STATUS, MCI_STATUS_ITEM, Longint(@mciStatusParms));
if dwReturn <> 0 then
begin
mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0);
exit;
end;
// The output port is not the MIDI mapper.
// Ask if the user wants to continue.
if LOWORD(mciStatusParms.dwReturn) <> Word(MIDI_MAPPER) then
begin
mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0);
exit;
end;
// Begin playback. The window procedure function for the parent
// window will be notified with an MM_MCINOTIFY message when
// playback is complete. At this time, the window procedure closes
// the device.
dwReturn := mciSendCommand(wDeviceID, MCI_PLAY, MCI_NOTIFY, Longint(@mciPlayParms));
if dwReturn <> 0 then
begin
mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0);
exit;
end;
end;
procedure deInitSound;
begin
mciSendCommand(wDeviceID, MCI_CLOSE, 0, 0);
DeleteFile("music.mid");
end;
end.
Желаю успехов
← →
pavel_k (2003-07-20 21:19) [7]>Rouse_ ©
Извините, но я не очень понимаю во всяких mci...
Ответьте, я правильно понял, что это проигрывание файла из ресурса?
Я обязательно поэкспериментирую с вашим кодом. Спасибо.
← →
pavel_k (2003-07-20 22:14) [8]>Rouse_ ©
Я проверил ваш код: отлично работает. Единственная проблема - как бы поймать млмент окончания мелодии? Вроде в комментарии написано, что главной форме должно приходить сообщение MM_MCINOTIFY, но то ли оно не приходит, то ли я его как-то не так ловлю. Я пользовал такую процедуру:
procedure MMMCINOTIFY( Var Message:TMessage); message MM_MCINOTIFY;
Она не вызывается в нужное время.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.026 c