android播放系统音效,Android用SoundPool播放音效
SoundPool可以用來播放一些較短的音效,如一些信息提醒之類的
先來說下會用到的參數
SoundPool(int maxStreams, int streamType, int srcQuality)的參數
maxStreams:指定支持多少個聲音,SoundPool對象中允許同時存在的最大流的數量
streamType:聲音類型,流類型可以分為STREAM_VOICE_CALL, STREAM_SYSTEM, STREAM_RING,STREAM_MUSIC 和 STREAM_ALARM四種類型。在AudioManager
定義
srcQuality:聲音品質(采樣率變換質量),當前無效果,用0作為默認
SoundPool在API 21(Android 5.0)之后就過時了,用SoundPool.Builder
play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
soundID:Load()返回的聲音ID號
leftVolume:左聲道音量設置
rightVolume:右聲道音量設置
priority:播放聲音的優先級,數值越高,優先級越大。
loop:是否循環:-1表示無限循環,0表示不循環,其他值表示要重復播放的次數
rate:播放速率:播放速率的取值范圍是0.5至2.0,1.0為原始播放速率,2.0的播放速率為原始速率的兩位。0.5的播放速率為原始速率的一半。
release()方法釋放所有SoundPool對象占據的內存和資源,也可以指定要釋放的ID
需要編輯的文件如下
activity_main.xml
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
android:id="@+id/rawPlay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="raw"/>
android:id="@+id/assetsPlay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="assets"/>
android:id="@+id/btn_release"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="釋放SoundPool"/>
MainActivity.java
packagecn.wuxiaocheng.soundpool;
importandroid.content.res.AssetManager;
importandroid.media.AudioAttributes;
importandroid.media.AudioManager;
importandroid.media.SoundPool;
importandroid.os.Build;
importandroid.os.Bundle;
importandroid.support.v7.app.AppCompatActivity;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importjava.util.HashMap;
publicclassMainActivityextendsAppCompatActivityimplementsOnClickListener?{
privateButton?btn_play1;
privateButton?btn_play2;
privateButton?btn_release;
privateAssetManager?aManager;
privateSoundPool?mSoundPool?=null;
privateHashMap?soundID?=newHashMap();
@Override
protectedvoidonCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
aManager?=?getAssets();
try{
initSP();
}?catch(Exception?e)?{
e.printStackTrace();
}
bindViews();
}
privatevoidbindViews()?{
btn_play1?=?(Button)?findViewById(R.id.rawPlay);
btn_play2?=?(Button)?findViewById(R.id.assetsPlay);
btn_release?=?(Button)?findViewById(R.id.btn_release);
btn_play1.setOnClickListener(this);
btn_play2.setOnClickListener(this);
btn_release.setOnClickListener(this);
}
privatevoidinitSP()throwsException?{
//當前系統的SDK版本大于等于21(Android?5.0)時
if(Build.VERSION.SDK_INT?>=21)?{
SoundPool.Builder?builder?=?newSoundPool.Builder();
//傳入音頻數量
builder.setMaxStreams(2);
//AudioAttributes是一個封裝音頻各種屬性的方法
AudioAttributes.Builder?attrBuilder?=?newAudioAttributes.Builder();
//設置音頻流的合適的屬性
attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC);
//加載一個AudioAttributes
builder.setAudioAttributes(attrBuilder.build());
mSoundPool?=?builder.build();
}
//當系統的SDK版本小于21時
else{//設置最多可容納2個音頻流,音頻的品質為5
mSoundPool?=?newSoundPool(2,?AudioManager.STREAM_SYSTEM,5);
}
soundID.put(1,?mSoundPool.load(this,?R.raw.raw,1));
soundID.put(2,?mSoundPool.load(getAssets().openFd("assets.mp3"),1));//需要捕獲IO異常
}
@Override
publicvoidonClick(View?v)?{
switch(v.getId())?{
caseR.id.rawPlay:
mSoundPool.play(soundID.get(1),1,1,0,0,1);
break;
caseR.id.assetsPlay:
mSoundPool.play(soundID.get(2),1,1,0,0,1);
break;
caseR.id.btn_release:
//回收SoundPool資源
mSoundPool.release();
break;
}
}
}
總結
以上是生活随笔為你收集整理的android播放系统音效,Android用SoundPool播放音效的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java】线程池、Lambda表达式
- 下一篇: Android快速SDK(12)文本pd