Browse Source

feat(azure_speech): 公开setSpeechParams方法并设置默认语音参数

fix(agent_service):将agent模块的tts提高25%的播报速度

将iOS和Android平台的setSpeechParams方法从private改为public
在agent_service中调用setSpeechParams设置默认语音参数
添加Flutter插件接口支持设置语音参数
weicu
lxm 9 months ago
parent
commit
5da5982517
  1. 2
      local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentService.kt
  2. 2
      local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServiceImpl.swift
  3. 10
      local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureSpeechPlugin.kt
  4. 4
      local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureTtsHelper.kt
  5. 14
      local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureSpeechPlugin.swift
  6. 2
      local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureTtsHelper.swift

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

@ -401,6 +401,7 @@ object AgentService : CoroutineScope {
if (!success) {
Log.e(TAG, "Bytedance TTS服务初始化失败")
} else {
ttsService?.setSpeechParams(rate = 25, pitch = 0, volume = 100)
val voiceName = getTtsVoiceNameByAsrCode(ttsLanguage)
if (voiceName.isNotEmpty()) {
ttsService?.setVoice(voiceName)
@ -1394,6 +1395,7 @@ object AgentService : CoroutineScope {
restartIdleCheck() // 状态变化,重启检测
// 直接调用TTS,无需协程包装
ttsService?.setSpeechParams(rate = 25, pitch = 0, volume = 100)
ttsService?.speakOnce(text)
}

2
local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServiceImpl.swift

@ -343,6 +343,7 @@ class AgentServiceImpl: NSObject {
}
_ = azureTtsHelper?.setVoice(getTtsVoiceNameByAsrCode(primaryLanguage))
_ = azureTtsHelper?.setSpeechParams(rate: 25, pitch: 0, volume: 100)
return true
}
@ -604,6 +605,7 @@ class AgentServiceImpl: NSObject {
return false
}
_ = azureTtsHelper?.setSpeechParams(rate: 25, pitch: 0, volume: 100)
return azureTtsHelper?.speakOnce(sessionid:sessionid,text) ?? false
}

10
local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureSpeechPlugin.kt

@ -668,6 +668,7 @@ class AzureSpeechPlugin : BleService.Callback, FlutterPlugin {
"initialize" -> {
val subscriptionKey = call.argument<String>("subscriptionKey") ?: ""
val region = call.argument<String>("region") ?: ""
val language = call.argument<String>("language") ?: "zh-CN"
val useCustomAudioOutput =
call.argument<Boolean>("useCustomAudioOutput") ?: false
@ -677,7 +678,7 @@ class AzureSpeechPlugin : BleService.Callback, FlutterPlugin {
ttsAppId = "", // Azure TTS不需要appId
ttsAppToken = subscriptionKey,
ttsResource = region,
language = "zh-CN"
language = language
)
// 如果初始化成功且需要使用自定义音频输出,则设置自定义音频播放器
@ -703,6 +704,13 @@ class AzureSpeechPlugin : BleService.Callback, FlutterPlugin {
}
}
"setSpeechParams" -> {
val rate = call.argument<Int>("rate") ?: 0
val pitch = call.argument<Int>("pitch") ?: 0
val volume = call.argument<Int>("volume") ?: 100
result.success(azureTtsHelper.setSpeechParams(rate = rate, pitch = pitch, volume = volume))
}
"setVoice" -> {
val voiceName = call.argument<String>("voiceName")
?: return result.error("INVALID_ARGUMENTS", "语音名称不能为空", null)

4
local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureTtsHelper.kt

@ -437,7 +437,7 @@ class AzureTtsHelper(private val context: Context) : ITtsService {
/**
* 设置语音参数
*/
private fun setSpeechParams(rate: Int = 0, pitch: Int = 0, volume: Int = 100): Boolean {
fun setSpeechParams(rate: Int = 0, pitch: Int = 0, volume: Int = 100): Boolean {
if (!isInitialized) return false
try {
@ -762,4 +762,4 @@ class AzureTtsHelper(private val context: Context) : ITtsService {
* 是否正在播放
*/
fun isSpeaking(): Boolean = isSpeaking
}
}

14
local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureSpeechPlugin.swift

@ -631,6 +631,18 @@ private func sendAstEvent(_ event: [String: Any]) {
let success = azureTtsHelper.setVoice(voiceName)
result(success)
case "setSpeechParams":
guard let args = call.arguments as? [String: Any] else {
result(FlutterError(code: "INVALID_ARGUMENTS", message: "参数不能为空", details: nil))
return
}
let rate = args["rate"] as? Int ?? 0
let pitch = args["pitch"] as? Int ?? 0
let volume = args["volume"] as? Int ?? 100
let success = azureTtsHelper.setSpeechParams(rate: rate, pitch: pitch, volume: volume)
result(success)
case "speakText":
guard let args = call.arguments as? [String: Any],
@ -1366,5 +1378,3 @@ private class AsrCallbackWrapper: AzureAsrHelper.ContinuousRecognizeCallback {
])
}
}

2
local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureTtsHelper.swift

@ -645,7 +645,7 @@ public class AzureTtsHelper: NSObject, ITtsService {
/**
* 设置语音参数
*/
private func setSpeechParams(rate: Int = 0, pitch: Int = 0, volume: Int = 100) -> Bool {
public func setSpeechParams(rate: Int = 0, pitch: Int = 0, volume: Int = 100) -> Bool {
currentRate = rate >= 0 ? "+\(rate)%" : "\(rate)%"
currentPitch = pitch >= 0 ? "+\(pitch)%" : "\(pitch)%"
currentVolume = "\(min(max(volume, 0), 100))%"

Loading…
Cancel
Save