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位,那么大小是多少?