次の方法で共有


SpeechToText

SpeechToText API は、音声をテキストに変換する機能を提供します。

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.RecognitionResultUpdated -= OnRecognitionTextUpdated;
    speechToText.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 メソッドから返される結果。 これは、認識が成功したかどうかを確認したり、音声認識中に発生した可能性のある例外にアクセスしたりするために使用できます。

Properties

プロパティ タイプ 説明
テキスト string 認識されたテキスト。
例外 Exception 音声認識操作に失敗した場合に Exception を取得します。
IsSuccessful bool 操作が成功したかどうかを判断する値を取得します。
CurrentState SpeechToTextState 現在のリッスン状態を取得します。

Events

EventName EventArgs 説明
RecognitionResultUpdated SpeechToTextRecognitionResultUpdatedEventArgs SpeechToText がリアルタイムで更新されたときにトリガーされます。
RecognitionResultCompleted SpeechToTextRecognitionResultCompletedEventArgs SpeechToText が完了したときにトリガーされます。
StateChanged SpeechToTextStateChangedEventArgs CurrentState が変更されたときにトリガーされます。

メソッド

メソッド 説明
EnsureSuccess 音声テキスト変換操作が成功したかどうかを確認します。

警告

認識操作に失敗した場合、EnsureSuccessException をスローします。

依存関係の登録

サービスを挿入する場合は、まずサービスを登録する必要があります。 次の変更で 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);
	}
}

SpeechToText の動作の例は、「.NET MAUI Community Toolkit サンプル アプリケーション」で確認できます。

API

SpeechToText のソース コードは、.NET MAUI Community Toolkit の GitHub リポジトリにあります。