![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
midi
AlexZ_CRC © (2004-05-19 07:14:00)Кто-нибудь напишет, как играть миди? И PlaySound в KOL что-то ругается...
PS Где найти документацию по применению KOLLabelEffect и KOLCoolForm?
z007 (2004-05-23 22:38:00) [1]>>Этот модуль (uSound)на KOL не пиши - просто нет смысла,
>>т.к. он не содержит VCL компонентов, а стало быть и
>>уменьшения exe файла ты не получишь.
Не совсем так.TStream- объявлен вsysutilsи при его использовании можно получит лишних до 20-30 Кб.
ЗатоPStream- объявлен вKOL.
AlexZ_CRC (2004-05-22 18:26:00) [2]>>Естественно будет там падать, ведь 'LENINGRAD' имя моего ресурса :)
В uMain.pas модуле твоей KOL программы добавь в список uses модуль uSound.
И главное: не забудь прилинковать файл с ресурсами {$R твой_файл_с_музыкой.res}
Так, естественно, всё прикреплено.
>>Этот модуль (uSound)на KOL не пиши - просто нет смысла, т.к. он не содержит VCL компонентов, а стало быть и уменьшения exe файла ты не получишь.
Попробывал на КОЛ переделать, т.к. думал что прога на КОЛ, то и модуль должен его включать.
--------------
Вот переделал малость, как подсказал z007. Всё стало круто!
--------------
ВСЕМ ВСЕМ КТО НАСТУПАЛ НА ЭТИ ГРАБЛИ ДО МЕНЯ И ПОМОГ МНЕ ОГРОМНОЕ СПАСИБО (т.е. 2 *Pavel & z007)!!! ОБЩИМИ СИЛАМИ ПРОБЛЕМА РЕШЕНА! БЛИН, просто нет слов!
--------------
2*PavelВы в аське поговорить не желаете ;)? На след. недельке.
*Pavel (2004-05-22 10:09:00) [3]2 AlexZ_CRC
Этот модуль (uSound)на KOL не пиши - просто нет смысла, т.к. он не содержит VCL компонентов, а стало быть и уменьшения exe файла ты не получишь.
*Pavel (2004-05-22 09:55:00) [4]>>...падает где-то в этих процах:
>>ResourceStream :=TResourceStream.Create(hInstance, 'LENINGRAD', 'MIDI');
>>ResourceStream.SaveToFile(WinTmpDir + 'music.mid');
>>ResourceStream.Free;
Естественно будет там падать, ведь 'LENINGRAD' имя моего ресурса :)
В uMain.pas модуле твоей KOL программы добавь в список uses модуль uSound.
И главное: не забудь прилинковать файл с ресурсами {$R твой_файл_с_музыкой.res}
z007 (2004-05-22 00:15:00) [5]2 AlexZ_CRC
>>пишу на KOL ессно
Если на KOL, то при каких делах тутTResourceStream?
Полагаю, имеется ввиду, что:
1. вместоTResourceStreamиспользуетсяpStream?
2. вusesпрописано только Windows, MMsystem, kol;?
3. к программе приделан файл{$R midi.res}c ресурсом типа 'MIDI' по имени 'LENINGRAD'?
4. и вообще начало initSound выглядит так:
procedureinitSound;???????
vardwReturn : 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;
Если да, то не пойму, какие проблемы?
AlexZ_CRC (2004-05-21 20:54:00) [6]...падает где-то в этих процах:
ResourceStream :=TResourceStream.Create(hInstance, 'LENINGRAD', 'MIDI');
ResourceStream.SaveToFile(WinTmpDir + 'music.mid');
ResourceStream.Free;
Буду искать. Т.е. Файла не создаёт. Возможно, что-то с подгрузкой из ресурса.
PS пишу на KOL ессно.
AlexZ_CRC (2004-05-21 17:50:00) [7]Вот это - настоящее решение проблемы.
Спасибо за код (ато сам уже не в состоянии на IDE и лого Делфи смотреть).
*Pavel (2004-05-21 13:12:00) [8]Сколько я не долбался - из ресурса миди не играет. Вариант с промежуточным сохранением миди из ресурса на диск, а затем его воспроизведение выкладываю здесь, авось кому пригодится.
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 06:21:00) [9]забыл, мыло: az_crc(a)mail.ru
AlexZ_CRC (2004-05-21 06:19:00) [10]Ну ладно, итог:
1) да, он играет.
2) согласен
3) странно (у меня руки кривые) Но красивую форму и на АПИ можно соорудить
4) Всё таки интересно. (в мыло можно?)
5) ну проблема остаётсяяя проблемой
6) да, нашёл в гугле
--------------------
не буду никого больше мучить этим вопросом (что-нибудь другое придумаю, ассемблер - рулит)
--------------------
Gandalf (2004-05-20 22:18:00) [11]1) PlaySound играет
2) PlaySound играет только wav
3) CoolForm работает
4) Если не устраивает у меня есть аналог CoolForm - он без MCK, но мне он больше нравиться, если надо пиши намылю.
5) Про саунд в ФАК'и включать не надо - у нас не кружок аудифилов, есть другие конфы - для KOL тут нет ничего специфичного
6) KOLMediaPlayer есть, он работает, и скачать его можно тут-же или у Кладова.
AlexZ_CRC (2004-05-20 21:29:00) [12]Щас с ума сойду...
Вот wave играет так (ещё проще!):
pData := Pointer(FindResource(hInstance, 'start','wave'));
// wave - секция в ресурсе, start - имя файла в ресурсе
// pData : pointer
PlaySound('start',hInstance, SND_RESOURCE or SND_ASYNC);
Но как сделать чтобы МИДИ играл? делфи умалчивает :(
наверное, никак...
mdw (2004-05-20 20:52:00) [13]Да, ShowMessage(Int2Str(MS.Size)) не нужно, забыл удалить:))
mdw (2004-05-20 20:50:00) [14]Насколько я знаю, 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;
AlexZ_CRC (2004-05-20 19:16:00) [15]Не, ну меня щас Св.Кондратий хватит:
// 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 дня крутил эти строки как только можно(и нельзя). Не играет. (Закомментировано для того, чтобы не переписывать заново)
Falcon (2004-05-20 18:08:00) [16]KOLMediaPlayer на этом сайте можно взять.
А CoolForm работает, я Вас уверяю.
AlexZ_CRC (2004-05-20 17:39:00) [17]С главной страницы качал. Отсюда.
-----------
Блин, PlaySound в MMSystem был. А KOLMediaPlayer где находится? Что-то его невидно.
Falcon (2004-05-20 09:15:00) [18]И про CoolForm тоже неправду. :) Я ставил, пробовал. Все работает, хоть и не все там мне нравится. Откуда компонент качали?
SPeller (2004-05-20 03:18:00) [19]
> PlaySound в KOL что-то ругается
Неправду говорите. Не может PlaySound не работать из-за KOL.
AlexZ_CRC (2004-05-19 19:56:00) [20]Забыл сказать: играть миди из ресурсов. Или суть от этого не меняется? А xm играть можно? Там связать с типом THandle надо, если не ошибаюсь...
>> xHelpGen
Что-то я не понял... т.е. экспериментировать?
----------
А CoolForm вобще отказывается устанавливаться. Видимо автор что-то в пакет не положил.
----------
Про саунд вопрос в ФАКи включить бы