Форум: "KOL";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Внизmidi Найти похожие ветки
← →
AlexZ_CRC (2004-05-19 07:14) [0]Кто-нибудь напишет, как играть миди? И PlaySound в KOL что-то ругается...
PS Где найти документацию по применению KOLLabelEffect и KOLCoolForm?
← →
Gandalf (2004-05-19 09:14) [1]1) midi играть через MediaPlayer
2) KOLLabelEffect - только xHelpGen
3) KOLCoolForm - к автору
← →
AlexZ_CRC (2004-05-19 19:56) [2]Забыл сказать: играть миди из ресурсов. Или суть от этого не меняется? А xm играть можно? Там связать с типом THandle надо, если не ошибаюсь...
>> xHelpGen
Что-то я не понял... т.е. экспериментировать?
----------
А CoolForm вобще отказывается устанавливаться. Видимо автор что-то в пакет не положил.
----------
Про саунд вопрос в ФАКи включить бы
← →
SPeller © (2004-05-20 03:18) [3]
> PlaySound в KOL что-то ругается
Неправду говорите. Не может PlaySound не работать из-за KOL.
← →
Falcon © (2004-05-20 09:15) [4]И про CoolForm тоже неправду. :) Я ставил, пробовал. Все работает, хоть и не все там мне нравится. Откуда компонент качали?
← →
AlexZ_CRC (2004-05-20 17:39) [5]С главной страницы качал. Отсюда.
-----------
Блин, PlaySound в MMSystem был. А KOLMediaPlayer где находится? Что-то его невидно.
← →
Falcon © (2004-05-20 18:08) [6]KOLMediaPlayer на этом сайте можно взять.
А CoolForm работает, я Вас уверяю.
← →
AlexZ_CRC (2004-05-20 19:16) [7]Не, ну меня щас Св.Кондратий хватит:
// 555 - имя мидишки в ресурсе
hResource:=LoadResource( hInstance, FindResource(hInstance,
"555", RT_RCDATA));
pData := LockResource(hResource);
//pData := Pointer(FindResource(hInstance, "555",""));
PlaySound(pData,hResource, SND_MEMORY or SND_RESOURCE or SND_SYNC); // АПИ пытаюсь юзать...
//sndPlaySound(pData, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
3 дня крутил эти строки как только можно (и нельзя). Не играет. (Закомментировано для того, чтобы не переписывать заново)
← →
mdw (2004-05-20 20:50) [8]Насколько я знаю, midi PlaySound играть не будет. А для WAV, так:
Создаешь ресурсЮ например
Snd RCDATA "01.wav"
Далее само воспроизведение:
procedure TJMCtrlMainForm.Button2Click(Sender: PObj);
var MS: PStream;
begin
MS:= NewMemoryStream;
Resource2Stream(MS, HInstance, "Snd", RT_RCDATA);
ShowMessage(Int2Str(MS.Size));
PlaySound(MS.Memory , 0, SND_MEMORY);
end;
← →
mdw (2004-05-20 20:52) [9]Да, ShowMessage(Int2Str(MS.Size)) не нужно, забыл удалить:))
← →
AlexZ_CRC (2004-05-20 21:29) [10]Щас с ума сойду...
Вот wave играет так (ещё проще!):
pData := Pointer(FindResource(hInstance, "start","wave"));
// wave - секция в ресурсе, start - имя файла в ресурсе
// pData : pointer
PlaySound("start",hInstance, SND_RESOURCE or SND_ASYNC);
Но как сделать чтобы МИДИ играл? делфи умалчивает :(
наверное, никак...
← →
Gandalf (2004-05-20 22:18) [11]1) PlaySound играет
2) PlaySound играет только wav
3) CoolForm работает
4) Если не устраивает у меня есть аналог CoolForm - он без MCK, но мне он больше нравиться, если надо пиши намылю.
5) Про саунд в ФАК"и включать не надо - у нас не кружок аудифилов, есть другие конфы - для KOL тут нет ничего специфичного
6) KOLMediaPlayer есть, он работает, и скачать его можно тут-же или у Кладова.
← →
AlexZ_CRC (2004-05-21 06:19) [12]Ну ладно, итог:
1) да, он играет.
2) согласен
3) странно (у меня руки кривые) Но красивую форму и на АПИ можно соорудить
4) Всё таки интересно. (в мыло можно?)
5) ну проблема остаётсяяя проблемой
6) да, нашёл в гугле
--------------------
не буду никого больше мучить этим вопросом (что-нибудь другое придумаю, ассемблер - рулит)
--------------------
← →
AlexZ_CRC (2004-05-21 06:21) [13]забыл, мыло: az_crc(a)mail.ru
← →
*Pavel © (2004-05-21 13:12) [14]Сколько я не долбался - из ресурса миди не играет. Вариант с промежуточным сохранением миди из ресурса на диск, а затем его воспроизведение выкладываю здесь, авось кому пригодится.
unit uSound;
interface
procedure initSound;
procedure deInitSound;
implementation
uses Windows, MMsystem, Classes, SysUtils;
var wDeviceID : word;
WinTmpDir : string;
procedure initSound;
var dwReturn : DWord;
mciOpenParms : MCI_OPEN_PARMS;
mciPlayParms : MCI_PLAY_PARMS;
mciStatusParms : MCI_STATUS_PARMS;
mciSeqSetParms : MCI_SEQ_SET_PARMS;
ResourceStream : TResourceStream;
buf: array[0..MAX_PATH - 1] of char;
begin
GetTempPath(SizeOf(Buf),@Buf);
WinTmpDir := IncludeTrailingPathDelimiter(copy(buf,1,lstrlen(@buf)));
try
ResourceStream :=TResourceStream.Create(hInstance, "LENINGRAD", "MIDI");
ResourceStream.SaveToFile(WinTmpDir + "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 := PChar(WinTmpDir + "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(WinTmpDir + "music.mid");
end;
end.
← →
AlexZ_CRC (2004-05-21 17:50) [15]Вот это - настоящее решение проблемы.
Спасибо за код (ато сам уже не в состоянии на IDE и лого Делфи смотреть).
← →
AlexZ_CRC (2004-05-21 20:54) [16]...падает где-то в этих процах:
ResourceStream :=TResourceStream.Create(hInstance, "LENINGRAD", "MIDI");
ResourceStream.SaveToFile(WinTmpDir + "music.mid");
ResourceStream.Free;
Буду искать. Т.е. Файла не создаёт. Возможно, что-то с подгрузкой из ресурса.
PS пишу на KOL ессно.
← →
z007 (2004-05-22 00:15) [17]2 AlexZ_CRC
>>пишу на KOL ессно
Если на KOL, то при каких делах тутTResourceStream
?
Полагаю, имеется ввиду, что:
1. вместоTResourceStream
используетсяpStream
?
2. вuses
прописано только Windows, MMsystem, kol;
?
3. к программе приделан файл{$R midi.res}
c ресурсом типа "MIDI" по имени "LENINGRAD"?
4. и вообще начало initSound выглядит так:procedure initSound;
???????
var dwReturn : DWord;
mciOpenParms : MCI_OPEN_PARMS;
mciPlayParms : MCI_PLAY_PARMS;
mciStatusParms : MCI_STATUS_PARMS;
mciSeqSetParms : MCI_SEQ_SET_PARMS;
ResourceStream : pStream; {Ясное дело, изменили здесь}
buf: array[0..MAX_PATH - 1] of char;
begin
GetTempPath(SizeOf(Buf),@Buf);
WinTmpDir := IncludeTrailingPathDelimiter(copy(buf,1,lstrlen(@buf)));
try
{Здесь, разумеется, тоже: стандартный вариант так,
но можно подправить Resource2Stream и сохранять
в файл одной процедурой}
ResourceStream := NewWriteFileStream(WinTmpDir + "music.mid");
{obvious}
Resource2Stream(ResourceStream,hinstance,"MUS","MIDI");
finally
{больше не нужен...}
ResourceStream.Free;
end;
Если да, то не пойму, какие проблемы?
← →
*Pavel © (2004-05-22 09:55) [18]>>...падает где-то в этих процах:
>>ResourceStream :=TResourceStream.Create(hInstance, "LENINGRAD", "MIDI");
>>ResourceStream.SaveToFile(WinTmpDir + "music.mid");
>>ResourceStream.Free;
Естественно будет там падать, ведь "LENINGRAD" имя моего ресурса :)
В uMain.pas модуле твоей KOL программы добавь в список uses модуль uSound.
И главное: не забудь прилинковать файл с ресурсами {$R твой_файл_с_музыкой.res}
← →
*Pavel © (2004-05-22 10:09) [19]2 AlexZ_CRC
Этот модуль (uSound)на KOL не пиши - просто нет смысла, т.к. он не содержит VCL компонентов, а стало быть и уменьшения exe файла ты не получишь.
← →
AlexZ_CRC (2004-05-22 18:26) [20]>>Естественно будет там падать, ведь "LENINGRAD" имя моего ресурса :)
В uMain.pas модуле твоей KOL программы добавь в список uses модуль uSound.
И главное: не забудь прилинковать файл с ресурсами {$R твой_файл_с_музыкой.res}
Так, естественно, всё прикреплено.
>>Этот модуль (uSound)на KOL не пиши - просто нет смысла, т.к. он не содержит VCL компонентов, а стало быть и уменьшения exe файла ты не получишь.
Попробывал на КОЛ переделать, т.к. думал что прога на КОЛ, то и модуль должен его включать.
--------------
Вот переделал малость, как подсказал z007. Всё стало круто!
--------------
ВСЕМ ВСЕМ КТО НАСТУПАЛ НА ЭТИ ГРАБЛИ ДО МЕНЯ И ПОМОГ МНЕ ОГРОМНОЕ СПАСИБО (т.е. 2 *Pavel & z007)!!! ОБЩИМИ СИЛАМИ ПРОБЛЕМА РЕШЕНА! БЛИН, просто нет слов!
--------------
2*Pavel Вы в аське поговорить не желаете ;)? На след. недельке.
← →
z007 (2004-05-23 22:38) [21]>>Этот модуль (uSound)на KOL не пиши - просто нет смысла,
>>т.к. он не содержит VCL компонентов, а стало быть и
>>уменьшения exe файла ты не получишь.
Не совсем так.TStream
- объявлен вsysutils
и при его использовании можно получит лишних до 20-30 Кб.
ЗатоPStream
- объявлен вKOL
.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.033 c