语音交互¶
语音对话、状态形象、语音输入和设备选择。
语音对话模式¶
通过同一个 controller 完成免手持语音对话。

| API | VoiceMode(controller, onClose) |
| 依赖模块 | ai-elements-ui |
| API 文档 | VoiceMode |
声明 RECORD_AUDIO 并完成权限流程,需要可用的识别与 TTS 服务。onClose 应关闭外层对话框或页面。
import androidx.compose.runtime.Composable
import dev.ai.elements.core.chat.ChatController
import dev.ai.elements.ui.voice.VoiceMode
@Composable
fun VoiceModeExample(controller: ChatController, onClose: () -> Unit) {
VoiceMode(controller, onClose = onClose)
}
语音状态形象¶
展示待机、倾听、思考与说话状态。

| API | Persona(state, size, level) |
| AI Elements | Persona |
| 依赖模块 | ai-elements-ui |
| API 文档 | Persona |
只负责视觉状态,不会录音或朗读。倾听和说话时可把音量传入 level。
import androidx.compose.runtime.Composable
import dev.ai.elements.ui.voice.Persona
import dev.ai.elements.ui.voice.PersonaState
语音输入¶
使用平台语音识别把讲话转为输入文本。

| API | SpeechInput(onTranscript, state) |
| AI Elements | SpeechInput |
| 依赖模块 | ai-elements-ui |
| API 文档 | SpeechInput |
声明 RECORD_AUDIO。state 管理识别器生命周期;失败时展示 speech.error,并在 onTranscript 中区分中间结果与最终结果。
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import dev.ai.elements.ui.voice.SpeechInput
import dev.ai.elements.ui.voice.rememberSpeechInputState
@Composable
fun SpeechInputExample() {
val speech = rememberSpeechInputState()
var transcript by rememberSaveable { mutableStateOf("") }
Column { SpeechInput(onTranscript = { text, _ -> transcript = text }, state = speech); Text(transcript) }
}
麦克风与音色选择¶
选择输入设备和朗读音色。

| API | MicSelector(selected, onSelect), VoiceSelector(voices, selectedId, onSelect) |
| AI Elements | MicSelector, VoiceSelector |
| 依赖模块 | ai-elements-ui |
| API 文档 | MicSelector |
选择器只报告选项;请另行更新音频引擎或 SpeechSettings。可用设备与音色依赖当前系统。
import androidx.compose.foundation.layout.Column
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import dev.ai.elements.ui.voice.MicSelector
import dev.ai.elements.ui.voice.VoiceOption
import dev.ai.elements.ui.voice.VoiceSelector
@Composable
fun VoiceSelectorsExample() {
var mic by remember { mutableStateOf<android.media.AudioDeviceInfo?>(null) }
var voice by rememberSaveable { mutableStateOf("default") }
Column {
MicSelector(mic, onSelect = { mic = it })
VoiceSelector(listOf(VoiceOption("default", "Default")), voice, onSelect = { voice = it.id })
}
}