如何判断一个异步播放的声音是否已经终止?(50分)

  • 主题发起人 主题发起人 devil_li
  • 开始时间 开始时间
D

devil_li

Unregistered / Unconfirmed
GUEST, unregistred user!
如何判断一个异步播放的声音是否已经终止?
调用函数:PlaySound(FSoundStream.Memory, 0, SND_MEMORY or SND_ASYNC);
播放声音,但是怎么象控制面板/声音
里面的播放一样,异步播放完毕还能够知道播放完毕,从而通知按钮变为停止状态
(注:不要用线程的方法)
 
密切关注!!!
 
密切关注!!!
 
通过时间判断,或者用同步,放到一个线程中播放
 
同步会卡到这个地方吧。
gz
 
在线程中,主线程由不会停止!
 
异步开始播放的时候用TTIMER定一个时间,到了哪个时间音乐应该放完了,你可以先测试
 
线程的方法非常麻烦,虽然我已经用线程实现了。
因为我是在Dll中用的线程,所以不得不用消息通知窗口更新。
我想PlaySound既然有异步播放,应该会有更简单的方法实现

Timer的方法,你怎么得到Sound的播放时间?这是跟设备相关的
 
这个和你文件大小是有关系的,不过我也认为不太好,这个还和系统的速度有点关系
我继续想想有没有其他的办法
 
今天突然发现,我原来的线程播放的方法不行!
没办法,只好用MediaPlayer控件搞定,方法是:
在MediaPlayer.OnNotify事件中判断
if MediaPlayer.NotifyValue = nvSuccessful then

.......
不过,这样就只能在文件中播放,而不能在内存中播放了
我原来的考虑是:从数据库下载音乐,直接播放,现在不得不SaveToFile,
播放完毕还要自己删掉,效率比较低下。

谁还有更好的方法?
 
用线程,直接读取wav文件(PlaySound只能播放wav)
这样才能知道何时结束,而且又不会像用同步那样停下来。
 
"这样才能知道何时结束"
怎么知道?
 
后退
顶部