Android OpenGL 2.1 即时音效
MainActivity.java
package com.fisnail; import java.util.HashMap; import android.app.Activity; import android.content.Context; import android.media.AudioManager; import android.media.SoundPool; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; /** * * @author 粪豆的蜗牛([email protected]) * */ public class MainActivity extends Activity { /** * 播放按钮 */ private Button btn_id_play; /** * 停止按钮 */ private Button btn_id_stop; /** * 声明SoundPool引用 */ private SoundPool soundPool; /** * 用于存放声音文件的Map */ private HashMap<Integer, Integer> hashMap; /** * 当前播放的音频id */ private int currentStreamId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_id_play = (Button) findViewById(R.id.btn_main_play); btn_id_stop = (Button) findViewById(R.id.btn_main_stop); initSoundPool(); btn_id_play.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub playSound(1, 0); Toast.makeText(getBaseContext(), "开始播放音效", Toast.LENGTH_SHORT) .show(); } }); btn_id_stop.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub soundPool.stop(currentStreamId); Toast.makeText(getBaseContext(), "停止播放音效", Toast.LENGTH_SHORT) .show(); } }); } private void initSoundPool() { /** * 创建SoundPool对象 public SoundPool (int maxStreams, * int streamType, int srcQuality) * maxStreams:该参数用于设置最多同时能够播放多少个音效 * streamType:该参数设置音频类型,在游戏中通常设置为STREAM_MUSIC * srcQuality:该参数设置音频文件的质量,目前还不知具体作用,默认设置为0 */ soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); hashMap = new HashMap<Integer, Integer>(); /** * 加载音频文件 public int load (Context context, int resId, * int priority) * context:应用程序上下文 resId:资源id【由于SoundPool设计的初衷是用于无延时的 * 播放游戏中的短促音效, * 因此实际开发中应该只将长度小于7s的声音资源放进SoundPool,否则可能加载失败或者内存 * 占用过大】 priority:优先级 */ hashMap.put(1, soundPool.load(this, R.raw.test, 1)); } private void playSound(int sound, int loop) { AudioManager audioManager = (AudioManager) this .getSystemService(Context.AUDIO_SERVICE); float streamVolumeCurrent = audioManager .getStreamVolume(AudioManager.STREAM_MUSIC); // 获取当前音量 float streamVolumeMax = audioManager .getStreamMaxVolume(AudioManager.STREAM_MUSIC); // 获取系统最大音量 float volume = streamVolumeCurrent / streamVolumeMax; // 计算得到播放音量 /** * 播放音效 public final int play (int soundID, float leftVolume, * float rightVolume, int priority, int loop, float rate) * soundID:播放音效的id * leftVolume:左声道音量 rightVolume:右声道音量 priority:优先级0最低 * loop:循环 0不循环 -1 * 永远循环 rate:播放速度 0.5~2.0f 1.0f为正常速度 */ currentStreamId = soundPool.play(hashMap.get(sound), volume, volume, 1,loop, 1.0f); } }
activity_main.xml
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <!-- Title --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_main_title" android:text="@string/tv_main_title" android:layout_centerHorizontal="true" /> <!--播放按钮 --> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btn_main_play" android:text="@string/btn_main_play_text" android:layout_below="@id/tv_main_title"/> <!--停止按钮 --> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btn_main_stop" android:text="@string/btn_main_stop_text" android:layout_below="@id/btn_main_play"/> </RelativeLayout>
strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">即时音效</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <!--MainActivity --> <!--标题Title --> <string name="tv_main_title">即时音效</string> <!--播放按钮 --> <string name="btn_main_play_text">播放音效</string> <!--停止按钮 --> <string name="btn_main_stop_text">停止播放</string> </resources>
相关推荐
huha 2020-10-16
xfcyhades 2020-11-20
sgafdsg 2020-11-04
Michael 2020-11-03
fengyeezju 2020-10-14
ziyexiaoxiao 2020-10-14
业余架构师 2020-10-09
OuNuo0 2020-09-29
moses 2020-09-22
Angelia 2020-09-11
qinxu 2020-09-10
刘炳昭 2020-09-10
Nostalgiachild 2020-09-07
Nostalgiachild 2020-08-17
leavesC 2020-08-14
一青年 2020-08-13
AndroidAiStudy 2020-08-07
ydc0 2020-07-30
绿豆饼 2020-07-28