지금 진행하고 있는 사이드 프로젝트 중 하나가 플러터를 쓰는데,
앱의 메인 기능 중 하나가 STT와 TTS 기능을 둘 다 사용하는지라...
나중에 이와 관련된 기능을 구현할 때 참고하려고 간단한 튜토리얼을 작성해보았다.
플러터 STT의 경우 플러터 내의 라이브러리를 사용해 STT 기능을 구현 가능하다.
실제로 해당 기능을 구현하기 전에 pubspec.yaml
파일에 관련 라이브러리를 추가한 다음, pub get
명령어로 해당 라이브러리를 프로젝트에 설치해야 한다.
dependencies:
flutter:
sdk: flutter
speech_to_text: ^6.3.0
speech_recognition: ^0.4.0
위와 같은 형태로 stt 라이브러리와 음성인식 라이브러리를 2개 설치해주면 된다.
이렇게 라이브러리를 설치해 준 다음,
실제로 stt 기능을 수행할 코드를 짜주자. 예시 코드는 아래와 같다.
import 'package:speech_recognition/speech_recognition.dart';
void initializeSTT() { // 음성인식을 초기화하는 코드
final SpeechRecognition speech = SpeechRecognition();
bool available = await speech.initialize();
if (available) {
await speech.requestPermission();
// 음성 인식을 시작하려면 이어서 다음을 호출하면 된다.
// await speech.listen();
} else {
// 권한이 없거나 음성 인식을 지원하지 않을 경우 아래 else문에 넣어서 에러 처리를 따로 해주자.
}
}
여기서 만약 음성인식 초기화가 되지 않아서 계속 else 구문으로 넘어간다면,
해당 앱이 스마트폰의 마이크 권한을 가지고 있는지 한 번 생각해보자.
마이크 권한을 앱에서 요청하기 위해서는 android/app/src/main/AndroidManifest.xml
(안드로이드)와
ios/Runner/Info.plist
(아이폰) 파일에 권한을 각각 추가해야 한다.
TTS를 구현하기 위해서는 flutter_tts
라이브러리를 사용할 수 있다.
pubspec.yaml
파일에 해당 라이브러리를 설치하기 위해 아래 내용을 적어주자.
dependencies:
flutter_tts: ^3.3.0
그리고 위에서 수행한 stt 라이브러리 설치와 마찬가지로,
터미널 창에 pub get
명령어를 적은 다음 라이브러리 설치를 수행해 주자.
그 후 tts 초기화와 tts 기능을 수행시켜주면 되는데,
이를 구현한 예시 코드는 아래와 같다.
import 'package:flutter_tts/flutter_tts.dart';
void initializeTTS() {
final FlutterTts flutterTts = FlutterTts();
await flutterTts.setLanguage("en-US"); // 언어 설정
await flutterTts.setPitch(1.0); // 음성 높낮이 설정
await flutterTts.setSpeechRate(1.0); // 음성 속도 설정
}
void textToSpeech(String text) {
flutterTts.speak(text);
}