ToB企服应用市场:ToB评测及商务社交产业平台

标题: iOS直播/游戏怎么利用特殊音效制造娱乐效果? [打印本页]

作者: 金歌    时间: 2022-6-20 16:30
标题: iOS直播/游戏怎么利用特殊音效制造娱乐效果?
1 功能简介

我们在直播中,为了增强真实感,烘托场景氛围需要播放的简短效果音。例如:掌声、笑声、礼物音效、提示音等。在游戏中,有时也需要播放子弹声、碰撞打击声等。
ZegoExpress SDK 提供音效文件播放器,通过 ZegoAudioEffectPlayer 统一管理音效,支持音效播放(可以多音效重叠播放)、播放控制(如暂停播放、音量调节、设置播放进度)、预加载音效等功能。
2 支持格式

音效文件播放器支持播放 MP3、M4A、AAC、WAV 格式的本地音频文件。
3 示例源码下载

请参考 下载示例源码 获取源码。
相关源码请查看 “/ZegoExpressExample/Examples/AdvancedAudioProcessing/AudioEffectPlayer” 目录下的文件。
4 前提条件

在实现音效文件播放器功能之前,请确保:
5 使用步骤

5.1 创建音效播放器

调用 ZegoExpressEngine 的 createAudioEffectPlayer 方法创建音效播放器实例。
引擎当前只支持同时创建一个实例,超出后将返回 nil。
  1. @property (nonatomic, strong) ZegoAudioEffectPlayer *audioEffectPlayer;
复制代码
  1. self.audioEffectPlayer = [[ZegoExpressEngine sharedEngine] createAudioEffectPlayer];
  2. if (!self.audioEffectPlayer) {
  3.     NSLog(@"创建音效播放器失败");
  4. }
复制代码
5.2 播放控制

5.2.1 (可选)为音效播放器设置事件回调

    音效播放器事件回调设置可以根据需要调用音效播放器的 setEventHandler 方法为播放器设置事件回调,用于监听“音效播放状态改变”等通知。
  1. [self.audioEffectPlayer setEventHandler:self];
复制代码
  1. - (void)audioEffectPlayer:(ZegoAudioEffectPlayer *)audioEffectPlayer audioEffectID:(unsigned int)audioEffectID playStateUpdate:(ZegoAudioEffectPlayState)state errorCode:(int)errorCode {
  2.     NSLog(@"Play state update. ID:%d, state:%lu, err:%d", audioEffectID, (unsigned long)state, (int)errorCode);
  3. }
复制代码
5.2.2 开始播放

调用 start 方法播放音效,目前仅支持同时播放 12 个,且只能为本地文件,不支持播放网络资源。 其中 “audioEffectID” 需要保持全局唯一。
  1. // 此处示例获取已存放于 App Bundle 内的 test.wav 资源
  2. NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"wav"];
  3. ZegoAudioEffectPlayConfig *config = [[ZegoAudioEffectPlayConfig alloc] init];
  4. config.playCount = 1; // 播放一次
  5. config.isPublishOut = YES; // 播放混入推流中
  6. // 使用 0 作为此次的 audioEffectID
  7. [self.audioEffectPlayer start:0 path:filePath config:config];
复制代码
5.2.3 暂停/恢复/停止播放

  1. // 暂停 0 号 audioEffectID 资源的播放
  2. [self.audioEffectPlayer pause:0];
  3. // 恢复 0 号 audioEffectID 资源的播放
  4. [self.audioEffectPlayer resume:0];
  5. // 停止 0 号 audioEffectID 资源的播放
  6. [self.audioEffectPlayer stop:0];
  7. // 暂停所有资源的播放
  8. [self.audioEffectPlayer pauseAll];
  9. // 恢复所有资源的播放
  10. [self.audioEffectPlayer resumeAll];
  11. // 停止所有资源的播放
  12. [self.audioEffectPlayer stopAll];
复制代码
5.2.4 调节音量

  1. // 设置 0 号 audioEffectID 的音量为 100
  2. [self.audioEffectPlayer setVolume:100 audioEffectID:0];
  3. // 设置所有资源的音量为 100
  4. [self.audioEffectPlayer setVolumeAll:100];
复制代码
5.2.5 播放进度控制

  1. // 获取 0 号 audioEffectID 的总时长
  2. unsigned long long totalDuration = [self.audioEffectPlayer getTotalDuration:0];
  3. // 获取 0 号 audioEffectID 的当前播放进度
  4. unsigned long long currentProgress = [self.audioEffectPlayer getCurrentProgress:0];
  5. // 设置 0 号 audioEffectID 的播放进度为总进度的一半
  6. [self.audioEffectPlayer seekTo:(unsigned long long)(totalDuration / 2) audioEffectID:0 callback:^(int errorCode) {
  7.     NSLog(@"seekTo result: %d", errorCode);
  8. }];
复制代码
5.3 (可选)预加载资源

    预加载资源在频繁播放相同音效场景中,SDK 为了优化重复读文件并解码的性能,提供了预加载音效文件到内存中的功能。
调用 loadResource 方法加载音效资源,可通过 “callback” 参数来监听加载的结果,显示加载成功后方可播放。最多支持同时预加载 15 个本地音效文件(不支持网络资源),并且单个音效文件时长不能超过 30 s,否则加载会报错。
当加载的音效使用完成后,可以调用 unloadResource 接口卸载,以释放相关资源。否则 SDK 将在 ZegoAudioEffectPlayer 实例释放时会自动卸载已加载的音效。
预加载为非必须操作,为了提高性能或者需要反复播放某个特定的音效时推荐使用。
  1. // 此处示例获取已存放于 App Bundle 内的 test.wav 资源
  2. NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"wav"];
  3. [self.audioEffectPlayer loadResource:filePath audioEffectID:0 callback:^(int errorCode) {
  4.     NSLog(@"loadResource result, errorCode: %d", errorCode);
  5. }];
复制代码
5.4 销毁媒体播放器

使用完音效播放器后,需要及时调用 destroyAudioEffectPlayer 方法销毁,释放该播放器占用的资源。
  1. [[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 音效播放器与媒体播放器有什么区别?

获取更多支持

获取本文的Demo、开发文档、技术支持。
获取SDK的商务活动、热门产品。
注册即构ZEGO开发者帐号,快速开始。

来源:https://www.cnblogs.com/zegodeveloper/p/16284636.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4