我正在创建一个 wav 文件的波形表示,并且很好奇使用标准库在 python 中有效地解决这个问题的最佳方法是什么。一些音频文件可能长达几分钟。
谢谢!
http://docs.python.org/2/library/wave.html - 用于读取 wav 文件的标准库。一个简单的使用例子。
在我的脑海中,这就是我的做法(伪代码)
fmts = (None, "=B", "=h", None, "=l")
fmt = fmts[sampwidth]
dcs = (None, 128, 0, None, 0)
dc = dcs[sampwidth]
image_width = 600
image_height = 300
chunk_size = len(wavefile.getnframes()) / image_width
def unpacker(frame):
return struct.unpack(fmt, frame)[0]
for i in range(chunk_size):
value = math.avg([unpacker(x) for x in wavefile.read_frames(chunk_size)])
# and then use value * 300 to figure out the vertical position for the pixel.
您可以使用多种库来代替编写图像,例如 svg。
TimeSide库以非常简单的方式解决了这个问题,同时提供了一些更有趣的图表。
我遇到了同样的问题并实现了 synthesizerpatel 建议的算法,后来我发现了这个库并得到了一些更好的结果。