我无法理解音频录制的示例程序,它带有 PyAudio 模块。
我是使用外接声卡录制声音,显然,声音应该转换成数字形式呈现给计算机。但我不明白这段代码如何将输入的模拟语音转换为数字形式然后保存。
这是代码,
import pyaudio
import wave
import sys
CHUNK = 1024
# What is CHUNKS here ?
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "test.wav"
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print("start....")
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print("done...")
stream.stop_stream()
stream.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(frames))
wf.close()
执行代码时,它使用带有麦克风的外部声卡记录声音 5 秒。
我从代码中了解到的是,
速率为 44Kbps,这意味着每秒从模拟音频信号生成 44 千字节。
然后会生成一个空帧,frame[]
其中将存储所有记录的数据。
接下来是for
循环,
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
答案RATE/CHUNK*RECORD_SECONDS
是215.33
这意味着将有 215 次迭代。
我不明白为什么RATE
要除以CHUNKS
然后乘以RECORD_SECONDS
记录5
秒数。(RECORD_SECONDS = 5)
另外,究竟是CHUNK
什么?