@ -534,14 +534,24 @@ class LanguageManager extends GetxService {
return languageInfo ? . shortCode ;
}
/ / / 根 据 shortCode 获 取 性 别 适 配 的 TTS 音 色 ( 用 于 findBestMatchingProvider )
String ? _getGenderAwareTtsCode ( String shortCode ) {
final asrCode = _shortCodeToAsrCodeMap [ shortCode ] ;
if ( asrCode = = null ) return null ;
return _getVoiceByGender ( _languageMap [ asrCode ] ) ;
}
/ / / 根 据 用 户 性 别 获 取 对 应 的 TTS 语 音 名 称
/ / / gender: 0 = 未 设 置 ( 默 认 女 声 ) , 1 = 男 , 2 = 女
String ? _getVoiceByGender ( LanguageInfo ? info ) {
if ( info = = null ) return null ;
try {
final gender = User . instance . gender ;
return gender = = 1 ? info . ttsVoiceNameMale : info . ttsVoiceName ;
final voice = gender = = 1 ? info . ttsVoiceNameMale : info . ttsVoiceName ;
Logger . debug ( ' TTS音色选择: gender= $ gender , voice= $ voice ' ) ;
return voice ;
} catch ( _ ) {
Logger . debug ( ' TTS音色选择: 用户未初始化,使用默认女声 ' ) ;
return info . ttsVoiceName ;
}
}
@ -662,27 +672,31 @@ class LanguageManager extends GetxService {
for ( final spec in ttsSpecs ) {
if ( spec [ ' shortCode ' ] = = sourceShortCode ) {
sourceTransSpec [ " ttsCode " ] = spec [ " ttsVoiceName " ] ! ;
sourceTransSpec [ " ttsCode " ] =
_getGenderAwareTtsCode ( spec [ ' shortCode ' ] ! ) ? ? spec [ " ttsVoiceName " ] ! ;
}
if ( spec [ ' shortCode ' ] = = targetShortCode ) {
targetTransSpec [ " ttsCode " ] = spec [ " ttsVoiceName " ] ! ;
targetTransSpec [ " ttsCode " ] =
_getGenderAwareTtsCode ( spec [ ' shortCode ' ] ! ) ? ? spec [ " ttsVoiceName " ] ! ;
}
}
} else if ( provider = = SpeechServiceType . alibaba ) {
final ttsSpecs = _getTtsSpecs ( provider ) ;
for ( final spec in ttsSpecs ) {
if ( spec [ ' shortCode ' ] = = sourceShortCode ) {
sourceTransSpec [ " ttsCode " ] = spec [ " ttsVoiceName " ] ! ;
sourceTransSpec [ " ttsCode " ] =
_getGenderAwareTtsCode ( spec [ ' shortCode ' ] ! ) ? ? spec [ " ttsVoiceName " ] ! ;
}
if ( spec [ ' shortCode ' ] = = targetShortCode ) {
targetTransSpec [ " ttsCode " ] = spec [ " ttsVoiceName " ] ! ;
targetTransSpec [ " ttsCode " ] =
_getGenderAwareTtsCode ( spec [ ' shortCode ' ] ! ) ? ? spec [ " ttsVoiceName " ] ! ;
}
}
}
final providerString = _providerStringFromType ( provider ) ;
Logger . info (
' Found best provider: $ providerString for $ sourceShortCode -> $ targetShortCode ' ) ;
' Found best provider: $ providerString for $ sourceShortCode -> $ targetShortCode , sourceTts= ${ sourceTransSpec [ " ttsCode " ] } , targetTts= ${ targetTransSpec [ " ttsCode " ] } ') ;
return BestProviderResult (
providerString , sourceTransSpec , targetTransSpec ) ;
}