【发布时间】:2016-06-01 19:51:05
【问题描述】:
import wave,struct
f = wave.open('bird.wav', 'r')
for i in range(5,10):
frame = f.readframes(i)
print frame
struct.unpack('<H',frame)
我使用上面的代码从 python 中的立体声 wav 文件中提取字节。但是,我得到的不是字节,而是一些乱码。使用struct.unpack() 函数我得到以下错误
"解包需要长度为 2 的字符串参数"
我在代码中做了哪些更改以打印 1 和 0 中的这些字节?我想稍后修改用于隐写术的音频帧的 LSB。
【问题讨论】:
-
乱码可能是字节,它们只是以这种方式打印。是什么让你认为他们不是?你试过
print(type(frame))吗? -
@rofls - 类型是 str。如何以 1 和 0 打印这些字节?
-
嗯,很奇怪。那么,你最终想用 .wav 文件做什么呢?只打印 1 和 0?无论如何,Python 并不会真正将二进制或机器数据打印为 1 和 0……您可以使用
bin将数字转换为二进制字符串,但这实际上并没有多大帮助。如果数据是字节,在 Python2 中,字符串看起来像b'some string'。您可能见过以 u 开头的字符串,u'some string',即 Unicode。 -
@rofls - 我想稍后修改音频帧的 LSB 以进行隐写术。此外,使用 bin 会出现以下错误“str' object cannot be Explained as an index”
-
对不起,我不建议使用 bin :) 我只是说它很可能是二进制数据,这就是为什么它看起来像胡言乱语。你试过在谷歌上搜索“lsb audio steganography python”吗?有一些现有的包,虽然看起来它们是面向图像的......
标签: python wav unpack steganography