Linux和python:将多个wav文件合并到一个wav文件中

时间:2012-09-29 02:36:39

标签: python linux wave

我正在寻找一种方法,我可以使用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

任何人都可以帮助我吗?

3 个答案:

答案 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)

以下是我要找的答案

How to join two wav files using python? (寻找Tom 10的主题)

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