Python生成的文本文件大小超出预期

时间:2014-01-16 20:49:24

标签: 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,
        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))

但我仍然不确定。 有没有人知道为什么会这样?

1 个答案:

答案 0 :(得分:2)

您正在编写立体声样本,而不是单声道,因此每个通道1024个样本总共2048个样本。

你正在写16位样本,而不是8位,当然也不是1位。

因此,215个块的4096个字节每个是880640个字节。

没有办法绕过它;这就是CD质量声音占用多少空间。以一点CPU功率(和代码)为代价,你可以随时添加一些压缩 - 理想情况下就像FLAC一样,但即使是简单的gzip也会有所帮助。或者你可以使用像MP3或Speex这样的有损压缩来将其压缩得更小。或者你可以使用低质量的声音 - 单声道,8位,32k而不是44k等 - 首先(这实际上只是一种有损压缩形式)。