[英]problem with rewriting a wav file in python
我在重写 a.wav 文件(波形音频文件)时遇到问题。 我的项目涉及将波形文件数据转换为数据字节,然后重新组装一个听起来相同的新音频文件。
出于某种原因,当我尝试使用 struct.pack 执行此操作时,结果相似,但不一样 - 看起来像原始数据但不完全一样。
注意:对于普通字符串,它可以工作,但对于写入波形文件的数据类型,它不会。
我的 function 用于将原始数据转换为字节:
def original_data_to_bytes_data(original_data):
"""
params: original data.
returns: all the data in bytes form, list of strings.
"""
original_data = str(''.join(format(ord(i), '08b') for i in original_data))
bytes_data = list()
for i in range(0, len(original_data), 8):
bytes_data.append(original_data[i:i+8])
return bytes_data
我的 function 用于将字节转换为原始数据:
def bytes_data_to_original_data(bytes_data):
"""
params: bytes_data - data, list of strings.
returns: original data.
"""
original_data =""
for i in bytes_data:
original_data += struct.pack('i', int(i, 2))
return original_data
谢谢您的帮助!
在 Python 3 上,我收到错误消息。 在 Python 2 上它可以正常工作,所以我假设您也使用 Python 2。
我检查了这个
data = 'A'
result = bytes_data_to_original_data(original_data_to_bytes_data(data))
print(result)
print(type(data), type(result))
它显示相同的文本和相同的类型
但是当我检查
print(data == result)
print(len(data), len(result))
print(repr(data), repr(result))
然后它表明data
和result
不同
False
(1, 4)
("'A'", "'A\\x00\\x00\\x00'")
如果我在代码中使用"B"
(字节)而不是"i"
(整数)
struct.pack('B', int(i, 2))
然后我得到相同的值 - 所以 wave 听起来也应该一样。
如果我使用字节b"A"
而不是字符串"A"
,它也可以工作,因为 Python2 将字节作为字符串。
def bytes_data_to_original_data(bytes_data):
"""
params: bytes_data - data, list of strings.
returns: original data.
"""
original_data = ""
for i in bytes_data:
original_data += struct.pack('B', int(i, 2))
return original_data
编辑:在struct.pack()
中,我将'b'
(需要值 -128..127)更改为'B'
(使用值 0..255)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.