日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

浅谈 Android 娱乐直播/游戏特殊音效如何实现

發(fā)布時(shí)間:2024/3/24 Android 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈 Android 娱乐直播/游戏特殊音效如何实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 功能簡介

我們在直播中,為了增強(qiáng)真實(shí)感,烘托場景氛圍需要播放的簡短效果音。例如:掌聲、笑聲、禮物音效、提示音等。在游戲中,有時(shí)也需要播放子彈聲、碰撞打擊聲等。

ZegoExpress SDK 提供音效文件播放器,通過 ZegoAudioEffectPlayer 統(tǒng)一管理音效,支持音效播放(可以多音效重疊播放)、播放控制(如暫停播放、音量調(diào)節(jié)、設(shè)置播放進(jìn)度)、預(yù)加載音效等功能。

2 支持格式

音效文件播放器支持播放 MP3、M4A、AAC、WAV 格式的本地音頻文件。

3 示例源碼下載

請參考 下載示例源碼 獲取源碼。

相關(guān)源碼請查看 “/ZegoExpressExample/AdvancedAudioProcessing/src/main/java/im/zego/advancedaudioprocessing/audioeffectplayer” 目錄下的文件。

4 前提條件

在實(shí)現(xiàn)音效文件播放器功能之前,請確保:

  • 已在項(xiàng)目中集成 ZEGO Express SDK,實(shí)現(xiàn)基本的實(shí)時(shí)音視頻功能,詳情請參考 快速開始 - 集成 和 快速開始 - 實(shí)現(xiàn)流程。
  • 已在 ZEGO 控制臺 創(chuàng)建項(xiàng)目,并申請有效的 AppID,詳情請參考 控制臺 - 項(xiàng)目管理 中的“項(xiàng)目信息”。

5 使用步驟

5.1 創(chuàng)建音效播放器

調(diào)用 ZegoExpressEngine 的 createAudioEffectPlayer 方法創(chuàng)建音效播放器實(shí)例。

引擎當(dāng)前只支持同時(shí)創(chuàng)建一個(gè)實(shí)例,超出后將返回 null。

ZegoAudioEffectPlayer audioEffectPlayer = ZegoExpressEngine.getEngine().createAudioEffectPlayer();

5.2 播放控制

5.2.1 (可選)為音效播放器設(shè)置事件回調(diào)

音效播放器事件回調(diào)設(shè)置

可以根據(jù)需要調(diào)用音效播放器的 setEventHandler 方法為播放器設(shè)置事件回調(diào),用于監(jiān)聽“音效播放狀態(tài)改變”等通知。

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 開始播放

調(diào)用 start 方法播放音效,目前僅支持同時(shí)播放 12 個(gè),且只能為本地文件,不支持播放網(wǎng)絡(luò)資源。 “audioEffectID” 需要保持全局唯一。

  • 如果已通過 loadResource 方法預(yù)先加載了音效,則只需要傳入預(yù)加載時(shí)的 “audioEffectID”,“path”(音效資源的路徑)字段傳空即可。
  • 若需要重復(fù)播放可以通過 ZegoAudioEffectPlayConfig 中 “playCount” 配置重復(fù)次數(shù)。如果設(shè)置為 “0”,則表示無限重復(fù)播放,直到用戶手動調(diào)用 stop 停止。
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);

5.2.3 暫停/恢復(fù)/停止播放

  • 調(diào)用 pause 方法可以暫停播放 “audioEffectID” 指定的音效,調(diào)用 pauseAll 方法則暫停所有正在播放的音效。
  • 音效暫停播放后,調(diào)用 resume 方法可以恢復(fù)播放 “audioEffectID” 指定的音效,調(diào)用 resumeAll 方法則恢復(fù)所有已暫停音效。
  • 調(diào)用 stop 方法可以停止播放 “audioEffectID” 指定的音效,調(diào)用 stopAll 方法則停止播放所有音效。
  • audioEffectPlayer.pause(audioEffectID); audioEffectPlayer.resume(audioEffectID); audioEffectPlayer.stop(audioEffectID); audioEffectPlayer.pauseAll(); audioEffectPlayer.resumeAll(); audioEffectPlayer.stopAll();

    5.2.4 調(diào)節(jié)音量

  • 調(diào)用 setVolume 方法可以設(shè)置 “audioEffectID” 指定的音效音量,取值范圍為 [0, 200],默認(rèn)值為 “100”。
  • 調(diào)用 setVolumeAll 方法則同時(shí)設(shè)置所有音效音量,取值范圍為 [0, 200],默認(rèn)值為 “100”。
  • int volume =70; audioEffectPlayer.setVolume(audioEffectID, volume);// 設(shè)置所有音效的音量 audioEffectPlayer.setVolumeAll(volume);

    5.2.5 播放進(jìn)度控制

  • 調(diào)用 getTotalDuration 方法獲取單個(gè)音效的總時(shí)長。
  • 調(diào)用 getCurrentProgress 方法獲取音效當(dāng)前播放進(jìn)度。
  • 調(diào)用 seekTo 方法可以根據(jù)需要設(shè)置播放進(jìn)度。
  • // 獲取音效的總時(shí)長 long totalDuration = audioEffectPlayer.getTotalDuration(audioEffectID); // 獲取音效當(dāng)前播放進(jìn)度 long progress = audioEffectPlayer.getCurrentProgress(audioEffectID); // 設(shè)置播放進(jìn)度 audioEffectPlayer.seekTo(audioEffectID, 1, new IZegoAudioEffectPlayerSeekToCallback() {@Overridepublic void onSeekToCallback(int errorCode) {Log.d("[ZEGO]", "onSeekToCallback errorCode:" + errorCode);} });

    5.3 (可選)預(yù)加載資源

    預(yù)加載資源

    在頻繁播放相同音效場景中,SDK 為了優(yōu)化重復(fù)讀文件并解碼的性能,提供了預(yù)加載音效文件到內(nèi)存中的功能。

    調(diào)用 loadResource 方法加載音效資源,可通過 “callback” 參數(shù)來監(jiān)聽加載的結(jié)果,顯示加載成功后方可播放。最多支持同時(shí)預(yù)加載 15 個(gè)本地音效文件(不支持網(wǎng)絡(luò)資源),并且單個(gè)音效文件時(shí)長不能超過 30 s,否則加載會報(bào)錯(cuò)。

    當(dāng)加載的音效使用完成后,可以調(diào)用 unloadResource 接口卸載,以釋放相關(guān)資源。否則 SDK 將在 ZegoAudioEffectPlayer 實(shí)例釋放時(shí)會自動卸載已加載的音效。

    預(yù)加載為非必須操作,為了提高性能或者需要反復(fù)播放某個(gè)特定的音效時(shí)推薦使用。

    // 加載音效資源 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 銷毀媒體播放器

    使用完音效播放器后,需要及時(shí)調(diào)用 destroyAudioEffectPlayer 方法銷毀,釋放該播放器占用的資源。

    engine.destroyAudioEffectPlayer(audioEffectPlayer);

    6 API 參考列表

    方法描述
    createAudioEffectPlayer創(chuàng)建音效播放器實(shí)例
    setEventHandler設(shè)置音效播放器回調(diào)
    start播放音效
    pause暫停播放單個(gè)音效
    pauseAll暫停播放所有音效
    resume恢復(fù)播放單個(gè)音效
    resumeAll恢復(fù)播放所有音效
    stop停止播放單個(gè)音效
    stopAll停止播放所有音效
    setVolume調(diào)節(jié)音效音量
    setVolumeAll調(diào)節(jié)所有音效音量
    getTotalDuration控制播放進(jìn)度
    getCurrentProgress獲取當(dāng)前播放進(jìn)度
    seekTo設(shè)置指定的播放進(jìn)度
    loadResource預(yù)加載資源
    unloadResource卸載資源
    destroyAudioEffectPlayer銷毀音效播放器實(shí)例

    7 音效播放器與媒體播放器有什么區(qū)別?

    • 媒體播放器主要用于播放視頻及較長的音樂,支持播放網(wǎng)絡(luò)資源。同一時(shí)間最多支持創(chuàng)建 4 個(gè)播放器實(shí)例,一個(gè)實(shí)例只能播放一個(gè)音視頻。
    • 音效播放器主要用于播放時(shí)間較短的音效,不支持播放網(wǎng)絡(luò)資源。同一時(shí)間只支持創(chuàng)建一個(gè)音效播放器實(shí)例,音效播放器支持多路音效并發(fā)播放,一個(gè)實(shí)例最多同時(shí)播放 12 個(gè)音效。

    獲取Demo

    獲取本文的Demo、開發(fā)文檔、技術(shù)支持。
    獲取SDK的商務(wù)活動、熱門產(chǎn)品。
    注冊即構(gòu)ZEGO開發(fā)者帳號,快速開始。

    總結(jié)

    以上是生活随笔為你收集整理的浅谈 Android 娱乐直播/游戏特殊音效如何实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。