从波形文件python读取字节

Posted

技术标签:

【中文标题】从波形文件python读取字节【英文标题】:Reading bytes from wave file python 【发布时间】:2015-08-18 09:36:10 【问题描述】:

我正在做一个小音频项目,其中一部分需要使用波形文件和 flac 文件。我试图弄清楚如何读取每个元数据以及如何手动添加标签。我无法弄清楚如何按原样读取字节。

我一直在参考this page 和其他几个人来查看 Wave 文件的完整格式,但是对于某些 Wave 文件,我得到了一些差异。我希望能够查看十六进制字节,以了解发生了什么差异。

简单地使用open('fname', 'rb') 并读取,仅将字节作为字符串返回。使用 struct.unpack 对一些波形文件有效,但是它仅限于打印为字符串、整数或短裤,而且我在使用它时无法确切看到出了什么问题。有没有其他方法可以用十六进制读取这个文件?

谢谢

【问题讨论】:

“以十六进制读取此文件”是什么意思? 【参考方案1】:

我假设您只想以十六进制显示二进制文件的内容。首先,您不需要为此使用 Python,因为某些编辑器本身就是对它的,例如vim。

现在假设您有一个通过读取文件获得的 字符串,您可以轻松地将其更改为十六进制值列表:

with open('fname', 'rb') as fd:      # open the file
    data = rd.read(16)               # read 16 bytes from it
    h = [ hex(ord(b)) for b in data] # convert the bytes to their hex value
    print (h)                        # prints a list of hexadecimal codes of the read bytes

【讨论】:

您是否也知道用于反向目的的想法?我有字节格式的音频数据,我想使用它们。我只知道它们代表 FLAC 格式。

以上是关于从波形文件python读取字节的主要内容,如果未能解决你的问题,请参考以下文章

Python 3:将波形数据(字节数组)转换为浮点值的 numpy 数组

python文件读写

将字节写入波形文件?

波形格式 - 负数据大小

从文件中读取和存储任意字节长度的整数

将 .csv 文件从 URL 读取到 Python 3.x - _csv.Error:迭代器应返回字符串,而不是字节(您是不是以文本模式打开文件?)