用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心编程技巧计算机理论

实时混音的实现

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 12:08:12
ve数据,这时又有一路声音要求马上混叠并且被播放。

这种情况处理起来比较复杂。多路Wave数据经过混叠,存储到目的缓冲区,该目的缓冲区中的Wave数据在提交给输出设备前,是确定时长的。当有新的一路Wave数据要求加入时,Wave混音器必须要能确定目的缓冲区中的Wave数据已经播放到什么位置了,同时通知Wave播放设备当前所播放的Wave数据以及Wave设备播放队列中的所有Wave数据不再有效,然后从该时间点起,重新采样混叠各通道中余下未播放的Wave数据,采样混叠过程中加入新的一路要求混叠的Wave数据,将重新混叠的Wave数据提交给Wave输出设备,所有这一切必须在很短的时间完成,要不然用户可能听到声音有中断现象出现。而且这种方法中该重新采样的时间点比较难定。

  因此,对于这种情况还可以采用图2所示的方法来处理,也能达到同样的效果。这样Wave混音器不用中断Wave输出当前所在播放的数据,只要重新处理一下Wave设备播放队列中的Wave数据便可以了。

在混叠下一个目的缓冲区中数据时,包含进新的Wave数据。这种方法有一定的延时,延时的时间长度为,从重新混叠的数据提交到Wave设备的播放队列中算起,直到该缓冲区的Wave数据被播放开始为止。如果定义输出队列的长度3个缓冲区,那么延时的长度最长也就2个缓冲区中的Wave数据播放长度,要是缓冲区的长度设置的非常短的话,这种延时一般是不容易听出来的。

●播放过程中中止其中某一路Wave数据的播放。

  当正在播放多路Wave数据时,在某一通道中的Wave数据还未播放完成前,要求中止该通道中Wave数据的播放。对于这种情况的处理,与前面提到的情况(2)相似。Wave混音器首先确定当前缓冲区中Wave数据已经播放到什么位置,同时通知Wave播放设备当前所播放的Wave数据以及Wave设备播放队列中的所有Wave数据不再有效,然后从该时间点起,重新混叠余下的未播放的Wave数据,但在采样混叠过程不包括要求去除的Wave数据。

同样当前播放位置的确定比较困难,所以实际中解决的方法基本同第二种情况中方法2相同,不过在进行后续的采样混叠过程不是加入新的Wave数据,而是去除某一指定通道中的Wave数据。

4.结束语

  该方法已经在实际中使用,因考虑到网络中数据流量和系统的性能要求,话音数据的录制与播放都采用了8位单声道的格式,对于立体声16位Wave数据的混音处理较复杂,有待作进一步的研究。

参考文献

《Microsoft Corporation.Microsoft Windows Multimedia Programmer's Referce》 Microsoft Press 1995

《Advance Multimedia Programming》 电子工业版社 1995

《Microsoft Corporation.Microsoft Windows API Referce》 Microsoft Press 1999

上一页  [1] [2] 

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论

相关文章

PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:31,843.75000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号