我正在寻找一种可以使用python将多个wave文件组合成一个wave文件并在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
有人能帮我吗?
最佳答案
您需要设置通道数、采样宽度和帧速率:
waveFileC.setnchannels(waveFileA.getnchannels())
waveFileC.setsampwidth(waveFileA.getsampwidth())
waveFileC.setframerate(waveFileA.getframerate())
如果要处理具有不同设置的a.wav和b.wav,则需要使用类似于pysox的内容将它们转换为相同的设置,或者对于nchannels和sampWidth,您可以自己进行硬处理。