为了录制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的速率。
答案 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
)。例如,您可能正在阅读“线路输入”而不是麦克风。