Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
3-16153
Boroda Oleg
2004-01-14 16:26
2004.02.06
Обновление БД Interbase через Query автоматически


1-16367
Кен
2004-01-16 06:03
2004.02.06
Как подружить тритичную систему с двоичной ?


3-16095
dalamar
2004-01-08 04:10
2004.02.06
SQL ADO connection и Access. Проблема вставки данных


8-16516
Винни Пух
2003-10-04 20:46
2004.02.06
Volume


8-16533
killsniper
2003-09-29 13:39
2004.02.06
Проблемы с установкой GLScene





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский