我正在寻找一种方法,我可以使用python将多个wave文件合并到一个wave文件中并在linux上运行它。我不想在默认的shell命令行和默认的python模块之外使用任何add。 例如,如果我有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
任何人都可以帮助我吗?
答案 0 :(得分:3)
您需要设置通道数,样本宽度和帧速率:
waveFileC.setnchannels(waveFileA.getnchannels())
waveFileC.setsampwidth(waveFileA.getsampwidth())
waveFileC.setframerate(waveFileA.getframerate())
如果您想处理具有不同设置的a.wav和b.wav,您可能希望使用类似pysox的内容将它们转换为相同的设置,或者对于nchannel和sampwidth,您可以使用自己坚持不懈。
答案 1 :(得分:2)
看起来您需要调用n=waveFileA.getnchannels()
来查找第一个输入文件使用的通道数量,同样对于waveFileB,然后您需要使用waveFileC.setnchannels(n)
告诉它要放置多少个通道在传出文件中。我不知道它将如何处理具有不同通道数的输入文件...
答案 2 :(得分:0)