Показать сообщение отдельно
  #14  
Старый 15.01.2012, 10:13
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от Kaktuz
И таких программок штук десять и каждую запускать
вообще-то имелось в виду создавать нужное количество экземпляров TMCIPlayer (предполагалось обернуть все в класс), каждый отвечает за свой звук (запуск 2-х программ был для примера демонстрации микшера).

Код:
uses
  MMSystem,

type
  TMCIPlayer = class
  private
    FDeviceID: Cardinal;
  public
    constructor Create(FileName: String);
    destructor Destroy; override;
    procedure Play;
    procedure Stop;
  end;

{ TMCIPlayer }

constructor TMCIPlayer.Create(FileName: String);
var
  OpenParms: TMCI_Open_Parms;
  FFlags: Longint;
  FError: Longint;
  Buffer: array [0..$ff] of Char;
begin
  inherited Create;
  OpenParms.dwCallback:=0;
  OpenParms.wDeviceID:=0;
  OpenParms.lpstrDeviceType:='';
  OpenParms.lpstrElementName:=PChar(FileName);
  OpenParms.lpstrAlias:=PChar(IntToStr(GetTickCount)+#0);
  FFlags:=MCI_WAIT or MCI_OPEN_ELEMENT or MCI_OPEN_ALIAS;
  FError:=mciSendCommand(0, MCI_OPEN, FFlags, Longint(@OpenParms));
  if FError=0 then FDeviceID:=OpenParms.wDeviceID
  else
  begin
    FDeviceID:=0;
    mciGetErrorString(FError, @Buffer[0], Length(Buffer));
    ShowMessage(StrPas(@Buffer[0]));
  end;
end;

destructor TMCIPlayer.Destroy;
var
  GenericParms: TMCI_Generic_Parms;
  FFlags: Longint;
begin
  if FDeviceID<>0 then
  begin
    GenericParms.dwCallback:=0;
    FFlags:=MCI_WAIT;
    if mciSendCommand(FDeviceID, MCI_CLOSE, FFlags, Longint(@GenericParms))=0 then
      FDeviceID:=0;
  end;
  inherited Destroy;
end;

procedure TMCIPlayer.Play;
var
  PlayParms: TMCI_Play_Parms;
  FFlags: Longint;
begin
  if FDeviceID<>0 then
  begin
    FFlags:=MCI_NOTIFY;
    PlayParms.dwCallback:=0;
    PlayParms.dwFrom:=0;
    PlayParms.dwTo:=0;
    mciSendCommand(FDeviceID, MCI_PLAY, FFlags, Longint(@PlayParms));
  end;
end;

procedure TMCIPlayer.Stop;
var
  GenericParms: TMCI_Generic_Parms;
  FFlags: Longint;
begin
  if FDeviceID<>0 then
  begin
    FFlags:=MCI_WAIT;
    GenericParms.dwCallback:=0;
    mciSendCommand(FDeviceID, MCI_STOP, FFlags, Longint(@GenericParms));
  end;
end;

ну и дальше:

Код:
TMCIPlayer.Create('c:\Windows\Media\flourish.mid').Play;
..
TMCIPlayer.Create('c:\Windows\Media\Windows Ringin.wav').Play;

не забывая разрушать объекты.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием