다음을 통해 공유


Text to Speech

샘플을 찾아봅니다. 샘플 찾아보기

이 문서에서는 .NET 다중 플랫폼 앱 UI(.NET MAUI) ITextToSpeech 인터페이스를 사용하는 방법을 설명합니다. 이 인터페이스를 사용하면 애플리케이션이 기본 제공 텍스트 음성 변환 엔진을 활용하여 디바이스에서 텍스트를 다시 말할 수 있습니다. 사용 가능한 언어를 쿼리하는 데 사용할 수도 있습니다.

인터페이스의 ITextToSpeech 기본 구현은 속성을 통해 TextToSpeech.Default 사용할 수 있습니다. ITextToSpeech 인터페이스와 TextToSpeech 클래스는 모두 네임스페이스에 Microsoft.Maui.Media 포함됩니다.

시작하기

텍스트 음성 변환 기능에 액세스하려면 다음 플랫폼별 설정이 필요합니다.

프로젝트의 대상 Android 버전이 Android 11(R API 30) 이상으로 설정된 경우 TTS(텍스트 음성 변환) 엔진에 대한 의도 필터로 Android 매니페스트를 업데이트해야 합니다. 의도에 대한 자세한 내용은 의도 및 의도 필터에 대한 Android 설명서를 참조하세요.

Platforms/Android/AndroidManifest.xml 파일에서 노드에 다음 queries/intent 노드를 manifest 추가합니다.

<queries>
  <intent>
    <action android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

텍스트 음성 변환 사용

텍스트 음성 변환은 다음 코드 예제와 같이 말할 텍스트로 메서드를 호출 SpeakAsync 하여 작동합니다.

public async void Speak() =>
    await TextToSpeech.Default.SpeakAsync("Hello World");

이 메서드는 선택적 CancellationToken을 사용하여 시작된 발화를 중지합니다.

CancellationTokenSource cts;

public async Task SpeakNowDefaultSettingsAsync()
{
    cts = new CancellationTokenSource();
    await TextToSpeech.Default.SpeakAsync("Hello World", cancelToken: cts.Token);

    // This method will block until utterance finishes.
}

// Cancel speech if a cancellation token exists & hasn't been already requested.
public void CancelSpeech()
{
    if (cts?.IsCancellationRequested ?? true)
        return;
    
    cts.Cancel();
}

텍스트 음성 변환은 동일한 스레드의 음성 요청을 자동으로 큐에 넣습니다.

bool isBusy = false;

public void SpeakMultiple()
{
    isBusy = true;

    Task.WhenAll(
        TextToSpeech.Default.SpeakAsync("Hello World 1"),
        TextToSpeech.Default.SpeakAsync("Hello World 2"),
        TextToSpeech.Default.SpeakAsync("Hello World 3"))
        .ContinueWith((t) => { isBusy = false; }, TaskScheduler.FromCurrentSynchronizationContext());
}

설정

음성의 볼륨, 피치 및 로캘을 제어하려면 클래스를 SpeechOptions 사용합니다. 해당 클래스의 인스턴스를 메서드에 전달합니다 SpeakAsync(String, SpeechOptions, CancellationToken) . 이 메서드는 GetLocalesAsync() 운영 체제에서 제공하는 로캘 컬렉션을 검색합니다.

public async void SpeakSettings()
{
    IEnumerable<Locale> locales = await TextToSpeech.Default.GetLocalesAsync();

    SpeechOptions options = new SpeechOptions()
    {
        Pitch = 1.5f,   // 0.0 - 2.0
        Volume = 0.75f, // 0.0 - 1.0
        Locale = locales.FirstOrDefault()
    };

    await TextToSpeech.Default.SpeakAsync("How nice to meet you!", options);
}

다음은 이러한 매개 변수에 대해 지원되는 값입니다.

매개 변수 최소 최대
Pitch 0 2.0
Volume 0 1.0

제한 사항

  • 여러 스레드에서 호출되는 경우 발화 큐가 보장되지 않습니다.
  • 백그라운드 오디오 재생은 공식적으로 지원되지 않습니다.