【问题标题】:Linux and python: Combining multiple wave files to one wave fileLinux和python:将多个wav文件组合成一个wav文件
【发布时间】:2012-09-29 02:36:39
【问题描述】:

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

谁能帮帮我?

【问题讨论】:

  • 请从它发布完整的回溯,它死在哪一行?

标签: python linux wave


【解决方案1】:

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

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

如果您想处理具有不同设置的 a.wav 和 b.wav,您需要使用 pysox 之类的东西将它们转换为相同的设置,或者对于 nchannels 和 sampwidth,您可能会遇到困难自己动手。

【讨论】:

  • 看起来你有一个钥匙,谢谢。但是,对于 a.wav 和 b.wav 具有不同设置的情况,您能告诉我更多吗?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    这是我正在寻找的答案

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多