语音消息处理
更新时间: 2024/03/07 11:22:19
NIM SDK 提供高清的语音录制功能,用于处理语音消息。
Flutter SDK 未在 macOS 和 Web 上支持语音处理功能。
实现语音录制
NIM SDK 提供AudioService 类,支持语音的录制。
前提条件
已开启操作系统的麦克风权限。
实现方法
-
注册
onAudioRecordStatus事件流,监听语音录制状态变化。在回调的RecordInfo中的recordState枚举定义了录制过程中的不同状态。字段类型 说明 READY枚举 录音器已就绪,提供此接口用于在录音前关闭本地音视频播放(可选)(Windows 暂不支持该参数) START枚举 开始录音回调 REACHED_MAX枚举 到达指定的最长录音时间(Windows 暂不支持该参数) SUCCESS枚举 录音成功 FAIL枚举 录音出错(Windows 暂不支持该参数) CANCEL枚举 用户主动取消录音 dart/// 监听录音过程事件 NimCore.instance.audioService.onAudioRecordStatus.listen((RecordInfo recordInfo) { }); -
调用
startRecord方法开始录制。参数 类型 说明 recordTypeAudioOutputFormat 录制音频类型(aac/amr) maxDurationint 最长录音时长,到该长度后,会自动停止录音,默认为 120 秒 dart/// 启动(开始)录音,如果成功,会按照顺序回调`READY`和`START`。 // maxLength,最长录音时长,到该长度后,会自动停止录音, 默认120s NimCore.instance.audioService.startRecord(AudioOutputFormat.AAC,1000); -
(可选)按需调用如下方法。
方法 返回值类型 说明 getAmplitudeint 获取当前录音时最大振幅, 40ms 更新一次数据(Windows 暂不支持) isAudioRecordingbool 是否正在录音(Windows 暂不支持) cancelRecordbool 取消录音 获取最大振幅dart/// 获取当前录音时最大振幅, 40ms更新一次数据。 NimCore.instance.audioService.getAmplitude();判断是否正在录音dart/// 是否正在录音 NimCore.instance.audioService.isAudioRecording();取消录音dart
NimCore.instance.audioService.cancelRecord(); -
调用
stopRecord停止录音。dart// 结束录音 NimCore.instance.audioService.stopAudioRecord();
实现语音转文字
NIM SDK 支持将音频文件的语音信息转为文字。
语音转文字的原理:
- 录制音频文件 (目前最大支持 60 秒)。
- 上传到云信存储服务器,返回文件 URL。
- 通过语音转文字接口传入该 URL 和相关参数,返回转换后的文字。
前提条件
如需使用语音转文字功能,请通过云信控制台应用管理 > 产品功能 > IM即时通讯 > 全局功能申请开通语音识别功能。如果未开通功能的情况下调用接口,将返回 403 错误码。
实现方法
调用messageService类中的voiceToText方法进行语音转文字。
如果未开通功能的情况下调用接口,将返回 403。
dartvar result = await NimCore.instance.messageService
.voiceToText(message);
此文档是否对你有帮助?





