Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.06;
Скачать: CL | DM;

Вниз

Музыка в игре. 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
14-16637
Cerber
2004-01-13 15:55
2004.02.06
Хостинг


1-16471
Fom
2004-01-27 19:10
2004.02.06
Как сделать выход из функции типа return C?


3-16132
Layner
2004-01-14 16:31
2004.02.06
Подскажите плз, как запретить перетаскивание колонок в DBGrid?


14-16746
Andy
2004-01-15 19:51
2004.02.06
№ билда для


6-16543
kalik
2003-12-05 09:50
2004.02.06
multicast