当前位置:操作系统 > 安卓/Android >>

[Android开发学习03]短时间的音效播放实现SoundPool

 


实现技术: android.media.SoundPool实现 (管理和播放应用程序的声音资源,直接加载到内存)。

 


一.基础知识:


1. 创建一个SoundPool :
   我们先看看SoundPool函数的定义,如下:


[java]
  public SoundPool( 
    int maxStream, // 同时播放的流的最大数量  
    int streamType,// 流的类型,一般为STREAM_MUSIC  
    int srcQuality // 采样率转化质量,当前无效果,使用0作为默认值  
    )  

  public SoundPool(
 int maxStream, // 同时播放的流的最大数量
 int streamType,// 流的类型,一般为STREAM_MUSIC
 int srcQuality // 采样率转化质量,当前无效果,使用0作为默认值
 )     eg.
  SoundPool soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
  创建了一个最多支持3个流同时播放的,类型标记为音乐的SoundPool。

 


2. 加载一个音频文件:
    以下方法,取其一即可:


[java]
int  load(Context context, int resId, int priority)  //从APK资源载入  
    int  load(FileDescriptor fd, long offset, long length, int priority)  //从FileDescriptor对象载入  
    int  load(AssetFileDescriptor afd, int priority)  //从Asset对象载入  
    int  load(String path, int priority)  //从完整文件路径名载入  

 int  load(Context context, int resId, int priority)  //从APK资源载入
   int  load(FileDescriptor fd, long offset, long length, int priority)  //从FileDescriptor对象载入
   int  load(AssetFileDescriptor afd, int priority)  //从Asset对象载入
   int  load(String path, int priority)  //从完整文件路径名载入   我目前使用的是第一种,从APK资源载入:
[java]
int  load( 
    Context context,    // 应用程序的上下文,即当前的Activity,可理解为谁来调用这个方法。  
    int resId,      // 资源的ID  
    int priority        // 优先级,我们设置为1即可。  
)   

 int  load(
  Context context, // 应用程序的上下文,即当前的Activity,可理解为谁来调用这个方法。
  int resId,   // 资源的ID
  int priority     // 优先级,我们设置为1即可。
 ) 

 

 


3. 播放音效:


[java]
int play( 
    int soundID,        // 播放的音乐ID  
    float leftVolume,   // 左声道音量  
    float rightVolume,  // 右声道音量  
    int priority,   // 优先级,0为最低  
    int loop,       // 循环次数,0为不循环,-1为永远循环  
    float rate      // 回放速度,该值在0.5-2.0之间,1为正常速度。  

 int play(
  int soundID,   // 播放的音乐ID
  float leftVolume, // 左声道音量
  float rightVolume,  // 右声道音量
  int priority,  // 优先级,0为最低
  int loop,   // 循环次数,0为不循环,-1为永远循环
  float rate  // 回放速度,该值在0.5-2.0之间,1为正常速度。
 )

 

 

4. 暂停音效:


[java]
void pause(int streamID)    // 参数为 音效的ID。 

 void pause(int streamID) // 参数为 音效的ID。

 

二.编程实现:


1. 界面编辑(res\layout\main.xml):

[java]
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <Button  
        android:text="播放音效1"  
        android:id="@+id/Button01"  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"> 
    </Button>                                     <!-- 添加一个Button控件 --> 
    <Button  
        android:text="播放音效2"  
        android:id="@+id/Button02"  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"> 
    </Button>                                     <!-- 添加一个Button控件 --> 
    <Button  
        android:text="暂停音效1"  
        android:id="@+id/Button1Pause"  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"> 
    </Button>                                     <!-- 添加一个Button控件 --> 
    <Button  
        android:text="暂停音效2"  
        android:id="@+id/Button2Pause"  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"> 
    </Button>                                     <!-- 添加一个Button控件 --> 
</LinearLayout> 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_heig

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,