语音录制及播放


多媒体管理 NIMMediaManager 提供了音频播放、高清语音录制的功能。需要注意的是 NIM SDK 中的语音播放和录制仅支持 aac 和 amr,如果需要更多格式的支持,APP 需要自己实现,但并不推荐。

播放音频

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

NIMAudioOutputDevice 列表

参数 说明
NIMAudioOutputDeviceReceiver 0 听筒
NIMAudioOutputDeviceSpeaker 1 扬声器
@protocol NIMMediaManager <NSObject>
/**
 *  是否正在播放音频
 *
 */
- (BOOL)isPlaying
@end
@protocol NIMMediaManager <NSObject>
/**
 *  播放音频文件
 *
 *  @discussion 开始播放,NIMMediaManagerDelegate中的playAudio:didBeganWithError:回调会被触发,播放完成后, NIMMediaManagerDelegate中的playAudio:didCompletedWithError:回调会被触发
 *  @param filepath 音频文件路径
 */
- (void)play:(NSString *)filepath;
@end
参数 类型 说明
filepath NSString 音频文件路径

其中 filePath 为音频文件的路径,该操作会触发以下回调:

初始化工作完成,准备开始播放音频的时候会触发

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

参数列表

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

音频播放结束的时候会触发

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

参数列表

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

音频播放结束的时候会触发

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

该操作会触发回调:

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

录制音频

@protocol NIMMediaManager <NSObject>
/**
 *  是否正在录音
 *
 */
- (BOOL)isRecording
@end
@protocol NIMMediaManager <NSObject>
/**
 *  开始录制音频
 *
 *  @param duration 最长录音时间
 *  @discussion 开始录音,NIMMediaManagerDelegate中的recordAudio:didBeganWithError:回调会被触发,录音完成后, NIMMediaManagerDelgate中的recordAudio:didCompletedWithError:回调会被触发
 *              默认使用 aac 编码格式
 */
- (void)recordForDuration:(NSTimeInterval)duration;
@end

其中 duration 限制了录音的最大时长,该操作会触发以下回调:

初始化工作完成,准备开始录制的时候会触发

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

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

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

按照一定的时间间隔触发

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

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

@property (nonatomic, assign) NSTimeInterval recordProgressUpdateTimeInterval

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

该操作会触发

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

该操作会触发

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

获取峰值

@protocol NIMMediaManager <NSObject>
/**
 *  获取录音分贝
 *
 */
- (float)recordPeakPower
@end

获取平均值

@protocol NIMMediaManager <NSObject>
/**
 *  获取录音分贝
 *
 */
- (float)recordAveragePower
@end

来电打断

@protocol NIMMediaManagerDelegate <NSObject>
/**
 *  播放音频开始被打断回调
 */
- (void)playAudioInterruptionBegin

/**
 *  录音开始被打断回调
 */
- (void)recordAudioInterruptionBegin
@end
@protocol NIMMediaManagerDelegate <NSObject>
/**
 *  播放音频结束被打断回调
 */
- (void)playAudioInterruptionEnd

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