阅读:1472回复:2
声卡录音的问题
现在我在做一个嵌入式系统的声卡录音程序,没有采用市面上的嵌入式OS,整个系统是自己实现的,所以不能采用现成的驱动模型。声卡录音的数据是通过DMA传到一个缓冲区的,每当该缓冲区填满之后,就把缓冲区里的内容写入到磁盘的wav文件之中。由于写入磁盘要较长的延迟,所以就造成录制的声音不连续。
也许有人说应该要用双缓冲实现就可以了,其实这个我也用了的,DMA读数据的时候就是用的双缓冲。由于一些特殊的要求,每次写入磁盘的数据比DMA的缓冲区要大一些。如果采取一些措施,让写的过程中,声卡继续接收数据送往缓冲区,那么,如果缓冲区开小了,就不可避免地要丢掉很多数据,开大了,又很浪费空间。 小弟刚接触驱动编写,请问大虾有什么好的解决办法吗? |
|
沙发#
发布于:2004-05-20 11:07
可以参照现有的声卡驱动程序的解决办法,驱动程序采用多缓冲的方式,即将大的DMA缓冲分割成多个小的缓冲区,驱动程序开始时只需等待两个小缓冲区满了就开始播放。这样可以通过增加小缓冲区的个数来增加缓冲区的大小,但同时每个小缓冲区被限制在合适的大小,也不影响时延。音频驱动程序中的多缓冲机制一般会利用底层DMA控制器的scatter-gather功能。 |
|
板凳#
发布于:2004-05-25 18:19
录音呢?好像录音和放音有些地方不是很一样。
|
|