关于背景音乐的播放? (40分)

  • 主题发起人 主题发起人 ptfjy
  • 开始时间 开始时间
P

ptfjy

Unregistered / Unconfirmed
GUEST, unregistred user!
需要有背景音乐不停的播放,要随时可以替换和终止。
由于要使用多个 FORM,在操作时不会有停顿的
感觉(播放下一曲歌时,会停顿2-3秒) ,
所以我想利用线程,不知道如何做。
能给个例子吗?
我的e-mail:fhfjy@msn.com
 
你只是在线程中运行了FPlayer.Play,完成这个动作之后线程就结束了。实际上媒体流并不是在线程中播放的。
 
zw84611:你好!
你说的对, 但我该如何使音乐停止播放呢?
--------------------------------------
我用音乐做软件的背景音乐, 因为当播放下一首歌时,软件需等待2-3秒,
所以, 我考虑用线程, 用线程后一切如愿, 但就时不能停止播放了,
最好, 能立刻响应停止播放。
 
高手帮忙!
 
你用什么方法播?
 
用MediaPlayer播放mid,做背景音乐。
 
这是一个简单的经过测试的例子,用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.

 
下面的代码打开音乐文件及播放时,其它操作肯定也会停顿2-3秒。
所以也不行啊! 肯定需将这些代码放到线程中, 希望能随时“停播”
procedure TForm1.Button1Click(Sender: TObject);
begin
MediaPlayer1.FileName := 'D:/MyProgram/Delphi/Temp/01.mp3';
MediaPlayer1.Open;
end;

 
◇[DELPHI]播放背景音乐
uses mmsystem
//播放音乐
MCISendString('OPEN e:/1.MID TYPE SEQUENCER ALIAS NN', '', 0, 0);
MCISendString('PLAY NN FROM 0', '', 0, 0);
MCISendString('CLOSE ANIMATION', '', 0, 0);
end;
//停止播放
MCISendString('OPEN e:/1.MID TYPE SEQUENCER ALIAS NN', '', 0, 0);
MCISendString('STOP NN', '', 0, 0);
MCISendString('CLOSE ANIMATION', '', 0, 0);
 
我想用Mediaplayer, 能否用线程完成呢?
--------------------------------------------
谢谢上面各位朋友的关注!
 
在线程中截获系统消息, 需要停播时, 发一个消息
 
如何做到“需要停播时, 发一个消息 ”?
 
我有一个,不过不是多线程的,发给你了。
 
我的e-mail:fhfjy@msn.com
现在还没有收到。
 
被退回来了,你还有别的信箱没有??
 
fsse2000@163.net
 
app2001:你好
--------------------------------------
我的信箱是 fhptfjy@mail.nbptt.zj.cn
谢谢!
 
to app2001:你好!
请问:
◇[DELPHI]播放背景音乐
uses mmsystem
//播放音乐
MCISendString('OPEN e:/1.MID TYPE SEQUENCER ALIAS NN', '', 0, 0);
MCISendString('PLAY NN FROM 0', '', 0, 0);
MCISendString('CLOSE ANIMATION', '', 0, 0);
end;
//停止播放
MCISendString('OPEN e:/1.MID TYPE SEQUENCER ALIAS NN', '', 0, 0);
MCISendString('STOP NN', '', 0, 0);
MCISendString('CLOSE ANIMATION', '', 0, 0);
如何循环播放音乐?????
 
后退
顶部