如何播放*.wav文件???(100分)

  • 主题发起人 主题发起人 霖霖
  • 开始时间 开始时间

霖霖

Unregistered / Unconfirmed
GUEST, unregistred user!
我在Delphi中用PlaySound() 这个API来播放声音(*.wav)文件,当播放一个较长的文件时,我什么都不能做了,只能等到播放完后程序才能响应鼠标操作。我于是专门创建了一个线程来播放声音文件,有没有其他的办法呢??? 还有一个问题就是不能同时播放多个声音文件,比如,我要在程序中播放背景音乐的同时,还需要播放一些其它的声音文件,怎么才能实现呢???
 
用TMediaPlayer控件!
如果要更深入研究
可以根据MMtools控件来研究Window API!
 
我有一个控件,用起来不错的,给我邮件发给你
 
To ayu310:
我的邮箱:coolzwl@51.net , 谢了。
 
sndPlaySound(PChar(文件名), SND_NODEFAULT or SND_NOWAIT or SND_ASYNC);
 
我遇到过和你相同的情况,使用一个线程调用PlaySound()播放*.wav就可以了:)
 
邮件已发
 
用PLAYSOUND好象不用等播放完才能动作吧?
如: playsound('systemstart',1,snd_async);
 
To ayu310:
已经收到,但是不能编编译,报错说找不到TAudio类。
 
To wmsoft:
这样 playsound('systemstart',1,snd_async) 是可以响应动作了,但是我播放其它文件时,先前播放的就被停止了,不能同时播放,没法实现背景音乐的效果。
 
诸位,我不想有TMediaPlayer控件,不用控件不会很难实现吧?
 
用一个线程来播放背景音乐是可以的,我多次实践过。
 
这是一个简单的经过测试的例子,用TMediaPlayer播放音乐的同时,点击Button2来同步播放背景音乐。
unit utMain;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MPlayer;

type
TForm1 = class(TForm)
MediaPlayer1: TMediaPlayer;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


var
Form1: TForm1;

implementation

{$R *.dfm}

uses
utPlaySoundThread;

procedure TForm1.Button1Click(Sender: TObject);
begin

MediaPlayer1.FileName := 'D:/MyProgram/Delphi/Temp/01.mp3';
MediaPlayer1.Open;
end;


procedure TForm1.Button2Click(Sender: TObject);
var
ps:TPlaySound;
begin

ps := TPlaySound.Create(False);
end;


end.


*************************播放背景音乐的线程

unit utPlaySoundThread;

interface

uses
Classes, Mmsystem;

type
TPlaySound = class(TThread)
private
{ Private declarations }
protected
procedure Execute;
override;
procedure Play;
end;


implementation

{ Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example,

Synchronize(UpdateCaption);

and UpdateCaption could look like,

procedure TPlaySound.UpdateCaption;
begin

Form1.Caption := 'Updated in a thread';
end;

}

{ TPlaySound }

procedure TPlaySound.Play;
begin

PlaySound('D:/MyProgram/Delphi/Temp/music.wav',1,SND_ASYNC);
end;


procedure TPlaySound.Execute;
begin

{ Place thread code here }
Synchronize(Play);
end;


end.
 
不用TMediaPlayer,只有用线程了。其实用tmediaplayer也挺好的,又是自带控件,
为什么舍易取难呢?
 
多人接受答案了。
 
后退
顶部