# ali_ai_call **Repository Path**: Chenzhenya/ali_ai_call ## Basic Information - **Project Name**: ali_ai_call - **Description**: No description available - **Primary Language**: Unknown - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-16 - **Last Updated**: 2025-06-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ali_ai_call 阿里云 AI 通话 Flutter 插件,支持实时语音对话、语音识别、声纹识别等功能。 ## 功能特性 - AI 语音通话 - 声纹识别 - 实时语音识别(ASR) - 语音合成(TTS) - 网络质量监控 - 麦克风/扬声器控制 - AI语音打断 - 多角色支持 - 多音色支持 ## 环境要求 - Flutter: >=3.3.0 - iOS: >= 12.0 - Android: minSdkVersion 19 ## 安装 1. 添加依赖到 `pubspec.yaml`: ```yaml dependencies: ali_ai_call: ^1.0.0 ``` 2. iOS 配置: 在 `ios/Runner/Info.plist` 添加以下权限: ```xml NSMicrophoneUsageDescription 需要访问麦克风进行语音通话 NSCameraUsageDescription 需要访问相机进行视频通话 ``` 3. Android 配置: 在 `android/app/src/main/AndroidManifest.xml` 添加权限: ```xml ``` ## 使用方法 ### 后端服务需要正常运行,可以在本项目中找到Server配置文件修改配置文件中的配置然后运行一下 ### 初始化 ```dart await AliAiCall.initEngine(userId: "your_user_id"); ``` ### 设置回调 ```dart AliAiCall.setEngineEventHandler( onCallBegin: () { print('通话开始'); }, onCallEnd: () { print('通话结束'); }, onError: (error) { print('发生错误: $error'); }, onUserAsrSubtitleNotify: (Map data) { // 用户语音识别结果 String text = data['text']; bool isSentenceEnd = data['isSentenceEnd']; int sentenceId = data['sentenceId']; VoicePrintStatusCode voicePrintStatus = data['voicePrintStatus']; switch (voicePrintStatus) { case VoicePrintStatusCode.speakerRecognized: print('说话人已识别'); break; case VoicePrintStatusCode.speakerNotRecognized: print('说话人未识别'); break; case VoicePrintStatusCode.disable: print('声纹识别已禁用'); break; case VoicePrintStatusCode.enableWithoutRegister: print('声纹识别已启用但未注册'); break; case VoicePrintStatusCode.unknown: print('未知状态'); break; } print('用户语音识别: $text'); }, onAIAgentSubtitleNotify: (Map data) { // AI回复文本 String text = data['text']; bool isSentenceEnd = data['isSentenceEnd']; int userAsrSentenceId = data['userAsrSentenceId']; print('AI回复: $text'); }, onVolumeChanged: (Map data) { // 音量变化 String uid = data['uid']; int volume = data['volume']; print('音量变化: $volume'); }, ); ``` ### 开始通话 ```dart await AliAiCall.call( rtcToken: "your_rtc_token", aiAgentInstanceId: "your_instance_id", aiAgentUserId: "your_agent_user_id", channelId: "your_channel_id", ); ``` ### 结束通话 ```dart await AliAiCall.hangup(); ``` ### 音频控制 ```dart // 切换麦克风 await AliAiCall.switchMicrophone(true/false); // 切换扬声器 await AliAiCall.enableSpeaker(true/false); // 打断 AI 说话 await AliAiCall.interruptSpeaking(); // 启用语音打断 await AliAiCall.enableVoiceInterrupt(true/false); ``` ### AI控制 ```dart // 切换 AI 音色 await AliAiCall.switchRobotVoice("voice_id"); // 设置 AI 角色 await AliAiCall.setAIRole("role_id", "role_name"); ``` ## 回调参数说明 ### onUserAsrSubtitleNotify | 参数 | 类型 | 说明 | |-----|------|-----| | text | String | 识别到的文本内容 | | isSentenceEnd | bool | 是否是句子结束 | | sentenceId | int | 句子ID | | voicePrintStatus | VoicePrintStatusCode | 声纹状态,可能的值:
- disable: 禁用
- enableWithoutRegister: 启用但未注册
- speakerRecognized: 说话人已识别
- speakerNotRecognized: 说话人未识别
- unknown: 未知状态 | ### onAIAgentSubtitleNotify | 参数 | 类型 | 说明 | |-----|------|-----| | text | String | AI回复的文本内容 | | isSentenceEnd | bool | 是否是句子结束 | | userAsrSentenceId | int | 对应的用户语音ID | ### onVolumeChanged | 参数 | 类型 | 说明 | |-----|------|--------------| | uid | String | 用户ID | | volume | int | 音量大小 (0-255) | ## 错误处理 插件会通过 `onError` 回调返回错误信息,建议在使用时做好错误处理: ```dart onError: (error) { switch(error) { case "NETWORK_ERROR": // 处理网络错误 break; case "PERMISSION_DENIED": // 处理权限错误 break; // 处理其他错误... } } ``` ## 最佳实践 1. 初始化时机 - 建议在应用启动时就完成初始化 - 确保在调用其他方法前完成初始化 2. 资源释放 - 在页面销毁时调用 hangup() - 注意清理回调避免内存泄漏 3. 错误处理 - 对网络错误进行重试 - 对权限错误给予用户提示 - 记录错误日志便于问题排查 4. 性能优化 - 避免频繁切换音色和角色 - 合理使用语音打断功能 - 注意控制录音文件大小 ## 常见问题 1. Q: 初始化失败怎么办? A: 检查网络连接和参数配置是否正确 2. Q: 没有声音怎么办? A: 检查音量设置和权限是否正确 3. Q: 语音识别不准确怎么办? A: 建议在安静环境使用,说话清晰度也重要 4. Q: 遇到 "Multiple commands produce xxx-umbrella.h" 错误怎么办? A: 这是 Xcode 构建冲突导致的问题,解决步骤如下: 1. 确保 podspec 文件中正确配置了 source_files 和 public_header_files 2. 删除 ios/Classes 目录下的重复 umbrella header 文件 3. 清理并重新安装 pods: ```bash cd example/ios pod deintegrate pod cache clean --all rm -rf Pods rm -rf .symlinks rm Podfile.lock pod install ``` 4. 重新构建项目: ```bash flutter clean flutter pub get cd example/ios pod install cd .. flutter build ios ``` ## 更新日志 ### 1.0.0 - 初始版本发布 - 支持基础语音通话功能 - 支持语音识别和合成 - 支持音量控制和监控