Python生成的文本文件比预期的大
我试图将通过麦克风记录的数据写入文本文件进行加密, 这是我的密码Python生成的文本文件比预期的大,python,Python,我试图将通过麦克风记录的数据写入文本文件进行加密, 这是我的密码 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, frame
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
块,因此215*1024=220160位
文件大小应为
220161 bits = 220161/8 = 27520 bytes
但执行上述代码后创建的文件大小约为880640字节
为什么会这样
我可以预料的是,当我将数据写入文本文件时,它发生在行中
with open("Original_Data.txt", 'wb') as outFile:
for frame in frames:
outFile.write(str(frame))
但我还是不确定。
有人知道为什么会发生这种情况吗?您正在编写立体声采样,而不是单声道,因此每个通道1024个采样就是2048个总采样 您正在编写16位样本,而不是8位,当然也不是1位 因此,215个4096字节的块每个是880640字节
没有办法绕过它;这就是CD音质的声音所占的空间。以一点CPU能力(和代码)为代价,您总是可以添加一些压缩(理想情况下是像FLAC这样的压缩),但即使是简单的gzip也会有所帮助。或者你也可以使用有损压缩,比如MP3或Speex,将其压缩得更小。或者你可以使用低质量的单声道,8位,32k而不是44k,等等——首先(这实际上只是一种有损压缩)。@SufiyanGhori:是的,要使用单声道而不是立体声,请使用1个声道。如果需要8位采样,请使用int8而不是int16格式。对于2个通道,大小为2048个采样。为什么16位的投标深度是2048的两倍?i、 E4096?如果我将位深度减少到8位,那么大小是多少?