flypen
驱动牛犊
驱动牛犊
  • 注册日期2004-05-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望13点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1360回复:2

声卡录音的问题

楼主#
更多 发布于:2004-05-16 19:37
现在我在做一个嵌入式系统的声卡录音程序,没有采用市面上的嵌入式OS,整个系统是自己实现的,所以不能采用现成的驱动模型。声卡录音的数据是通过DMA传到一个缓冲区的,每当该缓冲区填满之后,就把缓冲区里的内容写入到磁盘的wav文件之中。由于写入磁盘要较长的延迟,所以就造成录制的声音不连续。
也许有人说应该要用双缓冲实现就可以了,其实这个我也用了的,DMA读数据的时候就是用的双缓冲。由于一些特殊的要求,每次写入磁盘的数据比DMA的缓冲区要大一些。如果采取一些措施,让写的过程中,声卡继续接收数据送往缓冲区,那么,如果缓冲区开小了,就不可避免地要丢掉很多数据,开大了,又很浪费空间。
小弟刚接触驱动编写,请问大虾有什么好的解决办法吗?
silk_lily
驱动牛犊
驱动牛犊
  • 注册日期2002-03-25
  • 最后登录2008-07-14
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-20 11:07

可以参照现有的声卡驱动程序的解决办法,驱动程序采用多缓冲的方式,即将大的DMA缓冲分割成多个小的缓冲区,驱动程序开始时只需等待两个小缓冲区满了就开始播放。这样可以通过增加小缓冲区的个数来增加缓冲区的大小,但同时每个小缓冲区被限制在合适的大小,也不影响时延。音频驱动程序中的多缓冲机制一般会利用底层DMA控制器的scatter-gather功能。

flypen
驱动牛犊
驱动牛犊
  • 注册日期2004-05-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望13点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-25 18:19
录音呢?好像录音和放音有些地方不是很一样。
游客

返回顶部