10天学通Android开发(8)-多媒体-创新互联

一、播放声音SoundPool

成都创新互联公司云计算的互联网服务提供商,拥有超过13年的服务器租用、成都多线机房、云服务器、网页空间、网站系统开发经验,已先后获得国家工业和信息化部颁发的互联网数据中心业务许可证。专业提供云主机、网页空间、域名注册、VPS主机、云服务器、香港云服务器、免备案服务器等。

SoundPool播放短的音效,不能播放歌曲

可以用soundpool,用soundpool可以播一些短的反应速度要求高的声音,
比如游戏中的爆破声,而mediaplayer适合播放长点的。
SoundPool载入音乐文件使用了独立的线程,不会阻塞UI主线程的操作, SoundPool类支持同时播放多个音效,这对于游戏来说是十分必要的,而MediaPlayer类是同步执行的只能一个文件一个文件的播放。

实例:

sp=new SoundPool(1,AudioManager.STREAM_MUSIC,0);

加载:

soundId = sp.load(this, R.raw.note1, 1);

播放,可设置慢速、快速、频率高低等

sp.play(soundId, 1, 1, 0, 0, 2.0f);

二、播放声音MediaPlay

MediaPlayer可播放长的声音,可后台播放

创建:

mp= MediaPlayer.create(this,R.raw.song);

释放:

mp.release();

相关资源准备、该下载就下载

mp.prepare();

播放:

mp.start();

三、录音MediaRecord

写入外部存储的权限:

"android.permission.WRITE_EXTERNAL_STORAGE"/>

录音权限:

"android.permission.RECORD_AUDIO"/>

创建目录:

File dir=new File(Environment.getExternalStorageDirectory(),"sonunds");

            if(!dir.exists())

            {

               dir.mkdir();//创建目录

            }

创建文件:

File soundFile=new File(dir,System.currentTimeMillis()+".amr");

            if(!soundFile.exists())

            {

               try//捕获一个异常

               {

               soundFile.createNewFile();

               }

               catch(IOException e)

               {

                  e.printStackTrace();

               }

            }

指定输出

mr=new MediaRecorder();

mr.setOutputFile(soundFile.getAbsolutePath());/

准备并开始录制:

mr.prepare();

mr.start();

停止录制:

mr.stop();

案例分析:

  1. 界面,四个按钮:

android:id="@+id/btnPlaySound"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="PlaySound" />

   

android:id="@+id/btnPlaySong"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="PlaySong" />

      

android:id="@+id/btnRecordBegin"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="开始录制"/>

        

android:id="@+id/btnRecordStop"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="停止录制"/>

  1. 播放短的音效

sp=new SoundPool(1,AudioManager.STREAM_MUSIC,0);

        soundId = sp.load(this, R.raw.note1, 1);

     findViewById(R.id.btnPlaySound).setOnClickListener(new View.OnClickListener() {

         @Override

         publicvoid onClick(View v) {

            sp.play(soundId, 1, 1, 0, 0,2.0f);

         }

   });

  1. 播放歌曲

findViewById(R.id.btnPlaySong).setOnClickListener(newView.OnClickListener() {

         @Override

         publicvoid onClick(View v) {

            if (mp!=null) {

               mp.start();

            }

         }

     });

4)录音

findViewById(R.id.btnRecordBegin).setOnClickListener(new View.OnClickListener() {

     @Override

     publicvoid onClick(View v) {

          startRecord();

     }

     privatevoid startRecord() {

         if(mr==null)

         {

            File dir=new File(Environment.getExternalStorageDirectory(),"sonunds");

            if(!dir.exists())

            {

               dir.mkdir();//创建目录

            }

            File soundFile=new File(dir,System.currentTimeMillis()+".amr");

            if(!soundFile.exists())

            {

               try//捕获一个异常

               {

               soundFile.createNewFile();

               }

               catch(IOException e)

               {

                  e.printStackTrace();

               }

            }

            mr=new MediaRecorder();

            mr.setAudioSource(MediaRecorder.AudioSource.MIC);//指定输入源

           mr.setOutputFormat(MediaRecorder.AudioEncoder.AMR_WB);//输出编码格式

           mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);//输入编码格式

            mr.setOutputFile(soundFile.getAbsolutePath());//指定输出

            try {

               mr.prepare();

               mr.start();

            } catch (IllegalStateException e) {

               // TODO Auto-generatedcatch block

               e.printStackTrace();

            } catch (IOException e) {

               // TODO Auto-generatedcatch block

               e.printStackTrace();

            }

         }

     }

  });

5)停止录音

findViewById(R.id.btnRecordStop).setOnClickListener(new View.OnClickListener() {

     @Override

     publicvoid onClick(View v) {

          stopRecord();

     }

     privatevoid stopRecord() {

         if(mr!=null)

         {

            mr.stop();

            mr.release();

            mr=null;

         }

     }

  });

6)权限设置

   "android.permission.WRITE_EXTERNAL_STORAGE"/>

   "android.permission.RECORD_AUDIO" />

×××:

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页标题:10天学通Android开发(8)-多媒体-创新互联
文章源于:http://scyanting.com/article/gigpc.html