最重要的是,我的场景是开发一个可访问性应用程序,而不是任何恶意窃听,而在这个场景中,还有各种研究和开发隐含的场景,所有这些都应该极大地受益于能够多次读取麦克风音频流同时运行不相关的进程,例如记录工具和/或我自己的代码的不同版本。
问题陈述
我正在使用高级 python API 读取麦克风输入流,如下所示:
import sounddevice
audio_stream = sounddevice.InputStream(
device=self.microphone_device,
channels=max(self.channels),
samplerate=self.audio_props['sample_rate'],
blocksize=int(self.audio_props['frame_elements_size']),
callback=self.audio_callback)
我想了解是否可以(在 Linux 上)将麦克风音频流同时读取到另一个程序,例如 Google Meet / Zoom 读取它。即有效地共享音频流。
与上面提到的 python 包装器一样,当视频通话正在进行时启动上述代码时,它会简单地无法打开流,这并不奇怪:
Expression 'paInvalidSampleRate' failed in
'src/hostapi/alsa/pa_linux_alsa.c', line: 2043
Expression 'PaAlsaStreamComponent_InitialConfigure( &self->playback, outParams, self->primeBuffers, hwParamsPlayback, &realSr )'
failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2716
Expression 'PaAlsaStream_Configure( stream, inputParameters, outputParameters, sampleRate, framesPerBuffer, &inputLatency, &outputLatency, &hostBufferSizeMode )'
failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2837
诚然,我还不太熟悉 ALSA 术语以及一般的 linux 上的声音堆栈。
我的问题是,这可以直接使用 ALSA 库 API 来完成,还是通过其他声音堆栈或声音系统配置来完成?或者,如果所有其他方法都不起作用,通过代理程序/驱动程序能够将音频缓冲区暴露给多个消费者,而不会导致音频流延迟明显下降?