Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Способы параллельного воспроизведения звука


Автор: yogin 3.5.2008, 23:17
Очень прошу помочь или пояснить следующие моменты параллельного проигрывания музыкальных файлов, возьмём самые лёгкие - wav. Я долго искал возможности одновременного проигрыша, но нашёл только следующее:
Код

uses  
  ... MMSystem; 

...
 
procedure SendMCICommand(Cmd: string);  
var  
  RetVal: Integer;  
  ErrMsg: array[0..254] of char;  
begin  
  RetVal := mciSendString(PChar(Cmd), nil, 0, 0);  
  if RetVal <> 0 then  
  begin  
    {get message for returned value}  
    mciGetErrorString(RetVal, ErrMsg, 255);  
    MessageDlg(StrPas(ErrMsg), mtError, [mbOK], 0);  
  end;  
end;  

procedure TForm1.FormCreate(Sender: TObject);
begin
    SendMCICommand('open waveaudio shareable');  
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
    SendMCICommand('close waveaudio');  
end;

procedure TForm1.Button1Click(Sender: TObject);  
begin  
   SendMCICommand('play "C:\xyz\BackgroundMusic.wav"');
end;


Пример хороший, только совершенно неполный.
Как с помощью такого способа:
Проигрывать файл из ресурсов?
Проигрывать файл циклически? - аналог playsound('sound.wav', 0, SND_FILENAME Or SND_ASYNC Or SND_NODEFAULT Or SND_LOOP)
Прекращать проигрывание файла?

Вообщем я хотел бы увидеть все возможные команды процедуры SendMCICommand();, которые нигде не нашёл  smile 
Буду премного благодарен!
P.S.  smile 

Автор: Qu1nt 4.5.2008, 09:42
Подсмотри реализацию TMediaPlayer (MPlayer.pas).

Автор: yogin 4.5.2008, 20:40
Посмотрел, видел приминение типа: 
mciSendCommand( FDeviceID, mci_Step, FFlags, Longint(@AStepParm) ),
но нет времени разбираться в написанных параметрах. Хотелось бы просто чёткого ответа или ссылки на чёткий ответ.

Автор: yogin 10.5.2008, 11:08
Узнал, что кроме команды 'open'  так же имеют силу следующие:
' stop "TRACK.WAV" '     - останавливает проигрывание указанного трека
' pause "TRACK.WAV" '   - пауза
' resume "TRACK.WAV" ' - продолжение после паузы
От сюда следует, что зацикливание можно сделать с помощью таймера времени трэка, да и вообще если трэк играет, то вызов его командой play при его проигрыше, ничего не даст, он просто будет продолжать играть.
Вообщем как у TMediaPlayer. но так и не узнал как пишится команда, чтобы проигрывать из ресурсов... smile 
Или аналогичный вопрос, исходя из анализа сказанного, - может-ли TMediaPlayer проигрывать файлы из ресурсов?

Помогите-подскажите, оч прошу...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)