繁体   English   中英

在 python 中重写 wav 文件的问题

[英]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))

然后它表明dataresult不同

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM