Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
11-1084948870
RTWolf
2004-05-19 10:41
2005.01.09
Как в заголовок столбца вставить прозрачную картику?


14-1102599038
Постоянный посетитель
2004-12-09 16:30
2005.01.09
Приокрывая занавес или что же на самом деле стоит за error 500


1-1103643269
dron-s
2004-12-21 18:34
2005.01.09
Как высчитать проценты!


1-1103614176
M@D
2004-12-21 10:29
2005.01.09
Rename


14-1103525707
syte_ser78
2004-12-20 09:55
2005.01.09
завершение работы приложения





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