|
|
|
@ -668,7 +668,7 @@ object AgentService : CoroutineScope { |
|
|
|
try { |
|
|
|
// 设置状态为正在流式输出 |
|
|
|
_isAiStreaming.set(true) |
|
|
|
|
|
|
|
audioPlayer?.playAudio(R.raw.await, true,0.3f) |
|
|
|
// 使用历史记录作为上下文发送到OpenAI |
|
|
|
val responseBuilder = StringBuilder() |
|
|
|
var aiMetadata:String = "" |
|
|
|
@ -736,6 +736,9 @@ object AgentService : CoroutineScope { |
|
|
|
responseBuilder.append(token) |
|
|
|
if (speakResponse && broadcast) { |
|
|
|
ttsService?.speakStream(token) |
|
|
|
if (token.length > 0){ |
|
|
|
audioPlayer?.stopAudio() |
|
|
|
} |
|
|
|
} |
|
|
|
if (broadcast){ |
|
|
|
// 发送流式回复token |
|
|
|
@ -783,7 +786,7 @@ object AgentService : CoroutineScope { |
|
|
|
|
|
|
|
override fun onFunctionCall(call: JSONObject) { |
|
|
|
try { |
|
|
|
audioPlayer?.playAudio(R.raw.calling, true) |
|
|
|
// audioPlayer?.playAudio(R.raw.calling, true) |
|
|
|
val name = call.getString("name") |
|
|
|
sendEvent("function_call", mapOf( |
|
|
|
"name" to name, |
|
|
|
@ -1120,34 +1123,32 @@ object AgentService : CoroutineScope { |
|
|
|
/** |
|
|
|
* 播放音频资源 |
|
|
|
* @param resId 资源ID |
|
|
|
* @param isLooping 是否循环播放 |
|
|
|
* @param volume 音量大小,范围0.0-1.0,默认1.0 |
|
|
|
*/ |
|
|
|
fun playAudio(resId: Int, isLooping: Boolean = false) { |
|
|
|
fun playAudio(resId: Int, isLooping: Boolean = false, volume: Float = 1.0f) { |
|
|
|
try { |
|
|
|
// 释放之前的资源 |
|
|
|
release() |
|
|
|
|
|
|
|
|
|
|
|
// 创建播放器并设置资源 |
|
|
|
mediaPlayer = MediaPlayer().apply { |
|
|
|
// 设置资源 |
|
|
|
context.resources.openRawResourceFd(resId)?.use { fd -> |
|
|
|
setDataSource(fd.fileDescriptor, fd.startOffset, fd.length) |
|
|
|
} |
|
|
|
|
|
|
|
// 播放完成后自动释放资源 |
|
|
|
|
|
|
|
this.isLooping = isLooping // 设置循环属性 |
|
|
|
setVolume(volume, volume) // 设置音量(左声道,右声道) |
|
|
|
|
|
|
|
setOnCompletionListener { |
|
|
|
release() |
|
|
|
} |
|
|
|
|
|
|
|
// 准备并播放 |
|
|
|
prepare() |
|
|
|
if (isLooping) { |
|
|
|
start() |
|
|
|
} else { |
|
|
|
start() |
|
|
|
setOnCompletionListener { |
|
|
|
if (!isLooping) { |
|
|
|
release() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
prepare() |
|
|
|
start() |
|
|
|
} |
|
|
|
} catch (e: Exception) { |
|
|
|
Log.e(TAG, "播放音频资源异常: ${e.message}", e) |
|
|
|
|