windows - Windows 如何处理非实时 USB 音频源?

标签 windows audio usb

我目前正在研究制作一个通过USB音频类流接口(interface)输出PCM音频的设备的可行性。该设备有自己的时钟,重要的是不会像 USB 规范指定的那样以 1 hz 的倍数生成样本,并且以异步模式生成数据包。当 USB 音频流始终以高于或低于 USB 描述符指示的速率对其进行采样时,Windows 如何处理它,并且在操作系统的哪个级别进行处理?

其次(根据第一个问题的答案,这可能已经回答了),该项目的全部目的是以原始格式和采样率捕获此数字音频。哪些应用程序 Windows API 将提供来自 USB 音频流的准确 PCM 输入,没有插值或其他更改或伪影?

最佳答案

关于 Windows 的 IDK 在这里,但 Windows 上的 Java 可能会设置为将数据读取为 AudioInputStream并将输出为 SourceDataLine .

至于时序问题,由 SourceDataLine 处理的 PCM 将被配置为给定的采样率和字节结构(在 AudioFormat 类中提供的配置详细信息)。 SourceDataLine 底层的代码使用了一个缓冲区,我认为是某种 BlockingQueue或类似的 native 代码实现。我对后一个细节并不完全清楚。

但要点是 SourceDataLine 将暂停操作,直到它能够完成其任务。因此,如果 native 代码的 DAC 功能未准备好,SourceDataLine 线程将暂停并等待,直到输出级准备好接受下一个数据 block 进行处理。

传入数据有多个传输层,其中很多我不太了解。但我认为,如果你有办法将传入的数据包组合成一个流(需要任何缓冲),那么你应该能够接收和播放 PCM。当然,C 中的结构可以提供与我引用的 Java 类等效的功能。

关于windows - Windows 如何处理非实时 USB 音频源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59943216/

相关文章:

windows - Windows 上的 gtk2hs 无法运行

windows - 获取屏幕的平均颜色 - Windows 7 C/C++

c - libudev 返回重复的 USB 设备

windows - Qt 5.1 Windows 7 - aboutToQuit() 未在 Windows 注销时调用

c# - Windows Universal 中的 MediaElement 样式

delphi - 如何从声卡录制任何东西?

function - Matlab计时器未定义函数或变量

c# - WasapiCapture NAudio

linux - USB 键盘和 setxkbmap

android - linux mint 上 USB 设备的权限 ATTR{idVendor} 使用表 mobii protab2 XXL