用ICC编译MP3编码器LAME
Author: Xiaoping Duan (Intel)
LAME 是目前最常用的一个开源MP3编码软件,从1998年12月至今,Lame已被越来越多人的公认为是MP3压缩的最佳利器。Lame编码出来的MP3音色纯厚、空间宽广、低音清晰、细节表现良好,它独创的心理音响模型技术保证了CD音频还原的真实性。在这里我们就用它作例子来展示一下如何用英特尔的C++编译器来编译一个开源程序。LAME本身是一个跨平台的软件,支持常见的Windows和Linux平台,这里我们使用的是Linux系统。
1. 首先你要到LAME的网站上下载其源代码包(通常这是一个.tgz文件),然后把这个.tgz文件解压缩到一个目录下。解压缩过程会生成一个新的子目录,目录名通常就是lame后面跟上版本号。
2. 接下来我们要进入到生成的子目录中配置编译环境。通常如果使用的是系统缺省的GCC编译器的话我们只需简单的运行当前目录下的配置脚本“./configure”即可。但是由于这里我们打算使用英特尔编译器,所以我们得先配置好英特尔编译器的工作环境,然后再进行通常的编译配置。这可以通过运行下面的命令来完成:
B Shell环境:
source <英特尔编译器安装目录>/bin/iccvars.sh
或者
C Shell 环境:
source <英特尔编译器安装目录>/bin/iccvars.csh
3. 配置好英特尔编译器工作环境后可以运行”icc –V”命令来验证一下icc是否工作:
$ icc -V
Intel(R) C Compiler for applications running on IA-32, Version 10.1 Build 20080212 Package ID: l_cc_p_10.1.013
Copyright (C) 1985-2008 Intel Corporation. All rights reserved.
4. 接下来我们回到通常的编译配置。这时我们就不能简单的运行configure脚本了,因为我们要指定英特尔编译器,而不是使用系统缺省的GCC:
./configure CC=icc CFLAGS="-fast" CXX=icpc CXXFLAGS="-fast" AR=xiar
5. configure脚本运行完后会生成相应的make file,接下来再运行make命令就可以编译lame了。
6. 编译完毕后可以运行frontend目录下生成的lame来压缩一个wav文件,看看是否生成相应的mp3文件。
这里对configure命令中传的几个参数作一下简单的解释:
CC=icc 指明接下来的编译过程使用英特尔编译器icc来编译C语言.c文件
CFLAGS="-fast" 指明icc的编译选项用"-fast"。-fast的含义等同于“-xT -O3 -ipo -no-prec-div -static".-xT表明使用最新的Core 2微架构处理器提供的指令集,-O3表明使用最高的优化级别“3”,-no-prec-div指明使用乘倒数来替代除法,-static表示采用静态链接,-ipo表示要进行过程间的优化
CXX=icpc 指明编译过程使用英特尔编译器icpc来编译C++文件,即.cpp文件。
CXXFLAGS="-fast" 指明icpc编译.cpp文件时使用'-fast"选项
AR=xiar 指明编译过程中使用xiar而不是通常的ar来生成静态库.a文件。这里必须使用xiar的原因是因为我们在编译时期用了IPO优化,普通的ar程序无法处理含有IPO信息的.o文件,会导致最后的链接出现找不到某些函数符号的错误。使用英特尔的xiar就可以避免这个错误,因为xiar可以处理IPO.
提示:
1。 在编译的过程中会看到很多的warning警告信息,其中大部分可以忽略。这是因为英特尔编译器的语法检查要比GCC严格一些,编译时会报出更多的语言使用警告信息。如果你不想在屏幕上看到太多的警告信息的话,可以在CFLAGS和CXXFLAGS的参数中加入“-w”把所有的警告信息关掉。
2。编译过程中编译器会打印出很多类似下面的remark信息。
psymodel.c(1846): (col. 2) remark: LOOP WAS VECTORIZED.
psymodel.c(1771): (col. 2) remark: LOOP WAS VECTORIZED.
psymodel.c(1885): (col. 2) remark: LOOP WAS VECTORIZED.
psymodel.c(1890): (col. 2) remark: LOOP WAS VECTORIZED.
psymodel.c(1895): (col. 6) remark: PARTIAL LOOP WAS VECTORIZED.
这些remark信息显示某些源文件(psymodel.c)中的某行代码(1846,1771...)上的循环结构被编译器成功的进行了向量化,也就是编译器对这些循环生成了SSE指令。SSE指令可以在单条指令中执行以前多次循环操作才能完成的功能,从而加快了程序执行速度。
3。这里给出的步骤适合于很多使用标准configure脚本进行配置,然后用make进行编译的开源程序。有兴趣的话你也可以把你感兴趣的程序拿来用icc优化一把,说不定有意想不到的收获呢。
用ICC编译MP3编码器LAME相关推荐
- linux内核编译静态库,用icc编译Linux内核完美教程[图文]
本文将介绍用icc(Intel? C++ Compiler)版本 10.1.x 来编译Linux的内核(支持2.6.22以上的版本) 2.6.23以上包含2.6.23的内核它的解压和引导内核代码改变了 ...
- 将音频转化为MP3格式(lame库)
为什么要转化音频格式 最近又在做即时通讯了, 关于语音录制的文件总是那么几个类型的, 但想要与 Android 实现音频互通. 那么就要转化Mp3格式的音频文件或者Amr 格式文件. 当然Amr是最好 ...
- vlc录制网络流_基于PortAudio+LAME3实现的ASIO多通道音频录制mp3
今天给大家分享一个之前做的ASIO多通道音频录音机程序,可以实时对多达64通道的ASIO音频进行录制MP3或WAV. 好了,话不多说,先给大家看东西. 整个录音软件采用Qt编写,使用了开源库PortA ...
- 基于PortAudio+LAME3实现的ASIO多通道音频录制(mp3、WAV )
文章目录 ASIO 场景 解决方案 Dante Virtual Sound PortAudio LAME3 录音软件 今天给大家分享一个之前做的ASIO多通道音频录音机程序,可以实时对多达64通道的A ...
- 全球著名音乐抓轨软件EAC 设置详解
EAC的作者Andre Wiethoff是德国多特蒙德大学计算机专业的一名学生,经常抓取和监听各种WAV文件,所以使用了许多抓音轨的软件,但令他不满意的是,这些软件只有 时基误差的校正,而CDROM在 ...
- 让你见识真正的数字音频技术
第一章 APE音频技术 Monkeys Audio 编码APE介绍 Monkeys Audio 编码APE APE是目前流行的一种数字音乐文件格式,与MP3这类有损压缩方式不同,APE是一种无损压缩技 ...
- iOS 使用lame录音文件wav转mp3
LAME 是最好的MP3编码器,编码高品质MP3的最好也是唯一的选择.要编译lame 静态库,可以按一下步骤完成: 1.到点击打开链接 下载最新的lame mp3 encoder, 2.到github ...
- android mp3 编码,Android 如何采用Lame编码器编码mp3文件
这篇文章会基于下面3个问题来展开讲解. 1.什么是Lame? 2.为什么采用Lame? 3.Lame在Android应用上如何使用? 一.什么是Lame LAME is a high quality ...
- linux编译lame,技术|Linux 有问必答:如何在Linux中修复“fatal error: lame/lame.h: No such file or dir...
提问: 我尝试着在Linux中编译视频编码器,但是编译提示出错:"fatal error: lame/lame.h: No such file or directory", 我该如 ...
- 使用Lame库实现wav、pcm转mp3
文章目录 前言 一.Lame库是什么? 二.使用步骤 0.创建native项目 1.下载Lame库 2.pcm转MP3 3.wav转MP3 4.native方法如下 三.注意 总结 前言 因为使用an ...
最新文章
- centos6.3下搭建LAMP环境
- 数据库主键设计之思考(转)
- React Native ScrollableTabView的自定义tabBar
- 二维有限元方程matlab,有限元法求解二维Poisson方程的MATLAB实现
- IT互联网公司的笔试的输入输出- c++ python
- python 核心编程_【02】Python核心编程 (全)
- Golang slice高级应用
- mysql systemctl开机启动_Linux 开机启动项命令:chkconfig 和 systemctl
- 基于遗传算法(deap库)的一元函数寻优代码详解
- 互亿无线短信接口开发
- Android 设置屏幕亮度
- 连接服务器打印机文件名无效,局域网打印机连接时显示打印机名无效是何原因? 求教数码高手!...
- go语言for循环break、continue高级用法
- centos修改键盘布局
- CDA学习之Pandas - 十分钟搞定Pandas / Pandas秘籍
- bcd 初始化库系统卷失败_中级|软考题库每日一练|2.24
- 生信技能树linux虚拟机,科学网—Windows10安装Linux子系统Ubuntu 20.04LTS,轻松使用生信软件,效率秒杀虚拟机 - 刘永鑫的博文...
- 5.雅思口语——别再用delicious food啦
- Day357358359360.JVM监控及诊断工具-GUI -JVM
- SQL中存储过程和函数的标准写法
热门文章
- Android UI布局优化之ViewStub
- BZOJ2160 拉拉队排练
- 异步操作之后让await后续的代码能够继续执行
- 远程文件传输工具Filezilla
- python if else break_Python条件判断 if-else for循环 while循环 break continue
- 操作系统的不确定性是指_读文||不确定性原理—人工智能的哲学基础
- ubuntu 最新提权漏洞_Ubuntu和Debian最新的KDE安全漏洞,附-修复指南
- bom sap 替代项目_简述SAP系统常规模块能为定制家居企业解决哪些核心问题
- java中复制图片_2017.5.3 java中 复制图片的4种方式(copy图片只能用字节流对象)...
- data layui table 排序_具有排序、筛选、分组、虚拟化、编辑功能的React表格组件...