Pyaudio VS Arecord。用这两种方法记录的音频数据之间的插值?

时间:2019-05-14 10:11:07

标签: python audio audio-recording pyaudio

以前,我一直使用pyaudio脚本记录数据,并围绕它们建立了Logistic回归模型。该模型运行良好。最近,我开始使用arecord命令来录制音频文件,其余的管道保持不变。但是该模型已经开始对这些新录制的音频文件失败。注意事项:

1)两种情况下的采样率都相同。

2)Pyaudio以INT表示数据,而arecord则以FLOAT格式表示数据。

3)pyaudio脚本将FORMAT定义为pyaudio.paFloat32,但是当我使用wavfile保存它时,它表示INT中的音频数据。这不是问题,但请声明我已意识到这一点。 (以下示例)

4)下面提供的pyaudio脚本如果不做一些修改就不会运行。那只是说明我如何使用pyaudio录制音频。

通过 scipy.io 读取音频文件显示,它们分别不同地表示音频数据。

Pyaudio:[-1133117440 -1130037248 -1130004480 ... 1004470272 -1178599424 -1136001024] 记录:[0.00079346 -0.00039673 -0.00579834 ... -0.0017395 -0.00161743 -0.00131226]

我还没有找到任何简单的插值方法来将用Arecord记录的音频数据的格式转换为用pyaudio记录的数据的格式表示。

Pyaudio脚本:

CHANNELS = 1
RATE = 44100
CHUNKS = RATE
RECORD_SECONDS = 86400

audio = pyaudio.PyAudio()
FORMAT = pyaudio.paFloat32
stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True,frames_per_buffer=CHUNK, input_device_index=4)
duration = int(RATE / CHUNK * RECORD_SECONDS)
i = 0
while(i <= duration):
    data = stream.read(CHUNK, exception_on_overflow=False)
    if(len(data) >= CHUNK):
        self.queue.put(data)
        i = i + 1
stream.stop_stream()
stream.close()
audio.terminate()

data = self.queue.get()
FORMAT = pyaudio.paFloat32
audio = pyaudio.PyAudio()
filename = "example.wav"
waveFile = wave.open(filename, 'wb')
waveFile.setnchannels(CHANNELS)
waveFile.setsampwidth(audio.get_sample_size(FORMAT))
waveFile.setframerate(RATE)
waveFile.writeframes(b''.join(data))
waveFile.close()

ARECORD命令:

arecord --max-file-time 3600 -f FLOAT_LE -c 1 -r 44100 -t wav -D plughw:1,0 -V mono -i --use-strftime /wav_path/wav_filename

0 个答案:

没有答案