浅谈 Android 娱乐直播/游戏特殊音效如何实现
1 功能簡介
我們在直播中,為了增強真實感,烘托場景氛圍需要播放的簡短效果音。例如:掌聲、笑聲、禮物音效、提示音等。在游戲中,有時也需要播放子彈聲、碰撞打擊聲等。
ZegoExpress SDK 提供音效文件播放器,通過 ZegoAudioEffectPlayer 統一管理音效,支持音效播放(可以多音效重疊播放)、播放控制(如暫停播放、音量調節、設置播放進度)、預加載音效等功能。
2 支持格式
音效文件播放器支持播放 MP3、M4A、AAC、WAV 格式的本地音頻文件。
3 示例源碼下載
請參考 下載示例源碼 獲取源碼。
相關源碼請查看 “/ZegoExpressExample/AdvancedAudioProcessing/src/main/java/im/zego/advancedaudioprocessing/audioeffectplayer” 目錄下的文件。
4 前提條件
在實現音效文件播放器功能之前,請確保:
- 已在項目中集成 ZEGO Express SDK,實現基本的實時音視頻功能,詳情請參考 快速開始 - 集成 和 快速開始 - 實現流程。
- 已在 ZEGO 控制臺 創建項目,并申請有效的 AppID,詳情請參考 控制臺 - 項目管理 中的“項目信息”。
5 使用步驟
5.1 創建音效播放器
調用 ZegoExpressEngine 的 createAudioEffectPlayer 方法創建音效播放器實例。
引擎當前只支持同時創建一個實例,超出后將返回 null。
ZegoAudioEffectPlayer audioEffectPlayer = ZegoExpressEngine.getEngine().createAudioEffectPlayer();5.2 播放控制
5.2.1 (可選)為音效播放器設置事件回調
音效播放器事件回調設置可以根據需要調用音效播放器的 setEventHandler 方法為播放器設置事件回調,用于監聽“音效播放狀態改變”等通知。
audioEffectPlayer.setEventHandler(new IZegoAudioEffectPlayerEventHandler() {@Overridepublic void onAudioEffectPlayStateUpdate(ZegoAudioEffectPlayer audioEffectPlayer, int audioEffectID, ZegoAudioEffectPlayState state, int errorCode) {Log.d("[ZEGO]", "onAudioEffectPlayStateUpdate errorCode:" + errorCode + " audioEffectID:" + audioEffectID + " state:" + state);} });5.2.2 開始播放
調用 start 方法播放音效,目前僅支持同時播放 12 個,且只能為本地文件,不支持播放網絡資源。 “audioEffectID” 需要保持全局唯一。
- 如果已通過 loadResource 方法預先加載了音效,則只需要傳入預加載時的 “audioEffectID”,“path”(音效資源的路徑)字段傳空即可。
- 若需要重復播放可以通過 ZegoAudioEffectPlayConfig 中 “playCount” 配置重復次數。如果設置為 “0”,則表示無限重復播放,直到用戶手動調用 stop 停止。
5.2.3 暫停/恢復/停止播放
5.2.4 調節音量
5.2.5 播放進度控制
5.3 (可選)預加載資源
預加載資源在頻繁播放相同音效場景中,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() {@Overridepublic void onLoadResourceCallback(int i) {Log.d("[ZEGO]", "onLoadResourceCallback errorCode:" + i ); } });// 卸載音效資源 audioEffectPlayer.unloadResource(audioEffectID);5.4 銷毀媒體播放器
使用完音效播放器后,需要及時調用 destroyAudioEffectPlayer 方法銷毀,釋放該播放器占用的資源。
engine.destroyAudioEffectPlayer(audioEffectPlayer);6 API 參考列表
| createAudioEffectPlayer | 創建音效播放器實例 |
| setEventHandler | 設置音效播放器回調 |
| start | 播放音效 |
| pause | 暫停播放單個音效 |
| pauseAll | 暫停播放所有音效 |
| resume | 恢復播放單個音效 |
| resumeAll | 恢復播放所有音效 |
| stop | 停止播放單個音效 |
| stopAll | 停止播放所有音效 |
| setVolume | 調節音效音量 |
| setVolumeAll | 調節所有音效音量 |
| getTotalDuration | 控制播放進度 |
| getCurrentProgress | 獲取當前播放進度 |
| seekTo | 設置指定的播放進度 |
| loadResource | 預加載資源 |
| unloadResource | 卸載資源 |
| destroyAudioEffectPlayer | 銷毀音效播放器實例 |
7 音效播放器與媒體播放器有什么區別?
- 媒體播放器主要用于播放視頻及較長的音樂,支持播放網絡資源。同一時間最多支持創建 4 個播放器實例,一個實例只能播放一個音視頻。
- 音效播放器主要用于播放時間較短的音效,不支持播放網絡資源。同一時間只支持創建一個音效播放器實例,音效播放器支持多路音效并發播放,一個實例最多同時播放 12 個音效。
獲取Demo
獲取本文的Demo、開發文檔、技術支持。
獲取SDK的商務活動、熱門產品。
注冊即構ZEGO開發者帳號,快速開始。
總結
以上是生活随笔為你收集整理的浅谈 Android 娱乐直播/游戏特殊音效如何实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云计算技术的产生、概念、原理、应用和前景
- 下一篇: Android studio3.6 加载