最近有做项目,在WinCE下从一个音频设备获取数据,通过另一个音频设备输出。要求是尽量小的延迟,声音不要有停顿,也不能有丢失,在高的采样率的情况下,尽量少的占用cpu。东西很简单,但要做好也挺麻烦,特别是有了上面的要求。
先简单介绍一下思路:
使用wavein系列API,从一个音频驱动中读数据,然后使用waveout系列的API,把读到的数据写到另外一个音频驱动中。
如何实现比较好的性能。
1、Buffer尽量小,以减小延迟。为了保持声音连续和稳定,可以多开几个buffer。
2、尽量不要搬动数据,当采样率高了以后,数据量其实是挺大的,做一次复制操作就会消耗一定的CPU。经过N次的实验,终于成功让两个驱动使用了一组buffer,避免了数据的复制。
3、读和写一定要使用两个线程,中间使用消息等方式沟通。避免声音的停顿和丢失。
几个重要的变量和空间: