1

http://www.codeproject.com/Articles/5901/C-MP3-Compressor上的文章有一个 C# 32 位实现,它封装了 LAME 的 32 位 mp3 音频编码器。我已经尝试下载该源代码并将其转换为 64 位并将其与更新的 LAME 版本一起使用 [例如来自http://www.rarewares.org/mp3-lame-bundle.php的 LAME 3.99.5 64bit ] ,但我不断收到错误

算术运算导致溢出。

关于需要对该代码执行什么操作才能使其工作的任何想法,或者可能已经适用于 64 位的替代开源 C# 解决方案?

4

1 回答 1

0

我遇到了同样的错误,这为我修复了它。将 Lame.cs 文件中的 EncodeChunk 方法更改为:

public static uint EncodeChunk(uint hbeStream, byte[] buffer, int index, uint nBytes, byte[] pOutput, ref uint pdwOutput) {
    uint res;
    GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
    try {
        IntPtr ptr = (IntPtr)(handle.AddrOfPinnedObject() + index);
        res = beEncodeChunk(hbeStream, nBytes / 2/*Samples*/, ptr, pOutput, ref pdwOutput);
    } finally {
        handle.Free();
    }
    return res;
}

它被强制转换为 Int32,但地址空间太大。

于 2014-01-16T22:25:30.850 回答