USB USB本质上不是专用来传输音频数据的,USB的传输是以固定时间间隔形成一个帧,包含了发送给同一个Host控制器下的不同设备的若干个数据包。全速下每1ms±500μs生成一个帧;高速下每125us±0.0625μs生成一个帧。
音频传输采用了USB提供的一种专用模式:Isochronous(等时/同步传输)。这种模式一定程度上保证数据的实时性与带宽,而没有错误重传。
应用中用来访问endpoint buffer的线程通常需要很高的优先级(来保证实时性),windows系统提供了一套MMCSS(Multimedia Class Scheduler Service)方法让这些线程运行在高优先级。
要想取得最好的实时性,应该用尽可能好的音频设备/驱动,除此外还要保证系统运行时的低负载(比如音频无关的进程优先级尽可能低)。否则每次写入buffer的数据就会不及时、偏多/偏少。
而反过来说,对于播放软件来说,越是想有广泛的适用性、对音频设备的兼容性,它越是不能设计得对实时性要求太高。
四、异步能解决问题吗? 总的结论是:异步协议并不保证音质,优势并不在于异步设计而在于具体实现(Asynchronous mode is not better by design but by implementation.)
从现实角度,它确实能以相对更简单的方法达到相对更好的效果(简单说就是性价比高),因而受到开发者的普遍青睐。
而从理想出发,达到理想的效果取决于DAC如何构建出独立的时钟域。