Partager via


SpeechToText

L’API SpeechToText permet de convertir la parole en texte.

Capture d’écran de SpeechText implémentée sur macOS

Les conditions préalables suivantes sont requises pour SpeechToText :

Ajouter des autorisations à AndroidManifest.xml :

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

Syntaxe

C#

Le SpeechToText peut être utilisé de la manière suivante dans 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);
    }
}

ou utiliser des événements :

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;
}

Méthodes

méthode Description
RequestPermissions Demande l’autorisation.
ListenAsync Lance la reconnaissance vocale.
StartListenAsync Lance le service SpeechToText. (Les résultats de la reconnaissance vocale en temps réel sont exposés par le biais de RecognitionResultUpdated et RecognitionResultCompleted)
StopListenAsync Interrompt le service SpeechToText. (Les résultats de la reconnaissance vocale sont exposés par le biais de RecognitionResultCompleted)

SpeechToTextResult

Le résultat retourné par la méthode ListenAsync. Il peut être utilisé pour vérifier si la reconnaissance a réussi et peut également accéder à toutes les exceptions ayant pu survenir pendant la reconnaissance vocale.

Propriétés

Propriété Type Description
Texte string Le texte reconnu.
Exception Exception Obtient une Exception si l’opération de reconnaissance vocale échoue.
IsSuccessful bool Obtient une valeur qui indique si l'opération réussit.
CurrentState SpeechToTextState Obtient un état d’écoute actuel.

Événements

EventName EventArgs Description
RecognitionResultUpdated SpeechToTextRecognitionResultUpdatedEventArgs Se déclenche lorsque SpeechToText a des mises à jour en temps réel.
RecognitionResultCompleted SpeechToTextRecognitionResultCompletedEventArgs Se déclenche lorsque SpeechToText prend fin.
StateChanged SpeechToTextStateChangedEventArgs Se déclenche lorsque CurrentState est modifié.

Méthodes

méthode Description
EnsureSuccess Vérifie si l’opération de conversion de parole en texte réussit.

Avertissement

EnsureSuccess lève une Exception si l'opération de reconnaissance échoue.

Inscription des dépendances

Si vous souhaitez injecter un service, vous devez d’abord l’inscrire. Mettez à jour MauiProgram.cs avec les modifications suivantes :

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();
    }
}

Vous pouvez maintenant injecter le service comme ceci :

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);
	}
}

Exemples

Vous pouvez trouver un exemple de SpeechToText en action dans l'exemple d'application de la boîte à outils de la communauté .NET MAUI.

API

Vous pouvez trouver le code source deSpeechToText sur le référentiel du kit de ressources de la communauté .NET MAUI sur GitHub.