develop/Flutter

Flutter Tts 사일런트 모드일때 사운드 재생 안됨 해결하기 iOS AudioCategory 구분하기

방뎁 2023. 8. 15. 01:15
반응형

tts 기능을 개발하고 실기기에 물려서 테스트할 때는 잘 되더니 

테스트플라이트에 올려서 확인하니 

tts가 안나와서 당황스러웠습니다. 

그래서 사운드를 키우고 시도했는데 안돼서 버그인가 했는데요

무음 모드 해둔걸 깜빡하고 테스트를 했습니다. 

어찌 되었든 TTS는 뮤트라 해도 재생이 되어야 하는데 싶어 버그 잡기를 나섰습니다.

 

무음모드 = 사일러트 = 뮤트 = mute mode = silent mode 

문제해결하기

우선 구글링부터 했습니다. 

iOS개발을 할 때 부터 사운드는 진짜 다루기 까다롭더군요 

변수가 많아 그런 것 같습니다. 

각설하고 iOS에는 AudioCategory가 있습니다. 

이건 무음모드일때 작동을 할 건지 

백그라운드의 다른 소리와 섞이게 할 건지 

백그라운드 소리를 중단 할건지와 같은

여러 선택지가 있습니다. 

 

다행스럽게도 TTS 라이브러링에서 AudioCategory를 세팅 할 수 있도록 제공하고 있었습니다. 

 

저는 pub.dev에서 제공하는 예제를 사용했습니다.

주요 코드는 아래와 같습니다. 

 

bool get isIOS => !kIsWeb && Platform.isIOS;

iOS를 구분해줍니다.

if (isIOS) {
  _setIOSCategory();
}

iOS일 경우 호출합니다. 

안드로이드에서 호출하니 크래시 납니다!

 

Future _setIOSCategory() async {
    await flutterTts.setIosAudioCategory(
      IosTextToSpeechAudioCategory.playback,
      [
        IosTextToSpeechAudioCategoryOptions.allowBluetooth,
        IosTextToSpeechAudioCategoryOptions.allowBluetoothA2DP,
        IosTextToSpeechAudioCategoryOptions.mixWithOthers,
      ],
    );
}

위와 같이 적용하면 사일런트 모드에서도 작동하는 것을 확인할 수 있습니다.

 

AudioCategory 종류

enum IosTextToSpeechAudioCategory {
  /// Audio is silenced by screen lock and the silent switch; audio will not mix
  /// with other apps' audio.
  ambientSolo,

  /// Audio is silenced by screen lock and the silent switch; audio will mix
  /// with other apps' (mixable) audio.
  ambient,

  /// Audio is not silenced by screen lock or silent switch; audio will not mix
  /// with other apps' audio.
  ///
  playback,

  ///  The category for recording (input) and playback (output) of audio,
  ///  such as for a Voice over Internet Protocol (VoIP) app.
  /// The default value.
  playAndRecord,
}

 

간단히 해석하자면 

ambientSolo - 화면 잠금 및 무음 스위치의 영향을 받습니다

즉 오디오가 음소거되고 다른 앱의 오디오와 섞이지 않습니다.

 

ambient - 화면 잠금 및 무음 스위치의 영향을 받습니다

즉 오디오가 음소거되고 다른 앱과 오디오가 섞입니다.

 

playback - 화면 잠금 또는 무음 스위치의 영향을 받지 않습니다. 

즉 오디오가 음소거되지 않고, 오디오가 섞이지 않습니다.

 

playAndRecord - 오디오 입출력입니다. VoIP같은 앱입니다.

Default값이라고 합니다.

 

사실 아직 제가 원하는 완전한 해결책은 아닌것 같습니다만

이 라이브러리에서는 이 방법이 최선인 것 같습니다. 

 

TTS 적용기입니다.

2023.08.08 - [develop/Flutter] - Flutter TTS Text to Speech 음성합성 글자 소리내서 읽기

 

Flutter TTS Text to Speech 음성합성 글자 소리내서 읽기

글을 기계가 읽어주는 걸 TTS라고 합니다. 네이버 클로바에서 많이 볼 수 있습니다 라이브러리를 사용해서 TTS를 구현하고자 합니다. POPULARITY가 99%입니다. https://pub.dev/packages/flutter_tts flutter_tts | Fl

devfart.tistory.com

 

반응형