真正的音频高手们,一个很专业的问题(续)

wqyuwss 2002-08-06 12:28:13
上一个贴子的内容是将多路声音进行混音,这里的问题是多路声音分别送到不同的声卡上播放。有下面几个问题,请高手进行指点!!!
1。采用waveout***,可以正确播放,但是一旦两路以上开始播放,停止时调用waveoutReset则debug不下去了,不知道是怎么一回事。一路的时候好好的,多路的时候为什么就不行了?
2。采用dsound的话,如上一个贴子,会有以下问题:“输出单路时用dsound没有用waveOut的效果好,所以我没有用dsound。而且用dsound有个毛病:别的窗口将该窗口覆盖时都放不出声音了,非要让播放窗口激活,而且机器不锁定以后甚至屏保后也放不出声音来”。是的,好像有杂音!怎么回事呢?
3。播放mp3时,不是应该先解压么?这样的话,不是会消耗计算时间。如何确定buffer的大小?因该不是一解压就播放吧!!!
请众位一定要帮忙告诉我这个问题呀!!!!!!!!!!
...全文
39 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wqyuwss 2002-08-12
  • 打赏
  • 举报
回复
finalvictory(维克) 我已经发给你了。
帮我看看了,谢谢你了
finalvictory 2002-08-09
  • 打赏
  • 举报
回复
finalvictory@etang.com,不知道能不能帮上忙啊
wqyuwss 2002-08-09
  • 打赏
  • 举报
回复
finalvictory(维克) :告诉我你的mail.我把我的程序发给你,大家一起研究一下,如何。是MP3的播放。谢谢了。
其他有兴趣的朋友欢迎一起来讨论
finalvictory 2002-08-06
  • 打赏
  • 举报
回复
哦?多谢夸奖,言过其实了,呵呵!

1、如果是这样的话,一台机器上插几块声卡我还真是没搞过,所以就不便多说些什么了。

3、像这种长时间播放,又有稳定的数据源(你是说从文件播放是吧?),最好是使用DSound的流式缓冲,只要你能够保证解压得倒的数据是PCM格式的,DSound就可以胜任。具体做法你可以看看MSDN中的一篇技术文章,96年写的,讲得非常好,但是好像没有多少人注意,精确位置我也记不清了,但是绝对在DirectX文章区内,好像在Technical Articles -> Graphics & Multimedia -> DirectX -> DirectSound -> Streamming Buffers什么的。
wqyuwss 2002-08-06
  • 打赏
  • 举报
回复
首先谢谢你,维克,从上面贴子中的回答,看出你很精通声卡的各种播放问题,希望可以与你切磋。
所谓的“多路声音分别送到不同的声卡上播放”就是在一个机子上有多个声卡,可以分别协同工作。用户选择声卡和文件,相应的在声卡上播放。
1。是在98下,我想handle应该是没有传错的,至于声卡驱动,可是单个声卡上都可以好好工作的。为什么多个的时候就不行了???
2。谢谢你的这个回答。
3。多线程怎么可以解决buffer长度的问题呢?也就是保证解压得不多,并且足够播放。我现在使用waveoutWrite去写的。每当接收到WOM_DONE的消息时,就继续播放已经解压得数据,但我发现还是不行。我也使用的多线程。给个建议把。真不象图像,解出一帧后,就可以直接画屏了。很少接触audio。请执教
finalvictory 2002-08-06
  • 打赏
  • 举报
回复
先问一下,什么叫做“多路声音分别送到不同的声卡上播放”呀?

1.肯定是你自己内存没有搞清楚,传了一个错误的handle。或者,你在win98下吗?在win98下,有些声卡由于驱动程序的原因,不允许同时开两个handle的,win2000没有这个问题。

2.失去焦点以后停止播放是因为你在创建DSoundBuffer的时候没有指定DSBCAPS_GLOBALFOCUS;屏保后声音放不出来是因为你没有处理DSERR_BUFFERLOST的情况;有杂音是因为在Secondary Buffer建立起来以后没有用静音字节填充缓冲区。

3.用多线程很容易解决这个问题的。
wqyuwss 2002-08-06
  • 打赏
  • 举报
回复
up以下,请众位帮帮忙了,分不够的话,我会继续加的

8,304

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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