如何在linux上将麦克风采样率更改为16000



我目前正在进行一个项目,在使用麦克风音频的同时,我正试图在树莓派上使用深度语音,但我一直收到无效采样率错误。使用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,但没有成功。

我最近尝试过的一件事是更改.asundrc文件以更改速率,但我不知道是否可以在该文件中将麦克风的速率更改为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__())

所以经过更多的测试,我最终编辑了pulse的配置文件。在此文件中,您可以取消注释条目,从而可以编辑默认和/或备用采样率。将备选采样率从48000修改为16000,这就解决了我的问题。

文件位于此处:/etc/pulse/daemon.conf。我们可以使用sudo vi daemon.conf在Raspberian上打开和编辑此文件。然后,我们需要取消对行; alternate-sample-rate = 48000的注释,这是通过删除;并将48000的值更改为16000来完成的。保存文件并退出vim。然后使用pulseaudio -k重新启动Pulseaudio,以确保它运行更改后的文件。

如果你不熟悉vim和Linux,这里有一个更详细的改变采样率的过程指南。

最新更新