Browse Source

修复强制使用扬声器不生效的问题

newdev_shunjiawei
fdp 1 year ago
parent
commit
09caa41c6c
  1. 12
      lib/data/services/speech_impl/azure_tts_service.dart
  2. 6
      lib/data/services/speech_impl/voice_clone_tts_service.dart
  3. 3
      lib/data/services/tts_service.dart
  4. 6
      local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureSpeechPlugin.kt
  5. 6
      local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureTtsHelper.kt

12
lib/data/services/speech_impl/azure_tts_service.dart

@ -413,4 +413,16 @@ class AzureTtsService extends GetxService implements TtsService {
Logger.error('释放资源失败: ${e.toString()}'); Logger.error('释放资源失败: ${e.toString()}');
} }
} }
@override
Future<bool> setAudioOutputDevice() async {
try {
// 开始合成,传递参数
final result = await _channel.invokeMethod('setAudioOutputDevice');
return result;
} catch (e) {
Logger.error('音频输出设备类型失败: ${e.toString()}');
return false;
}
}
} }

6
lib/data/services/speech_impl/voice_clone_tts_service.dart

@ -390,4 +390,10 @@ class VoiceCloneTtsService extends GetxService implements TtsService {
Logger.error('释放资源失败: ${e.toString()}'); Logger.error('释放资源失败: ${e.toString()}');
} }
} }
@override
Future<bool> setAudioOutputDevice() {
// TODO: implement setAudioOutputDevice
throw UnimplementedError();
}
} }

3
lib/data/services/tts_service.dart

@ -2,7 +2,6 @@ import 'dart:async';
/// 语音合成服务接口 /// 语音合成服务接口
abstract class TtsService { abstract class TtsService {
/// 当前选择的语音 /// 当前选择的语音
String get currentVoice; String get currentVoice;
@ -20,7 +19,6 @@ abstract class TtsService {
/// 设置语音 /// 设置语音
Future<bool> setVoice(String voiceName); Future<bool> setVoice(String voiceName);
/// 单次播放文本,完成后返回 /// 单次播放文本,完成后返回
Future<bool> speakOnce(String text); Future<bool> speakOnce(String text);
@ -35,6 +33,7 @@ abstract class TtsService {
/// 释放资源 /// 释放资源
Future<void> dispose(); Future<void> dispose();
Future<bool> setAudioOutputDevice();
} }
/// TTS事件类型 /// TTS事件类型

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

@ -15,7 +15,7 @@ import com.deep_voice.speech.tts.TtsEvent
import com.deep_voice.speech.tts.TtsEventListener import com.deep_voice.speech.tts.TtsEventListener
import com.deep_voice.speech.tts.TtsEventType import com.deep_voice.speech.tts.TtsEventType
import com.yunqiinnovation.ble_service.BleService import com.yunqiinnovation.ble_service.BleService
import com.deep_voice.speech.tts.AudioOutputDevice
/** AzureSpeechPlugin */ /** AzureSpeechPlugin */
class AzureSpeechPlugin : BleService.Callback, FlutterPlugin { class AzureSpeechPlugin : BleService.Callback, FlutterPlugin {
private val tag = "AzureSpeechPlugin" private val tag = "AzureSpeechPlugin"
@ -501,6 +501,10 @@ class AzureSpeechPlugin : BleService.Callback, FlutterPlugin {
azureTtsHelper.release() azureTtsHelper.release()
result.success(true) result.success(true)
} }
"setAudioOutputDevice" -> {
azureTtsHelper.setAudioOutputDevice(AudioOutputDevice.SPEAKER)
result.success(true)
}
else -> { else -> {
result.notImplemented() result.notImplemented()

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

@ -223,7 +223,11 @@ class AzureTtsHelper(private val context: Context) : ITtsService {
} }
AudioOutputDevice.SPEAKER -> { AudioOutputDevice.SPEAKER -> {
// 强制使用扬声器 // 强制使用扬声器
manager.mode = AudioManager.MODE_NORMAL /* MODE_NORMAL 默认媒体模式 ❌ 不能强制扬声器(会被耳机覆盖)
MODE_IN_COMMUNICATION VoIP 通信模式 ✅ 可以强制使用扬声器或听筒
MODE_IN_CALL 电话模式(仅限系统) ✅ 更强但风险大,不推荐使用
*/
manager.mode = AudioManager.MODE_IN_COMMUNICATION
manager.isSpeakerphoneOn = true manager.isSpeakerphoneOn = true
} }
AudioOutputDevice.HEADPHONES -> { AudioOutputDevice.HEADPHONES -> {

Loading…
Cancel
Save