我目前正在做一个项目,我试图在覆盆子pi上使用Deepspeech,同时使用麦克风音频,但我一直收到无效的采样率错误。我使用pyAudio创建了一个流,它使用模型所需的采样率,即16000,但我使用的麦克风的采样率为44100。运行python脚本时,不会进行速率转换,麦克风采样率和模型的预期采样率会产生无效的采样率错误。
通过pyaudio,麦克风信息如下所示:
{'index': 1, 'structVersion': 2, 'name': 'Logitech USB Microphone: Audio (hw:1,0)', 'hostApi': 0, 'maxInputChannels': 1, 'maxOutputChannels': 0, 'defaultLowInputLatency': 0.008684807256235827, 'defaultLowOutputLatency': -1.0, 'defaultHighInputLatency': 0.034829931972789115, 'defaultHighOutputLatency': -1.0, 'defaultSampleRate': 44100.0}
我尝试的第一件事是将pyAudio流采样率设置为44100,并将其提供给模型。但经过测试后,我发现该模型在获得与其要求的16000不同的速率时不能很好地工作。
我一直在尝试将麦克风的更改率设置为16000,或者至少在python脚本中使用时将其更改率转换为16000,但无济于事。
我尝试过的最新方法是更改.asoundrc文件,以便找到更改速率的方法,但我不知道是否可以在此文件中将麦克风的速率更改为16000。文件的当前外观如下所示:
pcm.!default {
type asymd
playback.pcm
{
type plug
slave.pcm "dmix"
}
capture.pcm
{
type plug
slave.pcm "usb"
}
}
ctl.!default {
type hw
card 0
}
pcm.usb {
type hw
card 1
device 0
rate 16000
}
我编写的python代码可以在windows上运行,我猜这是因为windows确实将输入速率转换为代码中的采样率。但是Linux似乎不能做到这一点。
tldr;麦克风率为44100,但必须更改为16000才可用。在Linux上如何做到这一点?
编辑1:
我像这样创建pyAudio流:
self.paStream = self.pa.open(rate = self.model.sampleRate(), channels = 1, format= pyaudio.paInt16, input=True, input_device_index = 1, frames_per_buffer= self.model.beamWidth())
它使用模型的速率和模型的波束宽度,以及麦克风的通道数和麦克风的索引。
我得到下一个音频帧,并对其进行适当的格式化,以便与我为模型创建的流一起使用,我这样做:
def __get_next_audio_frame__(self):
audio_frame = self.paStream.read(self.model.beamWidth(), exception_on_overflow= False)
audio_frame = struct.unpack_from("h" * self.model.beamWidth(), audio_frame)
return audio_frame
exception_on_overflow = False
用于测试输入率为44100的模型,如果不将其设置为False,则会出现与我目前处理的相同的错误。model.beamWidth
是一个变量,用于保存模型期望的区块数量的值。然后,我读取该数量的块,并在将它们提供给模型的流之前对它们进行重新格式化。它是这样发生的:
modelStream.feedAudioContent(self.__get_next_audio_frame__())
发布于 2021-01-10 00:47:25
因此,在进一步测试之后,我结束了对pulse的配置文件的编辑。在此文件中,您可以取消注释允许您编辑默认和/或备用采样率的条目。将可选采样率从48000编辑到16000就解决了我的问题。
文件位于以下位置:/etc/pulse/daemon.conf
。我们可以使用sudo vi daemon.conf
在Raspberian上打开和编辑此文件。然后,我们需要取消对; alternate-sample-rate = 48000
行的注释,方法是删除;
并将48000
的值更改为16000
。保存文件并退出vim。然后使用pulseaudio -k
重新启动Pulseaudio,以确保它运行更改后的文件。
如果您不熟悉vim和Linux,那么在更改采样率的过程中,here是一个更详细的指南。
https://stackoverflow.com/questions/65599012
复制相似问题