Browse Source

上传 等待音效

weicu
liwei1dao 1 year ago
parent
commit
1899e89608
  1. 33
      local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentService.kt
  2. BIN
      local_plugins/agent_service/android/src/main/res/raw/await.mp3
  3. 1
      local_plugins/agent_service/ios/agent_service/Package.swift

33
local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentService.kt

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

BIN
local_plugins/agent_service/android/src/main/res/raw/await.mp3

Binary file not shown.

1
local_plugins/agent_service/ios/agent_service/Package.swift

@ -31,6 +31,7 @@ let package = Package(
path: "Sources/agent_service", path: "Sources/agent_service",
resources: [ resources: [
.copy("Resources/calling.mp3"), .copy("Resources/calling.mp3"),
.copy("Resources/await.mp3"),
.copy("Resources/start.mp3"), .copy("Resources/start.mp3"),
.copy("Resources/stop.mp3") .copy("Resources/stop.mp3")
] ]

Loading…
Cancel
Save