Share via


Spraak herkennen en vertalen

Referentiedocumentatiepakket (NuGet) | Aanvullende voorbeelden op GitHub |

In deze handleiding leert u hoe u menselijke spraak herkent en vertaalt naar een andere taal.

Zie het overzicht van spraakomzetting voor meer informatie over:

  • Spraak naar tekst vertalen
  • Spraak vertalen naar meerdere doeltalen
  • Directe spraak-naar-spraakomzetting uitvoeren

Gevoelige gegevens en omgevingsvariabelen

De voorbeeldbroncode in dit artikel is afhankelijk van omgevingsvariabelen voor het opslaan van gevoelige gegevens, zoals de sleutel en regio van de Spraak-resource. De Program klasse bevat twee static readonly string waarden die zijn toegewezen vanuit de omgevingsvariabelen van de hostcomputer: SPEECH__SUBSCRIPTION__KEY en SPEECH__SERVICE__REGION. Beide velden bevinden zich in het klassebereik, zodat ze toegankelijk zijn binnen methodeteksten van de klasse:

public class Program
{
    static readonly string SPEECH__SUBSCRIPTION__KEY =
        Environment.GetEnvironmentVariable(nameof(SPEECH__SUBSCRIPTION__KEY));
    
    static readonly string SPEECH__SERVICE__REGION =
        Environment.GetEnvironmentVariable(nameof(SPEECH__SERVICE__REGION));

    static Task Main() => Task.CompletedTask;
}

Zie Omgevingsvariabelen en toepassingsconfiguratie voor meer informatie over omgevingsvariabelen.

Een configuratie voor spraakomzetting maken

Als u de Speech-service wilt aanroepen met behulp van de Speech SDK, moet u een SpeechTranslationConfig exemplaar maken. Deze klasse bevat informatie over uw abonnement, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.

Tip

Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, u maakt altijd een configuratie.

U kunt op een aantal manieren initialiseren SpeechTranslationConfig :

  • Met een abonnement: geef een sleutel en de bijbehorende regio door.
  • Met een eindpunt: geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
  • Met een host: geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
  • Met een autorisatietoken: geef een autorisatietoken en de bijbehorende regio door.

Laten we eens kijken hoe u een SpeechTranslationConfig exemplaar maakt met behulp van een sleutel en regio. Haal de spraakresourcesleutel en -regio op in Azure Portal.

public class Program
{
    static readonly string SPEECH__SUBSCRIPTION__KEY =
        Environment.GetEnvironmentVariable(nameof(SPEECH__SUBSCRIPTION__KEY));
    
    static readonly string SPEECH__SERVICE__REGION =
        Environment.GetEnvironmentVariable(nameof(SPEECH__SERVICE__REGION));

    static Task Main() => TranslateSpeechAsync();

    static async Task TranslateSpeechAsync()
    {
        var speechTranslationConfig =
            SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    }
}

De brontaal wijzigen

Een veelvoorkomende taak van spraakomzetting is het opgeven van de invoertaal (of brontaal). In het volgende voorbeeld ziet u hoe u de invoertaal zou wijzigen in het Italiaans. In uw code communiceert u met het SpeechTranslationConfig exemplaar door deze toe te wijzen aan de SpeechRecognitionLanguage eigenschap:

static async Task TranslateSpeechAsync()
{
    var speechTranslationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    // Source (input) language
    speechTranslationConfig.SpeechRecognitionLanguage = "it-IT";
}

De eigenschap SpeechRecognitionLanguage verwacht een indelingstekenreeks voor taal-landinstellingen. Raadpleeg de lijst met ondersteunde landinstellingen voor spraakomzetting.

Een vertaaltaal toevoegen

Een andere veelvoorkomende taak van spraakomzetting is het opgeven van doeltalen voor vertaling. Er is ten minste één vereist, maar veelvouden worden ondersteund. Met het volgende codefragment worden zowel Frans als Duits ingesteld als vertaaltaaldoelen:

static async Task TranslateSpeechAsync()
{
    var speechTranslationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    speechTranslationConfig.SpeechRecognitionLanguage = "it-IT";
    
    speechTranslationConfig.AddTargetLanguage("fr");
    speechTranslationConfig.AddTargetLanguage("de");
}

Bij elke aanroep wordt AddTargetLanguageeen nieuwe doeltaal voor vertaling opgegeven. Met andere woorden, wanneer spraak wordt herkend uit de brontaal, is elke doelomzetting beschikbaar als onderdeel van de resulterende vertaalbewerking.

Een vertaalherkenning initialiseren

Nadat u een SpeechTranslationConfig exemplaar hebt gemaakt, is de volgende stap het initialiseren TranslationRecognizervan . Wanneer u initialiseert TranslationRecognizer, moet u deze doorgeven aan uw speechTranslationConfig exemplaar. Het configuratieobject biedt de referenties die de Speech-service nodig heeft om uw aanvraag te valideren.

Als u spraak herkent met behulp van de standaardmicrofoon van uw apparaat, ziet het TranslationRecognizer exemplaar er als volgt uit:

static async Task TranslateSpeechAsync()
{
    var speechTranslationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    var fromLanguage = "en-US";
    var toLanguages = new List<string> { "it", "fr", "de" };
    speechTranslationConfig.SpeechRecognitionLanguage = fromLanguage;
    toLanguages.ForEach(speechTranslationConfig.AddTargetLanguage);

    using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig);
}

Als u het audio-invoerapparaat wilt opgeven, moet u een AudioConfig klasse-exemplaar maken en de parameter opgeven bij het audioConfig initialiseren TranslationRecognizer.

Verwijs eerst als volgt naar het AudioConfig object:

static async Task TranslateSpeechAsync()
{
    var speechTranslationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    var fromLanguage = "en-US";
    var toLanguages = new List<string> { "it", "fr", "de" };
    speechTranslationConfig.SpeechRecognitionLanguage = fromLanguage;
    toLanguages.ForEach(speechTranslationConfig.AddTargetLanguage);

    using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
    using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
}

Als u een audiobestand wilt opgeven in plaats van een microfoon te gebruiken, moet u nog steeds een audioConfig parameter opgeven. Wanneer u echter een AudioConfig klasse-exemplaar maakt in plaats van aanroepen FromDefaultMicrophoneInput, roept FromWavFileInput u de parameter aan en geeft u deze filename door:

static async Task TranslateSpeechAsync()
{
    var speechTranslationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    var fromLanguage = "en-US";
    var toLanguages = new List<string> { "it", "fr", "de" };
    speechTranslationConfig.SpeechRecognitionLanguage = fromLanguage;
    toLanguages.ForEach(speechTranslationConfig.AddTargetLanguage);

    using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
    using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
}

Spraak vertalen

Voor het vertalen van spraak is de Speech-SDK afhankelijk van een microfoon of audiobestandsinvoer. Spraakherkenning vindt plaats vóór spraakomzetting. Nadat alle objecten zijn geïnitialiseerd, roept u de functie recognize-once aan en haalt u het resultaat op:

static async Task TranslateSpeechAsync()
{
    var speechTranslationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    var fromLanguage = "en-US";
    var toLanguages = new List<string> { "it", "fr", "de" };
    speechTranslationConfig.SpeechRecognitionLanguage = fromLanguage;
    toLanguages.ForEach(speechTranslationConfig.AddTargetLanguage);

    using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

    Console.Write($"Say something in '{fromLanguage}' and ");
    Console.WriteLine($"we'll translate into '{string.Join("', '", toLanguages)}'.\n");
    
    var result = await translationRecognizer.RecognizeOnceAsync();
    if (result.Reason == ResultReason.TranslatedSpeech)
    {
        Console.WriteLine($"Recognized: \"{result.Text}\":");
        foreach (var element in result.Translations)
        {
            Console.WriteLine($"    TRANSLATED into '{element.Key}': {element.Value}");
        }
    }
}

Zie de basisbeginselen van spraakherkenning voor meer informatie over spraak-naar-tekst.

Vertaling op basis van gebeurtenissen

Het TranslationRecognizer object toont een Recognizing gebeurtenis. De gebeurtenis wordt meerdere keren geactiveerd en biedt een mechanisme om de tussenliggende vertaalresultaten op te halen.

Notitie

Tussenliggende vertaalresultaten zijn niet beschikbaar wanneer u meertalige spraakomzetting gebruikt.

In het volgende voorbeeld worden de resultaten van de tussenliggende vertaling afgedrukt naar de console:

using (var audioInput = AudioConfig.FromWavFileInput(@"whatstheweatherlike.wav"))
{
    using (var translationRecognizer = new TranslationRecognizer(config, audioInput))
    {
        // Subscribes to events.
        translationRecognizer.Recognizing += (s, e) =>
        {
            Console.WriteLine($"RECOGNIZING in '{fromLanguage}': Text={e.Result.Text}");
            foreach (var element in e.Result.Translations)
            {
                Console.WriteLine($"    TRANSLATING into '{element.Key}': {element.Value}");
            }
        };

        translationRecognizer.Recognized += (s, e) => {
            if (e.Result.Reason == ResultReason.TranslatedSpeech)
            {
                Console.WriteLine($"RECOGNIZED in '{fromLanguage}': Text={e.Result.Text}");
                foreach (var element in e.Result.Translations)
                {
                    Console.WriteLine($"    TRANSLATED into '{element.Key}': {element.Value}");
                }
            }
            else if (e.Result.Reason == ResultReason.RecognizedSpeech)
            {
                Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
                Console.WriteLine($"    Speech not translated.");
            }
            else if (e.Result.Reason == ResultReason.NoMatch)
            {
                Console.WriteLine($"NOMATCH: Speech could not be recognized.");
            }
        };

        // Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
        Console.WriteLine("Start translation...");
        await translationRecognizer.StartContinuousRecognitionAsync().ConfigureAwait(false);

        // Waits for completion.
        // Use Task.WaitAny to keep the task rooted.
        Task.WaitAny(new[] { stopTranslation.Task });

        // Stops translation.
        await translationRecognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);
    }
}

Vertalingen synthetiseren

Na een geslaagde spraakherkenning en vertaling bevat het resultaat alle vertalingen in een woordenboek. De Translations woordenlijstsleutel is de doeltaal voor vertaling en de waarde is de vertaalde tekst. Herkende spraak kan worden vertaald en vervolgens gesynthetiseerd in een andere taal (spraak-naar-spraak).

Op gebeurtenissen gebaseerde synthese

Het TranslationRecognizer object toont een Synthesizing gebeurtenis. De gebeurtenis wordt meerdere keren geactiveerd en biedt een mechanisme om de gesynthetiseerde audio op te halen uit het resultaat van de vertaalherkenning. Als u vertaalt naar meerdere talen, raadpleegt u Handmatige synthese.

Geef de synthesestem op door een VoiceName exemplaar toe te wijzen en geef een gebeurtenishandler op voor de Synthesizing gebeurtenis om de audio op te halen. In het volgende voorbeeld wordt de vertaalde audio opgeslagen als een .wav-bestand.

Belangrijk

De op gebeurtenissen gebaseerde synthese werkt alleen met één vertaling. Voeg niet meerdere talen voor doelvertaling toe. Daarnaast moet de VoiceName waarde dezelfde taal zijn als de doeltaal voor vertaling. Kan bijvoorbeeld "de" toewijzen aan "de-DE-Hedda".

static async Task TranslateSpeechAsync()
{
    var speechTranslationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    var fromLanguage = "en-US";
    var toLanguage = "de";
    speechTranslationConfig.SpeechRecognitionLanguage = fromLanguage;
    speechTranslationConfig.AddTargetLanguage(toLanguage);

    speechTranslationConfig.VoiceName = "de-DE-Hedda";

    using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

    translationRecognizer.Synthesizing += (_, e) =>
    {
        var audio = e.Result.GetAudio();
        Console.WriteLine($"Audio synthesized: {audio.Length:#,0} byte(s) {(audio.Length == 0 ? "(Complete)" : "")}");

        if (audio.Length > 0)
        {
            File.WriteAllBytes("YourAudioFile.wav", audio);
        }
    };

    Console.Write($"Say something in '{fromLanguage}' and ");
    Console.WriteLine($"we'll translate into '{toLanguage}'.\n");

    var result = await translationRecognizer.RecognizeOnceAsync();
    if (result.Reason == ResultReason.TranslatedSpeech)
    {
        Console.WriteLine($"Recognized: \"{result.Text}\"");
        Console.WriteLine($"Translated into '{toLanguage}': {result.Translations[toLanguage]}");
    }
}

Handmatige synthese

U kunt de Translations woordenlijst gebruiken om audio uit de vertaaltekst te synthetiseren. Door elke vertaling herhalen en synthetiseren. Wanneer u een SpeechSynthesizer exemplaar maakt, moet SpeechSynthesisVoiceName de eigenschap van het SpeechConfig object zijn ingesteld op de gewenste stem.

In het volgende voorbeeld worden vijf talen vertaald. Elke vertaling wordt vervolgens gesynthetiseerd naar een audiobestand in de bijbehorende neurale taal.

static async Task TranslateSpeechAsync()
{
    var speechTranslationConfig =
        SpeechTranslationConfig.FromSubscription(SPEECH__SERVICE__KEY, SPEECH__SERVICE__REGION);

    var fromLanguage = "en-US";
    var toLanguages = new List<string> { "de", "en", "it", "pt", "zh-Hans" };
    speechTranslationConfig.SpeechRecognitionLanguage = fromLanguage;
    toLanguages.ForEach(speechTranslationConfig.AddTargetLanguage);

    using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

    Console.Write($"Say something in '{fromLanguage}' and ");
    Console.WriteLine($"we'll translate into '{string.Join("', '", toLanguages)}'.\n");

    var result = await translationRecognizer.RecognizeOnceAsync();
    if (result.Reason == ResultReason.TranslatedSpeech)
    {
        var languageToVoiceMap = new Dictionary<string, string>
        {
            ["de"] = "de-DE-KatjaNeural",
            ["en"] = "en-US-AriaNeural",
            ["it"] = "it-IT-ElsaNeural",
            ["pt"] = "pt-BR-FranciscaNeural",
            ["zh-Hans"] = "zh-CN-XiaoxiaoNeural"
        };

        Console.WriteLine($"Recognized: \"{result.Text}\"");

        foreach (var (language, translation) in result.Translations)
        {
            Console.WriteLine($"Translated into '{language}': {translation}");

            var speechConfig =
                SpeechConfig.FromSubscription(
                    SPEECH__SERVICE__KEY, SPEECH__SERVICE__REGION);
            speechConfig.SpeechSynthesisVoiceName = languageToVoiceMap[language];

            using var audioConfig = AudioConfig.FromWavFileOutput($"{language}-translation.wav");
            using var speechSynthesizer = new SpeechSynthesizer(speechConfig, audioConfig);
            
            await speechSynthesizer.SpeakTextAsync(translation);
        }
    }
}

Zie de basisprincipes van spraaksynthese voor meer informatie over spraaksynthese.

Meertalige vertaling met taalidentificatie

In veel scenario's weet u mogelijk niet welke invoertalen u moet opgeven. Met taalidentificatie kunt u maximaal 10 mogelijke invoertalen detecteren en automatisch vertalen naar uw doeltalen.

In het volgende voorbeeld wordt verwacht dat en-US of zh-CN moet worden gedetecteerd omdat deze zijn gedefinieerd in AutoDetectSourceLanguageConfig. Vervolgens wordt de spraak vertaald naar de en fr zoals opgegeven in de aanroepen naar AddTargetLanguage().

speechTranslationConfig.AddTargetLanguage("de");
speechTranslationConfig.AddTargetLanguage("fr");
var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromLanguages(new string[] { "en-US", "zh-CN" });
var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);

Zie taalidentificatie voor een volledig codevoorbeeld.

Meertalige spraakomzetting zonder brontaalkandidaten

Spraakomzetting met meerdere talen implementeert een nieuw niveau van spraakomzettingstechnologie waarmee verschillende mogelijkheden worden ontgrendeld, waaronder het hebben van geen opgegeven invoertaal en het verwerken van taalswitches binnen dezelfde sessie. Deze functies maken een nieuw niveau van spraakomzettingsbevoegdheden mogelijk die in uw producten kunnen worden geïmplementeerd.

Wanneer u momenteel Language ID gebruikt met spraakomzetting, moet u het SpeechTranslationConfig object maken op basis van het v2-eindpunt. Vervang de tekenreeks 'YourServiceRegion' door uw spraakresourceregio (zoals 'westus'). Vervang YourSubscriptionKey door uw Spraak-resourcesleutel.

var v2EndpointInString = String.Format("wss://{0}.stt.speech.microsoft.com/speech/universal/v2", "YourServiceRegion");
var v2EndpointUrl = new Uri(v2EndpointInString);
var speechTranslationConfig = SpeechTranslationConfig.FromEndpoint(v2EndpointUrl, "YourSubscriptionKey");

Geef de vertaaldoeltalen op. Vervang door talen van uw keuze. U kunt meer regels toevoegen.

config.AddTargetLanguage("de");
config.AddTargetLanguage("fr");

Een belangrijke differentiator met meertalige spraakomzetting is dat u de brontaal niet hoeft op te geven. Dit komt doordat de service automatisch de brontaal detecteert. Maak het AutoDetectSourceLanguageConfig object met de fromOpenRange methode om de service te laten weten dat u meertalige spraakomzetting wilt gebruiken zonder opgegeven brontaal.

AutoDetectSourceLanguageConfig autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.fromOpenRange(); 
var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);

Zie voorbeelden van spraakomzetting op GitHub voor een volledig codevoorbeeld met de Speech SDK.

Referentiedocumentatiepakket (NuGet) | Aanvullende voorbeelden op GitHub |

In deze handleiding leert u hoe u menselijke spraak herkent en vertaalt naar een andere taal.

Zie het overzicht van spraakomzetting voor meer informatie over:

  • Spraak naar tekst vertalen
  • Spraak vertalen naar meerdere doeltalen
  • Directe spraak-naar-spraakomzetting uitvoeren

Gevoelige gegevens en omgevingsvariabelen

De voorbeeldbroncode in dit artikel is afhankelijk van omgevingsvariabelen voor het opslaan van gevoelige gegevens, zoals de sleutel en regio van de Spraak-resource. Het C++-codebestand bevat twee tekenreekswaarden die zijn toegewezen vanuit de omgevingsvariabelen van de hostcomputer: SPEECH__SUBSCRIPTION__KEY en SPEECH__SERVICE__REGION. Beide velden bevinden zich in het klassebereik, zodat ze toegankelijk zijn binnen methodeteksten van de klasse:

auto SPEECH__SUBSCRIPTION__KEY = getenv("SPEECH__SUBSCRIPTION__KEY");
auto SPEECH__SERVICE__REGION = getenv("SPEECH__SERVICE__REGION");

Zie Omgevingsvariabelen en toepassingsconfiguratie voor meer informatie over omgevingsvariabelen.

Een configuratie voor spraakomzetting maken

Als u de Speech-service wilt aanroepen met behulp van de Speech SDK, moet u een SpeechTranslationConfig exemplaar maken. Deze klasse bevat informatie over uw abonnement, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.

Tip

Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, u maakt altijd een configuratie.

U kunt op een aantal manieren initialiseren SpeechTranslationConfig :

  • Met een abonnement: geef een sleutel en de bijbehorende regio door.
  • Met een eindpunt: geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
  • Met een host: geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
  • Met een autorisatietoken: geef een autorisatietoken en de bijbehorende regio door.

Laten we eens kijken hoe u een SpeechTranslationConfig exemplaar maakt met behulp van een sleutel en regio. Haal de spraakresourcesleutel en -regio op in Azure Portal.

auto SPEECH__SUBSCRIPTION__KEY = getenv("SPEECH__SUBSCRIPTION__KEY");
auto SPEECH__SERVICE__REGION = getenv("SPEECH__SERVICE__REGION");

void translateSpeech() {
    auto speechTranslationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
}

int main(int argc, char** argv) {
    setlocale(LC_ALL, "");
    translateSpeech();
    return 0;
}

De brontaal wijzigen

Een veelvoorkomende taak van spraakomzetting is het opgeven van de invoertaal (of brontaal). In het volgende voorbeeld ziet u hoe u de invoertaal zou wijzigen in het Italiaans. Communiceer in uw code met het SpeechTranslationConfig exemplaar door de SetSpeechRecognitionLanguage methode aan te roepen.

void translateSpeech() {
    auto speechTranslationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    // Source (input) language
    speechTranslationConfig->SetSpeechRecognitionLanguage("it-IT");
}

De eigenschap SpeechRecognitionLanguage verwacht een indelingstekenreeks voor taal-landinstellingen. Raadpleeg de lijst met ondersteunde landinstellingen voor spraakomzetting.

Een vertaaltaal toevoegen

Een andere veelvoorkomende taak van spraakomzetting is het opgeven van doeltalen voor vertaling. Er is ten minste één vereist, maar veelvouden worden ondersteund. Met het volgende codefragment worden zowel Frans als Duits ingesteld als vertaaltaaldoelen:

void translateSpeech() {
    auto speechTranslationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    speechTranslationConfig->SetSpeechRecognitionLanguage("it-IT");

    speechTranslationConfig->AddTargetLanguage("fr");
    speechTranslationConfig->AddTargetLanguage("de");
}

Bij elke aanroep wordt AddTargetLanguageeen nieuwe doeltaal voor vertaling opgegeven. Met andere woorden, wanneer spraak wordt herkend uit de brontaal, is elke doelomzetting beschikbaar als onderdeel van de resulterende vertaalbewerking.

Een vertaalherkenning initialiseren

Nadat u een SpeechTranslationConfig exemplaar hebt gemaakt, is de volgende stap het initialiseren TranslationRecognizervan . Wanneer u initialiseert TranslationRecognizer, moet u deze doorgeven aan uw translationConfig exemplaar. Het configuratieobject biedt de referenties die de Speech-service nodig heeft om uw aanvraag te valideren.

Als u spraak herkent met behulp van de standaardmicrofoon van uw apparaat, TranslationRecognizer ziet u er als volgt uit:

void translateSpeech() {
    auto speechTranslationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    auto fromLanguage = "en-US";
    auto toLanguages = { "it", "fr", "de" };
    speechTranslationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    for (auto language : toLanguages) {
        speechTranslationConfig->AddTargetLanguage(language);
    }

    auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig);
}

Als u het audio-invoerapparaat wilt opgeven, moet u een AudioConfig klasse-exemplaar maken en de parameter opgeven bij het audioConfig initialiseren TranslationRecognizer.

Verwijs eerst als volgt naar het AudioConfig object:

void translateSpeech() {
    auto speechTranslationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    auto fromLanguage = "en-US";
    auto toLanguages = { "it", "fr", "de" };
    speechTranslationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    for (auto language : toLanguages) {
        speechTranslationConfig->AddTargetLanguage(language);
    }

    auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
    auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig, audioConfig);
}

Als u een audiobestand wilt opgeven in plaats van een microfoon te gebruiken, moet u nog steeds een audioConfig parameter opgeven. Wanneer u echter een AudioConfig klasse-exemplaar maakt in plaats van aanroepen FromDefaultMicrophoneInput, roept FromWavFileInput u de parameter aan en geeft u deze filename door:

void translateSpeech() {
    auto speechTranslationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    auto fromLanguage = "en-US";
    auto toLanguages = { "it", "fr", "de" };
    speechTranslationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    for (auto language : toLanguages) {
        speechTranslationConfig->AddTargetLanguage(language);
    }

    auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
    auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig, audioConfig);
}

Spraak vertalen

Voor het vertalen van spraak is de Speech-SDK afhankelijk van een microfoon of audiobestandsinvoer. Spraakherkenning vindt plaats vóór spraakomzetting. Nadat alle objecten zijn geïnitialiseerd, roept u de functie recognize-once aan en haalt u het resultaat op:

void translateSpeech() {
    auto speechTranslationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    string fromLanguage = "en-US";
    string toLanguages[3] = { "it", "fr", "de" };
    speechTranslationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    for (auto language : toLanguages) {
        speechTranslationConfig->AddTargetLanguage(language);
    }

    auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig);
    cout << "Say something in '" << fromLanguage << "' and we'll translate...\n";

    auto result = translationRecognizer->RecognizeOnceAsync().get();
    if (result->Reason == ResultReason::TranslatedSpeech)
    {
        cout << "Recognized: \"" << result->Text << "\"" << std::endl;
        for (auto pair : result->Translations)
        {
            auto language = pair.first;
            auto translation = pair.second;
            cout << "Translated into '" << language << "': " << translation << std::endl;
        }
    }
}

Zie de basisbeginselen van spraakherkenning voor meer informatie over spraak-naar-tekst.

Vertalingen synthetiseren

Na een geslaagde spraakherkenning en vertaling bevat het resultaat alle vertalingen in een woordenboek. De Translations woordenlijstsleutel is de doeltaal voor vertaling en de waarde is de vertaalde tekst. Herkende spraak kan worden vertaald en vervolgens gesynthetiseerd in een andere taal (spraak-naar-spraak).

Op gebeurtenissen gebaseerde synthese

Het TranslationRecognizer object toont een Synthesizing gebeurtenis. De gebeurtenis wordt meerdere keren geactiveerd en biedt een mechanisme om de gesynthetiseerde audio op te halen uit het resultaat van de vertaalherkenning. Als u vertaalt naar meerdere talen, raadpleegt u Handmatige synthese.

Geef de synthesestem op door een SetVoiceName exemplaar toe te wijzen en geef een gebeurtenishandler op voor de Synthesizing gebeurtenis om de audio op te halen. In het volgende voorbeeld wordt de vertaalde audio opgeslagen als een .wav-bestand.

Belangrijk

De op gebeurtenissen gebaseerde synthese werkt alleen met één vertaling. Voeg niet meerdere talen voor doelvertaling toe. Daarnaast moet de SetVoiceName waarde dezelfde taal zijn als de doeltaal voor vertaling. Kan bijvoorbeeld "de" toewijzen aan "de-DE-Hedda".

void translateSpeech() {
    auto speechTranslationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    auto fromLanguage = "en-US";
    auto toLanguage = "de";
    speechTranslationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    speechTranslationConfig->AddTargetLanguage(toLanguage);

    speechTranslationConfig->SetVoiceName("de-DE-Hedda");

    auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig);
    translationRecognizer->Synthesizing.Connect([](const TranslationSynthesisEventArgs& e)
        {
            auto audio = e.Result->Audio;
            auto size = audio.size();
            cout << "Audio synthesized: " << size << " byte(s)" << (size == 0 ? "(COMPLETE)" : "") << std::endl;

            if (size > 0) {
                ofstream file("translation.wav", ios::out | ios::binary);
                auto audioData = audio.data();
                file.write((const char*)audioData, sizeof(audio[0]) * size);
                file.close();
            }
        });

    cout << "Say something in '" << fromLanguage << "' and we'll translate...\n";

    auto result = translationRecognizer->RecognizeOnceAsync().get();
    if (result->Reason == ResultReason::TranslatedSpeech)
    {
        cout << "Recognized: \"" << result->Text << "\"" << std::endl;
        for (auto pair : result->Translations)
        {
            auto language = pair.first;
            auto translation = pair.second;
            cout << "Translated into '" << language << "': " << translation << std::endl;
        }
    }
}

Handmatige synthese

U kunt de Translations woordenlijst gebruiken om audio uit de vertaaltekst te synthetiseren. Door elke vertaling herhalen en synthetiseren. Wanneer u een SpeechSynthesizer exemplaar maakt, moet SetSpeechSynthesisVoiceName de eigenschap van het SpeechConfig object zijn ingesteld op de gewenste stem.

In het volgende voorbeeld worden vijf talen vertaald. Elke vertaling wordt vervolgens gesynthetiseerd naar een audiobestand in de bijbehorende neurale taal.

void translateSpeech() {
    auto speechTranslationConfig =
        SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    auto fromLanguage = "en-US";
    auto toLanguages = { "de", "en", "it", "pt", "zh-Hans" };
    speechTranslationConfig->SetSpeechRecognitionLanguage(fromLanguage);
    for (auto language : toLanguages) {
        speechTranslationConfig->AddTargetLanguage(language);
    }

    auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig);

    cout << "Say something in '" << fromLanguage << "' and we'll translate...\n";

    auto result = translationRecognizer->RecognizeOnceAsync().get();
    if (result->Reason == ResultReason::TranslatedSpeech)
    {
        map<string, string> languageToVoiceMap;
        languageToVoiceMap["de"] = "de-DE-KatjaNeural";
        languageToVoiceMap["en"] = "en-US-AriaNeural";
        languageToVoiceMap["it"] = "it-IT-ElsaNeural";
        languageToVoiceMap["pt"] = "pt-BR-FranciscaNeural";
        languageToVoiceMap["zh-Hans"] = "zh-CN-XiaoxiaoNeural";

        cout << "Recognized: \"" << result->Text << "\"" << std::endl;
        for (auto pair : result->Translations)
        {
            auto language = pair.first;
            auto translation = pair.second;
            cout << "Translated into '" << language << "': " << translation << std::endl;

            auto speechConfig =
                SpeechConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
            speechConfig->SetSpeechSynthesisVoiceName(languageToVoiceMap[language]);

            auto audioConfig = AudioConfig::FromWavFileOutput(language + "-translation.wav");
            auto speechSynthesizer = SpeechSynthesizer::FromConfig(speechConfig, audioConfig);

            speechSynthesizer->SpeakTextAsync(translation).get();
        }
    }
}

Zie de basisprincipes van spraaksynthese voor meer informatie over spraaksynthese.

Meertalige vertaling met taalidentificatie

In veel scenario's weet u mogelijk niet welke invoertalen u moet opgeven. Met taalidentificatie kunt u maximaal 10 mogelijke invoertalen detecteren en automatisch vertalen naar uw doeltalen.

In het volgende voorbeeld wordt verwacht dat en-US of zh-CN moet worden gedetecteerd omdat deze zijn gedefinieerd in AutoDetectSourceLanguageConfig. Vervolgens wordt de spraak vertaald naar de en fr zoals opgegeven in de aanroepen naar AddTargetLanguage().

speechTranslationConfig->AddTargetLanguage("de");
speechTranslationConfig->AddTargetLanguage("fr");
auto autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig::FromLanguages({ "en-US", "zh-CN" });
auto translationRecognizer = TranslationRecognizer::FromConfig(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);

Zie taalidentificatie voor een volledig codevoorbeeld.

Referentiedocumentatiepakket (Go) | Aanvullende voorbeelden op GitHub |

De Speech SDK voor Go biedt geen ondersteuning voor spraakomzetting. Selecteer een andere programmeertaal of de Go-verwijzing en voorbeelden die zijn gekoppeld aan het begin van dit artikel.

Referentiedocumentatie | Aanvullende voorbeelden op GitHub

In deze handleiding leert u hoe u menselijke spraak herkent en vertaalt naar een andere taal.

Zie het overzicht van spraakomzetting voor meer informatie over:

  • Spraak naar tekst vertalen
  • Spraak vertalen naar meerdere doeltalen
  • Directe spraak-naar-spraakomzetting uitvoeren

Gevoelige gegevens en omgevingsvariabelen

De voorbeeldbroncode in dit artikel is afhankelijk van omgevingsvariabelen voor het opslaan van gevoelige gegevens, zoals de sleutel en regio van de Spraak-resource. Het Java-codebestand bevat twee static final String waarden die zijn toegewezen vanuit de omgevingsvariabelen van de hostcomputer: SPEECH__SUBSCRIPTION__KEY en SPEECH__SERVICE__REGION. Beide velden bevinden zich in het klassebereik, zodat ze toegankelijk zijn binnen methodeteksten van de klasse:

public class App {

    static final String SPEECH__SUBSCRIPTION__KEY = System.getenv("SPEECH__SUBSCRIPTION__KEY");
    static final String SPEECH__SERVICE__REGION = System.getenv("SPEECH__SERVICE__REGION");

    public static void main(String[] args) { }
}

Zie Omgevingsvariabelen en toepassingsconfiguratie voor meer informatie over omgevingsvariabelen.

Een configuratie voor spraakomzetting maken

Als u de Speech-service wilt aanroepen met behulp van de Speech SDK, moet u een SpeechTranslationConfig exemplaar maken. Deze klasse bevat informatie over uw abonnement, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.

Tip

Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, u maakt altijd een configuratie.

U kunt een SpeechTranslationConfig exemplaar op een aantal manieren initialiseren:

  • Met een abonnement: geef een sleutel en de bijbehorende regio door.
  • Met een eindpunt: geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
  • Met een host: geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
  • Met een autorisatietoken: geef een autorisatietoken en de bijbehorende regio door.

Laten we eens kijken hoe u een SpeechTranslationConfig exemplaar maakt met behulp van een sleutel en regio. Haal de spraakresourcesleutel en -regio op in Azure Portal.

public class App {

    static final String SPEECH__SUBSCRIPTION__KEY = System.getenv("SPEECH__SERVICE__KEY");
    static final String SPEECH__SERVICE__REGION = System.getenv("SPEECH__SERVICE__REGION");

    public static void main(String[] args) {
        try {
            translateSpeech();
            System.exit(0);
        } catch (Exception ex) {
            System.out.println(ex);
            System.exit(1);
        }
    }

    static void translateSpeech() {
        SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
            SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    }
}

De brontaal wijzigen

Een veelvoorkomende taak van spraakomzetting is het opgeven van de invoertaal (of brontaal). In het volgende voorbeeld ziet u hoe u de invoertaal zou wijzigen in het Italiaans. In uw code communiceert u met het SpeechTranslationConfig exemplaar door de methode aan setSpeechRecognitionLanguage te roepen:

static void translateSpeech() {
    SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    // Source (input) language
    speechTranslationConfig.setSpeechRecognitionLanguage("it-IT");
}

De setSpeechRecognitionLanguage functie verwacht een tekenreeks voor taal-landinstellingen. Raadpleeg de lijst met ondersteunde landinstellingen voor spraakomzetting.

Een vertaaltaal toevoegen

Een andere veelvoorkomende taak van spraakomzetting is het opgeven van doeltalen voor vertaling. Er is ten minste één vereist, maar veelvouden worden ondersteund. Met het volgende codefragment worden zowel Frans als Duits ingesteld als vertaaltaaldoelen:

static void translateSpeech() {
    SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    speechTranslationConfig.setSpeechRecognitionLanguage("it-IT");

    // Translate to languages. See https://aka.ms/speech/sttt-languages
    speechTranslationConfig.addTargetLanguage("fr");
    speechTranslationConfig.addTargetLanguage("de");
}

Bij elke aanroep wordt addTargetLanguageeen nieuwe doeltaal voor vertaling opgegeven. Met andere woorden, wanneer spraak wordt herkend uit de brontaal, is elke doelomzetting beschikbaar als onderdeel van de resulterende vertaalbewerking.

Een vertaalherkenning initialiseren

Nadat u een SpeechTranslationConfig exemplaar hebt gemaakt, is de volgende stap het initialiseren TranslationRecognizervan . Wanneer u initialiseert TranslationRecognizer, moet u deze doorgeven aan uw speechTranslationConfig exemplaar. Het configuratieobject biedt de referenties die de Speech-service nodig heeft om uw aanvraag te valideren.

Als u spraak herkent met behulp van de standaardmicrofoon van uw apparaat, TranslationRecognizer ziet u er als volgt uit:

static void translateSpeech() {
    SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    String fromLanguage = "en-US";
    String[] toLanguages = { "it", "fr", "de" };
    speechTranslationConfig.setSpeechRecognitionLanguage(fromLanguage);
    for (String language : toLanguages) {
        speechTranslationConfig.addTargetLanguage(language);
    }

    try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig)) {
    }
}

Als u het audio-invoerapparaat wilt opgeven, moet u een AudioConfig klasse-exemplaar maken en de parameter opgeven bij het audioConfig initialiseren TranslationRecognizer.

Verwijs eerst als volgt naar het AudioConfig object:

static void translateSpeech() {
    SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    String fromLanguage = "en-US";
    String[] toLanguages = { "it", "fr", "de" };
    speechTranslationConfig.setSpeechRecognitionLanguage(fromLanguage);
    for (String language : toLanguages) {
        speechTranslationConfig.addTargetLanguage(language);
    }

    AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
    try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig)) {
        
    }
}

Als u een audiobestand wilt opgeven in plaats van een microfoon te gebruiken, moet u nog steeds een audioConfig parameter opgeven. Wanneer u echter een AudioConfig klasse-exemplaar maakt in plaats van aanroepen fromDefaultMicrophoneInput, roept fromWavFileInput u de parameter aan en geeft u deze filename door:

static void translateSpeech() {
    SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    String fromLanguage = "en-US";
    String[] toLanguages = { "it", "fr", "de" };
    speechTranslationConfig.setSpeechRecognitionLanguage(fromLanguage);
    for (String language : toLanguages) {
        speechTranslationConfig.addTargetLanguage(language);
    }

    AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
    try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig)) {
        
    }
}

Spraak vertalen

Voor het vertalen van spraak is de Speech-SDK afhankelijk van een microfoon of audiobestandsinvoer. Spraakherkenning vindt plaats vóór spraakomzetting. Nadat alle objecten zijn geïnitialiseerd, roept u de functie recognize-once aan en haalt u het resultaat op:

static void translateSpeech() throws ExecutionException, InterruptedException {
    SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    String fromLanguage = "en-US";
    String[] toLanguages = { "it", "fr", "de" };
    speechTranslationConfig.setSpeechRecognitionLanguage(fromLanguage);
    for (String language : toLanguages) {
        speechTranslationConfig.addTargetLanguage(language);
    }

    try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig)) {
        System.out.printf("Say something in '%s' and we'll translate...", fromLanguage);

        TranslationRecognitionResult result = translationRecognizer.recognizeOnceAsync().get();
        if (result.getReason() == ResultReason.TranslatedSpeech) {
            System.out.printf("Recognized: \"%s\"\n", result.getText());
            for (Map.Entry<String, String> pair : result.getTranslations().entrySet()) {
                System.out.printf("Translated into '%s': %s\n", pair.getKey(), pair.getValue());
            }
        }
    }
}

Zie de basisbeginselen van spraakherkenning voor meer informatie over spraak-naar-tekst.

Vertalingen synthetiseren

Na een geslaagde spraakherkenning en vertaling bevat het resultaat alle vertalingen in een woordenboek. De getTranslations functie retourneert een woordenlijst met de sleutel als doelomzettingstaal en de waarde als vertaalde tekst. Herkende spraak kan worden vertaald en vervolgens gesynthetiseerd in een andere taal (spraak-naar-spraak).

Op gebeurtenissen gebaseerde synthese

Het TranslationRecognizer object toont een synthesizing gebeurtenis. De gebeurtenis wordt meerdere keren geactiveerd en biedt een mechanisme om de gesynthetiseerde audio op te halen uit het resultaat van de vertaalherkenning. Als u vertaalt naar meerdere talen, raadpleegt u Handmatige synthese.

Geef de synthesestem op door een setVoiceName exemplaar toe te wijzen en geef een gebeurtenishandler op voor de synthesizing gebeurtenis om de audio op te halen. In het volgende voorbeeld wordt de vertaalde audio opgeslagen als een .wav-bestand.

Belangrijk

De op gebeurtenissen gebaseerde synthese werkt alleen met één vertaling. Voeg niet meerdere talen voor doelvertaling toe. Daarnaast moet de setVoiceName waarde dezelfde taal zijn als de doeltaal voor vertaling. Kan bijvoorbeeld "de" toewijzen aan "de-DE-Hedda".

static void translateSpeech() throws ExecutionException, FileNotFoundException, InterruptedException, IOException {
    SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);

    String fromLanguage = "en-US";
    String toLanguage = "de";
    speechTranslationConfig.setSpeechRecognitionLanguage(fromLanguage);
    speechTranslationConfig.addTargetLanguage(toLanguage);

    // See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
    speechTranslationConfig.setVoiceName("de-DE-Hedda");

    try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig)) {
        translationRecognizer.synthesizing.addEventListener((s, e) -> {
            byte[] audio = e.getResult().getAudio();
            int size = audio.length;
            System.out.println("Audio synthesized: " + size + " byte(s)" + (size == 0 ? "(COMPLETE)" : ""));

            if (size > 0) {
                try (FileOutputStream file = new FileOutputStream("translation.wav")) {
                    file.write(audio);
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        });

        System.out.printf("Say something in '%s' and we'll translate...", fromLanguage);

        TranslationRecognitionResult result = translationRecognizer.recognizeOnceAsync().get();
        if (result.getReason() == ResultReason.TranslatedSpeech) {
            System.out.printf("Recognized: \"%s\"\n", result.getText());
            for (Map.Entry<String, String> pair : result.getTranslations().entrySet()) {
                String language = pair.getKey();
                String translation = pair.getValue();
                System.out.printf("Translated into '%s': %s\n", language, translation);
            }
        }
    }
}

Handmatige synthese

De getTranslations functie retourneert een woordenlijst die u kunt gebruiken om audio uit de vertaaltekst te synthetiseren. Door elke vertaling herhalen en synthetiseren. Wanneer u een SpeechSynthesizer exemplaar maakt, moet setSpeechSynthesisVoiceName de eigenschap van het SpeechConfig object zijn ingesteld op de gewenste stem.

In het volgende voorbeeld worden vijf talen vertaald. Elke vertaling wordt vervolgens gesynthetiseerd naar een audiobestand in de bijbehorende neurale taal.

static void translateSpeech() throws ExecutionException, InterruptedException {
    SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
        SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
    
    String fromLanguage = "en-US";
    String[] toLanguages = { "de", "en", "it", "pt", "zh-Hans" };
    speechTranslationConfig.setSpeechRecognitionLanguage(fromLanguage);
    for (String language : toLanguages) {
        speechTranslationConfig.addTargetLanguage(language);
    }

    try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig)) {
        System.out.printf("Say something in '%s' and we'll translate...", fromLanguage);

        TranslationRecognitionResult result = translationRecognizer.recognizeOnceAsync().get();
        if (result.getReason() == ResultReason.TranslatedSpeech) {
            // See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
            Map<String, String> languageToVoiceMap = new HashMap<String, String>();
            languageToVoiceMap.put("de", "de-DE-KatjaNeural");
            languageToVoiceMap.put("en", "en-US-AriaNeural");
            languageToVoiceMap.put("it", "it-IT-ElsaNeural");
            languageToVoiceMap.put("pt", "pt-BR-FranciscaNeural");
            languageToVoiceMap.put("zh-Hans", "zh-CN-XiaoxiaoNeural");

            System.out.printf("Recognized: \"%s\"\n", result.getText());
            for (Map.Entry<String, String> pair : result.getTranslations().entrySet()) {
                String language = pair.getKey();
                String translation = pair.getValue();
                System.out.printf("Translated into '%s': %s\n", language, translation);

                SpeechConfig speechConfig =
                    SpeechConfig.fromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
                speechConfig.setSpeechSynthesisVoiceName(languageToVoiceMap.get(language));

                AudioConfig audioConfig = AudioConfig.fromWavFileOutput(language + "-translation.wav");
                try (SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer(speechConfig, audioConfig)) {
                    speechSynthesizer.SpeakTextAsync(translation).get();
                }
            }
        }
    }
}

Zie de basisprincipes van spraaksynthese voor meer informatie over spraaksynthese.

Referentiedocumentatiepakket (npm) | Aanvullende voorbeelden op GitHub | Library-broncode |

In deze handleiding leert u hoe u menselijke spraak herkent en vertaalt naar een andere taal.

Zie het overzicht van spraakomzetting voor meer informatie over:

  • Spraak naar tekst vertalen
  • Spraak vertalen naar meerdere doeltalen
  • Directe spraak-naar-spraakomzetting uitvoeren

Een vertaalconfiguratie maken

Als u de vertaalservice wilt aanroepen met behulp van de Speech SDK, moet u een SpeechTranslationConfig exemplaar maken. Deze klasse bevat informatie over uw abonnement, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.

Notitie

Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, u maakt altijd een configuratie.

U kunt op een aantal manieren initialiseren SpeechTranslationConfig :

  • Met een abonnement: geef een sleutel en de bijbehorende regio door.
  • Met een eindpunt: geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
  • Met een host: geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
  • Met een autorisatietoken: geef een autorisatietoken en de bijbehorende regio door.

Laten we eens kijken hoe u een SpeechTranslationConfig exemplaar maakt met behulp van een sleutel en regio. Haal de spraakresourcesleutel en -regio op in Azure Portal.

const speechTranslationConfig = SpeechTranslationConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");

Een vertaler initialiseren

Nadat u een SpeechTranslationConfig exemplaar hebt gemaakt, is de volgende stap het initialiseren TranslationRecognizervan . Wanneer u initialiseert TranslationRecognizer, moet u deze doorgeven aan uw speechTranslationConfig exemplaar. Het configuratieobject biedt de referenties die de vertaalservice nodig heeft om uw aanvraag te valideren.

Als u spraak vertaalt via de standaardmicrofoon van uw apparaat, TranslationRecognizer ziet u er als volgt uit:

const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

Als u het audio-invoerapparaat wilt opgeven, moet u een AudioConfig klasse-exemplaar maken en de parameter opgeven bij het audioConfig initialiseren TranslationRecognizer.

Verwijs als volgt naar het AudioConfig-object:

const audioConfig = AudioConfig.fromDefaultMicrophoneInput();
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);

Als u een audiobestand wilt opgeven in plaats van een microfoon te gebruiken, moet u nog steeds een audioConfig parameter opgeven. U kunt dit echter alleen doen wanneer u zich op Node.js richt. Wanneer u een AudioConfig klasse-exemplaar maakt in plaats van aanroepen fromDefaultMicrophoneInput, roept fromWavFileOutput u de parameter aan en geeft u deze filename door:

const audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);

Spraak vertalen

De klasse TranslationRecognizer voor de Speech SDK voor JavaScript bevat methoden die u kunt gebruiken voor spraakomzetting:

  • Single-shot translation (async): hiermee wordt de vertaling uitgevoerd in een niet-blokkeringsmodus (asynchrone) modus. Het vertaalt één uiting. Het bepaalt het einde van één uiting door te luisteren naar stilte aan het einde of totdat een maximum van 15 seconden audio wordt verwerkt.
  • Continue vertaling (asynchroon):asynchroon initieert een continue vertaling. De gebruiker registreert zich bij gebeurtenissen en verwerkt verschillende toepassingsstatussen. Als u asynchrone continue vertaling wilt stoppen, roept u het aan stopContinuousRecognitionAsync.

Zie Aan de slag met spraak-naar-tekst voor meer informatie over het kiezen van een spraakherkenningsmodus.

Een doeltaal opgeven

Als u wilt vertalen, moet u zowel een brontaal als ten minste één doeltaal opgeven.

U kunt een brontaal kiezen met behulp van een landinstelling die wordt vermeld in de tabel Spraakomzetting. Zoek uw opties voor vertaalde taal op dezelfde koppeling.

Uw opties voor doeltalen verschillen wanneer u tekst wilt weergeven of als u omgezete spraak wilt horen. Als u het Engels naar het Duits wilt vertalen, wijzigt u het configuratieobject voor vertaling:

speechTranslationConfig.speechRecognitionLanguage = "en-US";
speechTranslationConfig.addTargetLanguage("de");

Eenmalige herkenning

Hier volgt een voorbeeld van asynchrone vertaling met één opname via recognizeOnceAsync:

translationRecognizer.recognizeOnceAsync(result => {
    // Interact with result
});

U moet code schrijven om het resultaat af te handelen. In dit voorbeeld wordt een vertaling naar het Duits geëvalueerd result.reason :

translationRecognizer.recognizeOnceAsync(
  function (result) {
    let translation = result.translations.get("de");
    window.console.log(translation);
    translationRecognizer.close();
  },
  function (err) {
    window.console.log(err);
    translationRecognizer.close();
});

Uw code kan ook updates verwerken die worden geleverd terwijl de vertaling wordt verwerkt. U kunt deze updates gebruiken om visuele feedback te geven over de voortgang van de vertaling. In dit JavaScript-Node.js voorbeeld ziet u dit soort updates. In de volgende code worden ook details weergegeven die tijdens het vertaalproces zijn geproduceerd:

translationRecognizer.recognizing = function (s, e) {
    var str = ("(recognizing) Reason: " + SpeechSDK.ResultReason[e.result.reason] +
            " Text: " +  e.result.text +
            " Translation:");
    str += e.result.translations.get("de");
    console.log(str);
};
translationRecognizer.recognized = function (s, e) {
    var str = "\r\n(recognized)  Reason: " + SpeechSDK.ResultReason[e.result.reason] +
            " Text: " + e.result.text +
            " Translation:";
    str += e.result.translations.get("de");
    str += "\r\n";
    console.log(str);
};

Continue vertaling

Continue vertaling is iets meer betrokken dan eenmalige herkenning. U moet zich abonneren op de gebeurtenissen recognizing, recognizeden canceled om de herkenningsresultaten op te halen. Als u de vertaling wilt stoppen, moet u bellen stopContinuousRecognitionAsync.

Hier volgt een voorbeeld van hoe continue vertaling wordt uitgevoerd op een audio-invoerbestand. Laten we beginnen met het definiëren van de invoer en initialisatie TranslationRecognizer:

const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

In de volgende code abonneert u zich op de gebeurtenissen die zijn verzonden vanaf TranslationRecognizer:

  • recognizing: Signaal voor gebeurtenissen die tussenliggende vertaalresultaten bevatten.
  • recognized: Signaal voor gebeurtenissen die definitieve vertalingsresultaten bevatten. Deze resultaten geven een geslaagde omzettingspoging aan.
  • sessionStopped: Signaal voor gebeurtenissen die het einde van een vertaalsessie (bewerking) aangeven.
  • canceled: Signaal voor gebeurtenissen die geannuleerde vertaalresultaten bevatten. Deze gebeurtenissen geven een vertaalpoging aan die is geannuleerd als gevolg van een directe annulering. Ze geven ook een transport- of protocolfout aan.
translationRecognizer.recognizing = (s, e) => {
    console.log(`TRANSLATING: Text=${e.result.text}`);
};
translationRecognizer.recognized = (s, e) => {
    if (e.result.reason == ResultReason.RecognizedSpeech) {
        console.log(`TRANSLATED: Text=${e.result.text}`);
    }
    else if (e.result.reason == ResultReason.NoMatch) {
        console.log("NOMATCH: Speech could not be translated.");
    }
};
translationRecognizer.canceled = (s, e) => {
    console.log(`CANCELED: Reason=${e.reason}`);
    if (e.reason == CancellationReason.Error) {
        console.log(`"CANCELED: ErrorCode=${e.errorCode}`);
        console.log(`"CANCELED: ErrorDetails=${e.errorDetails}`);
        console.log("CANCELED: Did you set the speech resource key and region values?");
    }
    translationRecognizer.stopContinuousRecognitionAsync();
};
translationRecognizer.sessionStopped = (s, e) => {
    console.log("\n    Session stopped event.");
    translationRecognizer.stopContinuousRecognitionAsync();
};

Als alles is ingesteld, kunt u het volgende aanroepen startContinuousRecognitionAsync:

// Starts continuous recognition. Uses stopContinuousRecognitionAsync() to stop recognition.
translationRecognizer.startContinuousRecognitionAsync();
// Something later can call. Stops recognition.
// translationRecognizer.StopContinuousRecognitionAsync();

Een brontaal kiezen

Een algemene taak voor spraakomzetting is het opgeven van de invoertaal (of brontaal). In het volgende voorbeeld ziet u hoe u de invoertaal zou wijzigen in het Italiaans. Zoek uw SpeechTranslationConfig exemplaar in uw code en voeg de volgende regel direct eronder toe:

speechTranslationConfig.speechRecognitionLanguage = "it-IT";

De eigenschap speechRecognitionLanguage verwacht een indelingstekenreeks voor taal-landinstellingen. Raadpleeg de lijst met ondersteunde landinstellingen voor spraakomzetting.

Kies een of meer doeltalen

De Speech SDK kan parallel vertalen naar meerdere doeltalen. De beschikbare doeltalen verschillen enigszins van de brontaallijst. U geeft doeltalen op met behulp van een taalcode, in plaats van een landinstelling.

Zie de tabel voor spraakomzetting op de pagina taalondersteuning voor een lijst met taalcodes voor tekstdoelen. U vindt hier ook informatie over vertaling naar gesynthetiseerde talen.

Met de volgende code wordt Duits als doeltaal toegevoegd:

speechTranslationConfig.addTargetLanguage("de");

Omdat er meerdere vertalingen in de doeltaal mogelijk zijn, moet uw code de doeltaal opgeven bij het onderzoeken van het resultaat. Met de volgende code worden vertaalresultaten voor duits opgehaald:

translationRecognizer.recognized = function (s, e) {
    var str = "\r\n(recognized)  Reason: " +
            sdk.ResultReason[e.result.reason] +
            " Text: " + e.result.text + " Translations:";
    var language = "de";
    str += " [" + language + "] " + e.result.translations.get(language);
    str += "\r\n";
    // show str somewhere
};

Referentiedocumentatiepakket (downloaden) | Aanvullende voorbeelden op GitHub |

De Speech SDK voor Objective-C biedt ondersteuning voor spraakomzetting, maar we hebben hier nog geen handleiding opgenomen. Selecteer een andere programmeertaal om aan de slag te gaan en meer te weten te komen over de concepten, of bekijk de Objective-C-verwijzing en voorbeelden die zijn gekoppeld aan het begin van dit artikel.

Referentiedocumentatiepakket (downloaden) | Aanvullende voorbeelden op GitHub |

De Speech SDK voor Swift biedt wel ondersteuning voor spraakomzetting, maar we hebben hier nog geen handleiding opgenomen. Selecteer een andere programmeertaal om aan de slag te gaan en meer te weten te komen over de concepten, of bekijk de Swift-verwijzing en voorbeelden die zijn gekoppeld aan het begin van dit artikel.

Referentiedocumentatiepakket (PyPi) | Aanvullende voorbeelden op GitHub |

In deze handleiding leert u hoe u menselijke spraak herkent en vertaalt naar een andere taal.

Zie het overzicht van spraakomzetting voor meer informatie over:

  • Spraak naar tekst vertalen
  • Spraak vertalen naar meerdere doeltalen
  • Directe spraak-naar-spraakomzetting uitvoeren

Gevoelige gegevens en omgevingsvariabelen

De voorbeeldbroncode in dit artikel is afhankelijk van omgevingsvariabelen voor het opslaan van gevoelige gegevens, zoals de abonnementssleutel en regio van de Speech-resource. Het Python-codebestand bevat twee waarden die zijn toegewezen vanuit de omgevingsvariabelen van de hostcomputer: SPEECH__SUBSCRIPTION__KEY en SPEECH__SERVICE__REGION. Beide variabelen bevinden zich in het globale bereik, zodat ze toegankelijk zijn binnen de functiedefinitie van het codebestand:

speech_key, service_region = os.environ['SPEECH__SUBSCRIPTION__KEY'], os.environ['SPEECH__SERVICE__REGION']

Zie Omgevingsvariabelen en toepassingsconfiguratie voor meer informatie over omgevingsvariabelen.

Een configuratie voor spraakomzetting maken

Als u de Speech-service wilt aanroepen met behulp van de Speech SDK, moet u een SpeechTranslationConfig exemplaar maken. Deze klasse bevat informatie over uw abonnement, zoals uw sleutel en de bijbehorende regio, het eindpunt, de host of het autorisatietoken.

Tip

Ongeacht of u spraakherkenning, spraaksynthese, vertaling of intentieherkenning uitvoert, u maakt altijd een configuratie.

U kunt op een aantal manieren initialiseren SpeechTranslationConfig :

  • Met een abonnement: geef een sleutel en de bijbehorende regio door.
  • Met een eindpunt: geef een Speech-service-eindpunt door. Een sleutel of autorisatietoken is optioneel.
  • Met een host: geef een hostadres door. Een sleutel of autorisatietoken is optioneel.
  • Met een autorisatietoken: geef een autorisatietoken en de bijbehorende regio door.

Laten we eens kijken hoe u een SpeechTranslationConfig exemplaar kunt maken met behulp van een sleutel en regio. Haal de spraakresourcesleutel en -regio op in Azure Portal.

from_language, to_language = 'en-US', 'de'

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

De brontaal wijzigen

Een veelvoorkomende taak van spraakomzetting is het opgeven van de invoertaal (of brontaal). In het volgende voorbeeld ziet u hoe u de invoertaal zou wijzigen in het Italiaans. In uw code communiceert u met het SpeechTranslationConfig exemplaar door deze toe te wijzen aan de speech_recognition_language eigenschap.

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    # Source (input) language
    from_language = "it-IT"
    translation_config.speech_recognition_language = from_language

De eigenschap speech_recognition_language verwacht een indelingstekenreeks voor taal-landinstellingen. Raadpleeg de lijst met ondersteunde landinstellingen voor spraakomzetting.

Een vertaaltaal toevoegen

Een andere veelvoorkomende taak van spraakomzetting is het opgeven van doeltalen voor vertaling. Er is ten minste één vereist, maar veelvouden worden ondersteund. Met het volgende codefragment worden zowel Frans als Duits ingesteld als vertaaltaaldoelen:

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = "it-IT"

    # Translate to languages. See, https://aka.ms/speech/sttt-languages
    translation_config.add_target_language("fr")
    translation_config.add_target_language("de")

Bij elke aanroep wordt add_target_languageeen nieuwe doeltaal voor vertaling opgegeven. Met andere woorden, wanneer spraak wordt herkend uit de brontaal, is elke doelomzetting beschikbaar als onderdeel van de resulterende vertaalbewerking.

Een vertaalherkenning initialiseren

Nadat u een SpeechTranslationConfig exemplaar hebt gemaakt, is de volgende stap het initialiseren TranslationRecognizervan . Wanneer u initialiseert TranslationRecognizer, moet u deze doorgeven aan uw translation_config exemplaar. Het configuratieobject biedt de referenties die de Speech-service nodig heeft om uw aanvraag te valideren.

Als u spraak herkent met behulp van de standaardmicrofoon van uw apparaat, TranslationRecognizer ziet u er als volgt uit:

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    translation_config.add_target_language(to_language)

    translation_recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config)

Als u het audio-invoerapparaat wilt opgeven, moet u een AudioConfig klasse-exemplaar maken en de parameter opgeven bij het audio_config initialiseren TranslationRecognizer.

Verwijs eerst als volgt naar het AudioConfig object:

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    for lang in to_languages:
        translation_config.add_target_language(lang)

    audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True)
    translation_recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config, audio_config=audio_config)

Als u een audiobestand wilt opgeven in plaats van een microfoon te gebruiken, moet u nog steeds een audioConfig parameter opgeven. Wanneer u echter een AudioConfig klasse-exemplaar maakt in plaats van aan te roepen, roept u aan use_default_microphone=Truemet filename="path-to-file.wav" en geeft u de filename parameter op:

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    for lang in to_languages:
        translation_config.add_target_language(lang)

    audio_config = speechsdk.audio.AudioConfig(filename="path-to-file.wav")
    translation_recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config, audio_config=audio_config)

Spraak vertalen

Voor het vertalen van spraak is de Speech-SDK afhankelijk van een microfoon of audiobestandsinvoer. Spraakherkenning vindt plaats vóór spraakomzetting. Nadat alle objecten zijn geïnitialiseerd, roept u de functie recognize-once aan en haalt u het resultaat op:

import os
import azure.cognitiveservices.speech as speechsdk

speech_key, service_region = os.environ['SPEECH__SERVICE__KEY'], os.environ['SPEECH__SERVICE__REGION']
from_language, to_languages = 'en-US', 'de'

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    translation_config.add_target_language(to_language)

    translation_recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config)
    
    print('Say something...')
    result = translation_recognizer.recognize_once()
    print(get_result_text(reason=result.reason, result=result))

def get_result_text(reason, result):
    reason_format = {
        speechsdk.ResultReason.TranslatedSpeech:
            f'RECOGNIZED "{from_language}": {result.text}\n' +
            f'TRANSLATED into "{to_language}"": {result.translations[to_language]}',
        speechsdk.ResultReason.RecognizedSpeech: f'Recognized: "{result.text}"',
        speechsdk.ResultReason.NoMatch: f'No speech could be recognized: {result.no_match_details}',
        speechsdk.ResultReason.Canceled: f'Speech Recognition canceled: {result.cancellation_details}'
    }
    return reason_format.get(reason, 'Unable to recognize speech')

translate_speech_to_text()

Zie de basisbeginselen van spraakherkenning voor meer informatie over spraak-naar-tekst.

Vertalingen synthetiseren

Na een geslaagde spraakherkenning en vertaling bevat het resultaat alle vertalingen in een woordenboek. De translations woordenlijstsleutel is de doeltaal voor vertaling en de waarde is de vertaalde tekst. Herkende spraak kan worden vertaald en vervolgens gesynthetiseerd in een andere taal (spraak-naar-spraak).

Op gebeurtenissen gebaseerde synthese

Het TranslationRecognizer object toont een Synthesizing gebeurtenis. De gebeurtenis wordt meerdere keren geactiveerd en biedt een mechanisme om de gesynthetiseerde audio op te halen uit het resultaat van de vertaalherkenning. Als u vertaalt naar meerdere talen, raadpleegt u Handmatige synthese.

Geef de synthesestem op door een voice_name exemplaar toe te wijzen en geef een gebeurtenishandler op voor de Synthesizing gebeurtenis om de audio op te halen. In het volgende voorbeeld wordt de vertaalde audio opgeslagen als een .wav-bestand.

Belangrijk

De op gebeurtenissen gebaseerde synthese werkt alleen met één vertaling. Voeg niet meerdere talen voor doelvertaling toe. Daarnaast moet de voice_name waarde dezelfde taal zijn als de doeltaal voor vertaling. Kan bijvoorbeeld "de" toewijzen aan "de-DE-Hedda".

import os
import azure.cognitiveservices.speech as speechsdk

speech_key, service_region = os.environ['SPEECH__SERVICE__KEY'], os.environ['SPEECH__SERVICE__REGION']
from_language, to_language = 'en-US', 'de'

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    translation_config.add_target_language(to_language)

    # See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
    translation_config.voice_name = "de-DE-Hedda"

    translation_recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config)

    def synthesis_callback(evt):
        size = len(evt.result.audio)
        print(f'Audio synthesized: {size} byte(s) {"(COMPLETED)" if size == 0 else ""}')

        if size > 0:
            file = open('translation.wav', 'wb+')
            file.write(evt.result.audio)
            file.close()

    translation_recognizer.synthesizing.connect(synthesis_callback)

    print(f'Say something in "{from_language}" and we\'ll translate into "{to_language}".')

    result = translation_recognizer.recognize_once()
    print(get_result_text(reason=result.reason, result=result))

def get_result_text(reason, result):
    reason_format = {
        speechsdk.ResultReason.TranslatedSpeech:
            f'Recognized "{from_language}": {result.text}\n' +
            f'Translated into "{to_language}"": {result.translations[to_language]}',
        speechsdk.ResultReason.RecognizedSpeech: f'Recognized: "{result.text}"',
        speechsdk.ResultReason.NoMatch: f'No speech could be recognized: {result.no_match_details}',
        speechsdk.ResultReason.Canceled: f'Speech Recognition canceled: {result.cancellation_details}'
    }
    return reason_format.get(reason, 'Unable to recognize speech')

translate_speech_to_text()

Handmatige synthese

U kunt de translations woordenlijst gebruiken om audio uit de vertaaltekst te synthetiseren. Door elke vertaling herhalen en synthetiseren. Wanneer u een SpeechSynthesizer exemplaar maakt, moet speech_synthesis_voice_name de eigenschap van het SpeechConfig object zijn ingesteld op de gewenste stem.

In het volgende voorbeeld worden vijf talen vertaald. Elke vertaling wordt vervolgens gesynthetiseerd naar een audiobestand in de bijbehorende neurale taal.

import os
import azure.cognitiveservices.speech as speechsdk

speech_key, service_region = os.environ['SPEECH__SERVICE__KEY'], os.environ['SPEECH__SERVICE__REGION']
from_language, to_languages = 'en-US', [ 'de', 'en', 'it', 'pt', 'zh-Hans' ]

def translate_speech_to_text():
    translation_config = speechsdk.translation.SpeechTranslationConfig(
            subscription=speech_key, region=service_region)

    translation_config.speech_recognition_language = from_language
    for lang in to_languages:
        translation_config.add_target_language(lang)

    recognizer = speechsdk.translation.TranslationRecognizer(
            translation_config=translation_config)
    
    print('Say something...')
    result = translation_recognizer.recognize_once()
    synthesize_translations(result=result)

def synthesize_translations(result):
    language_to_voice_map = {
        "de": "de-DE-KatjaNeural",
        "en": "en-US-AriaNeural",
        "it": "it-IT-ElsaNeural",
        "pt": "pt-BR-FranciscaNeural",
        "zh-Hans": "zh-CN-XiaoxiaoNeural"
    }
    print(f'Recognized: "{result.text}"')

    for language in result.translations:
        translation = result.translations[language]
        print(f'Translated into "{language}": {translation}')

        speech_config = speechsdk.SpeechConfig(subscription=speech_key, region=service_region)
        speech_config.speech_synthesis_voice_name = language_to_voice_map.get(language)
        
        audio_config = speechsdk.audio.AudioOutputConfig(filename=f'{language}-translation.wav')
        speech_synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=audio_config)
        speech_synthesizer.speak_text_async(translation).get()

translate_speech_to_text()

Zie de basisprincipes van spraaksynthese voor meer informatie over spraaksynthese.

Meertalige vertaling met taalidentificatie

In veel scenario's weet u mogelijk niet welke invoertalen u moet opgeven. Met taalidentificatie kunt u maximaal 10 mogelijke invoertalen detecteren en automatisch vertalen naar uw doeltalen.

Zie taalidentificatie voor een volledig codevoorbeeld.

Spraak-naar-tekst-REST API-verwijzing Speech naar text REST API voor korte audioverwijzing | Aanvullende voorbeelden op GitHub |

U kunt de REST API gebruiken voor spraakomzetting, maar we hebben hier nog geen handleiding opgenomen. Selecteer een andere programmeertaal om aan de slag te gaan en meer te weten te komen over de concepten.

In deze handleiding leert u hoe u menselijke spraak herkent en vertaalt naar een andere taal.

Zie het overzicht van spraakomzetting voor meer informatie over:

  • Spraak naar tekst vertalen
  • Spraak vertalen naar meerdere doeltalen
  • Directe spraak-naar-spraakomzetting uitvoeren

Vereisten

Downloaden en installeren van

Volg deze stappen en bekijk de quickstart voor Speech CLI voor andere vereisten voor uw platform.

  1. Voer de volgende .NET CLI-opdracht uit om de Speech CLI te installeren:

    dotnet tool install --global Microsoft.CognitiveServices.Speech.CLI
    
  2. Voer de volgende opdrachten uit om uw Spraak-resourcesleutel en -regio te configureren. Vervang door SUBSCRIPTION-KEY uw Spraak-resourcesleutel en vervang deze door REGION de spraakresourceregio.

    spx config @key --set SUBSCRIPTION-KEY
    spx config @region --set REGION
    

Bron- en doeltalen instellen

Met deze opdracht wordt de Speech CLI aanroepen om spraak van de microfoon van het Italiaans naar het Frans te vertalen:

spx translate --microphone --source it-IT --target fr

Volgende stappen