【发布时间】:2013-04-13 05:25:02
【问题描述】:
我想在 Python 脚本中使用 SOX 等工具将 .pcm 文件转换为 .wav 文件。该工具需要跨平台兼容(Windows 和 Linux)。有什么建议吗?
【问题讨论】:
-
您能否依赖在 Windows 上安装 SOX?还是将其包含在您的脚本中?
标签: python linux windows audio scripting
我想在 Python 脚本中使用 SOX 等工具将 .pcm 文件转换为 .wav 文件。该工具需要跨平台兼容(Windows 和 Linux)。有什么建议吗?
【问题讨论】:
标签: python linux windows audio scripting
您实际上并不需要为此使用工具。 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(…))(或显式的 open 和 close,而不是 with 语句)。
【讨论】:
wavfile = wave.open( ... ) 语法来代替第二个 with - 因为否则它将失败并出现 AttributeError: Wave_write instance has no attribute '__exit__' 错误。