본문 바로가기
프로그래밍

👨‍💻 [MFC] MFC 로 윈도우 TTS(Text-to-Speech) 를 활용하도록 구현하려면 어떻게 해야 하나요? - SAPI (Speech Application Programming Interface)

by 밝음의기둥 2024. 10. 18.
반응형

👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

MFC 프로그램 으로 윈도우에서 기본적으로 제공하는 TTS(Text-to-Speech) 를 활용해야 하는 상황이 생겨서, 어떻게 구현해야 하는지 찾아보았습니다. 아래의 기본적인 코드를 활용해서 기능을 구현하면 될 것 같습니다.


질문 >

MFC 로 윈도우 TTS 를 활용하도록 구현하려면 어떻게 해야 하나요?

답변 >

MFC(마이크로소프트 파운데이션 클래스)에서 Windows TTS(Text-to-Speech)를 활용하려면, Windows의 ****SAPI (Speech Application Programming Interface)****를 사용해야 합니다. SAPI는 Microsoft의 음성 합성 및 음성 인식을 지원하는 API입니다.

아래는 MFC 애플리케이션에서 TTS를 구현하는 기본적인 과정입니다.


1. 개발 환경 준비

  • Visual Studio 설치 (MFC 프로젝트를 지원해야 함)
  • sapi.h 헤더와 SAPI 라이브러리(sapi.lib)를 사용합니다. Visual Studio에서 이 라이브러리가 기본 제공되므로 추가 설치가 필요하지 않습니다.

2. 기본 코드 구조

1단계: MFC 프로젝트 생성

  1. Visual Studio에서 MFC Application을 새로 만듭니다.
  2. 프로젝트 유형은 Dialog-based로 선택합니다.

2단계: SAPI 라이브러리 추가

  1. stdafx.h 또는 프로젝트 헤더 파일에 아래와 같이 포함합니다:
#include <sapi.h>  // SAPI 헤더
#pragma comment(lib, "sapi.lib")  // SAPI 라이브러리 링크


3단계: TTS 기능 구현

  • 아래 코드를 MFC 대화 상자 클래스에 추가하여 버튼 클릭 시 텍스트를 음성으로 출력하도록 구현합니다.

예제 코드: TTS 구현

#include "stdafx.h"
#include <sapi.h>  // SAPI 라이브러리 사용

// 버튼 클릭 이벤트 핸들러
void CMFCDemoDlg::OnBnClickedSpeak()
{
    ISpVoice* pVoice = nullptr;

    // COM 라이브러리 초기화
    if (FAILED(::CoInitialize(NULL))) {
        AfxMessageBox(_T("COM 라이브러리 초기화에 실패했습니다."));
        return;
    }

    // SAPI 음성 객체 생성
    HRESULT hr = CoCreateInstance(
        CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void**)&pVoice);

    if (SUCCEEDED(hr)) {
        // 텍스트를 음성으로 출력
        hr = pVoice->Speak(L"Hello, welcome to MFC TTS demo!", 0, NULL);
        pVoice->Release();  // 음성 객체 해제
    } else {
        AfxMessageBox(_T("TTS 객체 생성에 실패했습니다."));
    }

    // COM 라이브러리 해제
    ::CoUninitialize();
}


4단계: 버튼에 이벤트 연결

  1. 리소스 뷰에서 버튼을 추가합니다.
  2. 버튼의 ID를 IDC_BUTTON_SPEAK으로 설정합니다.
  3. 버튼의 클릭 이벤트에 위의 OnBnClickedSpeak() 함수를 연결합니다.

3. 실행 및 테스트

  1. 프로그램을 빌드하고 실행합니다.
  2. 버튼을 클릭하면 "Hello, welcome to MFC TTS demo!"라는 음성이 출력됩니다.

4. 에러 처리 및 디버깅 팁

  • COM 초기화 실패: CoInitialize가 여러 번 호출되었는지 확인합니다.
  • TTS 객체 생성 실패: SAPI가 정상적으로 설치되었는지 확인합니다.
  • 음성 출력이 안 되는 경우: Windows TTS 엔진이 올바르게 설치되어 있는지 확인합니다.

5. 추가 기능 구현

  • 언어 및 음성 선택: ISpVoice::SetVoice()를 사용해 다양한 음성 엔진을 선택할 수 있습니다.
  • 음성 속도 및 볼륨 조절: ISpVoice::SetRate()와 ISpVoice::SetVolume() 함수를 사용해 속도와 볼륨을 조정합니다.

속도와 볼륨 조절 예제:

pVoice->SetRate(-2);  // 속도 조절 (-10 ~ 10)
pVoice->SetVolume(80);  // 볼륨 조절 (0 ~ 100)


이 코드를 사용하면 MFC 애플리케이션에서 Windows의 기본 TTS 기능을 활용할 수 있습니다. 필요에 따라 더 복잡한 음성 제어 기능을 구현할 수 있습니다.


🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리 입니다. 📢 위로그@WiLog 는 자기주도학습을 목적으로 라이브 스트리밍을 합니다. 📢 1인 게임 개발을 목표로 Unreal과 Blender를 학습 중입니

www.youtube.com

 

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com

 


반응형