数字音频压缩编码及在软件中播放音频文件

时间:2022-09-13 08:02:11

数字音频压缩编码及在软件中播放音频文件

摘要:模拟音频信号经过数字化后,会产生很大的数据量,不适合存储和传输的需要。数字音频的压缩编码已经成为一门非常重要的技术。该文主要介绍数字音频信号的常用压缩编码方法,如MPEG-1、MPEG-2、AC-3数字音频压缩编码标准,并阐述了各自的性能特点及应用领域。然后结合应用软件――Delphi,介绍制作音频播放器的过程,并利用音频播放器实现mp3等格式音频文件的播放。

关键词:音频信号;数字音频压缩编码;音频播放器

中图分类号:TP37文献标识码:A文章编号:1009-3044(2011)04-0875-03

Digital Audio Compression Coding and Playing Audio Files in Software

JIANG Shang-ting1, JIN Yi-ren2

(puter Center,Anhui Vocational College of Press and Publication, Hefei 230601, China; 2.School ofElectric Engineering and Automation, Hefei University of Technology, Hefei 230009, China)

Abstract: A quantity of data are present after analog audio signal is digitized.It is not convenient for transmission and storge of signal. Digital audio compression coding has became an very important technology.The paper mainly introduces the digital audio signal compression coding methods, such as MPEG-1, MPEG-2, AC-3 digital audio compression coding standards, and describes their performanes and applies fields.Then introduces the process of making audio-player and playing mp3 files and other kinds of files in Delphi application software.

Key words: audio signal; digital audio compression coding; audio-player

多媒体技术就是计算机交互式综合处理多种媒体信息――文本、图形、图像和声音,使多种信息建立逻辑连接,集成为一个系统并具有交互性。简言之,多媒体技术就是计算机综合处理声、文、图信息的技术,具有集成性、实时性和交互性。随着计算机技术和大规模集成电路的飞速发展,多媒体技术也得到了日新月异的发展。随着计算机数据处理能力的不断增强,音频处理技术受到重视并得到广泛的应用。现在流行的音频播放器集各种功能于一体,可以播放mid、mp3、wav、wma等各种格式的文件。

1 音频信号处理基本概念

1.1 模拟音频与数字化音频

自然的声音是连续变化的,它是一种模拟量。比如当人们对麦克风讲话时,麦克风能根据它周围空气压力的不同变化而输出相应连续变化的电压值,这种变化的电压值是对人讲话声音的一种模拟,称为模拟音频。要将模拟音频变为计算机能存储和处理的对象,必须将模拟音频数字化。

数字化音频的获得是通过每隔一定的时间测一次模拟音频的值并将其数字化,通常包括采样、量化和编码。每秒钟采样的次数称为采样频率。根据采样定理,只要采样频率等于或大于模拟音频信号中最高频率成分的两倍,信息量就不会丢失,即可以由采样后的离散信号不失真地重建原始连续的模拟音频信号,否则就会产生不同程度的失真。采样定律用公式表示为:fs≥2f或Ts≤T/2,其中f为被采样信号的最高频率。

我们将由模拟量转变为数字量的过程称为模-数转换。计算机要利用数字音频信息驱动扬声器发声,还需要将离散的数字量再转变为连续的模拟量,该过程称之为数-模转换。在大多数计算机中,这些功能是通过声卡来完成的。音频信号的一般处理如图1所示。

1.2 数字化音频信号的压缩编码

1.2.1 数字化音频信号压缩编码简介

数字化的音频信号必须经过压缩编码处理才能适应存储和传输要求,才能在再生时得到最好音质的声音听觉。音频信号压缩编码主要依据人耳的听觉特性。人的听觉系统中存在一个听觉阈值电平,低于这个电平的声音信号人耳听不到,可以不必保留这部分信号;当几个强弱不同的声音同时存在时,强声使弱声难以听到,当声音在不同时间先后发生时,强声使其周围弱声难以听见。声音编码算法就是通过这些特性来去掉冗余数据,从而达到压缩数据的目的。

1.2.2 常见音频压缩编码方式

常见的音频压缩编码有MPEG-1音频压缩编码、MPEG-2音频压缩编码、杜比数字AC-3音频压缩编码等。

1) MPEG-1音频压缩编码

ISO/IEC的MPEG音频编码的标准化采用了2种编码算法:MUSICAM和ASPEC。以这两种算法为基础形成了三个不同层次的音频压缩算法,对应不同的应用要求并具有不同的编码复杂度。在MPEG-1的音频编码标准中,按复杂度规定了三种模式:层1、层2、层3。层1采用MUSICAM算法,典型码流为384kbps,典型码流为256kbps~192kbps。层3是综合了层2和ASPEC的优点提出的混合压缩技术,它的复杂度相对较高,编码不利于实时。如今流行的MP3音乐就是一种采用MPEG-1层3编码的高质量的数字音乐,它能以10倍左右的压缩比降低高保真数字声音的存储量,使一张普通的CD光盘上可以存储大约100首MP3歌曲。层3是MUSICA和ASPEC两个算法的结合,典型码流为64kbps。

MPEG压缩等级与压缩比率如表1所示。

ISO/MPEG音频编码(层3)结构图如图2所示。

MPEG-1层3中采用改进余弦变换MDCT。MDCT的表达式为:,其中k=0,…,N/2; (固定时间偏移量)。余弦变换在边界处存在固有的不连续性,导致在块边界处产生较大噪声,MDCT采用时域混叠抵消TDAC技术,有利于消除这种噪声。做MDCT前要进行加窗处理: ω(n)是窗函数,它的长度等于变换块N的长度),从而降低边界效应对谱分析的影响,提高频率选择性。窗函数ω(n)的选择必须满足。窗函数越长,编码效率就越高,但是过长会使时域分辨率下降,选择窗函数应该兼顾编码效率和时域分辨率。

PCM数据输入经过分析滤波组被分割成若干子频带信号,同时数据流经过FFT变换模块,动态求出每个编码频带的掩码阈值。MDCT对滤波器组的不足作了一定的补偿,把子带的输出在频域里进一步细分以达到更高的频域分辨率。比例设置和量化器模块根据掩码阈值对子频带信号进行量化,量化后得到的数据分别经过Huffman编码模块和边信号编码器模块进行编码,再经过多路复用器MUX得到码流。

2) MPEG-2音频压缩编码

MPEG-2的音频压缩编码采用与MPEG-1相同的编译码器,层1、层2、层3的结构也相同,但它能支持5.1声道和7.1声道的环绕立体声。

MPEG-2 BC是一种类似MP3的音频压缩算法。MPEG-2 BC压缩编码主要是在MPEG-1和CCIR Rec.755的基础上发展起来的。与MPEG-1相比较,MPEG-2主要在两方面做了重大改进,一是支持多声道声音形式;二是为某些低码率应用场合,进行低采样率扩展。同时,标准规定的码流形式还可与MPEG-1的第1和第2层前、后向兼容,并可依据CCIR Rec.755与双声道、单声道形式的向下兼容,还能够与Dolby Surround 形式兼容。

3) 杜比数字AC-3音频压缩编码

杜比数字AC-3是美国杜比实验室开发的多声道全频带声音编码系统,采用第三代ATC技术,被称为感觉编码系统,它将特殊的心理音响知识、人耳效应的最新研究成果与先进的数码信号处理技术很好地结合起来,形成了这种数字多声道音频处理技术。它提供的环绕立体声系统由5个(或7个)全频带声道加一个超低音声道组成,所有声道的信息在制作和还原过程中全部数字化,信息损失很少,细节十分丰富,具有真正的立体声效果,在数字电视、DVD和家庭影院中被广泛使用。

AC-3编码原理结构图如图3所示。

1.3 声音的重构

模拟音频要经过采样、量化和编码,就能得到便于计算机处理的数字语音信息,如果要重新播放数字化语音,必须经过解码、D/A转换和插值,其中解码是编码的逆过程,又称解压缩。以ISO/MPEG音频解码(层3)为例,结构图如图4所示。D/A转换是将数字量再转换为模拟量便于驱动扬声器发声;而插值是为了弥补在采样过程中引起的语音信2音频播放器简介:

本文中介绍的音频播放器如图6所示,该音频播放器能实现mp3、wav、mid、wma等格式音频文件的播放。

2 音频播放器制作过程简介

2.1 音频播放器制作中所需控件及变量设置介绍

1) 所需控件:

TMediaPlayer控件(可以通过MCI播放多种多媒体文件,如MID、MP3、WAV、CD音乐文件和AVI、WMV文件等)、三个TEdit控件(分别显示正在播放文件的时间进度、正在播放文件的信息、重复播放区域的设置)、若干TBitBtn控件(用于对文件进行操作)、TListBox控件(用于显示播放列表)、TTrackBar控件(用于控制播放的音量和播放的进度)、以及TTimer控件和TOpenDialog控件。

2) 设置变量(说明:在程序代码中出现的其它变量为控件中的局部变量):

在Form中设置全局变量:

SongDir:array [0..999] of Variant;//播放的文件的路径(不包括播放的文件名)

mode:integer;//播放的模式,是正常播放还是重复播放指定区域

sound_sign:integer;//静音的标志

startpos,endpos:integer;//正常播放时播放的起始位置和结束位置

startpos1,endpos1:integer;// 重复播放指定区域的起始位置和结束位置

flag:integer;//暂停的标志

addfileflag:integer;//是否第一次添加播放文件的标志

2.2 音频播放器各功能模块介绍(在此仅介绍较为复杂的功能)

1) 文件打开功能模块:该模块的功能是打开若干需要播放的文件,并把这些文件加载到ListBox当中,形成播放列表。若列表框中无任何文件,则直接将打开的文件加载到列表框中;若列表框中已有文件,则将打开的文件与列表框中已有的文件逐个进行比对,判断文件是否已经加载过,若已经加载过,则不加载。在此功能模块中,需要利用数组变量SongDir记录加载进去的文件的路径(不包括文件名),并利用变量addfileflag判断是否为第一次添加播放文件,如果是则自动选中播放列表中的第一首歌曲并显示该文件的信息,同时改变变量addfileflag的值,保证以后添加进去的播放文件不影响正在播放的文件。文件打开功能模块处理流程如图7所示。

2) 静音功能模块:该模块的功能是在播放文件时,按下此按钮,则产生静音效果,再次按下时,声音恢复。从而实现静音的功能。实现此功能需要在该模块程序中控制变量sound_sign的变化。该功能是通过Windows API函数waveoutsetvolume来实现,在使用该函数之前,必须引用mmsystem单元。并且为该按钮在静音和非静音时加载不同的图片,从而清楚地显示声音处于何种状态。

3) 设置重复播放的开始位置功能,设置重复播放的结束位置功能,清除重复播放区域,播放重复区域功能:

① 设置重复播放的开始位置主要需要将TrackBar2.Position即播放的当前位置记录在变量startpos1中,并将开始时间点显示在Edit3当中。部分程序代码及说明如下:

startpos1:=TrackBar2.Position;//记录开始位置

Edit3.Text:='重复播放:'+calculate(startpos1)+'->'+'结束点'+' 请设置';//显示开始时间点

设置重复播放的结束位置主要需要将TrackBar2.Position即播放的当前位置记录在变量endpos1中,并将结束时间点显示在Edit3当中。部分程序代码及说明如下:

endpos1:=TrackBar2.Position; //记录结束位置

Edit3.Text:='重复播放:'+calculate(startpos1)+'->'+calculate(endpos1);// 显示结束时间点

运行时设置好的重复播放区域如图1中A所示。

② 在显示设置的开始时间点和结束时间点时,需要用到自定义函数calculate(),该函数的功能主要是根据提供的播放进度,将其转换为时间格式的字符串,以方便显示。播放进度是以毫秒(Milliseconds)为计数单位的。输入播放进度,返回字符串类型的时间数。该自定义函数calculate()在后面讲述的歌曲信息的显示以及文件播放时间进度的显示中也有重要的应用。

③ 清除重复播放区域主要需要将变量startpos1、endpos1设置为0,并将播放模式变量mode设置为0,即正常播放模式。

④ 播放重复区域主要用到TMediaPlayer控件的StartPos、EndPos、Position属性以及Play方法。StartPos属性设置为StartPos1,EndPos属性设置为EndPos1,Position属性设置为StartPos1,并将播放模式变量mode设置为1,即重复播放指定区域模式。

3) 逐个删除歌曲播放列表中歌曲的功能,全部删除歌曲播放列表中歌曲的功能:实现逐个删除功能需要判断ListBox1中的歌曲条目是否处于选中状态,如处于选中状态,则调用ListBox1的Delete方法来完成选中歌曲的删除。实现全部删除功能只需要利用ListBox1.Clear即可。

4) 歌曲信息的显示功能:

歌曲信息的显示主要是通过调用自定义过程ShowInfo(Sender)来实现的。自定义过程ShowInfo(Sender)主要需要设置TMediaPlayer控件的FileName属性、调用TMediaPlayer控件的Open方法、在窗体的标题栏上显示完整的文件路径、调用自定义函数calculate()在Edit2中显示文件的时间长度及文件名、设置全局变量startpos和endpos的值、设置TrackBar2的min和max属性。歌曲信息的显示如图1中B所示。

5) 自动加载历史播放记录功能:

在实际情况中,媒体播放器都是应该有记忆功能的,即保存文件播放列表,在下次打开播放器的时候自动加载该列表。要想实现这一功能,需要在退出程序的时候,将文件播放列表保存到INI文件当中,当再次运行程序时,从INI文件中读取信息即可。在Delphi中提供了TIniFile类用于操作INI文件,该类在inifiles单元文件中,在使用该类文件时,需要引用inifiles单元。

在窗体关闭过程FormClose(FormClose过程需要映射为OnClose)中,需要在该项目生成的可执行文件目录下创建名为――recentplay.ini的文件,用于存放播放列表。并将每首歌曲的文件路径(不包括文件名)、每首歌曲的文件名、播放列表中文件的总数记录在recentplay.ini文件中。保存文件播放列表处理流程如图8所示。

3 结束语

随着经济与科技的飞速发展,促使计算机技术和电子技术的发展突飞猛进。音频信号的处理做为多媒体处理的一个重要分支,已经深入到人们的工作、学习、生活当中。我们根据不同的应用场合或者不同的技术要求,可以采用不同的数字音频压缩编码技术。我们在音频信号处理方面的研究仍待继续深入,提出新的数字音频压缩编码方法或者改进现行的压缩编码方法以适应实际应用的需求。本文中利用应用软件Delphi设计的音频播放器,经过调试和测试,实现各种音频文件的播放和文中所述的各种功能,具有一定实际应用价值。

参考文献:

[1] 陈洪光,林嘉宇,易波.数字音频压缩技术研究[J].通信技术,2000(2):68-71.

[2] 房建,左涛,陈婷.数字音频压缩编码技术及其应用[J].信息技术,2004,28(2):9-11.

上一篇:加强教育信息化建设,促进城乡教育均衡发展 下一篇:基于DSP的RS-232\RS-422串行收发系统设计