最近在做一个直播项目,项目按钮点击有音效,进入某个页面还需要有背景音乐。这里主要用到SoundPool、Service。
一、按键点击效果
1、创建目录,放好文件
2、SoundPool关键方法解释:
SoundPool (int maxStreams, int streamType, int srcQuality)
//maxStreams:同时播放数据流的最大个数
//streamType:第二数据流类型, 建议AudioManager.STREAM_SYSTEM
//srcQuality:声音质量 ,默认是0,目前没有影响
SoundPool (int maxStreams, int streamType, int srcQuality)
load ( Context context, int resId, int priority )
//resId : 资源id(用来指定音频文件位置) 把你的声音素材放到res/raw里
//priority : 优先级:都是短促音频无影响设置为1即可
load ( Context context, int resId, int priority )
play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
//soundID : 音频的序号(load到SoundPool的顺序,从1开始)
//leftVolume/rightVolume : 左\右声道的音量控制, 0.0 到 1.0
//priority : 优先级,0是最低优先级
//loop : 是否循环播放,0为不循环,-1为循环
//rate : 播放比率,从0.5到2,一般为1,表示正常播放
play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
3、示例代码如下
private SoundPool soundPool;
private int soundID;
private void initSound() {
soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
soundID =soundPool .load(this, R.raw.aaa, 1);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnPlay:
playSound();
break;
}
}
private void playSound() {
soundPool.play(
soundID,0.1f,0.5f,0,0,1
);
}
4、工具类封装
public class SoundPoolUtil {
private static SoundPoolUtil soundPoolUtil;
private SoundPool soundPool;
//单例模式
public static SoundPoolUtil getInstance(Context context) {
if (soundPoolUtil == null)
soundPoolUtil = new SoundPoolUtil(context);
return soundPoolUtil;
}
private SoundPoolUtil(Context context) {
soundPool = new SoundPool(3, AudioManager.STREAM_SYSTEM, 0);
//加载音频文件
soundPool.load(context, R.raw.music1, 1);
soundPool.load(context, R.raw.music2, 1);
soundPool.load(context, R.raw.music3, 1);
}
public void play(int number) {
Log.d("tag", "number " + number);
//播放音频
soundPool.play(number, 1, 1, 0, 0, 1);
}
}
二、背景音乐
背景音乐主要通过Service来实现
1、Service的一些基础
- Service 对象以 separated process 的方式执行,所以它与UI(Activity)各自在不同的 process 执行。
- Android应用程序是在 Activity 启动与停止 Service。
- 重载(override)onStart() 方法(method)在 Service 被启动,执行我们想要的背景功能。
- 重载 onDestroy() 方法在 Service 被停止时,停止执行中的背景功能。
2、Service例子(直接复制可用)
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import com.zzhk.wawa.R;
import com.zzhk.wawa.utils.CommonUtils;
import java.io.IOException;
/**
* @描述 多媒体服务
*/
public class MediaService extends Service{
private MediaPlayer mp;
@Override
public void onStart(Intent intent, int startId) {
// 开始播放音乐
if(null!=mp) {
mp.start();
// 音乐播放完毕的事件处理
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
// 循环播放
try {
mp.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
// 播放音乐时发生错误的事件处理
mp.setOnErrorListener(new MediaPlayer.OnErrorListener() {
public boolean onError(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub
// 释放资源
try {
if (!CommonUtils.isEmptyObj(mp)) {
mp.release();
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
});
}
super.onStart(intent, startId);
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
// 初始化音乐资源
try {
// 创建MediaPlayer对象
mp = new MediaPlayer();
// 将音乐保存在res/raw/xingshu.mp3,R.java中自动生成{public static final int xingshu=0x7f040000;}
mp = MediaPlayer.create(MediaService.this, R.raw.bg1);
// 在MediaPlayer取得播放资源与stop()之后要准备PlayBack的状态前一定要使用MediaPlayer.prepeare()
mp.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
super.onCreate();
}
@Override
public void onDestroy() {
// 服务停止时停止播放音乐并释放资源
if(null!=mp) {
mp.stop();
mp.release();
}
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
3、xml配置
<service
android:name=".MediaService"
android:exported="true"
android:process=":remote"/>
4、调用例子
@Override
protected void onStop() {
Intent intent = new Intent(MyActivity.this,MediaService.class);
stopService(intent);
super.onStop();
}
@Override
protected void onResume() {
Intent intent = new Intent(MyActivity.this,MediaService.class);
startService(intent);
super.onResume();
}
三、关于声音格式的兼容性
音频格式比较:
音乐爱好者常见的音频格式有:flac、ape、wav、mp3、aac、ogg、wma
1.压缩比比较:
aac>ogg>mp3(wma)>ape>flac>wav(同一音源条件下)
mp3和wma以192kbps为分界线,192kbps以上mp3好,192kbps以下wma好。
2.音质比较:
wav=flac=ape>aac>ogg>mp3>wma
3.硬件支持比较:
MP3播放器:mp3>wma>wav>flac>ape aac ogg
手机:mp3>wma>aac wav>flac ogg>ape
下文为各种常见的音频格式详解,故而文章比较长,感兴趣的朋友不妨了解一下。
1.MP3格式
MP3的全称是Moving Picture Experts Group Audio Layer III。简单的说,MP3就是一种音频压缩技术,由于这种压缩方式的全称叫MPEG Audio Layer3,所以人们把它简称为MP3。
MP3是利用 MPEG Audio Layer 3 的技术,将音乐以1:10 甚至 1:12 的压缩率,压缩成容量较小的file,换句话说,能够在音质丢失很小的情况下把文件压缩到更小的程度。而且还非常好的保持了原来的音质。
正是因为MP3体积小,音质高的特点使得MP3格式几乎成为网上音乐的代名词。每分钟音乐的MP3格式只有1MB左右大小,这样每首歌的大小只有3-4MB。使用MP3播放器对MP3文件进行实时的解压缩(解码),这样,高品质的MP3音乐就播放出来了。
补充:最高比特率320K,高频部分一刀切是他的缺点。音质不高!
2.WMA格式
WMA的全称是Windows Media Audio,是微软力推的一种音频格式。
WMA格式是以减少数据流量但保持音质的方法来达到更高的压缩率目的,其压缩率一般可以达到1:18,生成的文件大小只有相应MP3文件的一半。这对只装配32M的机型来说是相当重要的,支持了WMA和RA格式,意味着32M的空间在无形中扩大了2倍。
此外,WMA还可以通过DRM(Digital Rights Management)方案加入防止拷贝,或者加入限制播放时间和播放次数,甚至是播放机器的限制,可有力地防止盗版。
补充:128kbps为wma最优压缩比,128kbps wma=192kbps mp3
3.WAV格式
WAV格式是微软公司开发的一种声音文件格式,也叫波形声音文件,是最早的数字音频格式,被Windows平台及其应用程序广泛支持。
WAV格式支持许多压缩算法,支持多种音频位数、采样频率和声道,采用44.1kHz的采样频率,16位量化位数,因此WAV的音质与CD相差无几,但WAV格式对存储空间需求太大不便于交流和传播。
补充:无损格式,缺点:体积十分大!
4.ASF格式
ASF的全称是Advanced Streaming Format,是微软所制订的一种媒体播放格式,适合在网络上播放。而Windows Media On-Demand Producer则是制作ASF档案的免费软件,让即使是初学者也能很轻易的利用现成的WAV或AVI档案制作ASF文件。
补充:少见的格式
5.AAC格式
AAC实际上是高级音频编码的缩写。AAC是由Fraunhofer IIS-A、杜比和AT&T共同开发的一种音频格式,它是MPEG-2规范的一部分。
AAC所采用的运算法则与MP3的运算法则有所不同,AAC通过结合其他的功能来提高编码效率。AAC的音频算法在压缩能力上远远超过了以前的一些压缩算法(比如MP3等)。
它还同时支持多达48个音轨、15个低频音轨、更多种采样率和比特率、多种语言的兼容能力、更高的解码效率。总之,AAC可以在比MP3文件缩小30%的前提下提供更好的音质。
补充:目前最好的有损格式之一。有多种编码,faac,nero为常见,比特率最高448kbps。硬件支持方面,高级mp3和现在手机普遍支持。
6.Mp3Pro格式
Mp3Pro是Mp3编码格式的升级版本。MP3Pro是由瑞典Coding科技公司开发的,在保持相同的音质下同样可以把声音文件的文件量压缩到原有MP3格式的一半大小。而且可以在基本不改变文件大小的情况下改善原先的MP3音乐音质。它能够在用较低的比特率压缩音频文件的情况下,最大程度地保持压缩前的音质。
MP3pro可以实现完全的兼容性。经过mp3Pro压缩的文件,扩展名仍旧是.mp3。可以在老的mp3播放器上播放。老的mp3文件可以在新的mp3pro播放器上进行播放。
实现了该公司所谓的“向前向后兼容”。
补充:mp3压缩后的格式,可以这么认为
7.VQF格式
VQF格式是由YAMAHA和NTT共同开发的一种音频压缩技术,它的压缩率能够达到1:18,因此相同情况下压缩后VQF的文件体积比MP3小30%~50%,更便利于网上传播,同时音质极佳,接近CD音质(16位44.1kHz立体声)。但VQF未公开技术标准,至今未能流行开来。
8.FLAC格式
FLAC即是Free Lossless Audio Codec的缩写,中文可解为无损音频压缩编码。
FLAC是一套著名的自由音频压缩编码,其特点是无损压缩。不同于其他有损压缩编码如MP3 及 AAC,它不会破任何原有的音频资讯,所以可以还原音乐光盘音质。现在它已被很多软件及硬件音频产品所支持。简而言之,FLAC与MP3相仿,但是是无损压缩的,也就是说音频以FLAC方式压缩不会丢失任何信息。这种压缩与Zip的方式类似,但是FLAC将给你更大的压缩比率,因为FLAC是专门针对音频的特点设计的压缩方式,并且你可以使用播放器播放FLAC压缩的文件,就象通常播放你的MP3文件一样。
补充:为无损格式,较ape而言,他体积大点,但是兼容性好,编码速度快,播放器支持更广。
9.APE格式
APE是目前流行的数字音乐文件格式之一。与MP3这类有损压缩方式不同,APE是一种无损压缩音频技术,也就是说当你将从音频CD上读取的音频数据文件压缩成APE格式后,你还可以再将APE格式的文件还原,而还原后的音频文件与压缩前的一模一样,没有任何损失。
APE的文件大小大概为CD的一半,但是随着宽带的普及,APE格式受到了许多音乐爱好者的喜爱,特别是对于希望通过网络传输音频CD的朋友来说,APE可以帮助他们节约大量的资源。
补充:为无损压缩格式,较flac而已,他体积较小。编码速度偏慢。
10.MID格式
MID是midi的简称,是它的扩展名。MIDI是英语Music Instrument Digital Interface 的缩写,翻译过来就是“数字化乐器接口”,也就是说它的真正涵义是一个供不同设备进行信号传输的接口的名称。我们如今的MIDI音乐制作全都要靠这个接口,在这个接口之间传送的信息也就叫MIDI信息。
MIDI最早是应用在电子合成器——一种用键盘演奏的电子乐器上,由于早期的电子合成器的技术规范不统一,不同的合成器的链接很困难,在1983年8月,YAMAHA、ROLAND、KAWAI等著名的电子乐器制造厂商联合指定了统一的数字化乐器接口规范,这就是MIDI1.0技术规范。
此后,各种电子合成器已经电子琴等电子乐器都采用了这个统一的规范,这样,各种电子乐器就可以互相链接起来,传达MIDI信息,形成一个真正的合成音乐演奏系统。
由于多媒体计算机技术的迅速发展,计算机对数字信号的强大的处理能力,使得计算机处理MIDI信息成为顺理成章的事情了,所以,现在不少人把MIDI音乐称之为电脑音乐。事实上,利用多媒体计算机不但可以播放、创作和实时地演奏MIDI音乐。甚至可以把MIDI音乐转变成看的见的乐谱(五线谱或简谱)打印出来,反之,也可以把乐谱变成美妙的音乐。利用MIDI的这个性质,可以用于音乐教学(尤其是识谱),让学生利用计算机学习音乐知识和创作音乐。
11.OGG格式
Ogg全称应该是OGG Vobis(ogg Vorbis) 是一种新的音频压缩格式,类似于MP3等现有的音乐格式。
但有一点不同的是,它是完全免费、开放和没有专利限制的。OGG Vobis有一个很出众的特点,就是支持多声道,随着它的流行,以后用随身听来听DTS编码的多声道作品将不会是梦想。
Vorbis 是这种音频压缩机制的名字,而Ogg则是一个计划的名字,该计划意图设计一个完全开放性的多媒体系统。目前该计划只实现了OggVorbis这一部分。
Ogg Vorbis文件的扩展名是.OGG。这种文件的设计格式是非常先进的。现在创建的OGG文件可以在未来的任何播放器上播放,因此,这种文件格式可以不断地进行大小和音质的改良,而不影响旧有的编码器或播放器。
补充:目前最好的有损格式之一,MP3部分支持,智能手机装软件部分可以支持,最高比特率500kbps。
12.M4A格式
M4A是MPEG4音频标准的文件的扩展名。在MPEG4标准中提到,普通的MPEG4文件扩展名是.mp4。
自从Apple开始在它的iTunes以及 iPod中使用.m4a以区别MPEG4的视频和音频文件以来,.m4a这个扩展名变得流行了。
目前,几乎所有支持MPEG4音频的软件都支持.m4a。最常用的.m4a文件是使用AAC格式的(文件),不过其他的格式,比如Apple Lossless甚至mp3也可以被放在.m4a容器里(TC注:这个container的概念类似于.mkv文件)。可以安全的把只包含音频的.mp4 文件的扩展名改成.m4a,以便让它能在你喜欢的播放器里播放,反之亦然。
13.eAAC+格式
eaac+格式是新一代应用于手机的最优化的音乐格式。eaac+的扩展名为M4A。它可以接近CD的音质,比MP3格式所占存储空间更小。
14.MOD格式
MOD是一种类似波表的音乐格式,但它的结构却类似 MIDI,使用真实采样,体积很小,在以前的DOS年代,MOD经常被作为游戏的背景音乐。现在的MOD可以包含很多音轨,而且格式众多,如S3M、NST、669、MTM、XM、IT、XT和RT等。
Module(简称mod)是数码音乐文件,由一组samples(乐器的声音采样)、曲谱和时序信息组成,告诉一个mod播放器何时以何种音高去演奏在某条音轨的某个样本,附带演奏一些效果比如颤音等。因而mod与纯正的象WAV或AU那样的没有包含时序信息的样本文件不同,与象MIDI文件那样的不携带任何附加样本/乐器的文件也不同(与现在支持DLS技术的MIDI倒是有点相似,不过mod的体积要比DLS MIDI小得多。)
15.RealVideo格式
RealVideo格式文件包括后缀名为RA、RM、RAM、RMVB的四种视频格式。Real Video是一种高压缩比的视频格式,可以使用任何一种常用于多媒体及Web上制作视频的方法来创建RealVideo文件。例如Premiere、VideoShop以及AfterEffects等,对于文件的播放可用realplayer和暴风影音播放。
RealVideo文件是RealNetworks公司开发的一种新型流式视频文件格式,它包含在RealNetworks公司所制定的音频视频压缩规范RealMedia中,主要用来在低速率的广域网上实时传输活动视频影像,可以根据网络数据传输速率的不同而采用不同的压缩比率,从而实现影像数据的实时传送和实时播放。
RealVideo除了可以以普通的视频文件形式播放之外,还可以与RealServer服务器相配合,在数据传输过程中边下载边播放视频影像,而不必像大多数视频文件那样,
必须先下载然后才能播放。目前,Internet上已有不少网站利用RealVideo技术进行重大事件的实况转播。
RMVB影片格式比原先的RM多了VB两字,在这里VB是VBR(Variable Bit Rate–可变比特率)的缩写。在保证了平均采样率的基础上,
设定了一般为平均采样率两倍的最大采样率值,在处理较复杂的动态影像时也能得到比较良好的效果,处理一般静止画面时则灵活的转换至较低的采样率,有效的缩减了文件的大小!
16.MD格式
MD Data或MD-Data的全文为minidisc-Data,是一种用来储存电脑资料的磁光碟媒体(magneto-optical medium),由Sony于1993年发表。
Sony索尼原先期望用MD Data取代软碟片,不过Iomega艾美加的Zip软驱填补了这个市场的需求,之后又出现价位逐渐可被人接受的CD-R光碟烧录器以及相当低廉的空白可烧录光碟片,
最后记忆卡的普及成为压垮骆驼的最后一根稻草,使MD-Data始终无法成为主流的电脑储存媒体。一张MD Data碟片可提供140MB的资料储存量,不过其存取效率缓慢且价格昂贵,此外其存取碟机在播放模式时只能读取或写入MD音乐碟片,而不能供电脑存取资料这表示MD音乐片(MD)与MD资料片(MD Data)被硬是区分,无法弹性混用。Sony发表MD Data后的不久也推出了相关的应用周边产品,如MD型照相机或MD型文件扫描器等。到了1990年代后期,MD Data也能使用4轨及8轨的多轨记录层这意味着使用MD Data的MD型录音设备可加速取代已普遍用于录音工作室中的4轨带匣录音设备,不仅更低廉且更为弹性,同时在Windows电脑、Macintosh电脑上更可将录音直接送入硬盘中。
不过,MD Data的储存记录格式却阻碍了MD Data碟机的推行(即便MD Data碟机相当简单易用),同时也阻碍将MD Data用于电脑资料备份的运用推行。
2004年底Hi-MD出现,允许在一张Hi-MD格式的MD碟片上储存各种型态的资料(档案、音乐、图像等),且能让标准MD达到约305MB的储存容量在新款的高密度Hi-MD碟片上更可达1GB容量。
17.CDA格式
CDA即我们通常所说的CD音轨,是我们所熟悉的CD音乐光盘中的文件格式。其最大的特点便是近似无损,也就是说基本上忠实于原声,因此是音箱发烧友的最佳选择。
不过,我们在CD光盘中看到以CDA为后缀名的文件并没有真正包含声音的信息而只是一个索引信息,因此你会发现,不论CD音乐的长短,看到的“*.cda文件”都是44字节长,这种文件直接复制cda文件到硬盘上是无法播放的,只有使用专门的抓音轨软件才能对CD格式的文件进行转换。
18.MPC格式
MPC全称MusePack,一种音频格式。 MPC(MusePaCk)是由德国人Andree Buschmann开发的一种完全免费的高品质音频格式。
在其问世之前,Lame MP3是公认音质最好的有损压缩方案,追求音质的人对它趋之若鹜。但现在这个桂冠无疑该让给MPC了,在中高码率下,MPC可以做到比MP3更好音质。在高码率下,MPC的高频要比MP3细腻不少,可以在节省大量空间的前提下获得最佳音质的音乐欣赏,是目前最适合用于音乐欣赏的有损编码。
MusePaCk(.mpc)原先又被称为MPEGPlus(.mp+),是由德国人Andree Buschmann开发的一种完全免费的高品质音频格式在其问世之前,Lame MP3是公认音质最好的有损压缩方案,追求音质的人对它趋之若鹜。但现在这个桂冠无疑该让给MPC了,因为无论是频谱分析,还是对比试听,160Kbps码率以上的MPC表现绝对要好过MP3(指相同码率的两者而言),也好过任何其他的有损压缩格式。不仅仅是音质,MPC还有编码速度快的优点,经MPC现任负责人Frank Klemm改良后的1.14版编码器,在我的Duron 650上编码速度可以达到实时播放的5.5倍,比慢工出细活的LAME要快得多!