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

Вниз

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 вся ветка

Текущий архив: 2005.01.09;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.038 c
14-1102889726
vecna
2004-12-13 01:15
2005.01.09
hl2


14-1103642476
Болтуны, кто они?
2004-12-21 18:21
2005.01.09
Предлагаю выбрать наиболее болтливых, по принципу:


1-1103438626
Алексей Петухов
2004-12-19 09:43
2005.01.09
LoadFromClipboardFormat


14-1103725095
oldman
2004-12-22 17:18
2005.01.09
Господа модераторы!


1-1102430073
Aser
2004-12-07 17:34
2005.01.09
Как включить WordWrap в TSynEdit? (Delphi-подобный RichEdit)