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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

手把手教你用 iOS SDK做直播/游戏特殊音效

發布時間:2024/3/24 编程问答 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手把手教你用 iOS SDK做直播/游戏特殊音效 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 功能簡介

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

ZegoExpress SDK 提供音效文件播放器,通過 ZegoAudioEffectPlayer 統一管理音效,支持音效播放(可以多音效重疊播放)、播放控制(如暫停播放、音量調節、設置播放進度)、預加載音效等功能。

2 支持格式

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

3 示例源碼下載

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

相關源碼請查看 “/ZegoExpressExample/Examples/AdvancedAudioProcessing/AudioEffectPlayer” 目錄下的文件。

4 前提條件

在實現音效文件播放器功能之前,請確保:

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

5 使用步驟

5.1 創建音效播放器

調用 ZegoExpressEngine 的 createAudioEffectPlayer 方法創建音效播放器實例。

引擎當前只支持同時創建一個實例,超出后將返回 nil。

@property (nonatomic, strong) ZegoAudioEffectPlayer *audioEffectPlayer; self.audioEffectPlayer = [[ZegoExpressEngine sharedEngine] createAudioEffectPlayer]; if (!self.audioEffectPlayer) {NSLog(@"創建音效播放器失敗"); }

5.2 播放控制

5.2.1 (可選)為音效播放器設置事件回調

音效播放器事件回調設置

可以根據需要調用音效播放器的 setEventHandler 方法為播放器設置事件回調,用于監聽“音效播放狀態改變”等通知。

[self.audioEffectPlayer setEventHandler:self]; - (void)audioEffectPlayer:(ZegoAudioEffectPlayer *)audioEffectPlayer audioEffectID:(unsigned int)audioEffectID playStateUpdate:(ZegoAudioEffectPlayState)state errorCode:(int)errorCode {NSLog(@"Play state update. ID:%d, state:%lu, err:%d", audioEffectID, (unsigned long)state, (int)errorCode); }

5.2.2 開始播放

調用 start 方法播放音效,目前僅支持同時播放 12 個,且只能為本地文件,不支持播放網絡資源。 其中 “audioEffectID” 需要保持全局唯一。

  • 如果已通過 loadResource 方法預先加載了音效,則只需要傳入預加載時的 “audioEffectID”,“path”(音效資源的路徑)字段傳空即可。
  • 若需要重復播放可以通過 ZegoAudioEffectPlayConfig 中 “playCount” 配置重復次數。如果設置為 “0”,則表示無限重復播放,直到用戶手動調用 stop 停止。
// 此處示例獲取已存放于 App Bundle 內的 test.wav 資源 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"wav"];ZegoAudioEffectPlayConfig *config = [[ZegoAudioEffectPlayConfig alloc] init]; config.playCount = 1; // 播放一次 config.isPublishOut = YES; // 播放混入推流中// 使用 0 作為此次的 audioEffectID [self.audioEffectPlayer start:0 path:filePath config:config];

5.2.3 暫停/恢復/停止播放

  • 調用 pause 指定的音效,調用 pauseAll 方法則暫停所有正在播放的音效。
  • 音效暫停播放后,調用 resume 方法可以恢復播放 “audioEffectID” 指定的音效,調用 resumeAll 方法則恢復所有已暫停音效。
  • 調用 stop 指定的音效,調用 stopAll 方法則停止播放所有音效。
  • // 暫停 0 號 audioEffectID 資源的播放 [self.audioEffectPlayer pause:0];// 恢復 0 號 audioEffectID 資源的播放 [self.audioEffectPlayer resume:0];// 停止 0 號 audioEffectID 資源的播放 [self.audioEffectPlayer stop:0];// 暫停所有資源的播放 [self.audioEffectPlayer pauseAll];// 恢復所有資源的播放 [self.audioEffectPlayer resumeAll];// 停止所有資源的播放 [self.audioEffectPlayer stopAll];

    5.2.4 調節音量

  • 調用 setVolume 方法可以設置 “audioEffectID” 指定的音效音量,取值范圍為 [0, 200],默認值為 “100”。
  • 調用 setVolumeAll 方法則同時設置所有音效音量,取值范圍為 [0, 200],默認值為 “100”。
  • // 設置 0 號 audioEffectID 的音量為 100 [self.audioEffectPlayer setVolume:100 audioEffectID:0];// 設置所有資源的音量為 100 [self.audioEffectPlayer setVolumeAll:100];

    5.2.5 播放進度控制

  • 調用 getTotalDuration 方法獲取單個音效的總時長。
  • 調用 getCurrentProgress 方法獲取音效當前播放進度。
  • 調用 seekTo 方法可以根據需要設置播放進度。
  • // 獲取 0 號 audioEffectID 的總時長 unsigned long long totalDuration = [self.audioEffectPlayer getTotalDuration:0];// 獲取 0 號 audioEffectID 的當前播放進度 unsigned long long currentProgress = [self.audioEffectPlayer getCurrentProgress:0];// 設置 0 號 audioEffectID 的播放進度為總進度的一半 [self.audioEffectPlayer seekTo:(unsigned long long)(totalDuration / 2) audioEffectID:0 callback:^(int errorCode) {NSLog(@"seekTo result: %d", errorCode); }];

    5.3 (可選)預加載資源

    預加載資源

    在頻繁播放相同音效場景中,SDK 為了優化重復讀文件并解碼的性能,提供了預加載音效文件到內存中的功能。

    調用 loadResource 方法加載音效資源,可通過 “callback” 參數來監聽加載的結果,顯示加載成功后方可播放。最多支持同時預加載 15 個本地音效文件(不支持網絡資源),并且單個音效文件時長不能超過 30 s,否則加載會報錯。

    當加載的音效使用完成后,可以調用 unloadResource 接口卸載,以釋放相關資源。否則 SDK 將在 ZegoAudioEffectPlayer 實例釋放時會自動卸載已加載的音效。

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

    // 此處示例獲取已存放于 App Bundle 內的 test.wav 資源 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"wav"];[self.audioEffectPlayer loadResource:filePath audioEffectID:0 callback:^(int errorCode) {NSLog(@"loadResource result, errorCode: %d", errorCode); }];

    5.4 銷毀媒體播放器

    使用完音效播放器后,需要及時調用 destroyAudioEffectPlayer 方法銷毀,釋放該播放器占用的資源。

    [[ZegoExpressEngine sharedEngine] destroyAudioEffectPlayer:self.audioEffectPlayer];

    6 API 參考列表

    方法描述
    createAudioEffectPlayer創建音效播放器實例
    setEventHandler設置音效播放器回調
    start播放音效
    pause暫停播放單個音效
    pauseAll暫停播放所有音效
    resume恢復播放單個音效
    resumeAll恢復播放所有音效
    stop停止播放單個音效
    stopAll停止播放所有音效
    setVolume調節音效音量
    setVolumeAll調節所有音效音量
    getTotalDuration控制播放進度
    getCurrentProgress獲取當前播放進度
    seekTo設置指定的播放進度
    loadResource預加載資源
    unloadResource卸載資源
    destroyAudioEffectPlayer銷毀音效播放器實例

    7 音效播放器與媒體播放器有什么區別?

    • 媒體播放器主要用于播放視頻及較長的音樂,支持播放網絡資源。同一時間最多支持創建 4 個播放器實例,一個實例只能播放一個音視頻。
    • 音效播放器主要用于播放時間較短的音效,不支持播放網絡資源。同一時間只支持創建一個音效播放器實例,音效播放器支持多路音效并發播放,一個實例最多同時播放 12 個音效。

    獲取更多支持

    獲取本文的Demo、開發文檔、技術支持。
    獲取SDK的商務活動、熱門產品。
    注冊即構ZEGO開發者帳號,快速開始。

    總結

    以上是生活随笔為你收集整理的手把手教你用 iOS SDK做直播/游戏特殊音效的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。