MP3播放器Matlab GUI.docx
- 文档编号:11422956
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:11
- 大小:85.10KB
MP3播放器Matlab GUI.docx
《MP3播放器Matlab GUI.docx》由会员分享,可在线阅读,更多相关《MP3播放器Matlab GUI.docx(11页珍藏版)》请在冰豆网上搜索。
MP3播放器MatlabGUI
MP3播放---MatlabGUI
1.简要概述
MP3的全称为MPEG1(MovingPictureExpertsGroup)Layer–3音频文件。
它根据压缩质量和编码复杂程度划为三层,Layer–1、Layer–2、Layer–3,且分别对应MP1、MP2\MP3这三种声音文件,并根据不同的用途,使用不同层次的编码。
MPEG音频的层次越高,编码器越复杂,压缩率也越高,MP3的压缩率则高达10:
1–12:
1。
MATLAB是国际上公认的最优秀的科技应用软件,它在数据分析和处理功能都是很强大,利用它可以灵活方便地处理音频信号。
本文将使用matlab对MP3进行解码,做一个简易的MP3播放器。
2.MP3音乐文件格式
MP3文件大体分为三部分:
TAG_V2(ID3V2),frame,TAG_V1(ID3V1)
ID3V2
包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量
Frame
一系列的帧,个数由文件大小和帧长决定
每个FRAME的长度可能不固定,由位率bitrate决定
每个FRAME又分为帧头和数据实体两部分
帧头记录了mp3的位率,采样率版本等信息,每个帧之间相互独立
ID3V1
包含了作者,作曲,专辑等信息,长度为128BYTE
一个MPEG音频文件是许多的称为帧的较小部分组成的,通常,帧是独立的组成部分,每个帧都拥有之间的头和音频信息,没有文件头。
所以我们可以剪切MPEG文件的任何部分并且能够正常播放。
但在LayerIII中就并不总是正确的。
2.1帧头格式
下面是一个头内容图示,使用字符A到M表示不同的区域
AAAAAAAAAAABBCCDEEEEFFGHIIJJKLMM
A表示帧同步,都为1,长度为11;
B表示MPEG音频版本ID(00–MPEG2.5;01–保留;10–MPEG2;11–MPEG1);
C表示Layer描述,(00–保留;01-LayerIII;10–LayerII;11-LayerI);
D表示校验位(0有跟16位CRC校验位;1无校验位);
E位率索引,长度为4,对不同的版本,不同层索引值表示不同的位率;单位Kbit
MPEG1
LayerI
MPEG1
LayerII
MPEG1
LayerIII
MPEG2,2.5
LayerI
LayerII&LayerIII
0000
FREE
0001
32
32
32
32
8
0010
64
48
40
48
16
0011
96
56
48
56
24
0100
128
64
56
64
32
0101
160
80
64
80
40
0110
192
96
80
96
48
0111
224
112
96
112
56
1000
256
128
112
128
64
1001
288
160
128
144
80
1010
320
192
160
160
96
1011
352
224
192
176
112
1100
384
256
224
192
128
1101
416
320
256
224
144
1110
448
384
320
256
160
1111
F采样频率,单位:
Hz
Bits
MPEG1
MPEG2
MPEG2.5
00
44100
22050
11025
01
48000
24000
12000
10
32000
16000
8000
11
保留
G填充位(0–无填充;1–额外的填充)
H私有bit,用做特殊应用
I声道(00–立体声;01–联合立体声;10–双声道;11–单声道);
J扩展模式,仅在联合立体声有效
K版权(0–无版权;1–有版权);
L原创(0–拷贝;1–原创);
M强调(00–无;01–50/15ms;10–保留;11–CCITJ.17);
2.2CRC校验
如果帧头的校验位为0,则帧头后就有一个16位的CRC值,这个值是big-endian的值,把这个值和该帧通过计算得出的CRC值进行比较就可以知道该帧是否有效。
2.3帧数据
在帧头后边是SideInfo(姑且称之为通道信息)。
对标准的立体声MP3文件来说其长度为32字节。
通道信息后面是Scalefactor(增益因子)信息。
当解码器在读到上述信息后,就可以进行解码了。
当MP3文件被打开后,播放器首先试图对帧进行同步,然后分别读取通道信息及增益因子等数据,再进行霍夫曼解码,至此我们已经获得解压后的数据。
但这些数据仍然不能进行播放,它们还处于频域,要想听到歌曲还要将它由频域通过特定的手段转换到时域。
接下来的处理分别为立体化处理;抗锯齿处理;IMDCT变换;IDCT变换及窗口化滑动处理。
2.4ID3v1
ID3v1标签用来描述MPEG音频文件。
包含艺术家,标题,唱片集,发布年代和流派。
另外还有额外的注释空间。
位于音频文件的最后固定为128字节。
可以读取该文件的最后这128字节获得标签。
结构如下:
AAABBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEE
EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFG
符号
长度(bytes)
位置(bytes)
描述
A
3
0–2
标签标志,‘TAG’
B
30
3–32
标题
C
30
33–62
艺术家
D
30
63–92
唱片集
E
4
93–96
年代
F
30
97–126
注释
G
1
127
流派
2.5ID3v2
每个ID3V2.3的标签都一个标签头和若干个标签帧或一个扩展标签头组成。
关于曲目的信息如标题、作者等都存放在不同的标签帧中,扩展标签头和标签帧并不是必要的,但每个标签至少要有一个标签帧。
标签头和标签帧一起顺序存放在MP3文件的首部。
ID3V2的操作比ID3V1要慢。
而且ID3V2结构比ID3V1的结构要复杂得多,但比前者全面且可以伸缩和扩展。
2.6lame编码器
LAME是最好的MP3编码器,编码高品质MP3的最好也是唯一的选择。
LAME本身是DOS下的文件,需要加外壳程序才比较容易使用,也可以在别的软件(比如EAC)中间调用。
是一款出色的MP3压缩程序,它使用了独创的人体听音心理学模型和声学模型,改变了人们对MP3高音发哑、低音发破的音质的印象。
LAME分DLL和EXE两种版本,DLL版本做为一个方便的接口程序在大多数抓轨软件中都能看到(比如AltoMP3Maker),但由于可控性差,与具备丰富调节参数的EXE版相比,其压缩出来的MP3效果稍逊一筹。
VBR(VariableBitrate)动态比特率。
也就是没有固定的比特率,压缩软件在压缩时根据音频数据即时确定使用什么比特率,这是以质量为前提兼顾文件大小的方式,推荐编码模式;
ABR(AverageBitrate)平均比特率,是VBR的一种插值参数。
LAME针对CBR不佳的文件体积比和VBR生成文件大小不定的特点独创了这种编码模式。
ABR在指定的文件大小内,以每50帧(30帧约1秒)为一段,低频和不敏感频率使用相对低的流量,高频和大动态表现时使用高流量,可以做为VBR和CBR的一种折衷选择。
CBR(ConstantBitrate),常数比特率,指文件从头到尾都是一种位速率。
相对于VBR和ABR来讲,它压缩出来的文件体积很大,而且音质相对于VBR和ABR不会有明显的提高。
本文将使用lameexe作为mp3的编解码器。
3Matlab声音播放
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平
Matlab语言本身就是一种对线性系统进行分析和仿真的方便工具,他特别适用于对电子系统进行计算机仿真。
其对声音处理主要有以下几个函数:
Sound函数,播放声音,格式如下:
Sound(y,fs)或sound(y)或sound(y,fs,bits)
Wavwrite函数,将声音数据按指定格式存入wav文件中,格式如下:
Wavwrite(k,fs,nbits,file)
Wavread函数,从wav文件中读取声音信号,格式如下:
[y,fs]=Wavread(file)
6.0以上版本提供更好的声音处理函数;
Audioplayer函数,用来播放wav文件,可以暂停,停止,格式如下:
Y=audioplayer(y,fs,nbits)
Y=audioplayer(y,fs)
Y必须定义成全局函数,它是一个audioplayer对象。
Matlab并没有mp3播放函数,因此要自己写M函数来播放mp3文件,函数如下:
[Y,FS,NBITS,OPTS]=mp3read(FILE,N,MONO,DOWNSAMP,DELAY)
FILE表示mp3文件名;N表示读到第N个采样帧,若N为[n1,n2],则表示从n1到n2;
MONO表示读文件的通道:
1表示单声道,0表示立体声
DOWNSAMP表示采样频率,默认为1,若为2或4,则FS为22050或11025
DELAY是为了适应mpg123-0.59,控制开始读文件的延迟时间,在1.9版本以后就不需要,默认为0;
Y表示读出的数据
FS采样频率
NBITS采样位数
OPTS可选项
3.流程图
4.运行结果
运行环境:
windows7,cpuinteli32.4G主频,内存2G。
本人在另一台机子上(windowsxp,cpuintelCeleron3.2G主频,1G内存)运行,速度有点慢,因为播放的mp3文件比较大,在matlab上运行速度不快。
5.1主界面:
5.2功能如下:
播放列表,可以添加(open),删除(delete)mp3文件.显示格式为:
艺术家–音乐名。
添加时只能一个个添加,但删除可以批量删除,这跟open中uigetfile有关系。
播放(play)mp3文件,暂停(pause),停止(stop),若mp3未播放,使用暂停,停止,将有错误提示。
和普通的mp3播放器一样,要先等该文件播放完才播放下个文件,或按stop再选择播放列表想要播放的文件,再按play。
关闭(close),将清空列表,关闭mp3播放器。
音量控制(volume),因为其值最大为1,所以只能减小音量,不能对其原声音进行放大。
另一方面,其声音控制并不是以中断的方式进行的,所以,只能等该文件播放完后,进行下个声音播放时,才能显现出声音的控制。
音频信息(Info),对播放的音频信息进行显示,要先等到音乐全都加载完才能显示。
5.3结果分析
从功能上基本实现mp3的播放,能够暂停,停止,有播放列表,选择播放,但仍然存在一些bug和一些需要改进的地方,总结如下:
首先,关于播放列表在第一次增加和删除,没问题,在第一次完全清空后,再增加一个文件,就会出现第一行为空,文件从第二行开始添加,若删除第一个没问题,若删除第二个就会出现警告。
Warning:
multi-selectionlistboxcontrolrequiresthatValuebeanintegerwithinStringrange
Controlwillnotberendereduntilallofitsparametervaluesarevalid.
其次,matlab的多线程能力比较差,本人有考虑使用timer定时器来实现一些功能,但效果不佳,不知道问题出现在哪里。
使用定时器就可以实现音量的随时改变,还有播放时间显示,甚至可以控制播放的进程,这是个很大的问题。
在网上,书上,定时器的例子都比较少,看不出个所以然。
接着,不能实现播放完该文件顺序播放下个文件,不够人性化。
当数据读入,正在播放中,关闭播放器,界面没有了,但仍在播放。
要先按close才能实现真正的关闭。
最后是速度慢,对一首《夜曲》进行分析,歌曲时间长度为4:
24,数据量为11638784*2,要花3.6秒的时间,这是不能接受的。
并可以得到以下mp3信息:
位率为128KHz;
版本为1;
层数为III;
声道模式为联合立体声;
采样位数为16位;
时间可以计算出来。
但其并不能读出ID3V1和ID3V2的一些信息。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MP3播放器Matlab GUI MP3 播放 Matlab
![提示](https://static.bdocx.com/images/bang_tan.gif)