跳到主要内容

语音消息

用户可以通过 Global IM UIKit 内置的输入组件录制并发送语音消息。消息将出现在会话页面的消息列表组件中。SDK 默认生成和发送的消息包含高清语音消息内容对象 RCHQVoiceMessage(类型标识:RC:HQVcMsg)。

hqvoice-message(width=250)

局限性

语音输入功能目前存在以下限制:

  • Global IM UIKit 仅单聊会话和群聊会话支持发送语音消息。
  • 用户必须录制至少为 1 秒的音频内容,且必须短于 60 秒钟。
  • 用户在录制语音消息时无法暂停。

用法

在输入栏组件中默认启用语音消息输入功能,长按语音按钮录制语音,松开发送。

输入文本时,录音按钮会切换成发送按钮,当输入文本为空后,会再次切换为录音按钮。

语音消息展示

消息列表中,语音消息会展示分贝、时长等信息,用户可以通过点击播放按钮查看和播放语音消息,消息可多次播放。当语音消息第一次展示时,会自动下载语音文件,并在本地缓存语音文件。

语音分贝

在录音时,会将声音的分贝信息记录下来,随高清语音消息一起发送。分贝信息会以 JSON 格式转换成字符串放在 RCHQVoiceMessageextra 中,格式如下:

{
"HQVoicePowers": "level,level,level,level,..."
}

定制化

语音消息的定制化涉及到输入栏的录音按钮图标、录音事件、语音消息展示 UI。

自定义语音消息 UI

SDK 默认生成和发送高清语音消息(RC:HQVoiceMsg),使用 RCVoiceMessageCell 模板展示在消息列表中。开发者可以创建继承 RCVoiceMessageCell 的 Cell,自定义语音消息的展示。详见修改消息的展示样式

处理录音相关事件

Global IM UIKit 在 RCChatViewController 中实现了录音相关的事件:

@protocol RCVoiceRecordDelegate <NSObject>

@optional

/// 将要开始语音录制
- (BOOL)voiceRecordWillBegan;

/// 已经开始语音录制
- (void)voiceRecordDidBegan;

/// 取消语音录制
- (void)voiceRecordDidCancel;

/// 语音录制结束
- (void)voiceRecordDidEnd:(RCAudioModel *)audioModel;

/// 语音录制中断
- (void)voiceRecordDidInterrupt:(RCAudioModel *)audioModel;

/// 语音录制失败
- (void)voiceRecordDidFailed:(NSError *)error;

@end

自定义录音按钮 UI

在输入组件中,默认显示录音按钮,由 recordItem 控制,开发者可以设置图片和事件:


- (void)viewDidLoad {
[super viewDidLoad];
self.inputBar.recordItem.image = CustomImage;
self.inputBar.recordItem.action = ^(RCBarItem *item) {
// custom action
};
self.inputBar.rightItems = @[self.inputBar.rightItems];
}