如何实现MciWnd连续播放多个音频

aoyihuashao 2010-10-15 02:38:14
目的:拆分成多个音频文件的一个音频尽可能无缝播放出来(不要通过合并音频文件的方式)

我把多个音频放在一个list里面

然后开线程播放

线程里面,播放后用信号量阻塞线程:

while(没播放完)
{
MCIWndOpen(pCtrl->m_hwndMCI,filename.GetBuffer(sizeof(filename)),0);
MCIWndPlay(pCtrl->m_hwndMCI);
WaitForSingleObject(pCtrl->m_eventForPlayer,-1);
}

等到播放完成后,MCIWND触发结束事件,在此设置信号量

void OnMCINotify(WPARAM wParam,LPARAM lParam)
{
if(lParam==MCI_MODE_STOP)
{
m_eventForPlayer.SetEvent();
}
}



、、、、、、、、、、、、、、、、、、、、、


现在的问题是:
在播放一个音频文件后,到触发结束事件之间,有将近一秒的延迟,所以导致两个音频衔接的很不好。



求教有什么办法可以解决。
...全文
197 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dengzikun 2010-10-19
  • 打赏
  • 举报
回复
音频文件头尾是否有静音数据?
zgl7903 2010-10-19
  • 打赏
  • 举报
回复
是不是音频文件的头尾就有空白的部分?
aoyihuashao 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dengzikun 的回复:]
参考
http://topic.csdn.net/t/20031229/22/2616057.html
[/Quote]


看过了,
第一个方法就是触发事件,有延迟。
第二个方法是按长度播放,我目前用的就这个,但总感觉不大好。
dengzikun 2010-10-15
  • 打赏
  • 举报
回复
aoyihuashao 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jyh_baoding 的回复:]
自己程序判断文件的长度,实时判断剩余的时间
[/Quote]

这个代价有点大了吧。


MCIWnd有没有办法用同步阻塞方式播放
jyh_baoding 2010-10-15
  • 打赏
  • 举报
回复
自己程序判断文件的长度,实时判断剩余的时间
aoyihuashao 2010-10-15
  • 打赏
  • 举报
回复
1楼和2楼的
感谢你们的回复。

不过,现在的问题不是加载耗费的时间,这个时间我可以接受。

问题是在第一个文件播放完之后,不能立刻触发结束消息,而要过600-800毫秒才触发,所以我每次播放下一个文件时,都要有600-800毫秒的延迟。
ship1912 2010-10-15
  • 打赏
  • 举报
回复
用两个MCI控件,一个播放的时候另一个加载好文件,播放完一个另一个直接开始
dengzikun 2010-10-15
  • 打赏
  • 举报
回复
在一个文件播放的同时,做好另一个文件的播放准备工作,
这样切换时间就会缩短,就是不知道MCI支持这样做吗?

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧