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