gpt4 book ai didi

audio - 在 Linux 上共享麦克风音频流

转载 作者:行者123 更新时间:2023-12-02 22:12:52 26 4
gpt4 key购买 nike

重要的是我的场景是开发一个可访问性应用程序而不是任何类型的恶意窃听,而在这个场景中还有各种研究和开发隐含场景,所有这些都应该从能够通过多个读取麦克风音频流中受益匪浅同时运行不相关的进程,例如记录工具和/或我自己的代码的不同版本。
问题陈述
我正在使用高级 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 读取它。 IE。有效地共享音频流。
与前面提到的 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 来完成,还是通过其他声音堆栈或声音系统配置来完成?或者,如果所有其他方法都不起作用,通过代理程序/驱动程序能够向多个消费者公开音频缓冲区,而不会导致音频流延迟明显下降?

最佳答案

您可以直接使用 ALSA 执行此操作。 Dsnoop应该做的伎俩。它是 ALSA 附带的一个插件,允许共享输入流。
从我上面链接的页面:

dsnoop is the equivalent of the dmix plugin, but for recording sound. The dsnoop plugin allows several applications to record from the same device simultaneously.


来自 ALSA docs :

If you want to use multiple input(capture) clients you need to use the dsnoop plugin:


您可以在那里查看有关如何使用它的详细信息。 This GitHub 上的 issue 也将帮助您入门,它详细介绍了如何配置 dsnoop界面,以便您可以使用 pyaudio 从中读取.
更新
要配置 ALSA,请编辑 /etc/asound.conf像这样(来自 ALSA docs on dsnoop ):
pcm.mixin {
type dsnoop
ipc_key 5978293 # must be unique for all dmix plugins!!!!
ipc_key_add_uid yes
slave {
pcm "hw:1,0"
channels 2
period_size 1024
buffer_size 4096
rate 44100
periods 0
period_time 0
}
bindings {
1 1
1 0
}
}
您可以测试以查看您的配置是否适用于以下内容:
arecord -d 30 -f cd -t wav -D pcm.mixin test.wav 

关于audio - 在 Linux 上共享麦克风音频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63541870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com