speech_to_text_alibaba.dart 3.83 KB
import 'speech_to_text_alibaba_method_channel.dart';
import 'speech_to_text_alibaba_platform_interface.dart';

class SpeechToTextAlibaba {
  /// 获取平台实现实例
  static SpeechToTextAlibabaPlatform get _platform =>
      SpeechToTextAlibabaPlatform.instance;

  /// 设置引擎回调函数
  ///
  /// [onCallBegin] 通话开始回调
  /// [onCallEnd] 通话结束回调
  /// [onError] 错误回调,参数为错误信息
  /// [onUserSpeaking] 用户说话状态回调,true 表示正在说话
  /// [onNetworkQuality] 网络质量回调,参数为质量等级(0-6)
  /// [onVideoSizeChanged] 视频尺寸变化回调,包含宽高信息
  /// [onVoiceIdChanged] 声音 ID 变化回调
  /// [onRoleChanged] 角色变化回调
  /// [onAIAgentStateChanged] AI 代理状态变化回调
  /// [onUserAsrSubtitleNotify] 用户语音识别字幕通知回调
  /// [onAIAgentSubtitleNotify] AI 代理字幕通知回调
  /// [onVolumeChanged] 音量变化回调
  static void setEngineEventHandler({
    void Function()? onCallBegin,
    void Function()? onCallEnd,
    void Function(String)? onError,
    void Function(bool)? onPermission,
    void Function(bool)? onStopping,
    void Function(double)? onNuiAudioRMSChanged,
    void Function(String)? onEventAsrStarted,
    void Function(String)? onEventAsrResult,
    void Function(String)? onEventAsrPartitalResult,
    void Function(Map<String, dynamic>)? onVolumeChanged,
  }) {
    if (_platform is MethodChannelSpeechToTextAlibaba) {
      (_platform as MethodChannelSpeechToTextAlibaba).setEngineCallback(
        onCallBegin: onCallBegin,
        onCallEnd: onCallEnd,
        onError: onError,
        onPermission: onPermission,
        onStopping: onStopping,
        onNuiAudioRMSChanged: onNuiAudioRMSChanged,
        onEventAsrStarted: onEventAsrStarted,
        onEventAsrResult: onEventAsrResult,
        onEventAsrPartitalResult: onEventAsrPartitalResult,
        onVolumeChanged: onVolumeChanged,
      );
    }
  }

  /// 初始化引擎
  /// [userId] 用户ID
  static Future<void> initialize(
      {required String appKey, required String token}) {
    return _platform.initialize(appKey: appKey, token: token);
  }

  /// 发起通话
  /// [rtcToken] RTC通话令牌
  /// [aiAgentInstanceId] AI代理实例ID
  /// [aiAgentUserId] AI代理用户ID
  /// [channelId] 通话频道ID
  static Future<void> call({
    required String rtcToken,
    required String aiAgentInstanceId,
    required String aiAgentUserId,
    required String channelId,
  }) {
    return _platform.call(
      rtcToken: rtcToken,
      aiAgentInstanceId: aiAgentInstanceId,
      aiAgentUserId: aiAgentUserId,
      channelId: channelId,
    );
  }

  /// 开始一句话识别
  static Future<void> startDialog() => _platform.startDialog();

  /// 结束识别
  static Future<void> stopDialog() => _platform.stopDialog();

  /// 页面dispose的时候释放
  static Future<void> release() => _platform.release();

  /// 切换麦克风状态
  /// [on] true开启,false关闭
  static Future<void> switchMicrophone(bool on) =>
      _platform.switchMicrophone(on);

  /// 切换扬声器状态
  /// [enable] true开启,false关闭
  static Future<void> enableSpeaker(bool enable) =>
      _platform.enableSpeaker(enable);

  /// 打断AI说话
  static Future<void> interruptSpeaking() => _platform.interruptSpeaking();

  /// 启用/禁用语音打断功能
  /// [enable] true启用,false禁用
  static Future<void> enableVoiceInterrupt(bool enable) =>
      _platform.enableVoiceInterrupt(enable);

  /// 切换AI机器人声音
  /// [voiceId] 声音ID
  static Future<void> switchRobotVoice(String voiceId) =>
      _platform.switchRobotVoice(voiceId);

  /// 设置AI角色
  /// [roleId] 角色ID
  /// [roleName] 角色名称
  static Future<void> setAIRole(String roleId, String roleName) =>
      _platform.setAIRole(roleId, roleName);
}