- 中查找“实时混音的实现”更多相关内容
- 中查找“实时混音的实现”更多相关内容
- ·上一篇文章:国际税收新课题
- ·下一篇文章:CAI课件的设计
实时混音的实现
这种情况处理起来比较复杂。多路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