我一直在尝试使用Python ctypes与lame_enc.dll连接,并将wav编码为mp3。这个问题在2008年http://www.dreamincode.net/forums/topic/72083-lame-mp3-encoder-for-python/讨论过,没有解决。
我认为我非常接近,因为我有一个mp3输出,我可以听到一些以22050 Hz,单声道录制的单词。但是有些事情仍然是错误的,因为我也会在输出中获得常规的点击声。
我的代码位于:http://pastebin.com/SFwCuZZU
我一直在使用:
来自http://lame1.buanzo.com.ar/的libmp3lame-win-3.98.2.zip windows二进制文件 在dll文件夹中有一个带有数据结构defs的BladeMP3EncDLL.h文件,以及一个我试图直接转换为python / ctypes的example.cpp。我已将这些分别复制到http://pastebin.com/E41nzq7m和http://pastebin.com/ySGfwhPD。
http://openinnowhere.sourceforge.net/lameonj/LameDLLInterface.htm
一个可能的问题是ctypes报告的beConfig数据结构的大小是332字节,而不是头文件中记录的预期的331,我希望通过手动检查。然后它可能只是配置设置。
更新:见http://pastebin.com/cdUniF1e 差不多...... beEncodeChunk的第二个参数是样本数,而不是字节数。 Mp3听起来不错,除了开头只需点击一下: - (。
成功! 它仍然不是很漂亮,但它的工作原理。 wav的44字节标头的假设并不总是正确的,这就是我点击的原因 - 它是将数据从wav标头编码到第一个mp3组块中。我使用Python波形模块来读取帧(附加的好处是可以轻松获得通道数和帧速率。) 见http://pastebin.com/ehDajzhN