杂碎音乐论坛's Archiver

vicysunnie 发表于 2008-7-26 16:24

LAME编译教程

[font=微软雅黑]

/PS.看见有人发教程,老生常谈的说--noath的好,我就不相信,LAME当前的版本你用这个参数试试.
/其实,编译LAME也是个影响文件压缩质量的因素,也许大家都用网上已编译好的LAME,不过享受自己编译也是件好事情.

HA论坛目前推荐LAME的稳定版本为LAME V3.98

[attach]12183[/attach]
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
准备:从[/font][url=http://sourceforge.net/project/downloading.php?groupname=lame&filename=lame-398.tar.gz&use_mirror=osdn]SourceForge.net[/url][font=微软雅黑]下载源文件

以下的教程为偶以前学习时保存的,也许有些年代的,供参考
说明:编译平台为WINDOWS. Mac,Linux下的编译供参考

[/font][size=4][color=Red][font=微软雅黑]LAME编译指南[/font][/color][/size]

[font=微软雅黑]delta3k/作者
2006-11-30 15:59/发布时间
百事高音乐网[/font][font=微软雅黑]/[/font][font=微软雅黑] 来源

[/font][size=1][font=微软雅黑]论坛很多的筒子们都用“LAME3.98a3”版压MP3的[/font]
[font=微软雅黑]但是直到2006年9月24号3.97版才正式出来[/font]
[font=微软雅黑]那么3.98a3到底存在么[/font]

[font=微软雅黑]同时我注意到“LAME3.98a3”版中使用的影响音质的重要参数"-q"竟然会出现"-q 3"优于"-q 0"的效果[/font]

[font=微软雅黑]上面存在的两种状况使我考虑怎样才能获得LAME的最新和可靠版本[/font]

[font=微软雅黑]通过搜索发现[/font]
[font=微软雅黑]LAME不直接发布二进制可执行代码,而代以发布源代码[/font]
[font=微软雅黑]也就是说大家从网上下载到的任何"lame.exe"都不可能是官方发布的[/font]
[font=微软雅黑]要想获得LAME只有通过编译源代码获得[/font]

[font=微软雅黑]下面给besgold的网友们带来刚出炉的LAME编译指南[/font]
[/size][font=微软雅黑][size=1]相信大家只要看过这张帖子就能成功的编译一份LAME[/size]

[/font]************************************************************
[size=3][font=微软雅黑]以下的LAME编译将分成以下几个部分,前面带"*"标志的表示另有提示

0 傻瓜式编译
        如果只需要一个能工作的LAME可以这样做
        不过建议最好不要这么办

1 编译LAME需要的工具
        1.1 CVS下载软件
        2.2 源代码编译软件
2 设置LAME编译环境
        2.1 安装CVS下载软件并下载LAME源代码
        2.2 安装LAME编译软件
3 编译LAME
        3.1 通过集成开发环境(IDE)编译
        3.2 通过命令行编译
4 用各种编译器获得的LAME效率比较[/font][/size]

+++++++++++++++++++++++++++++++++++++++++++

[font=微软雅黑]0 傻瓜式编译[/font]
[font=微软雅黑]        如果只需要一个能工作的LAME或者只想享受一下编译成功的快感,可以这样做[/font]
[font=微软雅黑]        但是建议最好不要这么办[/font]
[font=微软雅黑]        0.1 下载Borland C++ Compiler 5.5[/font]

[url=http://altd.borland.com/akdlm/download/bcppbuilder/freecommandLinetools.exe]http://altd.borland.com/akdlm/do ... ommandLinetools.exe[/url]
[font=微软雅黑]        0.2 到[/font][url=http://sourceforge.net/project/showfiles.php?group_id=290&package_id=309][color=blue]这里[/color][/url][font=微软雅黑]寻找LAME的源代码[/font]
[font=微软雅黑]                或者直接点击[/font][url=http://nchc.dl.sourceforge.net/sourceforge/lame/lame-3.97.tar.gz][color=blue]这里[/color][/url][font=微软雅黑]下载LAME3.97的源代码[/font]
[font=微软雅黑]        0.3 安装Borland C++ Compile 5.5,一路"下一步"就可以了[/font]
[font=微软雅黑]        0.4 解压缩LAME3.97的源代码到C盘根目录下,并将文件夹的名称更改为lame[/font]
[font=微软雅黑]                注意到这个时候用鼠标双击进入lame文件夹的时候就会发现下面有很多的文件[/font]
[font=微软雅黑]                如果没有找到下面的文件,请自行调整目录[/font]
[font=微软雅黑]        0.5 点击开始菜单-->运行-->输入"cmd.exe",然后回车[/font]
[font=微软雅黑]                在弹出的窗口中输入[/font]

[color=blue][font=微软雅黑]
  [font=Trebuchet MS]              cd c:\borland\bcc55\bin[/font]
[font=Trebuchet MS]                echo -L"c:\Borland\Bcc55\lib" > ilink32.cfg[/font]
[font=Trebuchet MS]                echo -I"c:\Borland\Bcc55\include" > bcc32.cfg //注意这个bcc32.cfg前面是">"[/font]
[font=Trebuchet MS]                echo -L"c:\Borland\Bcc55\lib" >> bcc32.cfg   //注意这个bcc32.cfg前面是">>"[/font]
[font=Trebuchet MS]                path="c:\borland\bcc55\bin";"%path%"[/font]
[font=Trebuchet MS]                cd c:\lame[/font]
[font=Trebuchet MS]                make -f Makefile.MSVC COMP=BCC ASM=NO //注意大小写!!!!!![/font]
                [/font][/color]
[font=微软雅黑]                稍等片刻,等CMD窗口静止了,关闭CMD窗口[/font]
[font=微软雅黑]                重新打开c:\lame,恭喜你,lame.exe已经出现在你眼前了[/font]


[font=微软雅黑]                相信任何有电脑使用常识的筒子们严格执行以上步骤的话就可以得到一个lame了[/font]
[font=微软雅黑]                但是通过borland c++ compile获得的lame效率很差,为了获得效率最高的lame[/font]
[font=微软雅黑]                我推荐大家按照下面的步骤编译[/font]


[font=微软雅黑]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[/font]
[font=微软雅黑]1 下载编译LAME需要的软件[/font]
[font=微软雅黑]        1.1 CVS下载软件[/font]
[font=微软雅黑]                TortoiseCVS[/font]
[font=微软雅黑]                其中TortoiseCVS可以在[/font][url=http://tortoisecvs.sourceforge.net/download.shtml]http://tortoisecvs.sourceforge.net/download.shtml[/url][font=微软雅黑]获得[/font]
[font=微软雅黑]                可以使用其他的cvs下载软件例如wincvs,并不影响以后的编译[/font]


[font=微软雅黑]        1.2 源代码编译软件[/font]
[font=微软雅黑]                *Visual C++[/font]
[font=微软雅黑]                *NASM[/font]
[font=微软雅黑]                *GTK[/font]
[font=微软雅黑]                *Sndfile[/font]

[font=微软雅黑]                *Visual C++[/font]
[font=微软雅黑]                LAME的开发者在windows下使用的开发环境已经转移到了VC8(VC 2005),[/font]
[font=微软雅黑]                但是作者也考虑到了borland和intel编译器的用户,实际用VC6也可以通过编译[/font]


[font=微软雅黑]                *NASM[/font]
[font=微软雅黑]                NASM是开源的汇编软件[/font]


[font=微软雅黑]                *GTK[/font]
[font=微软雅黑]                不建议下载,我们不需要图形界面[/font]


[font=微软雅黑]                *sndfile[/font]
[font=微软雅黑]                不建议下载,有没有sndfile都一样[/font]
[font=微软雅黑]**************************************************************************************[/font]
[font=微软雅黑]2 设置LAME编译环境[/font]
[font=微软雅黑]        2.1 安装CVS下载软件[/font]
[font=微软雅黑]                点击安装TortoiseCVS,默认安装的话[/font]
[font=微软雅黑]                安装完成后[/font][color=blue][font=微软雅黑]从命令行进入[/font][/color][font=微软雅黑]C:\Program Files\TortoiseCVS[/font]
[font=微软雅黑]                首先在命令行输入[/font]


[font=微软雅黑]
[/font][color=blue][font=Trebuchet MS]cvs -d:pserver:anonymous@lame.cvs.sourceforge.net:/cvsroot/lame login[/font][/color]


[font=微软雅黑]                在要求输入密码的时候敲回车就可以了[/font]
[font=微软雅黑]                然后在命令行输入[/font]


[font=微软雅黑]
[/font][color=blue][font=Trebuchet MS]cvs -z3 -d:pserver:anonymous@lame.cvs.sourceforge.net:/cvsroot/lame co -P lame [/font][/color]


[font=微软雅黑]                注意大小写[/font]
[font=微软雅黑]                源代码将自动下载到C:\Program Files\TortoiseCVS\lame文件夹下[/font]
[font=微软雅黑]                下载完成后,为方便编译,最好将lame文件夹拷贝到c盘根目录或者你认为方便的文件夹下[/font]


[font=微软雅黑]        2.2 安装LAME编译软件[/font]
[font=微软雅黑]                2.2.1 将下载的NASM解压缩,copy nasmw.exe 到system文件夹。win2k系统copy到WINNT,xp以上一同copy到windows文件夹[/font]
[font=微软雅黑]                2.2.2 安装vc2005,如果没有的话vc6也可以,我就是用vc6编译的[/font]
[font=微软雅黑]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>       [/font]
[font=微软雅黑]3 编译LAME[/font]
[font=微软雅黑]        3.1 集成开发环境编译(VC6)[/font]
[font=微软雅黑]                3.1.1进入LAME源代码所在文件夹,双击lame_vc6.dsw,在打开的VC窗口点击Build-->Set ActiveConfiguration-->弹出窗口中选择"lame - Win32 Releast NASM"再OK就算设置好开发环境了[/font]
[font=微软雅黑]                3.1.2 按F7开始编译[/font]
[font=微软雅黑]                        不幸的是此时会有一个错误窗口[/font]

[color=blue][font=微软雅黑]
                       [font=Trebuchet MS] Error executing cl.exe.[/font]
[font=Trebuchet MS]                        lame.exe - 1 error(s), 17 warning(s)[/font]
                        [/font][/color]
[font=微软雅黑]                        具体原因是[/font]

[color=blue][font=微软雅黑]
[font=Trebuchet MS]                        C:\lame\frontend\main.c(620) : error C2081: 'DWORD_PTR' : name in formal parameter list illegal[/font]
[font=Trebuchet MS]parse.c[/font]
[/font][/color]
[font=微软雅黑]                        解决方法是双击错误行,VC自动跳到main.c,将"DWORD_PTR"更改为"DWORD *",然后重新按F7编译[/font]
[font=微软雅黑]                        编译成功后源代码所在文件夹下面会出现output文件夹,里面就有lame.exe[/font]
[font=微软雅黑]        3.2 命令行编译[/font]
[font=微软雅黑]        从命令行进入lame所在文件夹,输入notepad makefile.msvc,从弹出的记事本窗口中会有lame的readme[/font]
[color=blue][font=微软雅黑]
[font=Trebuchet MS]#__ readme ____________________________________________________________________[/font]
[font=Trebuchet MS]#        nmake -f Makefile.MSVC[/font]
[font=Trebuchet MS]#                -> build lame and dll, but not mp3x[/font]
[font=Trebuchet MS]#                -> use Robert's code modifications[/font]
[font=Trebuchet MS]#                -> assume MSVC 8.0 compiler available[/font]
[font=Trebuchet MS]#                -> assume NASM available[/font]
[font=Trebuchet MS]#                -> assemble MMX code with NASM[/font]
[font=Trebuchet MS]#                -> no compiler warnings[/font]
[font=Trebuchet MS]#       -> use single precision float[/font]
[font=Trebuchet MS]#       -> use LibSndfile[/font]
[font=Trebuchet MS]#[/font]
[font=Trebuchet MS]#        passing arguments, one can modify the default behaviour:[/font]
[font=Trebuchet MS]#        COMP=<not INTEL or BCC>    ->  use MS compiler[/font]
[font=Trebuchet MS]#        WARN=<anything but OFF>    ->  give verbose compiler warnings[/font]
[font=Trebuchet MS]#        ASM=<anything but YES>     ->  no NASM nor MMX[/font]
[font=Trebuchet MS]#        MMX=<anything but YES>     ->  do not assemble MMX code[/font]
[font=Trebuchet MS]#        CFG=<anything but RH>      ->  disable Robert's modifications[/font]
[font=Trebuchet MS]#        CPU=P1                     ->  optimize for Pentium instead of P II/III[/font]
[font=Trebuchet MS]#        CPU=P2                     ->  optimize for Pentium II/III, you need a PII or better[/font]
[font=Trebuchet MS]#        CPU=P3                     ->  optimize for Pentium III, you need a PIII or better[/font]
[font=Trebuchet MS]#        GTK=YES                    ->  have GTK, adds mp3x to default targets[/font]
[font=Trebuchet MS]#        PREC=<anything but SINGLE> ->  use double instead of single float[/font]
[font=Trebuchet MS]#        SNDFILE=<anything but YES> ->  do not use LibSndfile for reading input files[/font]
[font=Trebuchet MS]#[/font]
[font=Trebuchet MS]#        Example:[/font]
[font=Trebuchet MS]#        nmake -f Makefile.MSVC CPU=P1 GTK=YES[/font]
[font=Trebuchet MS]#____________________________________________________________________ readme __[/font]
[/font][/color]
[font=微软雅黑]        从里面可以发现lasm的高级编译选项[/font]
[font=微软雅黑]        因为我使用的P4 CPU,所以我在命令行里面输入[/font]

[color=blue][font=Trebuchet MS]nmake -f Makefile.MSVC CPU=P3 PREC=DOUBLE SNDFILE=NO[/font][/color]
[font=微软雅黑]        如果没有修改源代码的话,也会出现错误[/font]
[font=微软雅黑]
[/font][color=blue][font=Trebuchet MS]--- COMMON FRONTEND STUFF UPTODATE ---

main.c
frontend/main.c(620) : error C2081: 'DWORD_PTR' : name in formal parameter list
illegal
NMAKE : fatal error U1077: 'cl' : return code '0x2'
Stop.[/font][/color]
[font=微软雅黑]        这个时候同样需要在frontend/main.c的620行找到DWORD_PTR,将其更改为"DWORD *",在重新编译就OK了[/font]
[font=微软雅黑]        最后在LAME源代码文件夹下可以找到lame.exe[/font]


[font=微软雅黑]        另外,intel c++的编译方法和命令行编译几乎一样,不同的是[/font]
[font=微软雅黑]        1.从"Build Environment for IA-32......"启动[/font]
[font=微软雅黑]        2.在编译参数中打开COMP开关[/font]


[font=微软雅黑]4 用各种编译器获得的LAME效率比较[/font]
[font=微软雅黑]        我分别用"Borland C++ 5.5","Vc6","intel c++ 9.1"编译获得了多个不同的lame[/font]
[font=微软雅黑]        在对同一首mp3进行转换的时候惊讶的发现[/font]
[font=微软雅黑]        intel编译器所获得的lame转换效率最高,borland编译器获得的lame转换效率最差,大约为前者的1/2。[/font]
[font=微软雅黑]        同时,编译时如果不使用PREC开关将单精度数转换为双精度数,虽然速度快了大概22%(intel编译),但是估计转换出来的MP3音质应该会有所降低。[/font]
[font=微软雅黑]        同时,我发现了论坛发布的lame版本为3.98a3的原因[/font]
[font=微软雅黑]        编译出来后,从命令行执行会返回lame的版本[/font]
[font=微软雅黑]        我编译的lame返回[/font]

[color=blue][font=微软雅黑]
       [font=Trebuchet MS] LAME 32bits version 3.98 ([/font][color=purple][font=Trebuchet MS]alpha 7[/font][/color][font=Trebuchet MS], Nov 30 2006 14:58:53) [/font][b]([/b][font=Trebuchet MS]http://www.mp3dev.org/)[/font]
[font=Trebuchet MS]warning: alpha versions should be used for testing only[/font]
[font=Trebuchet MS]usage: lame [options] <infile> [outfile][/font]
[font=Trebuchet MS]    <infile> and/or <outfile> can be "-", which means stdin/stdout.[/font]
[font=Trebuchet MS]Try:[/font]
[font=Trebuchet MS]     "lame --help"           for general usage information[/font]
[font=Trebuchet MS] or:[/font]
[font=Trebuchet MS]     "lame --preset help"    for information on suggested predefined settings[/font]
[font=Trebuchet MS] or:[/font]
[font=Trebuchet MS]     "lame --longhelp"[/font]
[font=Trebuchet MS]  or "lame -?"              for a complete options list[/font]
[/font][/color]
[font=微软雅黑]        也就是说这个lame应该为3.98a7版[/font]

++++++++++++++++++++++[font=微软雅黑]结束[/font]+++++++++++++++++++++++++++++++++

[font=微软雅黑]附LINUX下编译LAME[/font]

[b]用ICC编译MP3编码器LAME[/b]

[font=微软雅黑]1.        首先你要到LAME的网站上下载其源代码包(通常这是一个.tgz文件),然后把这个.tgz文件解压缩到一个目录下。解压缩过程会生成一个新的子目录,目录名通常就是lame后面跟上版本号。 [/font]
  
[font=微软雅黑]2.接下来我们要进入到生成的子目录中配置编译环境。通常如果使用的是系统缺省的GCC编译器的话我们只需简单的运行当前目录下的配置脚本“./configure”即可。但是由于这里我们打算使用英特尔编译器,所以我们得先配置好英特尔编译器的工作环境,然后再进行通常的编译配置。这可以通过运行下面的命令来完成: [/font]
  
[font=微软雅黑] B Shell环境: [/font]
  
[b]source  <英特尔编译器安装目录>/bin/iccvars.sh[/b]
   
  
[font=微软雅黑] 或者 [/font]
  
[font=微软雅黑] C Shell 环境: [/font]


[b]source  <英特尔编译器安装目录>/bin/iccvars.csh[/b]
  
[font=微软雅黑] 3.        配置好英特尔编译器工作环境后可以运行”icc –V”命令来验证一下icc是否工作: [/font]
[font=微软雅黑][font=Trebuchet MS] [color=Blue]$ [/color][/font][/font][b]icc -V[/b]
[font=微软雅黑][color=Blue][font=Trebuchet MS] Intel(R) C Compiler for applications running on IA-32, Version 10.1    Build 20080212 Package ID: l_cc_p_10.1.013 [/font][/color][/font]
[font=微软雅黑][color=Blue][font=Trebuchet MS] Copyright (C) 1985-2008 Intel Corporation.  All rights reserved. [/font][/color][/font]


[font=微软雅黑] 4.        接下来我们回到通常的编译配置。这时我们就不能简单的运行configure脚本了,因为我们要指定英特尔编译器,而不是使用系统缺省的GCC: [/font]


[color=Blue][font=Trebuchet MS]./configure CC=icc CFLAGS="-fast" CXX=icpc CXXFLAGS="-fast" AR=xiar[/font][/color]

[font=微软雅黑]5.  configure脚本运行完后会生成相应的make file,接下来再运行make命令就可以编译lame了。[/font]
  
[font=微软雅黑]6.  编译完毕后可以运行frontend目录下生成的lame来压缩一个wav文件,看看是否生成相应的mp3文件。 [/font]
  
[font=微软雅黑] 这里对configure命令中传的几个参数作一下简单的解释: [/font]
  
[font=微软雅黑] CC=icc               指明接下来的编译过程使用英特尔编译器icc来编译C语言.c文件 [/font]
[font=微软雅黑]CFLAGS="-fast"      指明icc的编译选项用"-fast"。-fast的含义等同于“-xT -O3 -ipo-no-prec-div -static".-xT表明使用最新的Core2微架构处理器提供的指令集,-O3表明使用最高的优化级别“3”,-no-prec-div指明使用乘倒数来替代除法,-static表示采用静态链接,-ipo表示要进行过程间的优化 [/font]
[font=微软雅黑] CXX=icpc             指明编译过程使用英特尔编译器icpc来编译C++文件,即.cpp文件。 [/font]
[font=微软雅黑] CXXFLAGS="-fast"     指明icpc编译.cpp文件时使用'-fast"选项 [/font]
[font=微软雅黑]AR=xiar             指明编译过程中使用xiar而不是通常的ar来生成静态库.a文件。这里必须使用xiar的原因是因为我们在编译时期用了IPO优化,普通的ar程序无法处理含有IPO信息的.o文件,会导致最后的链接出现找不到某些函数符号的错误。使用英特尔的xiar就可以避免这个错误,因为xiar可以处理IPO.[/font]

[font=微软雅黑]性能对比: [/font]
  
[font=微软雅黑] 折腾了半天,到底效果如何呢?让我们来做一个最后性能测试。这里选用一段大小为110M的钢琴独奏作品来作为测试文件,文件取自我最喜欢的一张著名的钢琴大师在卡内基音乐厅的独奏音乐会专辑CD。:) [/font]
  
[font=微软雅黑] 测试平台: [/font]
  
[font=微软雅黑] Core 2 Duo 2.13G 双核 + 1G RAM + RedHat Enterprise Server 4 64位系统 [/font]
  
[font=微软雅黑] 最后的结果: [/font]
  
[font=微软雅黑] GCC 3.4.6        --- 38秒 [/font]
[font=微软雅黑] ICC 10.1.015     --- 29秒 [/font]
  
[font=微软雅黑] ICC比GCC快 (38 - 29)/38 = [/font][color=#ff0000][font=微软雅黑]24%[/font][/color]

([font=微软雅黑]上文引自CSDN社区[/font],[font=微软雅黑]原文 实战INTEL C++编译技术[/font])

++++++++++++++++++[font=微软雅黑]结束[/font]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

[font=微软雅黑]注:本人转载未编辑改写原文,供参考

注:我想,源代码编写者比其他人都了解LAME的构架,机制,对于LAME,他们应该是最了解的.主观的拼凑参数,未必可以提高压缩质量.有些试验性参数,LAME也只是建议谨慎使用,并不建议用以一般编码.
[/font]

[[i] 本帖最后由 vicysunnie 于 2008-7-28 09:07 编辑 [/i]]

聚智 发表于 2008-7-26 20:55

谢谢楼主的提供,顶一下好了;P

山峦叠情 发表于 2008-11-20 16:43

3.98a3不如3.90
参数    -b 320 -q 3 --noath -k

mhjj 发表于 2008-11-22 17:57

好复杂...~~~~   

也许Noath不是最好的,但至少比192k VBR好吧....

firstrose 发表于 2008-11-23 00:22

质量第一,效率第二

我一般用mingw

seraph17 发表于 2008-11-23 02:36

新版已经取消noath了

lisibin1 发表于 2008-11-23 10:02

我不喜欢LAME,还是喜欢老版编码器.

页: [1]
传奇私服|传世私服|新开传奇私服|魔兽世界私服|传世私服|传奇私服|传奇私服|魔域私服|魔域SF|最新魔域私服忆如花绗缝被|verymode|火种电话本|魔兽世界私服
本站档案均不提供下载,仅指向档案网页,版权归唱片公司所有.zasv提醒您:请于下载后24 小时内删除,支持购买正版CD. 传世私服|传奇世界私服

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.