语音消息处理
更新时间: 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 | 音频本地地址 |
此文档是否对你有帮助?