iOS

语音消息处理

更新时间: 2024/03/14 17:08:37

针对语音消息,SDK 封装了录制与播放的方法供开发者使用。多媒体控制协议(NIMMediaManager)提供了音频播放、高清语音录制的功能。

播放

播放音频

objc@protocol NIMMediaManager <NSObject>
/**
 *  播放音频文件
 *
 *  @discussion 开始播放,NIMMediaManagerDelegate中的playAudio:didBeganWithError:回调会被触发,播放完成后, NIMMediaManagerDelegate中的playAudio:didCompletedWithError:回调会被触发
 *  @param filepath 音频文件路径
 */
- (void)play:(NSString *)filepath;
@end
参数 类型 说明
filepath NSString 音频文件路径

其中 filePath 为音频文件的路径。

开始播放音频的回调

objc@protocol NIMMediaManagerDelegate <NSObject>
/**
 *  开始播放音频的回调
 *
 *  @param filePath 音频文件路径
 *  @param error    错误信息
 */
- (void)playAudio:(NSString *)filePath didBeganWithError:(nullable NSError *)error;
@end

音频播放进度更新回调

objc@protocol NIMMediaManagerDelegate <NSObject>
/**
 *  音频播放进度更新回调
 *
 *  @param filePath 音频文件路径
 *  @param value    播放进度 0.0 - 1.0
 */
- (void)playAudio:(NSString *)filePath progress:(float)value;
@end

音频播放完成的回调

当音频播放自然完成时,将走入以下回调:

objc@protocol NIMMediaManagerDelegate <NSObject>
/**
 *  音频播放完成后的回调
 *
 *  @param filePath 音频文件路径
 *  @param error    错误信息
 */
- (void)playAudio:(NSString *)filePath didCompletedWithError:(NSError *)error
@end

参数列表

参数 类型 说明
filepath NSString 音频文件路径
error NSError 错误信息

主动停止音频播放回调

当主动停止音频播放时,将走入以下回调:

objc@protocol NIMMediaManagerDelegate <NSObject>
/**
 *  音频播放完成后的回调
 *
 *  @param filePath 音频文件路径
 *  @param error    错误信息
 */
- (void)stopPlayAudio:(NSString *)filePath didCompletedWithError:(nullable NSError *)error;
@end

判断是否正在播放音频

objc@protocol NIMMediaManager <NSObject>
/**
 *  是否正在播放音频
 */
- (BOOL)isPlaying
@end

切换音频的输出设备

objc@protocol NIMMediaManager <NSObject>
/**
 *  切换音频输出设备
 *
 *  @param outputDevice 音频输出设备
 *
 *  @return 是否切换成功
 */
- (BOOL)switchAudioOutputDevice:(NIMAudioOutputDevice)outputDevice
@end

NIMAudioOutputDevice 列表

参数 说明
NIMAudioOutputDeviceReceiver 0 听筒
NIMAudioOutputDeviceSpeaker 1 扬声器

停止播放音频

objc@protocol NIMMediaManager <NSObject>
/**
 *  停止播放音频
 *
 */
- (void)stopPlay
@end

该操作会触发回调上文音频播放结束的回调。

贴耳传感器监听

objc@protocol NIMMediaManager <NSObject>
/**
 *  在播放声音的时候,如果手机贴近耳朵,是否需要自动切换成听筒播放
 *
 */
- (void)setNeedProximityMonitor:(BOOL)needProximityMonitor;
@end

录制

SDK 中的语音录制仅支持 aac 和 amr 格式。如果需要更多格式的支持,需要应用上层自行实现,但并不推荐。

录制音频

objc@protocol NIMMediaManager <NSObject>
/**
 *  开始录制音频
 *  @param type 音频类型,aac或amr。
 *  @param duration 最长录音时间
 *  @discussion 开始录音,NIMMediaManagerDelegate中的recordAudio:didBeganWithError:回调会被触发,录音完成后, NIMMediaManagerDelgate中的recordAudio:didCompletedWithError:回调会被触发
 */
- (void)record:(NIMAudioType)type duration:(NSTimeInterval)duration;
@end

开始录制音频的回调

objc@protocol NIMMediaManagerDelegate <NSObject>
/**
 *  开始录制音频的回调
 *
 *  @param filePath 录制的音频的文件路径
 *  @param error    错误信息
 *  @discussion 如果录音失败,filePath 有可能为 nil
 */
- (void)recordAudio:(NSString *)filePath didBeganWithError:(NSError *)error
@end

录制音频完成后的回调

当到录音时长达到设置的最大时长,或者手动停止录音会触发。

objc@protocol NIMMediaManagerDelegate <NSObject>
/**
 *  录制音频完成后的回调
 *
 *  @param filePath 录制完成的音频文件路径
 *  @param error    错误信息
 */
- (void)recordAudio:(NSString *)filePath didCompletedWithError:(NSError *)error
@end

音频录制进度更新回调

objc@protocol NIMMediaManagerDelegate <NSObject>
/**
 *  音频录制进度更新回调
 *
 *  @param currentTime 当前录制的时间
 */
- (void)recordAudioProgress:(NSTimeInterval)currentTime
@end

其中 currentTime 为当前的录音时长,触发该回调的时间间隔可以通过以下属性设置,默认为 0.3 秒。

objc@protocol NIMMediaManager <NSObject>
/**
 *  录音进度更新间隔。如果值大于0,则会按照相应间隔调用recordAudioProgress:回调,默认值为0.3。
 */
@property (nonatomic, assign) NSTimeInterval recordProgressUpdateTimeInterval
@end

停止录制音频

objc@protocol NIMMediaManager <NSObject>
/**
 *  停止录制音频
 *
 *  @discussion 停止录音后NIMMediaManagerDelegate中的recordAudio:didCompletedWithError:回调会被触发
 */
- (void)stopRecord
@end

判断是否正在录制音频

objc@protocol NIMMediaManager <NSObject>
/**
 *  是否正在录音
 *
 */
- (BOOL)isRecording
@end

取消录音

objc@protocol NIMMediaManager <NSObject>
/**
 *  取消录制音频
 *
 */
- (void)cancelRecord
@end

录音被取消的回调

objc@protocol NIMMediaManagerDelegate <NSObject>
/**
 *  录音被取消的回调
 */
- (void)recordAudioDidCancelled
@end

获取录音分贝

  • 获取录音峰值分贝
objc@protocol NIMMediaManager <NSObject>
/**
 *  获取录音峰值分贝
 *
 */
- (float)recordPeakPower
@end
  • 获取录音平均分贝
objc@protocol NIMMediaManager <NSObject>
/**
 *  获取录音平均分贝
 *
 */
- (float)recordAveragePower
@end

来电打断

  • 来电时会根据正在播放音频还是录音,分别触发
objc@protocol NIMMediaManagerDelegate <NSObject>
/**
 *  播放音频开始被打断回调
 */
- (void)playAudioInterruptionBegin

/**
 *  录音开始被打断回调
 */
- (void)recordAudioInterruptionBegin
@end
  • 通话结束返回应用会分别触发
objc@protocol NIMMediaManagerDelegate <NSObject>
/**
 *  播放音频结束被打断回调
 */
- (void)playAudioInterruptionEnd

/**
 *  录音结束被打断回调
 */
- (void)recordAudioInterruptionEnd
@end

语音转文字

如需使用语音转文字功能,请通过云信控制台应用管理 > 产品功能 > IM即时通讯 > 全局功能申请开通语音识别功能。如果未开通功能的情况下调用接口,将返回 403 错误码。

语音转文字的原理:

  • 录制音频文件(目前最大支持60秒)。
  • 上传到云信存储服务器,返回文件url。
  • 通过语音转文字接口传入该url和相关参数,返回转换后的文字。
objc@protocol NIMMediaManager <NSObject>
/**
 *  语音转文字
 *
 */
- (void)transAudioToText:(NIMAudioToTextOption *)option 
                  result:(NIMAudioToTextBlock)result;
@end

其中NIMAudioToTextOption各属性如下:

属性 含义
url 音频URL。目前只支持云信服务器的URL,不支持外链。
filepath 音频本地地址
此文档是否对你有帮助?
有帮助
去反馈
  • 播放
  • 播放音频
  • 开始播放音频的回调
  • 音频播放进度更新回调
  • 音频播放完成的回调
  • 主动停止音频播放回调
  • 判断是否正在播放音频
  • 切换音频的输出设备
  • 停止播放音频
  • 贴耳传感器监听
  • 录制
  • 录制音频
  • 开始录制音频的回调
  • 录制音频完成后的回调
  • 音频录制进度更新回调
  • 停止录制音频
  • 判断是否正在录制音频
  • 取消录音
  • 录音被取消的回调
  • 获取录音分贝
  • 来电打断
  • 语音转文字