老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設、域名注冊、服務器等服務

怎么在android中利用SoundPool播放音頻-創(chuàng)新互聯(lián)

怎么在android中利用SoundPool播放音頻?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)主要為客戶提供服務項目涵蓋了網(wǎng)頁視覺設計、VI標志設計、成都全網(wǎng)營銷、網(wǎng)站程序開發(fā)、HTML5響應式成都網(wǎng)站建設手機網(wǎng)站制作設計、微商城、網(wǎng)站托管及成都網(wǎng)站維護公司、WEB系統(tǒng)開發(fā)、域名注冊、國內外服務器租用、視頻、平面設計、SEO優(yōu)化排名。設計、前端、后端三個建站步驟的完善服務體系。一人跟蹤測試的建站服務標準。已經(jīng)為成都加固行業(yè)客戶提供了網(wǎng)站營銷推廣服務。

SoundPool(android.media.SoundPool),顧名思義是聲音池的意思,主要用于播放一些較短的聲音片段,支持從程序的資源或文件系統(tǒng)加載。與MediaPlayer相比,SoundPool的優(yōu)勢在于CPU資源占用量低和反應延遲小。另外,SoundPool還支持自行設置聲音的品質、音量、播放比率等參數(shù),支持通過ID對多個音頻流進行管理。

  1. SoundPool大只能申請1M的內存空間,這就意味著我們只能用一些很短的聲音片段,而不是用它來播放歌曲或者做游戲背景音樂。

  2. SoundPool提供了pause和stop方法,但這些方法建議最好不要輕易使用,因為有些時候它們可能會使你的程序莫名其妙的終止。建議使用這兩個方法的時候盡可能多做測試工作,還有些朋友反映它們不會立即中止播放聲音,而是把緩沖區(qū)里的數(shù)據(jù)播放完才會停下來,也許會多播放一秒鐘。

  3. SoundPool的效率問題。其實SoundPool的效率在這些播放類中算是很好的了,但是有的朋友在G1中測試它還是有100ms左右的延遲,這可能會影響用戶體驗。也許這不能管SoundPool本身,因為到了性能比較好的Droid中這個延遲就可以讓人接受了。

在現(xiàn)階段SoundPool有這些缺陷,但也有著它不可替代的優(yōu)點,基于這些我們建議大在如下情況中多使用SoundPool:1.應用程序中的聲效(按鍵提示音,消息等)2.游戲中密集而短暫的聲音(如多個飛船同時爆炸)

1.相關方法介紹:

1)構造方法:

SoundPool(int maxStreams, int streamType, int srcQuality) 參數(shù)依次是:

①指定支持多少個聲音,SoundPool對象中允許同時存在的大流的數(shù)量。

②指定聲音類型,流類型可以分為STREAM_VOICE_CALL, STREAM_SYSTEM, STREAM_RING,STREAM_MUSIC 和 STREAM_ALARM四種類型。在AudioManager中定義。

③指定聲音品質(采樣率變換質量),一般直接設置為0!

在低版本中可以用上述構造方法,而API 21(Android 5.0)后這個構造方法就過時了! 而用到一個SoundPool.Builder的東東,我們要實例化SoundPool只需調用:

SoundPool.Builder spb = new SoundPool.Builder();
spb.setMaxStreams(10);
spb.setAudioAttributes(null);  //轉換音頻格式
SoundPool sp = spb.build();   //創(chuàng)建SoundPool對象

要使用上述代碼的話,TargetSDK版本要設置大于等于21哦!而且如果minSDK版本小于21 會出現(xiàn)下面的提醒:

怎么在android中利用SoundPool播放音頻

2)常用方法介紹:

①加載聲音資源:

  1. load(Context context, int resId, int priority)

  2. load(String path, int priority)

  3. load(FileDescriptor fd, long offset, long length, int priority)

  4. load(AssetFileDescriptor afd, int priority) 上述方法都會返回一個聲音的ID,后面我們可以通過這個ID來播放指定的聲音

參數(shù)介紹:

  1. context:上下文

  2. resId:資源id

  3. priority:沒什么用的一個參數(shù),建議設置為1,保持和未來的兼容性

  4. path:文件路徑

  5. FileDescriptor:貌似是流吧,這個我也不知道

  6. AssetFileDescriptor:從asset目錄讀取某個資源文件,用法:

AssetFileDescriptor descriptor = assetManager.openFd("biaobiao.mp3");

②播放控制:

play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)

參數(shù)依次是:

  1. soundID:Load()返回的聲音ID號

  2. leftVolume:左聲道音量設置

  3. rightVolume:右聲道音量設置

  4. priority:指定播放聲音的優(yōu)先級,數(shù)值越高,優(yōu)先級越大。

  5. loop:指定是否循環(huán):-1表示無限循環(huán),0表示不循環(huán),其他值表示要重復播放的次數(shù)

  6. rate:指定播放速率:1.0的播放率可以使聲音按照其原始頻率,而2.0的播放速率,可以使聲音按照其 原始頻率的兩倍播放。如果為0.5的播放率,則播放速率是原始頻率的一半。播放速率的取值范圍是0.5至2.0。

③資源釋放:

可以調用release()方法釋放所有SoundPool對象占據(jù)的內存和資源,當然也可以根據(jù)聲音 ID來釋放!

3.使用代碼示例:

運行效果圖:

怎么在android中利用SoundPool播放音頻

當點擊按鈕的時候會,"Duang"一下,這里演示了兩種load的方法,分別是raw和assests!

關鍵代碼:

MainActivity.java:

private void initSP() throws Exception{
    //設置最多可容納5個音頻流,音頻的品質為5
    mSoundPool = new SoundPool(5, AudioManager.STREAM_SYSTEM, 5);
    soundID.put(1, mSoundPool.load(this, R.raw.duang, 1));
    soundID.put(2 , mSoundPool.load(getAssets().openFd("biaobiao.mp3") , 1)); //需要捕獲IO異常
    soundID.put(3, mSoundPool.load(this, R.raw.duang, 1));
    soundID.put(4, mSoundPool.load(this, R.raw.duang, 1));
    soundID.put(5, mSoundPool.load(this, R.raw.duang, 1));
  }

  @Override
  public void onClick(View v) {
    switch (v.getId()){
      case R.id.btn_play1:
        mSoundPool.play(soundID.get(1), 1, 1, 0, 0, 1);
        break;
      case R.id.btn_play2:
        mSoundPool.play(soundID.get(2), 1, 1, 0, 0, 1);
        break;
      case R.id.btn_play3:
        mSoundPool.play(soundID.get(3), 1, 1, 0, 0, 1);
        break;
      case R.id.btn_play4:
        mSoundPool.play(soundID.get(4), 1, 1, 0, 0, 1);
        break;
      case R.id.btn_play5:
        mSoundPool.play(soundID.get(5), 1, 1, 0, 0, 1);
        break;
      case R.id.btn_release:
        mSoundPool.release();  //回收SoundPool資源
        break;
    }

代碼非常簡單,另外如果你點擊了最后一個按鈕的話,SoundPool就會被釋放,然后再其他按鈕 就不會Duang了哦~

4.OnLoadCompleteListener監(jiān)聽聲音文件是否加載完畢

嗯,這個是臨時想起的,寫完在寫另一篇的時候突然想起,用法也很簡單,我們可以 往上面的代碼中添加OnLoadCompleteListener這個東東,然后重寫onLoadComplete()方法 ,最后為SoundPool對象設置這個東東即可!

mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
  @Override
  public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
    Toast.makeText(MainActivity.this,"加特技準備完畢~",Toast.LENGTH_SHORT).show();
  }
});

關于怎么在android中利用SoundPool播放音頻問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關知識。


文章標題:怎么在android中利用SoundPool播放音頻-創(chuàng)新互聯(lián)
URL鏈接:http://www.xueling.net.cn/article/dgecdj.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 色噜噜狠狠一区二区三区果冻 | 亚洲AV噜噜狠狠网址蜜桃 | 亚洲色成人网站www永久小说 | 黑人强伦姧人妻久久 | 麻豆视频在线观看免费 | 亚洲色图bb | 蜜乳av一区二区三区 | 乱人伦中文无码视频在线观看 | 岛国无码av不卡一区二区 | 国产熟女精品视频国语 | 特级毛片在线看 | 亚洲精品免费一区二区三区 | 狠狠躁夜夜躁人人躁婷婷 | 精品中文字幕在线观看 | 精品无码人妻一区二区三区 | 欧美老妇疯狂xxxxbbbb | 一区二区三区伦理片 | av免费观看在线 | 性一交一乱一色一欲的最新章节 | 精产嫩模国品一二三区 | 98色花堂论坛最新地址 | 在线看高清中文字幕一区 | 成人激情在线观看 | 丁香六月深婷婷激情五月 | 黄色录像a | 邻居少妇张开腿让我爽了一夜 | www.xx日本 | 无遮无挡爽爽免费视频毛片韩国 | 亚洲欧美日韩综合一区 | 亚洲搞av | 亚洲精品一区二区三区不 | 末成年女av片一区二区 | 久久精品视频一区 | 精品国产乱码久久久久久绯色 | 五月天综合婷婷欧美专区 | 精品国产子伦久久久久久小说 | 欧美视频精品 | 亚州欧洲日韩精品 | 在线免费观看国产 | 小泽玛利亚一区二区在线观看 | 中文高清av |