【问题标题】:How to convert .pcm files to .wav files (scripting) [closed]如何将 .pcm 文件转换为 .wav 文件(脚本)[关闭]
【发布时间】:2013-04-13 05:25:02
【问题描述】:

我想在 Python 脚本中使用 SOX 等工具将 .pcm 文件转换为 .wav 文件。该工具需要跨平台兼容(Windows 和 Linux)。有什么建议吗?

【问题讨论】:

  • 您能否依赖在 Windows 上安装 SOX?还是将其包含在您的脚本中?

标签: python linux windows audio scripting


【解决方案1】:

您实际上并不需要为此使用工具。 Python 标准库带有用于编写 .wav 文件的 wave 模块,当然原始 .pcm 文件可以作为普通二进制文件打开,如果您需要对列表进行任何简单的转换理解,它们对audioop 来说是微不足道的。

例如,这是一个将立体声 16 位 little-endian 44.1k PCM 文件转换为 WAV 文件的完整程序:

import sys
import wave

for arg in sys.argv[1:]:
    with open(arg, 'rb') as pcmfile:
        pcmdata = pcmfile.read()
    with wave.open(arg+'.wav', 'wb') as wavfile:
        wavfile.setparams((2, 2, 44100, 0, 'NONE', 'NONE'))
        wavfile.writeframes(pcmdata)

在旧版本的 Python 中,您可能必须使用 with contextlib.closing(wave.open(…))(或显式的 openclose,而不是 with 语句)。

【讨论】:

  • @Buck:哎呀,是的。您可能有 16 位音频,而不是 128 位音频。 :) 编辑了答案。
  • @Buck:更重要的是……您的原始 PCM 立体声 16 位 little-endian 44.1k 还是其他格式?而且,如果是后者,您是否知道如何为 WAV 指定相同的格式或转换为所需的格式,或者您需要帮助吗?
  • 对于仍在使用 Python 2.7 的任何人的注意事项:您需要使用 wavfile = wave.open( ... ) 语法来代替第二个 with - 因为否则它将失败并出现 AttributeError: Wave_write instance has no attribute '__exit__' 错误。
猜你喜欢
  • 2020-09-22
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 2011-12-14
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多