|
发表于 2009-2-20 16:34:53
|
显示全部楼层
原帖由 ljw100 于 2009-2-20 16:28 发表
之所以提及DMA写声卡缓冲区,是因为在看MVW那个帖子时有人提及,这与我以前所了解的常识有出入。或许现在的技术已进步到可以由DMA来完成相应工作的程度。
声卡从内存输入数据,必然要受到CPU忙闲状态的影响,且这 ...
和同事聊来一下,就Linux下的Intel HDA而言,数据填充过程是这样的:
开辟内存里的一块空间作为ring buffer,一个read pointer(hardware pointer), 一个writepointer(software pointer). software在writepointer写入数据(实际是由alsa控制的,速率随便,只要不被write pointer赶上导致无东西可读,以至跳音),声卡controller以固定为48khz的频率(应该由声卡本身的晶振决定)从readpointer读出数据,直接DMA给声卡。按照同事的说法,在ringbuffer不发生断流的情况下,声卡的fifo不可能发生断流。
由此,我认为,声卡的晶振成为PC系统的第一个jitter源。声卡之前,没有jitter的存在,因为时间无关。 |
|