11-多媒体应用(声音)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第11章多媒体声音教学目标•使用MediaPlayer播放音频•使用SoundPool播放音频•使用MediaRecorder录制音频Android多媒体技术•Android提供了常见的音频编码、解码机制,支持的音频格式有mp3、wav和3gp等,支持的视频格式有mp4和3gp等使用MediaPlayer播放音频•音频及视频的播放会用到MediaPlayer类,该类提供了播放、暂停、停止和重复播放等方法。该类位于android.media包中。使用MediaPlayer播放音频十分简单,当程序控制MediaPlayer对象装载音频完成之后,程序可以调用MediaPlayer的start()、pause()、stop()等方法进行播放控制。•为了让MediaPlayer装载指定的音频文件,MediaPlayer提供了两个简单的静态方法:staticMediaPlayercreate(Contextcontext,uriuri):从指定的uri来装载音频文件,并返回新创建的MediaPlayer对象。staticMediaPlayercreate(Contextcontext,intresid):从resid资源id对应的资源文件中装载音频文件,并返回新创建的MediaPlayer对象。MediaPlayer可以播放的mp3音频资源可以是包含在apk文件中的mp3、保存在sd卡中的mp3以及网络中的mp3文件等。使用MediaPlayer播放音频•MediaPlayer播放包含在apk中的mp3播放该类型的mp3文件需要两个步骤:步骤一:调用MediaPlayer的create(Contextcontext,intresid)方法加载指定的资源文件。步骤二:调用MediaPlayer的start()stop()pause()等方法控制播放。publicclassMediaplayer1ActivityextendsActivity{publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);MediaPlayerplayer=MediaPlayer.create(this,R.raw.qiuyuan);player.start();}}该方式播放一般把音频资源文件放在res/raw目录下使用MediaPlayer播放音频•MediaPlayer播放保存在sd卡中的mp3播放该类型的mp3文件需要三个步骤:步骤一:声明Uri对象,传递sd卡中mp3文件的绝对路径参数步骤二:调用MediaPlayer的create(Contextcontext,uriuri)方法,通过Uri加载指定的资源文件。步骤三:调用MediaPlayer的start()、stop()、pause()等方法控制播放。Stringpath=/mnt/sdcard/qiuyuan.mp3;Uriuri=Uri.parse(path);player=MediaPlayer.create(this,uri);player.start();该方式播放一般把音频资源文件导入到sd目录下使用MediaPlayer播放音频•MediaPlayer循环播放保存在sd卡中的mp3如果程序需要使用MediaPlayer循环播放步骤一:创建MediaPlayer对象步骤二:调用MediaPlayer的setDataSource(path)方法来装载指定的音频文件。步骤三:调用MediaPlayer的prepare()方法去准备音频,让MediaPlayer真正去装载音频文件。因为执行setDataSource(path)方法后并没真就正去装载那些音频。步骤四:调用MediaPlayer的start()、stop()、pause()等方法控制播放。MediaPlayerplayer=newMediaPlayer();Stringpath=/mnt/sdcard/qiuyuan.mp3;player.setDataSource(path);player.prepare();player.start();使用MediaPlayer播放音频•MediaPlayer播放网络上的mp3播放该类型的mp3文件需要三个步骤:步骤一:声明Uri对象,传递网络中mp3文件路径为参数步骤二:调用MediaPlayer的create(Contextcontext,uriuri)方法,通过Uri加载指定的资源文件。步骤三:调用MediaPlayer的start()、stop()、pause()等方法控制播放。Stringpath=“=Uri.parse(path);player=MediaPlayer.create(this,uri);player.start();使用MediaPlayer播放音频privateButtonbtn1,btn2,btn3,btn4;protectedMediaPlayerplayer1,player2;publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);player1=MediaPlayer.create(this,R.raw.qiuyuan);player2=newMediaPlayer();btn1=(Button)findViewById(R.id.btn1);btn1.setOnClickListener(listener);btn2=(Button)findViewById(R.id.btn2);btn2.setOnClickListener(listener);btn3=(Button)findViewById(R.id.btn3);btn3.setOnClickListener(listener);btn4=(Button)findViewById(R.id.btn4);btn4.setOnClickListener(listener);privateOnClickListenerlistener=newOnClickListener(){publicvoidonClick(Viewv){Buttonbtn=(Button)v;switch(btn.getId()){caseR.id.btn1:player1.start();break;caseR.id.btn2:Stringpath=/mnt/sdcard/friend.mp3;try{player2.setDataSource(path);player2.prepare();}catch(IllegalArgumentExceptione){e.printStackTrace();}catch(IllegalStateExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}player2.start();break;caseR.id.btn3:player1.stop();break;caseR.id.btn4:player1.pause();break;}}};使用MediaPlayer播放音频使用SoundPool播放音效•如果应用程序需要播放密集短促的音效,这时再用MediaPlayer就不太合适。•MediaPlayer存在如下缺点:(1)资源占用量较高,延迟时间较长。(2)不支持多个音频同时播放使用SoundPool播放音效•使用使用SoundPool播放音效的步骤:(1)调用使用SoundPool的构造方法创建使用SoundPool对象。(2)调用使用SoundPool对象的load()方法从指定资源、文件中加载声音,最好使用HashMapInteger,Integer来管理加载的声音。(3)调用play()播放声音•Android除了提供MediaPlayer播放音效外,还提供了SoundPool播放音效,SoundPool使用音效池的概念来管理多个短促的音效。与Mediaplayer相比,SoundPool的优势在于cpu资源占用量低和反应延迟小。另外SoundPool还支持自行设置声音的品质、音量、播放比率等参数。•在android中,一般使用SoundPool来实现游戏音效。使用SoundPool的优点是异步线程,占用资源少,可以同时合成多种音效,因而比较适合于在游戏中使用,比如打斗声,效果声,按钮声等。用SoundPool载入和播放多个音效时,建议使用相同参数的声音文件(如位速,声道,采样率等),并且最好使用OGG格式,否则某些型号的手机可能会出现杂音,重复播放等问题。使用SoundPool播放音效publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);bomb=(Button)findViewById(R.id.bomb);shot=(Button)findViewById(R.id.shot);arrow=(Button)findViewById(R.id.arrow);//设置最多可容纳10个音频流,音频的品质为5soundPool=newSoundPool(10,AudioManager.STREAM_SYSTEM,5);//load方法加载指定音频文件,并返回所加载的音频ID。此处使用HashMap来管理这些音频流soundMap.put(1,soundPool.load(this,R.raw.bomb,1));soundMap.put(2,soundPool.load(this,R.raw.shot,1));soundMap.put(3,soundPool.load(this,R.raw.arrow,1));bomb.setOnClickListener(this);shot.setOnClickListener(this);arrow.setOnClickListener(this);}使用SoundPool播放音效publicvoidonClick(Viewsource){//判断哪个按钮被单击switch(source.getId()){caseR.id.bomb:soundPool.play(soundMap.get(1),1,1,0,0,1);break;caseR.id.shot:soundPool.play(soundMap.get(2),1,1,0,0,1);break;caseR.id.arrow:soundPool.play(soundMap.get(3),1,1,0,0,1);break;}}使用MediaRecorder录制音频•目前手机都提供有音频录制功能,当然这需要有硬件的支持,手机一般都提供麦克风硬件,android系统就可以利用该硬件来录制音频。•为了在android应用中录制音频,android提供了MediaRecorder类,该类位于android.media包中。•录制音频的重要步骤:创建MediaRecorder对象调用MediaRecorder对象的setAudioSource()方法设置声音的来源,一般传入MediaRecorder.AudioSource.MIC参数指定录制来自麦克风的声音。调用MediaRecorder对象的setOutputFormat()方法设置所录制的音频文件的格式,如MediaRecorder.OutputFormat.MPEG_4。调用Medi

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功