다음을 통해 공유


SpeechToText

API는 SpeechToText 음성을 텍스트로 변환하는 기능을 제공합니다.

macOS에서 구현된 SpeechText의 스크린샷

다음에 필요한 SpeechToText사전 조건은 다음과 같습니다.

에 사용 권한을 추가합니다.AndroidManifest.xml

<uses-permission android:name="android.permission.RECORD_AUDIO" />

구문

C#

SpeechToText C#에서 다음과 같이 사용할 수 있습니다.

async Task Listen(CancellationToken cancellationToken)
{
    var isGranted = await speechToText.RequestPermissions(cancellationToken);
    if (!isGranted)
    {
        await Toast.Make("Permission not granted").Show(CancellationToken.None);
        return;
    }

    var recognitionResult = await speechToText.ListenAsync(
                                        CultureInfo.GetCultureInfo(Language),
                                        new Progress<string>(partialText =>
                                        {
                                            RecognitionText += partialText + " ";
                                        }), cancellationToken);

    if (recognitionResult.IsSuccessful)
    {
        RecognitionText = recognitionResult.Text;
    }
    else
    {
        await Toast.Make(recognitionResult.Exception?.Message ?? "Unable to recognize speech").Show(CancellationToken.None);
    }
}

또는 이벤트 사용:

async Task StartListening(CancellationToken cancellationToken)
{
    var isGranted = await speechToText.RequestPermissions(cancellationToken);
    if (!isGranted)
    {
        await Toast.Make("Permission not granted").Show(CancellationToken.None);
        return;
    }

    speechToText.RecognitionResultUpdated += OnRecognitionTextUpdated;
    speechToText.RecognitionResultCompleted += OnRecognitionTextCompleted;
    await SpeechToText.StartListenAsync(CultureInfo.CurrentCulture, CancellationToken.None);
}

async Task StopListening(CancellationToken cancellationToken)
{
    await SpeechToText.StopListenAsync(CancellationToken.None);
    SpeechToText.Default.RecognitionResultUpdated -= OnRecognitionTextUpdated;
    SpeechToText.Default.RecognitionResultCompleted -= OnRecognitionTextCompleted;
}

void OnRecognitionTextUpdated(object? sender, SpeechToTextRecognitionResultUpdatedEventArgs args)
{
    RecognitionText += args.RecognitionResult;
};

void OnRecognitionTextCompleted(object? sender, SpeechToTextRecognitionResultCompletedEventArgs args)
{
    RecognitionText = args.RecognitionResult;
};

메서드

메서드 설명
RequestPermissions 사용 권한을 요청합니다.
ListenAsync 음성 인식을 시작합니다.
StartListenAsync SpeechToText 서비스를 시작합니다. (실시간 음성 인식 결과는 RecognitionResultUpdated 및 RecognitionResultCompleted를 통해 표시됨)
StopListenAsync SpeechToText 서비스를 중지합니다. (음성 인식 결과는 RecognitionResultCompleted를 통해 표시됩니다.)

SpeechToTextResult

메서드에서 반환된 ListenAsync 결과입니다. 이는 인식이 성공했는지 여부를 확인하고 음성 인식 중에 발생할 수 있는 예외에 액세스하는 데 사용할 수 있습니다.

속성

속성 Type 설명
Text string 인식된 텍스트입니다.
예외 Exception Exception 음성 인식 작업이 실패한 경우를 가져옵니다.
IsSuccessful bool 작업이 성공했는지 여부를 결정하는 값을 가져옵니다.
CurrentState SpeechToTextState 현재 수신 대기 상태를 가져옵니다.

이벤트

EventName Eventargs 설명
RecognitionResultUpdated SpeechToTextRecognitionResultUpdatedEventArgs SpeechToText에 실시간 업데이트가 있을 때 트리거됩니다.
RecognitionResultCompleted SpeechToTextRecognitionResultCompletedEventArgs SpeechToText가 완료되면 트리거됩니다.
StateChanged SpeechToTextStateChangedEventArgs 변경된 경우 CurrentState 트리거합니다.

메서드

메서드 설명
EnsureSuccess 음성 텍스트 변환 작업이 성공했는지 여부를 확인합니다.

Warning

EnsureSuccess 는 인식 작업이 실패한 경우 throw Exception 됩니다.

종속성 등록

서비스를 삽입하려는 경우 먼저 등록해야 합니다. 다음 변경 내용으로 업데이트 MauiProgram.cs 합니다.

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
			.UseMauiCommunityToolkit();

		builder.Services.AddSingleton<ISpeechToText>(SpeechToText.Default);
        return builder.Build();
    }
}

이제 다음과 같이 서비스를 삽입할 수 있습니다.

public partial class MainPage : ContentPage
{
    private readonly ISpeechToText speechToText;

	public MainPage(ISpeechToText speechToText)
	{
		InitializeComponent();
        this.speechToText = speechToText;
	}
	
	public async void Listen(object sender, EventArgs args)
	{
		var isGranted = await speechToText.RequestPermissions(cancellationToken);
        if (!isGranted)
        {
            await Toast.Make("Permission not granted").Show(CancellationToken.None);
            return;
        }

        var recognitionResult = await speechToText.ListenAsync(
                                            CultureInfo.GetCultureInfo("uk-ua"),
                                            new Progress<string>(), cancellationToken);

        recognitionResult.EnsureSuccess();
        await Toast.Make($"RecognizedText: {recognitionResult.Text}").Show(cancellationToken);
	}
}

예제

.NET MAUI 커뮤니티 도구 키트 샘플 애플리케이션에서 작동 중인 SpeechToText 예제를 찾을 수 있습니다.

API

.NET MAUI 커뮤니티 도구 키트 GitHub 리포지토리에서 오버에 대한 SpeechToText 소스 코드를 찾을 수 있습니다.