我正在尝试将通过麦克风录制的数据写入文本文件进行加密, 这是我的代码,
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
with open("Original_Data.txt", 'wb') as outFile:
for frame in frames:
outFile.write(str(frame))
显然,音频数据存储在列表中
frames[]
总共有(44100/1024)*5 = 215
个CHUNKS,所以215*1024 = 220160 bits
。
文件大小应为
220161 bits = 220161/8 = 27520 bytes
但执行上述代码后创建的文件大小约为880640 bytes
为什么会这样?
我可以预料到的是,当我将数据写入文本文件时,就会发生这种情况,
with open("Original_Data.txt", 'wb') as outFile:
for frame in frames:
outFile.write(str(frame))
但我仍然不确定。 有没有人知道为什么会这样?
答案 0 :(得分:2)
您正在编写立体声样本,而不是单声道,因此每个通道1024个样本总共2048个样本。
你正在写16位样本,而不是8位,当然也不是1位。
因此,215个块的4096个字节每个是880640个字节。
没有办法绕过它;这就是CD质量声音占用多少空间。以一点CPU功率(和代码)为代价,你可以随时添加一些压缩 - 理想情况下就像FLAC一样,但即使是简单的gzip也会有所帮助。或者你可以使用像MP3或Speex这样的有损压缩来将其压缩得更小。或者你可以使用低质量的声音 - 单声道,8位,32k而不是44k等 - 首先(这实际上只是一种有损压缩形式)。