音效主要指为了增强真实感或者烘托场景氛围播放的简短效果音。例如:在直播期间,经常会有一些播放音效的场景,如掌声、礼物音效、提示音等。在游戏中,有时也需要播放子弹声、碰撞打击声等。
ZegoExpress SDK 提供音效文件播放器,通过 ZegoAudioEffectPlayer 统一管理音效,支持音效播放(可以多音效重叠播放)、播放控制(如暂停播放、音量调节、设置播放进度)、预加载音效等功能。
音效文件播放器支持播放 MP3、M4A、AAC、WAV 格式的本地音频文件。
请参考 下载示例源码 获取源码。
相关源码请查看 “/ZegoExpressExample/AdvancedAudioProcessing/src/main/java/im/zego/advancedaudioprocessing/audioeffectplayer” 目录下的文件。
在实现音效文件播放器功能之前,请确保:
调用 ZegoExpressEngine 的 createAudioEffectPlayer 方法创建音效播放器实例。
引擎当前只支持同时创建一个实例,超出后将返回 null
。
ZegoAudioEffectPlayer audioEffectPlayer = ZegoExpressEngine.getEngine().createAudioEffectPlayer();
可以根据需要调用音效播放器的 setEventHandler 方法为播放器设置事件回调,用于监听“音效播放状态改变”等通知。
audioEffectPlayer.setEventHandler(new IZegoAudioEffectPlayerEventHandler() {
@Override
public void onAudioEffectPlayStateUpdate(ZegoAudioEffectPlayer audioEffectPlayer, int audioEffectID, ZegoAudioEffectPlayState state, int errorCode) {
Log.d("[ZEGO]", "onAudioEffectPlayStateUpdate errorCode:" + errorCode + " audioEffectID:" + audioEffectID + " state:" + state);
}
});
调用 start 方法播放音效,目前仅支持同时播放 12 个,且只能为本地文件,不支持播放网络资源。 “audioEffectID” 需要保持全局唯一。
int audioEffectID = 1;
ZegoAudioEffectPlayConfig config = new ZegoAudioEffectPlayConfig();
config.playCount = 10;
config.isPublishOut = true;
audioEffectPlayer.start(audioEffectID,"/storage/emulated/0/Android/data/im.zego.express.example.video/files/3-s.mp3",config);
audioEffectPlayer.pause(audioEffectID);
audioEffectPlayer.resume(audioEffectID);
audioEffectPlayer.stop(audioEffectID);
audioEffectPlayer.pauseAll();
audioEffectPlayer.resumeAll();
audioEffectPlayer.stopAll();
int volume =70;
audioEffectPlayer.setVolume(audioEffectID, volume);
// 设置所有音效的音量
audioEffectPlayer.setVolumeAll(volume);
// 获取音效的总时长
long totalDuration = audioEffectPlayer.getTotalDuration(audioEffectID);
// 获取音效当前播放进度
long progress = audioEffectPlayer.getCurrentProgress(audioEffectID);
// 设置播放进度
audioEffectPlayer.seekTo(audioEffectID, 1, new IZegoAudioEffectPlayerSeekToCallback() {
@Override
public void onSeekToCallback(int errorCode) {
Log.d("[ZEGO]", "onSeekToCallback errorCode:" + errorCode);
}
});
在频繁播放相同音效场景中,SDK 为了优化重复读文件并解码的性能,提供了预加载音效文件到内存中的功能。
调用 loadResource 方法加载音效资源,可通过 “callback” 参数来监听加载的结果,显示加载成功后方可播放。最多支持同时预加载 15 个本地音效文件(不支持网络资源),并且单个音效文件时长不能超过 30 s,否则加载会报错。
当加载的音效使用完成后,可以调用 unloadResource 接口卸载,以释放相关资源。否则 SDK 将在 ZegoAudioEffectPlayer 实例释放时会自动卸载已加载的音效。
预加载为非必须操作,为了提高性能或者需要反复播放某个特定的音效时推荐使用。
// 加载音效资源
audioEffectPlayer.loadResource(audioEffectID, "/storage/emulated/0/Android/data/im.zego.express.example.video/files/3-s.mp3", new IZegoAudioEffectPlayerLoadResourceCallback() {
@Override
public void onLoadResourceCallback(int i) {
Log.d("[ZEGO]", "onLoadResourceCallback errorCode:" + i );
}
});
// 卸载音效资源
audioEffectPlayer.unloadResource(audioEffectID);
使用完音效播放器后,需要及时调用 destroyAudioEffectPlayer 方法销毁,释放该播放器占用的资源。
engine.destroyAudioEffectPlayer(audioEffectPlayer);
方法 | 描述 |
---|---|
createAudioEffectPlayer | 创建音效播放器实例 |
setEventHandler | 设置音效播放器回调 |
start | 播放音效 |
pause | 暂停播放单个音效 |
pauseAll | 暂停播放所有音效 |
resume | 恢复播放单个音效 |
resumeAll | 恢复播放所有音效 |
stop | 停止播放单个音效 |
stopAll | 停止播放所有音效 |
setVolume | 调节音效音量 |
setVolumeAll | 调节所有音效音量 |
getTotalDuration | 控制播放进度 |
getCurrentProgress | 获取当前播放进度 |
seekTo | 设置指定的播放进度 |
loadResource | 预加载资源 |
unloadResource | 卸载资源 |
destroyAudioEffectPlayer | 销毁音效播放器实例 |
音效播放器与媒体播放器有什么区别?
联系我们
文档反馈