美文网首页
使用SoundPool播放音效

使用SoundPool播放音效

作者: 郑捡书 | 来源:发表于2019-04-17 10:02 被阅读0次

    SoundPool一般用来 播放密集,急促而又短暂的音效

    构造方式
    // 普通构造方式(已过时)
    SoundPool(int maxStreams, int streamType, int srcQuality) 参数依次是:
    参数一:指定支持多少个声音,SoundPool对象中允许同时存在的最大流的数量。
    参数二:指定声音类型,流类型可以分为STREAM_VOICE_CALL, STREAM_SYSTEM, STREAM_RING,STREAM_MUSIC 和 STREAM_ALARM四种类型。在AudioManager中定义。
    参数三:指定声音品质(采样率变换质量),一般直接设置为0!
    
    // API 21(Android 5.0)构造方式
    SoundPool.Builder spb = new SoundPool.Builder();
    spb.setMaxStreams(10);
    spb.setAudioAttributes(null);    //转换音频格式
    SoundPool sp = spb.build();      //创建SoundPool对象
    
    加载声音方法
    // 上述方法都会返回一个声音的ID,后面我们可以通过这个ID来播放指定的声音。一般有多个声音可以用HashMap等集合存放。
    load(Context context, int resId, int priority)
    load(String path, int priority)
    load(FileDescriptor fd, long offset, long length, int priority)
    // AssetFileDescriptor .AssetFileDescriptor (), AssetFileDescriptor .getStartOffset(), afd.getLength(),其实就是方法三
    load(AssetFileDescriptor afd, int priority) 
    
    context:上下文
    resId:资源id
    priority:没什么用的一个参数,建议设置为1,保持和未来的兼容性
    path:文件路径
    FileDescriptor:貌似是流吧,这个我也不知道
    AssetFileDescriptor:从asset目录读取某个资源文件,用法: AssetFileDescriptor descriptor = assetManager.openFd("biaobiao.mp3");
    
    播放控制
    play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
    
    soundID:Load()返回的声音ID号
    leftVolume:左声道音量设置
    rightVolume:右声道音量设置
    priority:指定播放声音的优先级,数值越高,优先级越大。
    loop:指定是否循环:-1表示无限循环,0表示不循环,其他值表示要重复播放的次数
    rate:指定播放速率:1.0的播放率可以使声音按照其原始频率,而2.0的播放速率,可以使声音按照其 原始频率的两倍播放。如果为0.5的播放率,则播放速率是原始频率的一半。播放速率的取值范围是0.5至2.0。
    
    释放资源
    可以调用release()方法释放所有SoundPool对象占据的内存和资源,当然也可以根据声音 ID来释放!
    

    相关文章

      网友评论

          本文标题:使用SoundPool播放音效

          本文链接:https://www.haomeiwen.com/subject/wiqlmqtx.html