9.0版本SoundPool播放无声问题

您所在的位置:网站首页 猫声播放 9.0版本SoundPool播放无声问题

9.0版本SoundPool播放无声问题

2023-09-20 10:59| 来源: 网络整理| 查看: 265

9.0版本SoundPool播放无声问题

音效没声音很多情况:

1、不支持的音效格式(ogg,MP3,wav)

2、加载未完成时调用play播放音频。表现为前面无声音,过一段时间有声音。可以实现onLoadComplete()监听等待加载完成后再去播放。

pool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool, int sampleId, int status) { if (status == 0){ // 加载完成 } } });

3、调用了SoundPool.release()之后没有再初始化。 这种场景也经常出现,当我们接收手机设置铃声音量变化,静音和振动状态下需要关闭声音播放,标准状态下重新初始化,如果从静音模式切换到铃声模式忘记初始化,就会出现无声现象。

类型操作静音relase震动relase标准init

4、静音模式下继续播放声音,有时候导致无法结束,下一次播放为无声。 在播放音频时判断当前是否标准模式:

if (ringerMode == AudioManager.RINGER_MODE_VIBRATE) { // 振动 } else if (ringerMode != AudioManager.RINGER_MODE_NORMAL) { // 非标准模式直接退出 return; }

5、Android 5.0以上已废弃直接通过new SoundPool方式创建 5.0以上版本建议使用builder方式创建SoundPool,在9.0以下还未发现使用new SoundPool有什么问题,9.0很多机型继续使用new SoundPool方式部分room已无效。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { AudioAttributes attr = new AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) .build(); soundPool = new SoundPool.Builder() .setMaxStreams(SOUNDLENGTH) .setAudioAttributes(attr) .build(); } else { soundPool = new SoundPool(SOUNDLENGTH, streamType, 0); }

需要关注AudioAttributes的ContentType和Usage属性: contentType描述音频信号的内容类型的属性,例如语音或音乐。

ContentType 类型解释场景CONTENT_TYPE_MOVIE视频类型音频信号当内容类型为电影或电视节目时,通常使用的内容类型值。CONTENT_TYPE_MUSIC音乐媒体类型音频信号内容类型为音乐时使用的内容类型值。CONTENT_TYPE_SONIFICATION发声点击类音频信号当内容类型是伴随用户动作的声音时使用的内容类型值,例如表示按键点击的哔哔声效果或事件,例如在游戏中接收到的奖金的声音,例如点击键盘声音类型。这些声音大多是合成的或短的Foley声音。CONTENT_TYPE_SPEECH语音类音频信号当内容类型为语音时要使用的内容类型值CONTENT_TYPE_UNKNOWN其它在内容类型未知时使用的该值。

Usage设置描述音频信号的预期用途的属性,例如警报或铃声。 这里列举几个常用的,其它详情可以查看API

Usage 类型场景USAGE_MEDIA使用在媒体,如音乐,或电影配乐。USAGE_VOICE_COMMUNICATION使用在语音通信,例如电话或VoIP。USAGE_ALARM使用在闹铃(例如唤醒闹铃)。USAGE_ASSISTANCE_SONIFICATION使用在用户行为声音,如用户使用,点击界面声音USAGE_GAME使用在游戏场景音频USAGE_NOTIFICATION使用在通知相关声音

根据app具体类型和使用场景选择对应ContentType和Usage 例如:键盘点击类自定义播放音频

AudioAttributes attr = new AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) .build();


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3