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

4
为了录制一个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速率。

请在命令终端上输入以下命令以确保 MIC 是否正常工作:arecord -f cd -D plughw:1,0 -d 20 test.wav - Fahadkalis
1个回答

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)。例如,您可能正在从“线路输入”而不是麦克风中读取。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接