PyAudio如何使用我的电脑麦克风?

时间:2014-12-30 18:00:23

标签: python record microphone pyaudio

为了录制2秒的wav文件,我使用PyAudio(带Pyzo)和以下经典代码录制声音并保存:

import pyaudio
import wave


chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 2
WAVE_OUTPUT_FILENAME = "my_path//a_test_2.wav"

p = pyaudio.PyAudio()

# Création et initialisation de l'objet stream...
s = p.open(format = FORMAT, 
       channels = CHANNELS,
       rate = RATE,
       input = True, 
       frames_per_buffer = chunk)

print("---recording---")

d = []

print((RATE / chunk) * RECORD_SECONDS)

for i in range(0, (RATE // chunk * RECORD_SECONDS)): 

    data = s.read(chunk)
    d.append(data)
    #s.write(data, chunk)

print("---done recording---")

s.close()
p.terminate()

wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(d))
wf.close()

然后我用它,说“aaa”。一切都很好,没有错误。 当我阅读wav文件时,没有听到“aaa”。我在Audacity中可视化文件,我可以看到一切都只是沉默(0)。所以似乎Pyzo不知道我的麦克风在哪里,因为它没有使用它。我能做什么 ?任何的想法 ? 或者它可能没有写出所有记录的数据,但我不知道为什么。

我已经检查过我的麦克风是16位并且有44100的速率。

1 个答案:

答案 0 :(得分:1)

您需要一步一步地完成这项工作。为了确保您从麦克风录音,我建议您在阅读时打印出每个块的最大值。那么你应该实时看到背景噪音和你的演讲之间的差异。例如:

import audioop

# all the setup stuff, then in your main data loop:

for i in range(0, (RATE // chunk * RECORD_SECONDS)): 
    data = s.read(chunk)
    mx = audioop.max(data, 2)
    print mx

通常背景噪音和语音之间的差异超过10倍,因此您可以在飞过时轻松查看数字的大小变化。

此外,在开始时,列出所有麦克风以确保使用正确的麦克风(get_device_info_by_index)。例如,您可能正在阅读“线路输入”而不是麦克风。