[flutter] 플러터 RxDart를 활용한 음성인식 및 음성합성 기능 구현 방법

개요

이 글에서는 Flutter 애플리케이션에서 음성인식 및 음성합성 기능을 구현하는 방법에 대해 알아보겠습니다. 이를 위해 RxDart 라이브러리를 사용할 것이며, 음성인식에는 speech_to_text 패키지를 사용하고, 음성합성에는 flutter_tts 패키지를 사용할 것입니다.

RxDart 라이브러리 추가하기

먼저, 프로젝트의 pubspec.yaml 파일에 다음과 같이 RxDart 라이브러리를 추가합니다:

dependencies:
  rxdart: ^0.27.2

라이브러리를 추가한 후, 패키지를 업데이트하도록 합니다.

$ flutter pub get

음성인식 기능 구현하기

speech_to_text 패키지 추가하기

dependencies:
  speech_to_text: ^3.0.0
$ flutter pub get

음성인식 기능 구현 코드

import 'package:rxdart/rxdart.dart';
import 'package:speech_to_text/speech_to_text.dart' as stt;

// 음성인식 기능을 위한 스트림 컨트롤러 생성
final BehaviorSubject<String> _recognizedWordsSubject = BehaviorSubject<String>();

// 음성인식 기능 초기화
void initializeSpeechRecognition() async {
  final speech = stt.SpeechToText();
  bool isAvailable = await speech.initialize();
  if (isAvailable) {
    // 초기화 성공 시 음성인식 이벤트를 방출하는 리스너 등록
    speech.listen(
      onResult: (stt.SpeechRecognitionResult result) {
        _recognizedWordsSubject.add(result.recognizedWords);
      },
    );
  }
}

// 음성인식 결과를 구독하는 함수
void subscribeToSpeechRecognition(Function(String) callback) {
  _recognizedWordsSubject.stream.listen(callback);
}

음성인식 기능을 구현하기 위해 speech_to_text 패키지를 추가하고, initializeSpeechRecognition 함수를 통해 음성인식을 초기화하고, subscribeToSpeechRecognition 함수를 통해 음성인식 결과를 구독할 수 있습니다.

음성합성 기능 구현하기

flutter_tts 패키지 추가하기

dependencies:
  flutter_tts: ^3.0.0
$ flutter pub get

음성합성 기능 구현 코드

import 'package:rxdart/rxdart.dart';
import 'package:flutter_tts/flutter_tts.dart';

// 음성합성 기능을 위한 스트림 컨트롤러 생성
final BehaviorSubject<String> _textToSpeechSubject = BehaviorSubject<String>();

// 음성합성 기능 초기화
void initializeTextToSpeech() {
  FlutterTts flutterTts = FlutterTts();

  // 음성합성 발성 설정
  flutterTts.setLanguage("ko-KR");
  flutterTts.setSpeechRate(1.0);
  flutterTts.setVolume(1.0);

  // 음성합성 결과를 방출하는 리스너 등록
  _textToSpeechSubject.stream.listen((String text) async {
    await flutterTts.speak(text);
  });
}

// 음성합성 함수
void textToSpeech(String text) {
  _textToSpeechSubject.add(text);
}

음성합성 기능을 구현하기 위해 flutter_tts 패키지를 추가하고, initializeTextToSpeech 함수를 통해 음성합성을 초기화하고, textToSpeech 함수를 통해 음성합성을 실행할 수 있습니다.

사용 예시

void main() {
  initializeSpeechRecognition();
  initializeTextToSpeech();

  subscribeToSpeechRecognition((String recognizedWords) {
    // 음성인식 결과 출력
    print(recognizedWords);

    if (recognizedWords.contains("안녕하세요")) {
      // 음성합성으로 응답하기
      textToSpeech("안녕하세요! 반갑습니다.");
    }
  });
}

위의 예시 코드에서는 음성인식 결과를 출력하고, “안녕하세요”라는 단어가 인식되면 음성합성으로 “안녕하세요! 반갑습니다.”라는 문장을 발성하도록 구현된 것을 확인할 수 있습니다.

결론

이제 Flutter 애플리케이션에서 RxDart를 활용하여 음성인식 및 음성합성 기능을 구현하는 방법에 대해 알아보았습니다. 이를 통해 사용자와의 자연스러운 대화형 인터페이스를 구현할 수 있으며, 다양한 응용 프로그램에서 활용할 수 있습니다.

참고 자료