国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android使用SoundPool播放音效

2019-10-21 21:46:34
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例為大家分享了Android使用SoundPool播放音效的具體代碼,供大家參考,具體內(nèi)容如下

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

①指定支持多少個(gè)聲音,SoundPool對(duì)象中允許同時(shí)存在的最大流的數(shù)量。
②指定聲音類型,流類型可以分為STREAM_VOICE_CALL(通話), STREAM_SYSTEM(系統(tǒng)), STREAM_RING(鈴聲),STREAM_MUSIC(媒體音量) 和STREAM_ALARM(警報(bào))四種類型。在AudioManager中定義。
③指定聲音品質(zhì)(采樣率變換質(zhì)量),一般直接設(shè)置為0!、

以下是對(duì)它的常用方法的介紹:

1.加載聲音資源

load(Context context,int resid,int priority)
load(String path,int priority)
load(FileDescriptor fd,long offset,long length,int priority)
load(AssetFileDescriptor afd,int priority)

參數(shù)介紹:

  • context:上下文
  • resId:資源id
  • priority:沒(méi)什么用的一個(gè)參數(shù),建議設(shè)置為1,保持和未來(lái)的兼容性
  • path:文件路徑
  • FileDescriptor:貌似是流吧,這個(gè)我也不知道
  • AssetFileDescriptor:從asset目錄讀取某個(gè)資源文件,其用法:AssetFileDescriptor descriptor = assetManager.openFd("biaobiao.mp3");

2.播放控制

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

參數(shù)依次是:

  • soundID:Load()返回的聲音ID號(hào)
  • leftVolume:左聲道音量設(shè)置
  • rightVolume:右聲道音量設(shè)置
  • priority:指定播放聲音的優(yōu)先級(jí),數(shù)值越高,優(yōu)先級(jí)越大。
  • loop:指定是否循環(huán):-1表示無(wú)限循環(huán),0表示不循環(huán),其他值表示要重復(fù)播放的次數(shù)
  • rate:指定播放速率:1.0的播放率可以使聲音按照其原始頻率,而2.0的播放速率,可以使聲音按照其 原始頻率的兩倍播放。如果為0.5的播放率,則播放速率是原始頻率的一半。播放速率的取值范圍是0.5至2.0。

3.資源釋放

方法:可以通過(guò)release()方法釋放所有SoundPool對(duì)象所占據(jù)的內(nèi)存和資源,也可以根據(jù)聲音ID來(lái)釋放。

下面是使用SoundPool實(shí)現(xiàn)的一個(gè)代碼示例:

1.  運(yùn)行效果圖:

 

2.  MainActivity代碼:

import android.content.res.AssetManager;import android.media.AudioManager;import android.media.SoundPool;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import java.util.HashMap;public class MainActivity extends AppCompatActivity implements View.OnClickListener{  private Button btnOne;  private Button btnTwo;  private Button btnThree;  private Button btnFour;  private Button btnFive;  private Button btn_release;  private AssetManager aManager;  private SoundPool mSoundPool = null;  private HashMap<Integer, Integer> soundID = new HashMap<Integer, Integer>();  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    aManager = getAssets();    try {      initSP();    } catch (Exception e) {      e.printStackTrace();    }    bindViews();  }  private void bindViews() {    btnOne = (Button) findViewById(R.id.btn_play1);    btnTwo = (Button) findViewById(R.id.btn_play2);    btnThree = (Button) findViewById(R.id.btn_play3);    btnFour = (Button) findViewById(R.id.btn_play4);    btnFive = (Button) findViewById(R.id.btn_play5);    btn_release = (Button) findViewById(R.id.btn_release);    btnOne.setOnClickListener(this);    btnTwo.setOnClickListener(this);    btnThree.setOnClickListener(this);    btnFour.setOnClickListener(this);    btnFive.setOnClickListener(this);    btn_release.setOnClickListener(this);  }  private void initSP() throws Exception{    //設(shè)置最多可容納5個(gè)音頻流,音頻的品質(zhì)為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;    }  }}

3.  activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical"  tools:context=".MainActivity">  <Button    android:id="@+id/btn_play1"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="聲音1" />  <Button    android:id="@+id/btn_play2"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="聲音2" />  <Button    android:id="@+id/btn_play3"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="聲音3" />  <Button    android:id="@+id/btn_play4"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="聲音4" />  <Button    android:id="@+id/btn_play5"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="聲音5" />  <Button    android:id="@+id/btn_release"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="釋放SoundPool" /></LinearLayout>

點(diǎn)擊聲音1~5按鈕會(huì)發(fā)出聲音,但當(dāng)點(diǎn)擊最后一個(gè)release按鈕將SoundPool釋放后,再去按就沒(méi)有任何效果了哦。

源碼下載:Android使用SoundPool播放音效

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 于田县| 宁乡县| 泾川县| 湖南省| 青浦区| 张家界市| 同心县| 南昌市| 行唐县| 营口市| 嘉黎县| 云霄县| 靖边县| 和政县| 平江县| 星座| 安泽县| 巫山县| 呼和浩特市| 龙里县| 拜城县| 扶绥县| 措美县| 米林县| 邹城市| 钟祥市| 昌乐县| 阿图什市| 留坝县| 泰宁县| 迁西县| 黎川县| 班玛县| 汝州市| 玉田县| 稷山县| 车险| 灵丘县| 绥棱县| 庄河市| 久治县|