MP3软解码库Libmad详细解释

合集下载

mad资料

mad资料

libmad音频解码库分析2008-07-25 11:46MAD(libmad)是一个开源的高精度MPEG音频解码库,支持MPEG-1标准。

libmad提供24-bit的PCM输出,完全定点计算,非常适合在没有浮点支持的嵌入式硬件平台上使用。

使用libmad提供的一系列API可以实现MP3文件的解码。

“mad.h”头文件定义了libmad的数据结构及API函数[15]。

表4 libmad中的主要数据结构MAD通过回调函数机制来实现解码,每个回调函数会返回一个枚举类型mad_flow,通过mad_flow可以控制解码的过程。

在未经处理的情况下,MAD一般输出32bit,以little endian格式存放在mad_fixed_t中的数据。

但是大多数的声卡并不能支持输出高达32bit精度的数据,因而还必须对mad_fixed_t进行量化,圆滑处理以及抖动,使到采样信号降到16bit精度。

MAD负责的只是解码的过程,它工作过程是:从外部获取输入,逐帧解码,在解码的过程中返回信息,然后得到解码结果。

开发人员要手动设置输入输出。

编程实现解码的方法为:初始化mad_decoder,里面包含了指向输入、输出、滤波、错误和消息回调函数的指针。

通过mad_decoder_init()实现初始化[16]。

struct mad_decoder decoder;struct my_playbuf playbuf; //设置数据缓冲区mad_decoder_init(&decoder,&playbuf,input_func,header_func,/*filter*/0 , output_func, /*error*/ 0, /* message */ 0);在这个初始化函数里面,回调输入函数指向了input_func,处理帧头信息的函数指向了header_func,而输出函数则为output_func。

基于stm32的软件音频解码库libmad移植手册

基于stm32的软件音频解码库libmad移植手册

/* [ch][eo][peo][s][v] */
unsigned int phase;
/* current processing phase */
struct mad_pcm pcm;
/* PCM output */};
此数据结构存放解码合成滤波后的 PCM 数据,pcm 域比较重要:
struct mad_pcm {
FrameSize = (((MpegVersion == MPEG1 ? 144 : 72) * Bitrate) / SamplingRate) + PaddingBit
例如: Bitrate = 128000, a SamplingRate =44100, and PaddingBit = 1
原创教程
UP MCU 工作室
Libmad 音频解码库移植手册
本手册由 UP MCU 工作室编写,若要转载请注明出处 2012-8-12
UP MCU 工作室 淘宝店:
1
原创教程
UP MCU 工作室
前言
目前,网络上绝大都数关于 MP3 播放器的例子,大都采用 vs1003 这颗硬件解码芯片或 者使用 AT89C51SND1C 这颗含有内部音频解码电路的 NB 单片机,软件音频解码的例子少之又 少。UP MCU 工作室的相关人员花了些时间、精力,研究了目前 linux 领域很常用的一个开 源音频解码库——libmad 的解码流程,并将其成功移植到裸奔的 stm32 平台上。本着资源 共享的奉献精神,本工作室将移植过程整理成手册,发布于网络,希望对大家有用。
3. Libmad 移植
从前面的解码框图中我们知道,使用 libmad 解码,我们只需要把音频文件流读入 给 libmad,然后把解码得到的 PCM 数据进行播放就可以。

用Direct Sound为MP3解码器libmad播放输出

用Direct Sound为MP3解码器libmad播放输出

用Direct Sound为MP3解码器libmad播放输出WIN32平台下madplay默认采用WaveOut播放输出,本文实现为其增加Direct Sound输出。

在Windows XP,VC++ 6.0测试通过。

(一)优秀的MP3解码器libmad简介libmad是跨平台的基于命令行的MP3播放解码器,使用定点解码,可用于没有浮点运算的嵌入式系统。

(二)下载及测试1、从官方网站下载madplay-0.15.2b.tar.gz,libmad-0.15.1b.tar.gz,libid3tag-0.15.1b.tar.gz,还要从下载libz-1.1.4.tar.gz,共四个文件。

将四个压缩包保存在同一目录,例如d:\madplay。

2、用WINRAR“解码压到当前目录”方法将四个压缩包解压,在d:\madplay下将有四个文件夹:madplay-0.15.2b,libmad-0.15.1b,libid3tag-0.15.1b,libz-1.1.4。

3、用VC++ 6.0打开D:\madplay\madplay-0.15.2b\msvc++下的madplay工程。

修改VC++ 6.0的编译环境:Tools -> Options -> Directories标签 -> Directories框下增加如下两行:D:\MADPLAY\LIBMAD-0.15.1B\MSVC++D:\MADPLAY\LIBID3TAG-0.15.1B点击OK保存设置退出。

再为编译连接后的可执行文件指定运行参数:Project -> settings -> 点中左侧madplay -> 右侧Program arguments框内填入你硬盘上保存的一个MP3文件,例如:D:\MP3\test.mp3,单击OK保存设置退出。

按Ctrl+F5编译连接运行,就可以听到播放你选择的MP3歌曲了。

(三)为madplay增加Direct Sound输出madplay采用WaveOut作为播放输出,用DS输出的优点不再我说了吧。

mp3解码算法原理详解

mp3解码算法原理详解

MPEG1 Layer3 (MP3)解码算法原理详解本文介绍了符合ISO/IEC 11172-3(MPEG 1 Audio codec Layer I, Layer II and Layer III audio specifications) 或 ISO/IEC 13818-3(BC Audio Codec)的音频编码原理。

通过madlib解码库进行实现。

1、程序系统结构mp3解码流程图其中同步及差错检查包括了头解码模块在主控模块开始运行后,主控模块将比特流的数据缓冲区交给同步及差错检查模块,此模块包含两个功能,即头信息解码及帧边信息解码,根据它们的信息进行尺度因子解码及哈夫曼解码,得出的结果经过逆量化,立体声解码,混淆缩减,IMDCT,频率反转,合成多相滤波这几个模块之后,得出左右声道的PCM码流,再由主控模块将其放入输出缓冲区输出到声音播放设备。

2、主控模块主控模块的主要任务是操作输入输出缓冲区,调用其它各模块协同工作。

其中,输入输出缓冲区均由DSP控制模块提供接口。

输入缓冲区中放的数据为原始mp3压缩数据流,DSP控制模块每次给出大于最大可能帧长度的一块缓冲区,这块缓冲区与上次解帧完后的数据(必然小于一帧)连接在一起,构成新的缓冲区。

输出缓冲区中将存放的数据为解码出来的PCM数据,代表了声音的振幅。

它由一块固定长度的缓冲区构成,通过调用DSP控制模块的接口函数,得到头指针,在完成输出缓冲区的填充后,调用中断处理输出至I2S接口所连接的音频ADC芯片(立体声音频DAC和DirectDrive耳机放大器)输出模拟声音。

3、同步及差错检测同步及差错检测模块主要用于找出数据帧在比特流中的位置,并对以此位置开始的帧头、CRC校验码及帧边信息进行解码,这些解码的结果用于后继的尺度因子解码模块和哈夫曼解码模块。

Mpeg1 layer 3的流的主数据格式见下图:主数据的组织结构图其中granule0和granule1表示在一帧里面的粒度组1和粒度组2,channel0和channel1表示在一个粒度组里面的两个通道,scalefactor为尺度因子quantized value为量化后的哈夫曼编码值,它分为big values大值区和count1 1值区CRC校验:表达式为X16+X15+X2+13.1 帧同步帧同步目的在于找出帧头在比特流中的位置,ISO 1172-3规定,MPEG1 的帧头为12比特的“1111 1111 1111”,且相邻的两个帧头隔有等间距的字节数,这个字节数可由下式算出:N= 144 * 比特率 / 采样率如果这个式子的结果不是整数,那么就需要用到一个叫填充位的参数,表示间距为N +1。

MP3软解码库Libmad详细解释

MP3软解码库Libmad详细解释

本文档版权归属于 西安交通大学人工智能与机器人研究所 作者: 李国辉 g h l i @ a i a r . x j t u . e d u . c n
第2章 Mp3 解码算法流程
MP3 的全称为 MPEG1 Layer-3 音频文件, MPEG 音频文件是 MPEG1 标准中的声音部 分,也叫 MPEG 音频层,它根据压缩质量和编码复杂程度划分为三层,即 Layer1、Layer2、 Layer3,且分别对应 MP1、MP2、MP3 这三种声音文件,并根据不同的用途,使用不同层 次的编码。MPEG 音频编码的层次越高,编码器越复杂,压缩率也越高,MP1 和 MP2 的压 缩率分别为 4:1 和 6:1-8:1,而 MP3 的压缩率则高达 10:1-12:1。一分钟 CD 音质的音 乐,未经压缩需要 10MB 的存储空间,而经过 MP3 压缩编码后只有 1MB 左右。不过 MP3 对音频信号采用的是有损压缩方式,为了降低声音失真度,MP3 采取了“ 心理声学模型”, 即编码时先对音频文件进行频谱分析,然后再根据心理声学模型把谱线分成若干个阈值分 区,并计算每个阈值分区的阈值,接着通过量化和熵编码对每个谱线进行编码,最后形成具 有较高压缩比的 MP3 文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效 果。
2.1. Mp3 文件格式
MP3 文件以一帧为一个编码单元, 各帧编码数据是独立的。 为了清晰而准确地描述 mp3 文件格式,下面采用位流语法描述,这种语法格式与 c 语言近似,易于理解,且描述清晰。 其中粗体表示码流中的数据项,bslbf 代表位串,即“Bit string, left bit first ”,uimsbf 代表无 符号整数,即”unsinged integer, most significant bit first”,数字表示该数据项所占的比特数。

tcpmp播放器介绍。

tcpmp播放器介绍。

TCPMP(The Core Pocket Media Player),这是一个应用于智能设备上的开源媒体播放软件。

TCPMP是一个功能强大开放式的开源多媒体播放器,播放器主要由核心框架模块(common工程)和解码器分离器插件组成。

TCPMP的插件非常多,联合几个最常用的插件(ffmpeg、splitter)来说明,其中interface 插件实现TCPMP的界面,由于他和媒体播放没有什么关系,这部分可以完全被替换掉,替换成自己的界面。

ffmpeg工程是系统主要的音视频解码模块,ffmpeg是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案。

FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。

ffmpeg支持MPEG、DivX、MPEG4、AC3、DV、FLV等40多种编码,A VI、MPEG、OGG、Matroska、ASF等90多种解码。

很多开源播放器都用到了ffmpeg。

但是ffmpeg程序解码效率不是很高,系统仅仅使用了FFmpeg的部分解码功能。

ffmpeg主目录下主要有libavcodec、libavformat和libavutil等子目录。

其中libavcodec 用于存放各个encode/decode模块,libavformat用于存放muxer/demuxer模块,libavutil用于存放内存操作等常用模块。

本系统的媒体文件分离器有单独的splitter模块完成所以不需要libavformat子目录。

ffmpeg目录下libavcodec、libavutil保留子目录。

libmad工程用于MP3文件解码,该工程包含两个功能模块,一个负责解析MP3文件格式,包括MPEG1音频文件 (MP1,MP2,MP3,MPA),读取每一帧音频数据;另一个负责解码MPEG1音频数据,解码代码在libmad子目录中。

libmad是一个开源的高精度 MPEG1音频解码库,支持 MPEG-1(Layer I, Layer II 和 LayerIII,也就是 MP3)。

基于stm32的软件音频解码库libmad移植手册

基于stm32的软件音频解码库libmad移植手册
下图大致展示了 MP3 解码的流程:
其中同步及差错检查包括了头解码模块,在主控模块开始运行后,主控模块将比特流的 数据缓冲区交给同步及差错检查模块,此模块包含两个功能,即头信息解码及帧边信息解码, 根据它们的信息进行尺度因子解码及哈夫曼解码,得出的结果经过逆量化,立体声解码,混 淆缩减,IMDCT,频率反转,合成多相滤波这几个模块之后,得出左右声道的 PCM 码流,再 由主控模块将其放入输出缓冲区输出到声音播放设备。
FrameSize = (((MpegVersion == MPEG1 ? 144 : 72) * Bitrate) / SamplingRate) + PaddingBit
例如: Bitrate = 128000, a SamplingRate =44100, and PaddingBit = 1
enum mad_layer layer;
/* audio layer (1, 2, or 3) */
enum mad_mode mode;
/* channel mode (see above) */
int mode_extension;
/* additional mode info */
enum mad_emphasis emphasis;
3. Libmad 移植
从前面的解码框图中我们知道,使用 libmad 解码,我们只需要把音频文件流读入 给 libmad,然后把解码得到的 PCM 数据进行播放就可以。
移植前,我们需要准备好已经能进行文件系统读写的工程模板,相信对文件系统的 应用,大家都不陌生,我采用的是 FatfsR0.09,从 SD 卡中读入 MP3 数据给 libmad 解 码,最后使用 PCM1770 进行 DA 转换。如果有对文件系统移植不熟悉的童鞋,可以参考 我例程中的文件系统移植模板的源码。

网络收音机2--mp3解码

网络收音机2--mp3解码

MP3解码实验
使用ALSA和MAD播放MP3文件 更进一步:^-^
Ctrl+z 是linux命令行的一个快捷键,作用是把当前 程序挂起。 fg命令是linux命令行的一个命令,作用是把挂起的 挂起的程序恢复运行。 试一下我们的程序挂起后再恢复,看看效果 思考一下原因,并试着解决一下
23位:帧长调节
0 = 无需调整, 1 = 调整 具体如何调整下面介绍

24位:保留字,没有使用 25~26位:声道模式
00 = 立体声, 01 = 联合立体声 10 = 双声道, 11 = 单声道
2.2 MP3格式
27~28位:扩充模式
当声道模式为01时才使用这个模式
29位:版权,文件是否合法
2.2 MP3内部结构
MP3是由帧(frame)构成,帧是MP3文件的 最小组成单位 每一帧都有两部分构成
帧头 数据块
一个MP3音频文件是由一系列帧组成的
2.2 MP3格式
Header和Data组成一个帧
2.2 MP3格式
现今的MP3可能会包含属性信息
ID3v2在头部 ID3v1在尾部
static int decode (unsigned char const *start, unsigned long length) { struct buffer buffer; struct mad_decoder decoder; int result; buffer.start = start; buffer.length = length; mad_decoder_init (&decoder, &buffer, input, 0, 0, output, error, 0); mad_decoder_options (&decoder, 0); result = mad_decoder_run (&decoder, MAD_DECODER_MODE_SYNC); mad_decoder_finish (&decoder); return result; }

嵌入式课程设计基于RAM音乐播放器的设计和实现

嵌入式课程设计基于RAM音乐播放器的设计和实现

嵌入式课程设计基于RAM音乐播放器的设计和实现随着嵌入式技术的不断发展,手持式智能设备越来越受欢迎。

音乐播放器作为手持式智能设备的一种,具有体积小、功耗低、便于携带等优点。

本篇文章在RAM音乐播放器这一主题下,探讨嵌入式课程设计基于RAM音乐播放器的设计和实现。

一、主要设计目标和方案本设计的主要目标是实现一款高保真音乐播放器产品,主要功能包括支持播放多种音频格式、可视化操作界面、支持USB连接和传输、支持定时关闭等功能。

本设计采用了STM32F103ZET6系列芯片,加上DAC芯片,实现输出音频信号的功能。

具体方案如下:1.硬件设计本设计采用单片机进行控制,具体选择STM32F103ZET6芯片,它的主频为72MHz,能够提供足够的性能用于驱动DAC芯片,同时它的周边设备相当完善,能够满足硬件设计的需求。

此外,为了提高音质,本设计选择DAC芯片CS4344进行音频信号的输出。

除此之外,还需要添加其他周边设备,例如存储器、LCD屏、键盘等。

2.软件设计首先,需要针对音频格式进行音频解码。

在本设计中,选择使用Libmad库来解码MP3格式的音乐文件。

此外,还需要一个文件系统来存储音乐文件,本设计采用FAT文件系统来实现。

对于操作界面设计,这里使用LCD屏来实现,具体可通过TFTLCD+STM32库来进行操作实现。

此外,还需要实现对应音频格式的播放、暂停、上一曲、下一曲、音量调整等功能。

3.供电设计音乐播放器通常采用电池供电,在硬件设计中需要考虑到节能问题,因此需要进行相应的节能处理。

具体来说,可以采用睡眠模式,降低功耗,延长电池使用时间。

同时,还需要在充电时进行相应的充放电管理,以确保设备的安全和长寿命。

二、具体实现流程和技能点1.音频解码在本设计中,采用Libmad库来实现MP3格式的音频解码,具体实现流程如下:(1)载入MP3文件在系统启动时,需要将音乐文件载入内存,这里使用FAT文件系统来存储音乐文件,通过对FAT文件系统的读取操作,就能够将音乐文件载入内存中。

linux下网络MP3播放器程序

linux下网络MP3播放器程序
cp -r /mnt/hgfs/共享目录名/文件名 虚拟机路径
共享目录只做文件中转,不能在共享目录编译程序
vi /home/tarena/.bashrc
在最后一行添加
export LD_LIBRARY_PATH=/usr/local/lib/
bash //更新shell
----------------------------
MP3应用程序
服务器
1)创建歌曲列表(双向循环链表)
2)创建socket(UDP)服务器
3)接收客户端的命令
4)解析命令执行对应音乐播放动作
cmd = 11 音乐播放
12 暂停
13 停止
15 下一首
2)安装libmad音频解码库
tar xvf libmad-0.15...
cd libmad...
./configure
make
sudo make install
3)安装tags信息库
需要依赖zlib算法
tar xvf zlib-1.2
cd zlib...
./configure
cd madplay
./configure --with-alsa
make
suMP3文件
export LD_LIBRARY_PATH=/usr/local/lib/
madplay xxx.mp3
从共享目录拷贝文件到虚拟机
cp -r /mnt/hgfs/share/madplay ./
make
sudo make install
tar xvf libid3tag-0.15.1b.tar.gz

winmobile5播放mp3音乐的方法(1)--libmad库的移植篇

winmobile5播放mp3音乐的方法(1)--libmad库的移植篇

winmobile5播放mp3音乐的方法(1)--libmad库的移植篇win mobile 5播放mp3音乐的方法(1)--libmad库的移植篇鉴客发表于 10-23 09:28 1年前, 0回/140阅讨论区 ? 技术分享【珠海】 11月25日(周日下午)OSC 源创会我要报名?win mobile 5上面播放mp3似乎已经有了可以依赖于win mobile提供的multi-media播放器的调用方法。

这种显而易见的方法,我认为缺少一些主动性,只能微软怎么做,咱就怎么做。

如果想做出个性化的软件或者播放器,或者实现在线边下载边播放的方案就很困难了。

对于从moto的linux移植到win mobile的5mbox而言,我更熟悉传统的一些的处理mp3文件的方案。

基本的思路是:先把mp3文件读取到缓冲区,然后解码,解成pcm码流,然后下一步是把pcm码流送给系统的播放接口开始播放。

mp3文件读取自然没有什么问题,不需要多说。

如果有心提高播放效率的话,可以考虑加入一个线程后台读取,把mp3的二进制数据直接读入一个二进制队列里面,然后解码器再从队列中读取块数据进行解码。

经过我在多普达p800真机上测试,这一步由于是二进制文件的顺序读取,如果不是网络应用(例如:边下载边播放的那种),是可以忽略不计的,对mp3的解码没有什么大的影响。

总体来说,解码的速度,应该是整个程序的瓶颈(实际上也确实如此)。

于是乎目光转向了libmad这个开源的mp3解码器。

很多linux 下面优秀的mp3播放器都是基于这个解码器做得。

我用来移植的libmad的版本是0.14.2的这个版本(在version.h 文件里面有定义)view sourceprint?1 # define MAD_VERSION_MAJOR 02 # define MAD_VERSION_MINOR 143 # define MAD_VERSION_PATCH 24 # define MAD_VERSION_EXTRA " (beta)"但是在config.h里面写的是:#define VERSION "0.14.2b"不管了,大概是这个样子的。

rpm包的简单制作及其他操作

rpm包的简单制作及其他操作

rpm包的简单制作及其他操作RPM包的简单制作及其他操作●简单介绍RPM(Redhat Package Manager)是以⼀种数据库记录的⽅式将所需要的套件安装到Linux主机的⼀套管理程序。

它可以使得⽤户可以从源码构建⼀个⼆进制的软件发⾏包和利⽤补丁包给软件打补丁。

因其灵活易⽤,所以很多Linux发⾏版的默认软件安装包都采⽤此打包格式。

●制作RPM包的流程1.准备打包环境在CentOS系统下创建rpmbuild的⼯作⽬录:~/rpmbuild/SOURCES~/rpmbuild/SPECS~/rpmbuild/BUILD~/rpmbuild/RPMS~/rpmbuild/BUILDROOT~/rpmbuild/SRPMS如果你的⽤户⽬录主⽬录下没有类似⽬录结构,你可以通过⼀个⼯具软件来⾃动配置和⽣成,如下:#yum install rpmdevtools运⾏⾃动配置命令⾃动⽣成如上⽬录,并配置⼀些必要操作。

#rpmdev-setuptreerpmdev-setuptree命令默认将再当前⽤户主⽬录下创建⼀个RPM构建根⽬录结构,如果需要改变默认位置,可以修改配置⽂件:~/.rpmmacros中变量_topdir对应的值即可。

如将rpmbuild⽬录配置到/home⽬录下:echo …%_topdir %(echo $HOME) /rpmbuild?>~/.rpmmacrosrpmbuild⼯作⽬录功能简介:2.SPEC⽂档的撰写是制作RPM包的核⼼,也是最难的⼀步。

制作RPM包就是根据SPEC⽂件⾥⾯的配置信息来构建RPM包。

SPEC⽂档分为如下⼏个部分:1)SPEC⽂档的头部Name: myapp <===软件包的名字(后⾯会⽤到)Version: 0.1.0 <===软件包的版本(后⾯会⽤到)Release: 1%{?dist} <===发布序号Summary: my first rpm <===软件包的摘要信息Group: <===软件包的安装分类,参见/usr/share/doc/rpm-4.x.x/GROUPS这个⽂件License: GPL <===软件的授权⽅式URL: <===这⾥本来写源码包的下载路径或者⾃⼰的博客地址或者公司⽹址之类Source0: %{name}-%{version}.tar.gz <===源代码包的名称(默认时rpmbuid回到SOURCES⽬录中去找),这⾥的name和version就是前两⾏定义的值。

Linux移植Mp3库以及注意点

Linux移植Mp3库以及注意点

Linux移植Mp3库以及注意点核⼼板要播放mp3不是说简单就简单的事情⾸先应该确定板⼦上的⾳频通道是好的。

⾄少能够播放wav吧准备⼯作:1. 看下⽹上资料,想想MP3是有版权的,肯定是需要是解码库的2. 解码库什么合适?3. 这些解码库,肯定是可以下载,由于考虑到核⼼板,肯定也需要源码能够进⾏交叉编译先是漫⽆⽬的搜索,想到Qt是不是可以播放,Python是不是可以。

现实是残酷的,了解到的Qt,Python都是实现接⼝部分,并不解决解码库的问题。

反正⼀句话,就是要先有解码库才可以。

搜索⼀会,把问题集中到⼀起了。

Linux下Mp3解码库 libmad,madplay是⿍⿍⼤名的播放器。

既然,确定⽬标了,那么就解决解码库的事情。

Baidu,madplay,⼀堆东西,也有很多好的⽂章,看样⼦很多⼈在研究,相信肯定有戏。

先找个写得详细点⼊⼿吧。

解码库,基本上⽤的以下三种⽂件,如果系统没有装过,都需要先下载安装的zlib-1.2.3.tar.tar⽤于⽂件的压缩和解压libid3tag-0.15.1b.tar.gz mp3的解码库libmad-0.15.1b.tar.gz madplay的库⽂件madplay-0.15.2b.tar.gz 播放程序的压缩包,mp3播放器的源码准备⼯作的插曲(插曲:)既然,⾃⼰的编译的。

⾃然想到先在Ubuntu试验下,结果,发现本⼈的虚拟机下Ubuntu的竟然没有声⾳,播放wav,也没声⾳(这个到⼀直没有发现这个问题。

突然发现,觉得很奇怪)。

进⼊系统设置的声⾳设置,发现是静⾳的,但怎么修改不⾏,都是静⾳的,是很奇怪。

(windows下从来没碰到过问题)后来,看⽹上资料,说可以先看有没有设备。

“aplay -l”竟然,没找到硬件设备列表。

说明驱动没有装好。

原来Ubuntu要装alsa的声⾳驱动。

先卸载原先的alsasudo apt-get remove linux-sound-base alsa-base alsa-utilssudo apt-get install xmlto libasound2-devsudo apt-get install linux-sound-base alsa-base alsa-utils下载⼀个lib alsa-lib-1.0.25.tar.bz2 //这个不是最新的,但不是最新就最好,要⾃⼰匹配的,我就装过好⼏个版本,能装上去,但⽆效。

linux系统学习笔记

linux系统学习笔记

linux系统学习笔记==============================智能娱乐系统===================硬件:中控:UI,⾳视频数据处理能⼒操作:显卡,声卡、LED、游戏机、触控屏ARM :cortex - A软件:开发环境:vmware + linux(ubuntu)程序开发:linux C程序移植:交叉开发效果:⾃动处理程序⼀、Linux 命令linux : 图形简陋---> 追求效率⾼移植性强,开源性linux :命令⾏形式进⾏交互ls: 查看全部⽂件名/ --->根⽬录pwd: 打印当前的路径/home/gec 等于~ ---> 家⽬录cd : 直接回到/home/geccd / : 回到根⽬录/cd ..: 回到上⼀级的⽬录ls -l类型权限链接数创建者⼯作组⼤⼩⽇期⽬录名d rwxrwxr-x 2 gec gec 4096 Jul 2 2013 Desktop d:⽬录(第⼀个字母:-:普通⽂件d:⽬录)rwxrwxr-x:⽂件的权限r:读权限w:写权限x:执⾏权限⽤户权限:rwx(创建者的权限)rwx(同组⼈)r-x(其他⼈)clear: 清除屏幕信息touch 创建⽂件touch xxxx ----> 因为⾝份是gec,所以必须在/home/gec中创建rm 删除⽂件/⽬录rm xxxx(⽂件名) ----> 因为⾝份是gec,所以必须在/home/gec中删除rm xxxx(⽬录名) -rfgedit 编辑⽂件gedit xxxxcat 查看⽂件内容cat xxxxmkdir 创建⽬录mkdir xxxx ----> 因为⾝份是gec,所以必须在/home/gec中创建cp 拷贝命令cp ⽂件名⽬录名---> cp abc.c 123/chmod 修改⽂件的权限-rw-rw-r-- 1 gec gec 20 Apr 14 19:43 abc.c4214214216 6 4希望三个⼈都是可读可写可执⾏7 7 7chmod 777 xxxxchmod 777 abc.c-rwxrwxrwx 1 gec gec 20 Apr 14 19:43 abc.c⼆、linux与windows间的共享⽬录1,在windows系统中的D:\创建⼀个名字为share的⽬录2, "虚拟机" --- "设置" ---- "选项" --- "共享⽂件夹" --- "总是启⽤" ---"确定" 3,在linux系统输⼊以下命令来进⼊共享⽬录cd /mnt/hgfs/share/4,在linux与windows分别创建⽬录和⽂件,观察两个系统的变化=====================开发板的使⽤=========================⼀、核⼼板CPU:ARM - cortex -A8名字:S5PV210内存:4块4 * 128MB = 512MBnandfalsh: 1G ---〉linux系统⼆、底板电源线插⼝:5V按键⾳频输⼊(红⾊)输出(绿⾊)串⼝:连接PC机与开发板⽹⼝:快速传输数据三、使⽤GEC210板⼦1,接上电源线2,串⼝线⼀端接在开发板上,另⼀端接在USB转串⼝上,USB⼝接在电脑的USB⼝上。

开源mp3解码库MAD(libmad)

开源mp3解码库MAD(libmad)

开源mp3解码库MAD(libmad)开源mp3解码库 MAD (libmad)0 libmad是一个开源mp3解码库,其对mp3解码算法做了很多优化,性能较好,很多播放器如mplayer、xmms等都是使用这个开源库进行解码的;如果要设计mp3播放器而又不想研究mp3解码算法的话,libmad是个不错的选择。

MAD (libmad)是一个开源的高精度MPEG 音频解码库,支持MPEG-1(Layer I, Layer II 和 LayerIII(也就是 MP3)。

LIBMAD 提供 24-bit 的PCM 输出,完全是定点计算,非常适合没有浮点支持的平台上使用。

使用 libmad 提供的一系列 API,就可以非常简单地实现 MP3 数据解码工作。

在 libmad 的源代码文件目录下的 mad.h 文件中,可以看到绝大部分该库的数据结构和 API 等。

MAD is a high-quality MPEG audio decoder. It currently supports MPEG-1and the MPEG-2extension to lower sampling frequencies, as well as the de facto MPEG 2.5 format. All three audio layers — Layer I, Layer II, and Layer III (i.e. MP3) —are fully implemented.MAD does not yet support MPEG-2 multichannel audio (although it should be backward compatible with such streams) nor does it currently support AAC.MAD has the following special features:•24-bit PCM output•100% fixed-point (integer) computation•completely new implementation based on the ISO/IEC standards•available under the terms of the GNU General Public License (GPL)哪些应用程序使用了 MADThe following third party applications use or plan to use MAD for audio decoding. These links are provided for convenience only; no endorsement or any other representation is intended by this list.•AlsaPlayer audio player for UNIX•Apollo audio player for Linux•Aqualung music player for GNU/Linux•Audacity cross-platform audio editor•Audiere high-level audio API•Audio-MPEG Perl module •Avidemux audio editor •avifile media utilities for Linux•BEAST front-end to the Bedevilled Sound Engine •BeatForce computer dj-ing system•Cog audio player for Mac OS X•CoolPlayer audio player for Windows•cplay curses front-end for various audio players •Daisy_player for the blind and visually impairedusing Linux•Domo Qt/MySQL-based music organizer•ELMP-TNG embedded Linux media player•Final Scratch digital vinyl DJ system•Final Scratch Record Box Editor song organizer andutility•freebase SHOUTcast-compatible MP3 player •Geekradio virtual DJ •Gmerlin media player for Linux•GSMP audio editor for Linux•GSPlayer audio player for •MP3do pluggable bash script•MPD remote music player and playlist manager •mpega_libmad clone of mpega.library for Amiga •mpg321GPL command-line replacement for mpg123 •MPlayer movie player for Linux•MQ3 Qt media player •MusicBrainz Tagger automatic metadata (ID3)tagger•MythTV homebrew PVR project•NMM networked multimedia middleware for UNIX •normalize audio file volume normalizer•nvrec audio/video capture toolkit•Ogle DVD player for UNIX •Open Cubic Player for UNIX •OpenRISC 1000open source computing platform •OpiePlayer(part of Opie) media player for the SharpZaurus•OSKit operating system framework•phMAD MP3 player for QNX •pmp3Python/GTK front-end to madplay•Pocket DivX Player media player for Pocket PC•PT/Play(part of Pocket Tcl) media player forLinux handhelds •Rhythmbox music organizer and player for Linux •rtptsaudio audio client for RTP MPEG-2 TransportStreamsPocket PC•GStreamer streaming media framework•juked MP3 jukebox daemon •K3b KDE front-end for CD recording•Kwave sound editor for KDE •LIBWMP3 MP3 player library for Windows•MadFront front-end to madplay for Windows CE •MAD frontend for Windows •madlld MAD low-level API demonstration•madlldlib source code for creating a Win32 DLL •MAD Newton port of MAD for Newton OS•MAD Plug-in for Winamp decoder replacement •madplay audio player for UNIX•MadPlayer JNI port of madplay for Java •Madsoundz MP3 player for Windows•Mike’s Jukebox Distro CD boot image and audioplayer•Mixxx digital dj’ing system•MMIOMP3multimedia extender for OS/2•MOC console audio player •MortPlayer MP3/Ogg player for Pocket PC •scream Python front-end to madplay•ScummVM game interpreter engine•silencer audio silence removal tool •SimpleCDR front-end to various CD audio utilitiesfor Linux•SoX command-line sound processing utility •SQLshout Shoutcast compatible streamingsource client•Squash learning music player•Squirrel Jukebox for Linux •StreamRipperX Internet radio stream applicationfor Mac OS X•Sweep digital audio editor for UNIX•TCVP video and music player, transcoder andstreaming server •TodayPlayer MP3 player for Pocket PC•To Eleven MP3 player for Sega Dreamcast•VDR MP3 Extension for Linux•VideoLAN Client cross-platform multimedia player •winLAME front-end to LAME for Windows•XGMC MIDI sequencer•xine video player for UNIX •XMMP multimedia player for Linux•xmms-mad plug-in for XMMS。

libmad 用法

libmad 用法

libmad 用法libmad是一个开源的高精度MPEG音频解码库,支持MPEG-1标准。

它提供24-bit的PCM输出,完全定点计算,非常适合在没有浮点支持的嵌入式硬件平台上使用。

libmad提供了一系列API可以实现MP3文件的解码。

它通过回调函数机制来实现解码,每个回调函数会返回一个枚举类型mad_flow,通过mad_flow可以控制解码的过程。

在未经处理的情况下,MAD一般输出32bit,以little endian格式存放在mad_fixed_t中的数据。

但是大多数的声卡并不能支持输出高达32bit精度的数据,因而还必须对mad_fixed_t进行量化,圆滑处理以及抖动,使到采样信号降到16bit 精度。

libmad负责的只是解码的过程,它工作过程是:从外部获取输入,逐帧解码,在解码的过程中返回信息,然后得到解码结果。

开发人员要手动设置输入输出。

编程实现解码的方法为:初始化mad_decoder,里面包含了指向输入、输出、滤波、错误和消息回调函数的指针。

通过mad_decoder_init()实现初始化。

这是一个初始化函数的例子:```cstruct mad_decoder decoder;struct my_playbuf playbuf; //设置数据缓冲区mad_decoder_init(&decoder,&playbuf,input_func,header_func,/*f ilter*/0, output_func, /*error*/ 0, /* message */ 0);```在这个初始化函数里面,回调输入函数指向了input_func,处理帧头信息的函数指向了header_func,而输出函数则为output_func。

其它的滤波、错误和信息函数没有设置,置0。

mp解码算法原理详解

mp解码算法原理详解

MPEG1 Layer3 (MP3)解码算法原理详解本文介绍了符合ISO/IEC 11172-3(MPEG 1 Audio codec Layer I, Layer II and Layer III audio specifications) 或 ISO/IEC 13818-3(BC Audio Codec)的音频编码原理。

通过madlib解码库进行实现。

1、程序系统结构mp3解码流程图其中同步及差错检查包括了头解码模块在主控模块开始运行后,主控模块将比特流的数据缓冲区交给同步及差错检查模块,此模块包含两个功能,即头信息解码及帧边信息解码,根据它们的信息进行尺度因子解码及哈夫曼解码,得出的结果经过逆量化,立体声解码,混淆缩减,IMDCT,频率反转,合成多相滤波这几个模块之后,得出左右声道的PCM码流,再由主控模块将其放入输出缓冲区输出到声音播放设备。

2、主控模块主控模块的主要任务是操作输入输出缓冲区,调用其它各模块协同工作。

其中,输入输出缓冲区均由DSP控制模块提供接口。

输入缓冲区中放的数据为原始mp3压缩数据流,DSP控制模块每次给出大于最大可能帧长度的一块缓冲区,这块缓冲区与上次解帧完后的数据(必然小于一帧)连接在一起,构成新的缓冲区。

输出缓冲区中将存放的数据为解码出来的PCM数据,代表了声音的振幅。

它由一块固定长度的缓冲区构成,通过调用DSP控制模块的接口函数,得到头指针,在完成输出缓冲区的填充后,调用中断处理输出至I2S接口所连接的音频ADC芯片(立体声音频DAC和DirectDrive耳机放大器)输出模拟声音。

3、同步及差错检测同步及差错检测模块主要用于找出数据帧在比特流中的位置,并对以此位置开始的帧头、CRC校验码及帧边信息进行解码,这些解码的结果用于后继的尺度因子解码模块和哈夫曼解码模块。

Mpeg1 layer 3的流的主数据格式见下图:主数据的组织结构图其中granule0和granule1表示在一帧里面的粒度组1和粒度组2,channel0和channel1表示在一个粒度组里面的两个通道,scalefactor为尺度因子quantized value为量化后的哈夫曼编码值,它分为big values大值区和count1 1值区CRC校验:表达式为X16+X15+X2+13.1 帧同步帧同步目的在于找出帧头在比特流中的位置,ISO 1172-3规定,MPEG1 的帧头为12比特的“1111 1111 1111”,且相邻的两个帧头隔有等间距的字节数,这个字节数可由下式算出:N= 144 * 比特率 / 采样率如果这个式子的结果不是整数,那么就需要用到一个叫填充位的参数,表示间距为N +1。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第1章
声明
本文档版权归属于 西安交通大学人工智能与机器人研究所 作者: 李国辉 g h l i @ a i a r . x j t u . e d u . c n
第2章 Mp3 解码算法流程
MP3 的全称为 MPEG1 Layer-3 音频文件, MPEG 音频文件是 MPEG1 标准中的声音部 分,也叫 MPEG 音频层,它根据压缩质分别对应 MP1、MP2、MP3 这三种声音文件,并根据不同的用途,使用不同层 次的编码。MPEG 音频编码的层次越高,编码器越复杂,压缩率也越高,MP1 和 MP2 的压 缩率分别为 4:1 和 6:1-8:1,而 MP3 的压缩率则高达 10:1-12:1。一分钟 CD 音质的音 乐,未经压缩需要 10MB 的存储空间,而经过 MP3 压缩编码后只有 1MB 左右。不过 MP3 对音频信号采用的是有损压缩方式,为了降低声音失真度,MP3 采取了“ 心理声学模型”, 即编码时先对音频文件进行频谱分析,然后再根据心理声学模型把谱线分成若干个阈值分 区,并计算每个阈值分区的阈值,接着通过量化和熵编码对每个谱线进行编码,最后形成具 有较高压缩比的 MP3 文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效 果。
2.1. Mp3 文件格式
MP3 文件以一帧为一个编码单元, 各帧编码数据是独立的。 为了清晰而准确地描述 mp3 文件格式,下面采用位流语法描述,这种语法格式与 c 语言近似,易于理解,且描述清晰。 其中粗体表示码流中的数据项,bslbf 代表位串,即“Bit string, left bit first ”,uimsbf 代表无 符号整数,即”unsinged integer, most significant bit first”,数字表示该数据项所占的比特数。
第1章 第2章 2.1.
声明 ...................................................................................................... 2 Mp3 解码算法流程.............................................................................. 3 Mp3 文件格式 ...................................................................................... 3 2.1.1. Audio Sequence ............................................................................. 3 2.1.2. Audio Frame .................................................................................. 3 2.1.3. Header............................................................................................ 4 2.1.4. Error Check.................................................................................... 4 2.1.5. Audio data , Layer III ..................................................................... 4 2.1.6. Main_data ...................................................................................... 5 2.1.7. Huffmancodebits ............................................................................ 6 2.1.8. Ancillary data................................................................................. 7 2.2. 数据项的含义 ...................................................................................... 7 2.2.1. Header............................................................................................ 7 2.2.2. Error Check.................................................................................... 9 2.2.3. Side information........................................................................... 10 2.3. Mp3 解码算法所用的基本概念 ..........................................................11 2.3.1. 子带和缩放因子频带 ...................................................................11 2.3.2. Huffman 码表的选择 ................................................................... 13 2.3.3. huffman 码表的特点 .................................................................... 14 2.3.4. 缩放因子(scalefactor) .................................................................. 14 2.3.5. 节的长短块切换 .......................................................................... 15 2.4. mp3 解码具体流程 ............................................................................. 16 2.4.1. 预处理(Preprocessing) ............................................................ 16 2.4.2. Huffman decoding ........................................................................ 16 2.4.3. 反量化(Requantization) .......................................................... 17 2.4.4. 重排序(Reordering) ................................................................ 17 2.4.5. 立体声解码(Stereo decoding) ................................................. 17 2.4.6. 混叠消除(Alias reduction) ...................................................... 18 2.4.7. IMDCT 变换 ................................................................................ 18 2.4.8. 子带合成滤波(Synthesis filter bank)............................................ 19 第3章 libmad 解码程序源代码分析 ............................................................ 21 3.1. 码流读取 ............................................................................................ 21 3.2. 桢的同步 ............................................................................................ 22 3.3. 桢头解码 ............................................................................................ 25 3.4. sideinfo 解码 ...................................................................................... 26 3.5. main_data 的读取 ............................................................................... 27 3.6. 缩放因子解码 .................................................................................... 29 3.7. huffman 解码 ...................................................................................... 31 3.8. 反量化(requantization) .................................................................. 34 3.9. 重排序(reordering) ........................................................................ 35 3.10. IMDCT 变换 ...................................................................................... 37 3.11. 子带合成滤波(synthesis filter bank) .............................................. 38 附录 A libmad 的交叉编译过程 ......................................................................... 44
相关文档
最新文档