diff --git a/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentService.kt b/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentService.kt index e18de276f..adda12336 100644 --- a/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentService.kt +++ b/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentService.kt @@ -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) diff --git a/local_plugins/agent_service/android/src/main/res/raw/await.mp3 b/local_plugins/agent_service/android/src/main/res/raw/await.mp3 new file mode 100644 index 000000000..ae1bfcc9d Binary files /dev/null and b/local_plugins/agent_service/android/src/main/res/raw/await.mp3 differ diff --git a/local_plugins/agent_service/ios/agent_service/Package.swift b/local_plugins/agent_service/ios/agent_service/Package.swift index a4cf49980..0e95c6bc6 100644 --- a/local_plugins/agent_service/ios/agent_service/Package.swift +++ b/local_plugins/agent_service/ios/agent_service/Package.swift @@ -31,6 +31,7 @@ let package = Package( path: "Sources/agent_service", resources: [ .copy("Resources/calling.mp3"), + .copy("Resources/await.mp3"), .copy("Resources/start.mp3"), .copy("Resources/stop.mp3") ]