|
我再说一遍 对于声卡 实时性要求远大于正确性要求。不管是什么声卡 本质上都是需要同步的 即使它的同步方式是“ASYNC”——一个数据传输Endpoint+一个Rate反馈Endpoint组成的同步系统。除非厂家自己写传输协议而不遵守UAC 否则就没有任何重传。也确实有厂商是自己写协议用Bulk来传的
UAC是个公开标准 相关档案是公开的 正常情况下厂家都要按此标准来开发 否则根据这个标准写的通用驱动程序就无法兼容你生产的声卡(看开源驱动代码也确实发现某些厂家的奇葩实现导致需要各种workaround...)。看不到厂家的驱动代码没关系 你可以去查Linux的UAC驱动实现 Linux是开源的
可在这里找到相关的源代码:http://lxr.free-electrons.com/source/sound/usb
这里是比较重要的两个部分 可以看到Linux内核是如何对待不同的同步方式以及如何决定给USB界面的数据大小。以及最重要的是 没有重传机制
http://lxr.free-electrons.com/source/sound/usb/pcm.c
http://lxr.free-electrons.com/source/sound/usb/endpoint.c
UAC本身也并不是专门为了高保真而做的标准 而它的高保真回放模式——也就是异步模式 只是其标准的一部分。在开源驱动实现中也可以明显的看到 “异步”只是作为整个USB Audio系统的一部分存在 并非什么特殊存在的玩意
你提到的MP3有损压缩,很有意思的是,MP3编码过程中可以丢哪些音频数据还真的是随意的,是由你使用的MP3编码器决定的,只要编码器最后出来的数据符合MP3标准就行。而如果不是应用了心理声学的LAME编码器的存在,MP3早就进入历史了。
MP3会丢失20K以上的高频也不过是LAME编码器应用了一个LPF而已 实际上你愿意的话这个LPF可以关 但是就使得留给20K频率以下的编码空间变的更少了 |
|