0

我正在寻找一种可以使用 python 将多个波形文件组合成一个波形文件并在 linux 上运行的方法。除了默认的 shell 命令行和默认的 python 模块之外,我不想使用任何附加组件。例如,如果我有 a.wav 和 b.wav。我想创建一个 c.wav,它的内容从 a.wav 然后 b.wav 开始。我找到了 wave 模块,我可以打开一个 wave 文件并写入一个新文件。因为我在这个音频世界里真的很新。我仍然不知道该怎么做。下面是我的代码

import struct, wave

waveFileA = wave.open('./a.wav', 'r')
waveFileB = wave.open('./b.wav', 'r')
waveFileC = wave.open('./c.wav', 'w')

lengthA = waveFileA.getnframes()
for i in range(0,lengthA):
    waveFileC.writeframes(waveFileA.readframes(1))

lengthB = waveFileB.getnframes()
for i in range(0,lengthB):
    waveFileC.writeframes(waveFileB.readframes(1))

waveFileA.close()
waveFileB.close()
waveFileC.close()

当我运行这段代码时,我得到了这个错误:

wave.Error: # channels not specified

请问有人可以帮我吗?

4

3 回答 3

3

您需要设置通道数、采样宽度和帧速率:

waveFileC.setnchannels(waveFileA.getnchannels())
waveFileC.setsampwidth(waveFileA.getsampwidth())
waveFileC.setframerate(waveFileA.getframerate())

如果您想处理具有不同设置的 a.wav 和 b.wav,您需要使用pysox之类的工具将它们转换为相同的设置,或者对于 nchannels 和 sampwidth,您可以自己解决。

于 2012-09-29T03:11:03.423 回答
2

看起来您需要调用n=waveFileA.getnchannels()以找出第一个输入文件使用了多少个通道,对于 waveFileB 也是如此,然后您需要使用waveFileC.setnchannels(n)它来告诉它要在传出文件中放入多少个通道。我不知道它将如何处理具有不同数量通道的输入文件...

于 2012-09-29T02:41:47.317 回答
0

这是我正在寻找的答案

如何使用 python 连接两个 wav 文件? (寻找 Tom 10 的主题)

它在另一个线程中。有人已经解决了这个问题。

于 2012-10-06T19:10:07.333 回答