中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

10天學通Android開發(8)-多媒體

發布時間:2020-08-01 13:27:10 來源:網絡 閱讀:570 作者:wanxl 欄目:移動開發

一、播放聲音SoundPool


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

寫入外部存儲的權限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

錄音權限:

<uses-permission android:name="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. 界面,四個按鈕:

     

<Button

       android:id="@+id/btnPlaySound"

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       android:text="PlaySound" />

 

    <Button

       android:id="@+id/btnPlaySong"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="PlaySong" />

       <Button

       android:id="@+id/btnRecordBegin"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="開始錄制" />

         <Button

       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)權限設置

 

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <uses-permission android:name="android.permission.RECORD_AUDIO" />


×××:


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

应用必备| 辉县市| 兰坪| 张掖市| 洛南县| 印江| 沈丘县| 岫岩| 黎川县| 鱼台县| 海伦市| 新安县| 香格里拉县| 江北区| 凤庆县| 桦甸市| 平湖市| 高淳县| 五大连池市| 桂平市| 荣昌县| 田阳县| 苍山县| 汉川市| 澄迈县| 河池市| 苏尼特右旗| 金湖县| 北京市| 平果县| 界首市| 昭觉县| 洞头县| 灵山县| 沙湾县| 苍梧县| 酉阳| 永新县| 鸡泽县| 眉山市| 博野县|