1.对话式大模型
@startuml
title Minote Iflytek LLM Interaction
skinparam sequenceParticipant underline
skinparam stereotypePosition top
hide footbox

actor user
participant NoteEditActivity<<Boundary>>
participant IflytekActivity<<Control>>
participant SparkChain<<Entity>>
participant LLMFactory<<Entity>>
participant chat_llm<<Entity>>
participant mCallback<<Entity>>

note right of user: 用户启动应用
user -> NoteEditActivity : 启动LLM
activate mCallback
activate NoteEditActivity

NoteEditActivity -> IflytekActivity : 初始化SDK
activate IflytekActivity

IflytekActivity -> SparkChain : init(Config)
activate SparkChain
SparkChain --> IflytekActivity : 初始化完成
deactivate SparkChain

IflytekActivity -> LLMFactory : textGeneration()
activate LLMFactory
LLMFactory --> chat_llm : 创建LLM实例
deactivate LLMFactory

IflytekActivity -> chat_llm : 注册回调\n注册LLMCallbacks
activate chat_llm
chat_llm -> mCallback : registerLLMCallbacks(mCallback)
deactivate chat_llm

alt 同步模式
    IflytekActivity -> chat_llm : run(question)
    activate chat_llm
    chat_llm --> IflytekActivity : syncOutput
    deactivate chat_llm
    loop 循环获取结果
        IflytekActivity -> mCallback : syncOutput.getContent()
        mCallback --> IflytekActivity : result
    end
else 异步模式
    IflytekActivity -> chat_llm : arun(question)
    activate chat_llm
    loop 等待回调
        mCallback --> chat_llm : 接收结果
        chat_llm -> mCallback : getContent()
        mCallback --> IflytekActivity : 处理结果
    end
end

IflytekActivity --> NoteEditActivity : 展示结果
deactivate IflytekActivity
NoteEditActivity --> user : 展示结果
deactivate NoteEditActivity

user -> NoteEditActivity : 退出应用
activate NoteEditActivity
NoteEditActivity -> IflytekActivity : 停止LLM
activate IflytekActivity

IflytekActivity -> SparkChain : uninit()
activate SparkChain
SparkChain --> IflytekActivity : 逆初始化完成
deactivate SparkChain

IflytekActivity --> NoteEditActivity : 通知退出完成
deactivate IflytekActivity
NoteEditActivity --> user : 通知退出完成
deactivate NoteEditActivity

@enduml

2.语音听写
@startuml
title Minote Iflytek Iat
skinparam sequenceParticipant underline
skinparam stereotypePosition top
hide footbox

actor User as user
participant "NoteEditActivity" as note
participant "IatDemo" as demo
participant "SpeechRecognizer" as recognizer
participant "RecognizerDialog" as dialog
participant "JsonParser" as parser
participant "SpeechUtility" as utility

activate user

== 初始化阶段 ==
user -> note : 点击语音按钮
activate note
note -> demo : startActivity()
deactivate note

activate demo
demo -> utility : createUtility(appid)
activate utility
demo -> recognizer : createRecognizer(InitListener)
activate recognizer
demo -> dialog : new RecognizerDialog(InitListener)
activate dialog

== 参数配置阶段 ==
user -> demo : 点击开始听写
demo -> recognizer : setParameter(LANGUAGE, "zh_cn")
demo -> recognizer : setParameter(VAD_BOS, "4000")
demo -> recognizer : setParameter(VAD_EOS, "1000")

== 语音识别阶段 ==
demo -> dialog : show()
deactivate demo

dialog -->> user : 显示录音对话框
user -> dialog : 开始说话
dialog -->> user : onBeginOfSpeech()显示"开始说话"

loop 语音输入过程
    dialog -->> user : onVolumeChanged()显示音量大小
end

user -> dialog : 停止说话
dialog -->> user : onEndOfSpeech()显示"结束说话"

== 结果处理阶段 ==
dialog -> recognizer : 语音数据处理
activate recognizer
recognizer -->> dialog : onResult(RecognizerResult)
deactivate recognizer

dialog -> parser : parseIatResult(json)
activate parser
parser -->> dialog : 返回解析后的文本
deactivate parser
deactivate dialog

activate demo
demo -->> user : 显示识别结果

== 错误处理 ==
alt 识别出错
    demo -->> user : 显示错误信息
end

== 完成阶段 ==
user -> demo : 确认文本
demo -->> note : 返回识别文本
deactivate demo

activate note
note -->> user : 更新便签内容
deactivate note

deactivate user

@enduml


3.语音合成
@startuml
title Minote Iflytek Tts
skinparam sequenceParticipant underline
skinparam stereotypePosition top
hide footbox

actor User as user
participant "NoteEditActivity" as note
participant "TtsDemo" as demo
participant "SpeechSynthesizer" as synthesizer
participant "TtsSettings" as settings
participant "SpeechUtility" as utility

activate user

== 初始化阶段 ==
user -> note : 点击语音合成按钮
activate note
note -> demo : startActivity()
deactivate note

activate demo
demo -> utility : createUtility(appid)
demo -> synthesizer : createSynthesizer(InitListener)
synthesizer -->> demo : onInit()回调初始化状态

== 参数配置阶段 ==
user -> demo : 点击设置按钮
demo -> settings : startActivity()
activate settings
settings -->> user : 显示设置界面(语速/音调/音量)
user -> settings : 调整参数
settings -->> demo : 保存设置参数
deactivate settings

user -> demo : 选择发音人
demo -->> user : 显示发音人列表对话框
user -> demo : 确认发音人选择

== 合成播放阶段 ==
user -> demo : 点击开始播放
demo -> demo : setParam()
demo -> synthesizer : startSpeaking(text, listener)
activate synthesizer

synthesizer -->> demo : onSpeakBegin()
synthesizer -->> user : 开始播放提示

loop 合成播放过程
    synthesizer -->> demo : onBufferProgress()
    synthesizer -->> demo : onSpeakProgress()
    demo -->> user : 显示进度和高亮文本
end

alt 用户控制
    user -> demo : 点击暂停
    demo -> synthesizer : pauseSpeaking()
    synthesizer -->> user : 暂停播放提示
    
    user -> demo : 点击继续
    demo -> synthesizer : resumeSpeaking()
    synthesizer -->> user : 继续播放提示
    
    user -> demo : 点击停止
    demo -> synthesizer : stopSpeaking()
    synthesizer -->> user : 停止播放提示
end

synthesizer -->> demo : onCompleted()
deactivate synthesizer
demo -->> user : 播放完成提示

== 结束阶段 ==
user -> demo : 退出界面
demo -> synthesizer : destroy()
deactivate demo

deactivate user

@enduml









分界线以下是弃用的UML顺序图

///////////////////////////////////////////////////////////////////////////////////////////////



Speech版本语音听写：
@startuml
title Speech Recognition Process with NoteEditActivity and IATActivity
skinparam sequenceParticipant underline
skinparam stereotypePosition top
hide footbox

actor user
participant "NoteEditActivity" as NEA
participant "IATActivity" as IATA
participant "SpeechRecognizer" as SR
participant "RecognizerListener" as RL
participant "InitListener" as IL

note right of user: 用户启动应用并选择语音识别功能
user -> NEA : 选择语音识别功能
activate NEA

NEA -> IATA : startIATActivity()
activate IATA

note right of IATA: 初始化SDK和SpeechRecognizer
IATA -> SR : createRecognizer(Context, IL)
activate SR
SR --> IATA : onInit(int)
deactivate SR

note right of IATA: 设置识别参数
IATA -> SR : setParameter(String, String)

note right of IATA: 构建语法（如果需要）
IATA -> SR : buildGrammar(String, String, GL)
activate SR
SR --> IATA : onBuildFinish(String, SpeechError)
deactivate SR

note right of IATA: 更新词典（如果需要）
IATA -> SR : updateLexicon(String, String, LXL)
activate SR
SR --> IATA : onLexiconUpdated(String, SpeechError)
deactivate SR

note right of IATA: 开始录音进行识别
IATA -> SR : startListening(RL)
activate SR
SR --> IATA : onBeginOfSpeech()
loop Recording
    SR --> IATA : onVolumeChanged(int, byte[])
end
SR --> IATA : onEndOfSpeech()
SR --> IATA : onResult(RecognizerResult, boolean)
SR --> IATA : onError(SpeechError)
deactivate SR

note right of IATA: 处理识别结果
IATA -> user : 展示识别结果

note right of user: 用户完成识别并退出
user -> IATA : 退出识别功能
IATA -> SR : stopListening()
IATA -> SR : destroy()
@enduml

Linux版本：
@startuml
title Speech Recognition Process with NoteEditActivity and IATActivity
skinparam sequenceParticipant underline
skinparam stereotypePosition top
hide footbox

actor user
participant "NoteEditActivity" as NoteEdit
participant "IATActivity" as IAT
participant "SpeechRecognizer" as SR
participant "RecognizerListener" as RL
participant "InitListener" as IL

note right of user: 用户启动应用并选择语音识别功能
user -> NoteEdit : 选择语音识别功能
activate NoteEdit

NoteEdit -> IAT : startIATActivity()
activate IAT

note right of IAT: 初始化SDK和SpeechRecognizer
IAT -> SR : createRecognizer(Context, IL)
activate SR
SR --> IAT : onInit(int)
deactivate SR

note right of IAT: 注册监听回调和配置识别参数
IAT -> SR : setParameter(String, String)

note right of IAT: 启动会话
IAT -> SR : startListening(RL)
activate SR

loop Recording
    SR --> IAT : onVolumeChanged(int, byte[])
    SR --> IAT : onBeginOfSpeech()
    IAT -> SR : writeAudio(byte[], int, int)
    SR --> IAT : onResult(RecognizerResult, boolean)
    SR --> IAT : onEndOfSpeech()
end

note right of IAT: 处理识别结果
IAT -> user : 展示识别结果

note right of user: 用户完成识别并退出
user -> IAT : 退出识别功能
IAT -> SR : stopListening()
IAT -> SR : destroy()
deactivate SR
deactivate IAT
@enduml