Sdílet prostřednictvím


Rozpoznávání a překlad řeči

Referenční dokumentace | – balíček (NuGet) | Další ukázky na GitHubu

V tomto návodu se naučíte rozpoznávat lidskou řeč a překládat ji do jiného jazyka.

Další informace o překladu řeči najdete v přehledu překladu řeči:

  • Překlad řeči na text
  • Překlad řeči do více cílových jazyků
  • Provedení přímého překladu řeči na řeč

Citlivá data a proměnné prostředí

Ukázkový zdrojový kód v tomto článku závisí na proměnných prostředí pro ukládání citlivých dat, jako je klíč a oblast prostředku služby Speech. Třída Program obsahuje dvě static readonly string hodnoty, které jsou přiřazeny z proměnných prostředí hostitelského počítače: SPEECH__SUBSCRIPTION__KEY a SPEECH__SERVICE__REGION. Obě tato pole jsou v oboru třídy, takže jsou přístupná v tělech metody třídy:

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

Další informace o proměnných prostředí najdete v tématu Proměnné prostředí a konfigurace aplikace.

Vytvoření konfigurace překladu řeči

Pokud chcete službu Speech volat pomocí sady Speech SDK, musíte vytvořit SpeechTranslationConfig instanci. Tato třída obsahuje informace o vašem předplatném, jako je klíč a přidružená oblast, koncový bod, hostitel nebo autorizační token.

Tip

Bez ohledu na to, jestli provádíte rozpoznávání řeči, syntézu řeči, překlad nebo rozpoznávání záměru, budete vždy vytvářet konfiguraci.

Inicializovat SpeechTranslationConfig můžete několika způsoby:

  • S předplatným: předejte klíč a přidruženou oblast.
  • S koncovým bodem: Předejte koncový bod služby Speech. Klíč nebo autorizační token je volitelný.
  • S hostitelem: předejte adresu hostitele. Klíč nebo autorizační token je volitelný.
  • S autorizačním tokenem: předejte autorizační token a přidruženou oblast.

Pojďme se podívat, jak vytvoříte SpeechTranslationConfig instanci pomocí klíče a oblasti. Získejte klíč prostředku a oblast služby Speech na webu 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);
    }
}

Změna zdrojového jazyka

Jedním z běžných úloh překladu řeči je určení vstupního (nebo zdrojového) jazyka. Následující příklad ukazuje, jak byste změnili jazyk zadávání na italštinu. V kódu interagujte s SpeechTranslationConfig instancí tím, že ji přiřadíte k SpeechRecognitionLanguage vlastnosti:

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

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

Vlastnost SpeechRecognitionLanguage očekává řetězec formátu jazyka a národního prostředí. Projděte si seznam podporovaných národních prostředí překladu řeči.

Přidání jazyka překladu

Dalším běžným úkolem překladu řeči je určit cílové jazyky překladu. Vyžaduje se aspoň jeden, ale podporuje se násobky. Následující fragment kódu nastaví jako cíle jazyka překladu francouzštinu i němčinu:

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

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

Při každém volání AddTargetLanguagese zadává nový cílový jazyk překladu. Jinými slovy, když je řeč rozpoznána ze zdrojového jazyka, je každý cílový překlad k dispozici jako součást výsledné operace překladu.

Inicializace rozpoznávání překladu

Po vytvoření SpeechTranslationConfig instance je dalším krokem inicializace TranslationRecognizer. Při inicializaci TranslationRecognizerje nutné ji předat instanci speechTranslationConfig . Objekt konfigurace poskytuje přihlašovací údaje, které služba Speech vyžaduje k ověření vaší žádosti.

Pokud rozpoznáváte řeč pomocí výchozího mikrofonu vašeho zařízení, TranslationRecognizer měla by instance vypadat takto:

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

Pokud chcete zadat zvukové vstupní zařízení, musíte vytvořit AudioConfig instanci třídy a zadat audioConfig parametr při inicializaci TranslationRecognizer.

Nejprve na AudioConfig objekt odkazujte následujícím způsobem:

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

Pokud chcete místo mikrofonu zadat zvukový soubor, musíte zadat audioConfig parametr. Když však vytvoříte AudioConfig instanci třídy místo volání FromDefaultMicrophoneInput, zavoláte FromWavFileInput a předáte filename parametr:

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

Překlad řeči

Při překladu řeči se sada Speech SDK spoléhá na vstup z mikrofonu nebo ze zvukového souboru. Před překladem řeči probíhá rozpoznávání řeči. Po inicializaci všech objektů zavolejte funkci recognize-once a získejte výsledek:

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

Další informace o řeči na text najdete v základech rozpoznávání řeči.

Překlad na základě událostí

Objekt TranslationRecognizer zveřejňuje Recognizing událost. Událost se aktivuje několikrát a poskytuje mechanismus pro načtení průběžných výsledků překladu.

Poznámka:

Pokud používáte vícejazyčný překlad řeči, nejsou výsledky převodu mezi překlady k dispozici.

Následující příklad vytiskne výsledky převodu do konzoly:

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

Syntetizování překladů

Po úspěšném rozpoznávání a překladu řeči bude výsledek obsahovat všechny překlady ve slovníku. Klíč Translations slovníku je cílový jazyk překladu a hodnota je přeložený text. Rozpoznanou řeč lze přeložit a potom syntetizovat v jiném jazyce (řeč na řeč).

Syntéza založená na událostech

Objekt TranslationRecognizer zveřejňuje Synthesizing událost. Událost se aktivuje několikrát a poskytuje mechanismus pro načtení syntetizovaného zvuku z výsledku rozpoznávání překladu. Pokud překládáte do více jazyků, přečtěte si téma Ruční syntéza.

Zadejte syntézu hlasu přiřazením VoiceName instance a zadáním obslužné rutiny Synthesizing události pro událost získat zvuk. Následující příklad uloží přeložený zvuk jako .wav soubor.

Důležité

Syntéza založená na událostech funguje pouze s jedním překladem. Nepřidávejte více cílových jazyků překladu. Kromě toho VoiceName by hodnota měla být stejný jazyk jako cílový jazyk překladu. Můžete například "de" namapovat na "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]}");
    }
}

Ruční syntéza

Pomocí slovníku Translations můžete syntetizovat zvuk z textu překladu. Iterujte každý překlad a syntetizujete ho. Při vytváření SpeechSynthesizer instance SpeechConfig musí objekt mít jeho SpeechSynthesisVoiceName vlastnost nastavenou na požadovaný hlas.

Následující příklad překládá na pět jazyků. Každý překlad se pak syntetizuje do zvukového souboru v odpovídajícím neurálním jazyce.

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

Další informace o syntéze řeči najdete v základech syntézy řeči.

Vícejazyčný překlad s identifikací jazyka

V mnoha scénářích možná nevíte, které vstupní jazyky se mají zadat. Pomocí identifikace jazyka můžete zjistit až 10 možných vstupních jazyků a automaticky přeložit do cílových jazyků.

Následující příklad předpokládá, že en-US nebo zh-CN by měly být zjištěny, protože jsou definovány v AutoDetectSourceLanguageConfig. Pak se řeč přeloží do defr a jak je uvedeno ve voláních na AddTargetLanguage().

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

Kompletní vzorový kód najdete v tématu Identifikace jazyka.

Překlad vícejazyčné řeči bez zdrojových jazyků

Překlad řeči s více jazyky implementuje novou úroveň technologie překladu řeči, která odemyká různé funkce, včetně toho, že nemá zadaný jazyk zadávání a zpracovává jazykové přepínače ve stejné relaci. Tyto funkce umožňují novou úroveň možností překladu řeči, které je možné implementovat do vašich produktů.

Když v současné době používáte JAZYKOVÉ ID s překladem řeči, musíte vytvořit SpeechTranslationConfig objekt z koncového bodu v2. Nahraďte řetězec YourServiceRegion vaší oblastí prostředků služby Speech (například westus). Nahraďte "YourSubscriptionKey" klíčem prostředku služby Speech.

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

Zadejte cílové jazyky překladu. Nahraďte jazyky podle svého výběru. Můžete přidat další řádky.

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

Klíčovým rozdílem s vícejazyčným překladem řeči je, že nemusíte zadávat zdrojový jazyk. Důvodem je to, že služba automaticky rozpozná zdrojový jazyk. AutoDetectSourceLanguageConfig Vytvořte objekt s metodoufromOpenRange, abyste službě dali vědět, že chcete použít vícejazyčný překlad řeči bez zadaného zdrojového jazyka.

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

Kompletní ukázku kódu pomocí sady Speech SDK najdete v ukázkách překladu řeči na GitHubu.

Referenční dokumentace | – balíček (NuGet) | Další ukázky na GitHubu

V tomto návodu se naučíte rozpoznávat lidskou řeč a překládat ji do jiného jazyka.

Další informace o překladu řeči najdete v přehledu překladu řeči:

  • Překlad řeči na text
  • Překlad řeči do více cílových jazyků
  • Provedení přímého překladu řeči na řeč

Citlivá data a proměnné prostředí

Ukázkový zdrojový kód v tomto článku závisí na proměnných prostředí pro ukládání citlivých dat, jako je klíč a oblast prostředku služby Speech. Soubor kódu C++ obsahuje dvě řetězcové hodnoty, které jsou přiřazeny z proměnných prostředí hostitelského počítače: SPEECH__SUBSCRIPTION__KEY a SPEECH__SERVICE__REGION. Obě tato pole jsou v oboru třídy, takže jsou přístupná v tělech metody třídy:

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

Další informace o proměnných prostředí najdete v tématu Proměnné prostředí a konfigurace aplikace.

Vytvoření konfigurace překladu řeči

Pokud chcete službu Speech volat pomocí sady Speech SDK, musíte vytvořit SpeechTranslationConfig instanci. Tato třída obsahuje informace o vašem předplatném, jako je klíč a přidružená oblast, koncový bod, hostitel nebo autorizační token.

Tip

Bez ohledu na to, jestli provádíte rozpoznávání řeči, syntézu řeči, překlad nebo rozpoznávání záměru, budete vždy vytvářet konfiguraci.

Inicializovat SpeechTranslationConfig můžete několika způsoby:

  • S předplatným: předejte klíč a přidruženou oblast.
  • S koncovým bodem: Předejte koncový bod služby Speech. Klíč nebo autorizační token je volitelný.
  • S hostitelem: předejte adresu hostitele. Klíč nebo autorizační token je volitelný.
  • S autorizačním tokenem: předejte autorizační token a přidruženou oblast.

Pojďme se podívat, jak vytvoříte SpeechTranslationConfig instanci pomocí klíče a oblasti. Získejte klíč prostředku a oblast služby Speech na webu 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;
}

Změna zdrojového jazyka

Jedním z běžných úloh překladu řeči je určení vstupního (nebo zdrojového) jazyka. Následující příklad ukazuje, jak byste změnili jazyk zadávání na italštinu. V kódu interagujte s SpeechTranslationConfig instancí voláním SetSpeechRecognitionLanguage metody.

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

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

Vlastnost SpeechRecognitionLanguage očekává řetězec formátu jazyka a národního prostředí. Projděte si seznam podporovaných národních prostředí překladu řeči.

Přidání jazyka překladu

Dalším běžným úkolem překladu řeči je určit cílové jazyky překladu. Vyžaduje se aspoň jeden, ale podporuje se násobky. Následující fragment kódu nastaví jako cíle jazyka překladu francouzštinu i němčinu:

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

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

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

Při každém volání AddTargetLanguagese zadává nový cílový jazyk překladu. Jinými slovy, když je řeč rozpoznána ze zdrojového jazyka, je každý cílový překlad k dispozici jako součást výsledné operace překladu.

Inicializace rozpoznávání překladu

Po vytvoření SpeechTranslationConfig instance je dalším krokem inicializace TranslationRecognizer. Při inicializaci TranslationRecognizerje nutné ji předat instanci translationConfig . Objekt konfigurace poskytuje přihlašovací údaje, které služba Speech vyžaduje k ověření vaší žádosti.

Pokud rozpoznáváte řeč pomocí výchozího mikrofonu vašeho zařízení, TranslationRecognizer měl by vypadat takto:

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

Pokud chcete zadat zvukové vstupní zařízení, musíte vytvořit AudioConfig instanci třídy a zadat audioConfig parametr při inicializaci TranslationRecognizer.

Nejprve na AudioConfig objekt odkazujte následujícím způsobem:

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

Pokud chcete místo mikrofonu zadat zvukový soubor, musíte zadat audioConfig parametr. Když však vytvoříte AudioConfig instanci třídy místo volání FromDefaultMicrophoneInput, zavoláte FromWavFileInput a předáte filename parametr:

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

Překlad řeči

Při překladu řeči se sada Speech SDK spoléhá na vstup z mikrofonu nebo ze zvukového souboru. Před překladem řeči probíhá rozpoznávání řeči. Po inicializaci všech objektů zavolejte funkci recognize-once a získejte výsledek:

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

Další informace o řeči na text najdete v základech rozpoznávání řeči.

Syntetizování překladů

Po úspěšném rozpoznávání a překladu řeči bude výsledek obsahovat všechny překlady ve slovníku. Klíč Translations slovníku je cílový jazyk překladu a hodnota je přeložený text. Rozpoznanou řeč lze přeložit a potom syntetizovat v jiném jazyce (řeč na řeč).

Syntéza založená na událostech

Objekt TranslationRecognizer zveřejňuje Synthesizing událost. Událost se aktivuje několikrát a poskytuje mechanismus pro načtení syntetizovaného zvuku z výsledku rozpoznávání překladu. Pokud překládáte do více jazyků, přečtěte si téma Ruční syntéza.

Zadejte syntézu hlasu přiřazením SetVoiceName instance a zadáním obslužné rutiny Synthesizing události pro událost získat zvuk. Následující příklad uloží přeložený zvuk jako .wav soubor.

Důležité

Syntéza založená na událostech funguje pouze s jedním překladem. Nepřidávejte více cílových jazyků překladu. Kromě toho SetVoiceName by hodnota měla být stejný jazyk jako cílový jazyk překladu. Můžete například "de" namapovat na "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;
        }
    }
}

Ruční syntéza

Pomocí slovníku Translations můžete syntetizovat zvuk z textu překladu. Iterujte každý překlad a syntetizujete ho. Při vytváření SpeechSynthesizer instance SpeechConfig musí objekt mít jeho SetSpeechSynthesisVoiceName vlastnost nastavenou na požadovaný hlas.

Následující příklad překládá na pět jazyků. Každý překlad se pak syntetizuje do zvukového souboru v odpovídajícím neurálním jazyce.

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

Další informace o syntéze řeči najdete v základech syntézy řeči.

Vícejazyčný překlad s identifikací jazyka

V mnoha scénářích možná nevíte, které vstupní jazyky se mají zadat. Pomocí identifikace jazyka můžete zjistit až 10 možných vstupních jazyků a automaticky přeložit do cílových jazyků.

Následující příklad předpokládá, že en-US nebo zh-CN by měly být zjištěny, protože jsou definovány v AutoDetectSourceLanguageConfig. Pak bude řeč přeložena do de a fr jak je uvedeno ve voláních .AddTargetLanguage()

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

Kompletní vzorový kód najdete v tématu Identifikace jazyka.

Referenční dokumentace | – balíček (Go) | Další ukázky na GitHubu

Sada Speech SDK pro Go nepodporuje překlad řeči. Vyberte jiný programovací jazyk nebo referenční informace k Jazyku Go a ukázky propojené od začátku tohoto článku.

Referenční dokumentace | Další ukázky na GitHubu

V tomto návodu se naučíte rozpoznávat lidskou řeč a překládat ji do jiného jazyka.

Další informace o překladu řeči najdete v přehledu překladu řeči:

  • Překlad řeči na text
  • Překlad řeči do více cílových jazyků
  • Provedení přímého překladu řeči na řeč

Citlivá data a proměnné prostředí

Ukázkový zdrojový kód v tomto článku závisí na proměnných prostředí pro ukládání citlivých dat, jako je klíč a oblast prostředku služby Speech. Soubor kódu Java obsahuje dvě static final String hodnoty, které jsou přiřazeny z proměnných prostředí hostitelského počítače: SPEECH__SUBSCRIPTION__KEY a SPEECH__SERVICE__REGION. Obě tato pole jsou v oboru třídy, takže jsou přístupná v tělech metody třídy:

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

Další informace o proměnných prostředí najdete v tématu Proměnné prostředí a konfigurace aplikace.

Vytvoření konfigurace překladu řeči

Pokud chcete službu Speech volat pomocí sady Speech SDK, musíte vytvořit SpeechTranslationConfig instanci. Tato třída obsahuje informace o vašem předplatném, jako je klíč a přidružená oblast, koncový bod, hostitel nebo autorizační token.

Tip

Bez ohledu na to, jestli provádíte rozpoznávání řeči, syntézu řeči, překlad nebo rozpoznávání záměru, budete vždy vytvářet konfiguraci.

Instanci můžete inicializovat SpeechTranslationConfig několika způsoby:

  • S předplatným: předejte klíč a přidruženou oblast.
  • S koncovým bodem: Předejte koncový bod služby Speech. Klíč nebo autorizační token je volitelný.
  • S hostitelem: předejte adresu hostitele. Klíč nebo autorizační token je volitelný.
  • S autorizačním tokenem: předejte autorizační token a přidruženou oblast.

Pojďme se podívat, jak vytvoříte SpeechTranslationConfig instanci pomocí klíče a oblasti. Získejte klíč prostředku a oblast služby Speech na webu 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);
    }
}

Změna zdrojového jazyka

Jedním z běžných úloh překladu řeči je určení vstupního (nebo zdrojového) jazyka. Následující příklad ukazuje, jak byste změnili jazyk zadávání na italštinu. V kódu interagujte s SpeechTranslationConfig instancí voláním setSpeechRecognitionLanguage metody:

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

Funkce setSpeechRecognitionLanguage očekává řetězec formátu národního prostředí jazyka. Projděte si seznam podporovaných národních prostředí překladu řeči.

Přidání jazyka překladu

Dalším běžným úkolem překladu řeči je určit cílové jazyky překladu. Vyžaduje se aspoň jeden, ale podporuje se násobky. Následující fragment kódu nastaví jako cíle jazyka překladu francouzštinu i němčinu:

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

Při každém volání addTargetLanguagese zadává nový cílový jazyk překladu. Jinými slovy, když je řeč rozpoznána ze zdrojového jazyka, je každý cílový překlad k dispozici jako součást výsledné operace překladu.

Inicializace rozpoznávání překladu

Po vytvoření SpeechTranslationConfig instance je dalším krokem inicializace TranslationRecognizer. Při inicializaci TranslationRecognizerje nutné ji předat instanci speechTranslationConfig . Objekt konfigurace poskytuje přihlašovací údaje, které služba Speech vyžaduje k ověření vaší žádosti.

Pokud rozpoznáváte řeč pomocí výchozího mikrofonu vašeho zařízení, TranslationRecognizer měl by vypadat takto:

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

Pokud chcete zadat zvukové vstupní zařízení, musíte vytvořit AudioConfig instanci třídy a zadat audioConfig parametr při inicializaci TranslationRecognizer.

Nejprve na AudioConfig objekt odkazujte následujícím způsobem:

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

Pokud chcete místo mikrofonu zadat zvukový soubor, musíte zadat audioConfig parametr. Když však vytvoříte AudioConfig instanci třídy místo volání fromDefaultMicrophoneInput, zavoláte fromWavFileInput a předáte filename parametr:

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

Překlad řeči

Při překladu řeči se sada Speech SDK spoléhá na vstup z mikrofonu nebo ze zvukového souboru. Před překladem řeči probíhá rozpoznávání řeči. Po inicializaci všech objektů zavolejte funkci recognize-once a získejte výsledek:

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

Další informace o řeči na text najdete v základech rozpoznávání řeči.

Syntetizování překladů

Po úspěšném rozpoznávání a překladu řeči bude výsledek obsahovat všechny překlady ve slovníku. Funkce getTranslations vrátí slovník s klíčem jako cílovým jazykem překladu a hodnotou jako přeložený text. Rozpoznanou řeč lze přeložit a potom syntetizovat v jiném jazyce (řeč na řeč).

Syntéza založená na událostech

Objekt TranslationRecognizer zveřejňuje synthesizing událost. Událost se aktivuje několikrát a poskytuje mechanismus pro načtení syntetizovaného zvuku z výsledku rozpoznávání překladu. Pokud překládáte do více jazyků, přečtěte si téma Ruční syntéza.

Zadejte syntézu hlasu přiřazením setVoiceName instance a zadáním obslužné rutiny synthesizing události pro událost získat zvuk. Následující příklad uloží přeložený zvuk jako .wav soubor.

Důležité

Syntéza založená na událostech funguje pouze s jedním překladem. Nepřidávejte více cílových jazyků překladu. Kromě toho setVoiceName by hodnota měla být stejný jazyk jako cílový jazyk překladu. Můžete například "de" namapovat na "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);
            }
        }
    }
}

Ruční syntéza

Funkce getTranslations vrátí slovník, který můžete použít k syntetizaci zvuku z textu překladu. Iterujte každý překlad a syntetizujete ho. Při vytváření SpeechSynthesizer instance SpeechConfig musí objekt mít jeho setSpeechSynthesisVoiceName vlastnost nastavenou na požadovaný hlas.

Následující příklad překládá na pět jazyků. Každý překlad se pak syntetizuje do zvukového souboru v odpovídajícím neurálním jazyce.

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

Další informace o syntéze řeči najdete v základech syntézy řeči.

Referenční dokumentace | Balíček (npm) | Další ukázky zdrojového kódu knihovny GitHub |

V tomto návodu se naučíte rozpoznávat lidskou řeč a překládat ji do jiného jazyka.

Další informace o překladu řeči najdete v přehledu překladu řeči:

  • Překlad řeči na text
  • Překlad řeči do více cílových jazyků
  • Provedení přímého překladu řeči na řeč

Vytvoření konfigurace překladu

Pokud chcete službu překladu volat pomocí sady Speech SDK, musíte vytvořit SpeechTranslationConfig instanci. Tato třída obsahuje informace o vašem předplatném, jako je klíč a přidružená oblast, koncový bod, hostitel nebo autorizační token.

Poznámka:

Bez ohledu na to, jestli provádíte rozpoznávání řeči, syntézu řeči, překlad nebo rozpoznávání záměru, budete vždy vytvářet konfiguraci.

Inicializovat SpeechTranslationConfig můžete několika způsoby:

  • S předplatným: předejte klíč a přidruženou oblast.
  • S koncovým bodem: Předejte koncový bod služby Speech. Klíč nebo autorizační token je volitelný.
  • S hostitelem: předejte adresu hostitele. Klíč nebo autorizační token je volitelný.
  • S autorizačním tokenem: předejte autorizační token a přidruženou oblast.

Pojďme se podívat, jak vytvoříte SpeechTranslationConfig instanci pomocí klíče a oblasti. Získejte klíč prostředku a oblast služby Speech na webu Azure Portal.

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

Inicializace překladače

Po vytvoření SpeechTranslationConfig instance je dalším krokem inicializace TranslationRecognizer. Při inicializaci TranslationRecognizerje nutné ji předat instanci speechTranslationConfig . Objekt konfigurace poskytuje přihlašovací údaje, které služba překladu vyžaduje k ověření vaší žádosti.

Pokud překládáte řeč poskytovanou prostřednictvím výchozího mikrofonu vašeho zařízení, TranslationRecognizer měl by vypadat takto:

const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

Pokud chcete zadat zvukové vstupní zařízení, musíte vytvořit AudioConfig instanci třídy a zadat audioConfig parametr při inicializaci TranslationRecognizer.

Na objekt se AudioConfig odkazuje následujícím způsobem:

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

Pokud chcete místo mikrofonu zadat zvukový soubor, musíte zadat audioConfig parametr. Můžete to ale udělat jenom v případě, že cílíte na Node.js. Když vytvoříte AudioConfig instanci třídy místo volání fromDefaultMicrophoneInput, zavoláte fromWavFileOutput a předáte filename parametr:

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

Překlad řeči

Třída TranslationRecognizer pro sadu Speech SDK pro JavaScript zveřejňuje metody, které můžete použít pro překlad řeči:

  • Jednostřelový překlad (async):: Provádí překlad v neblokovacím (asynchronním) režimu. Překládá jednu promluvu. Určuje konec jedné promluvy tím, že naslouchá tichu na konci nebo dokud se nezpracuje maximálně 15 sekund zvuku.
  • Průběžný překlad (async):: Asynchronně zahájí operaci průběžného překladu. Uživatel se zaregistruje k událostem a zpracovává různé stavy aplikace. Chcete-li zastavit asynchronní průběžný překlad, zavolejte stopContinuousRecognitionAsync.

Další informace o tom, jak zvolit režim rozpoznávání řeči, najdete v tématu Začínáme s převodem řeči na text.

Zadání cílového jazyka

Chcete-li přeložit, musíte zadat zdrojový jazyk i alespoň jeden cílový jazyk.

Zdrojový jazyk můžete zvolit pomocí národního prostředí uvedeného v tabulce překladu řeči. Najděte si možnosti přeloženého jazyka na stejném odkazu.

Možnosti cílových jazyků se liší, když chcete zobrazit text nebo chcete slyšet syntetizovaný překlad řeči. Pokud chcete přeložit z angličtiny do němčiny, upravte objekt konfigurace překladu:

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

Rozpoznávání jedním snímkem

Tady je příklad asynchronního jednoduchého překladu prostřednictvím recognizeOnceAsync:

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

Potřebujete napsat kód pro zpracování výsledku. Tato ukázka vyhodnocuje překlad do němčiny 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();
});

Váš kód může také zpracovávat aktualizace poskytované během zpracování překladu. Pomocí těchto aktualizací můžete poskytnout vizuální zpětnou vazbu k průběhu překladu. Tento javascriptový Node.js příklad ukazuje tyto druhy aktualizací. Následující kód také zobrazuje podrobnosti vytvořené během procesu překladu:

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

Průběžný překlad

Průběžný překlad je trochu více zapojený než rozpoznávání s jedním snímkem. Vyžaduje, abyste se přihlásili k odběru recognizinga canceledrecognizedudálosti, abyste získali výsledky rozpoznávání. Chcete-li zastavit překlad, musíte zavolat stopContinuousRecognitionAsync.

Tady je příklad toho, jak se provádí průběžný překlad na zvukovém vstupním souboru. Začněme definováním vstupu a inicializace TranslationRecognizer:

const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

V následujícím kódu se přihlásíte k odběru událostí odeslaných z TranslationRecognizer:

  • recognizing: Signál pro události, které obsahují přechodné výsledky překladu.
  • recognized: Signál pro události, které obsahují konečné výsledky překladu. Tyto výsledky značí úspěšný pokus o překlad.
  • sessionStopped: Signál pro události, které označují konec relace překladu (operace).
  • canceled: Signál pro události, které obsahují zrušené výsledky překladu. Tyto události označují pokus o překlad, který byl zrušen v důsledku přímého zrušení. Případně značí selhání přenosu nebo protokolu.
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();
};

S nastavením všeho můžete zavolat startContinuousRecognitionAsync:

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

Volba zdrojového jazyka

Běžným úkolem překladu řeči je určení vstupního (nebo zdrojového) jazyka. Následující příklad ukazuje, jak byste změnili jazyk zadávání na italštinu. V kódu najděte instanci SpeechTranslationConfig a přidejte pod ni následující řádek:

speechTranslationConfig.speechRecognitionLanguage = "it-IT";

Vlastnost speechRecognitionLanguage očekává řetězec formátu jazyka a národního prostředí. Projděte si seznam podporovaných národních prostředí překladu řeči.

Zvolte jeden nebo více cílových jazyků.

Sada Speech SDK může paralelně překládat do více cílových jazyků. Dostupné cílové jazyky se poněkud liší od zdrojového seznamu jazyků. Cílové jazyky zadáte pomocí kódu jazyka, nikoli národního prostředí.

Seznam kódů jazyka pro cíle textu najdete v tabulce překladu řeči na stránce podpory jazyka. Najdete zde také podrobnosti o překladu do syntetizovaných jazyků.

Následující kód přidá němčinu jako cílový jazyk:

speechTranslationConfig.addTargetLanguage("de");

Vzhledem k tomu, že je možné překlady více cílových jazyků, musí váš kód při zkoumání výsledku zadat cílový jazyk. Následující kód získá výsledky překladu pro němčinu:

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

Referenční dokumentace | Balíček (stáhnout) | Další ukázky na GitHubu

Sada Speech SDK pro Objective-C podporuje překlad řeči, ale zatím jsme do ní nezahrnuli příručku. Začněte výběrem jiného programovacího jazyka a seznamte se s koncepty nebo si projděte referenční informace k Objective-C a ukázky propojené od začátku tohoto článku.

Referenční dokumentace | Balíček (stáhnout) | Další ukázky na GitHubu

Sada Speech SDK pro Swift podporuje překlad řeči, ale zatím jsme do ní nezahrnuli příručku. Začněte výběrem jiného programovacího jazyka a seznamte se s koncepty nebo si prohlédněte referenční informace a ukázky Swiftu, které jsou propojené od začátku tohoto článku.

Referenční dokumentace | – balíček (PyPi) | Další ukázky na GitHubu

V tomto návodu se naučíte rozpoznávat lidskou řeč a překládat ji do jiného jazyka.

Další informace o překladu řeči najdete v přehledu překladu řeči:

  • Překlad řeči na text
  • Překlad řeči do více cílových jazyků
  • Provedení přímého překladu řeči na řeč

Citlivá data a proměnné prostředí

Ukázkový zdrojový kód v tomto článku závisí na proměnných prostředí pro ukládání citlivých dat, jako je klíč předplatného a oblast prostředku služby Speech. Soubor kódu Pythonu obsahuje dvě hodnoty, které jsou přiřazeny z proměnných prostředí hostitelského počítače: SPEECH__SUBSCRIPTION__KEY a SPEECH__SERVICE__REGION. Obě tyto proměnné jsou v globálním oboru, takže jsou přístupné v definici funkce souboru kódu:

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

Další informace o proměnných prostředí najdete v tématu Proměnné prostředí a konfigurace aplikace.

Vytvoření konfigurace překladu řeči

Pokud chcete službu Speech volat pomocí sady Speech SDK, musíte vytvořit SpeechTranslationConfig instanci. Tato třída obsahuje informace o vašem předplatném, jako je klíč a přidružená oblast, koncový bod, hostitel nebo autorizační token.

Tip

Bez ohledu na to, jestli provádíte rozpoznávání řeči, syntézu řeči, překlad nebo rozpoznávání záměru, budete vždy vytvářet konfiguraci.

Inicializovat SpeechTranslationConfig můžete několika způsoby:

  • S předplatným: předejte klíč a přidruženou oblast.
  • S koncovým bodem: Předejte koncový bod služby Speech. Klíč nebo autorizační token je volitelný.
  • S hostitelem: předejte adresu hostitele. Klíč nebo autorizační token je volitelný.
  • S autorizačním tokenem: předejte autorizační token a přidruženou oblast.

Pojďme se podívat, jak můžete vytvořit SpeechTranslationConfig instanci pomocí klíče a oblasti. Získejte klíč prostředku a oblast služby Speech na webu 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)

Změna zdrojového jazyka

Jedním z běžných úloh překladu řeči je určení vstupního (nebo zdrojového) jazyka. Následující příklad ukazuje, jak byste změnili jazyk zadávání na italštinu. V kódu interagujte s SpeechTranslationConfig instancí tím, že ji přiřadíte speech_recognition_language k vlastnosti.

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

Vlastnost speech_recognition_language očekává řetězec formátu jazyka a národního prostředí. Projděte si seznam podporovaných národních prostředí překladu řeči.

Přidání jazyka překladu

Dalším běžným úkolem překladu řeči je určit cílové jazyky překladu. Vyžaduje se aspoň jeden, ale podporuje se násobky. Následující fragment kódu nastaví jako cíle jazyka překladu francouzštinu i němčinu:

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")

Při každém volání add_target_languagese zadává nový cílový jazyk překladu. Jinými slovy, když je řeč rozpoznána ze zdrojového jazyka, je každý cílový překlad k dispozici jako součást výsledné operace překladu.

Inicializace rozpoznávání překladu

Po vytvoření SpeechTranslationConfig instance je dalším krokem inicializace TranslationRecognizer. Při inicializaci TranslationRecognizerje nutné ji předat instanci translation_config . Objekt konfigurace poskytuje přihlašovací údaje, které služba Speech vyžaduje k ověření vaší žádosti.

Pokud rozpoznáváte řeč pomocí výchozího mikrofonu vašeho zařízení, TranslationRecognizer měl by vypadat takto:

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)

Pokud chcete zadat zvukové vstupní zařízení, musíte vytvořit AudioConfig instanci třídy a zadat audio_config parametr při inicializaci TranslationRecognizer.

Nejprve na AudioConfig objekt odkazujte následujícím způsobem:

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)

Pokud chcete místo mikrofonu zadat zvukový soubor, musíte zadat audioConfig parametr. Když však vytvoříte AudioConfig instanci třídy, místo volání pomocí use_default_microphone=True, zavoláte s parametrem filename="path-to-file.wav" a zadáte ho filename :

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)

Překlad řeči

Při překladu řeči se sada Speech SDK spoléhá na vstup z mikrofonu nebo ze zvukového souboru. Před překladem řeči probíhá rozpoznávání řeči. Po inicializaci všech objektů zavolejte funkci recognize-once a získejte výsledek:

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

Další informace o řeči na text najdete v základech rozpoznávání řeči.

Syntetizování překladů

Po úspěšném rozpoznávání a překladu řeči bude výsledek obsahovat všechny překlady ve slovníku. Klíč translations slovníku je cílový jazyk překladu a hodnota je přeložený text. Rozpoznanou řeč lze přeložit a potom syntetizovat v jiném jazyce (řeč na řeč).

Syntéza založená na událostech

Objekt TranslationRecognizer zveřejňuje Synthesizing událost. Událost se aktivuje několikrát a poskytuje mechanismus pro načtení syntetizovaného zvuku z výsledku rozpoznávání překladu. Pokud překládáte do více jazyků, přečtěte si téma Ruční syntéza.

Zadejte syntézu hlasu přiřazením voice_name instance a zadáním obslužné rutiny Synthesizing události pro událost získat zvuk. Následující příklad uloží přeložený zvuk jako .wav soubor.

Důležité

Syntéza založená na událostech funguje pouze s jedním překladem. Nepřidávejte více cílových jazyků překladu. Kromě toho voice_name by hodnota měla být stejný jazyk jako cílový jazyk překladu. Můžete například "de" namapovat na "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()

Ruční syntéza

Pomocí slovníku translations můžete syntetizovat zvuk z textu překladu. Iterujte každý překlad a syntetizujete ho. Při vytváření SpeechSynthesizer instance SpeechConfig musí objekt mít jeho speech_synthesis_voice_name vlastnost nastavenou na požadovaný hlas.

Následující příklad překládá na pět jazyků. Každý překlad se pak syntetizuje do zvukového souboru v odpovídajícím neurálním jazyce.

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

Další informace o syntéze řeči najdete v základech syntézy řeči.

Vícejazyčný překlad s identifikací jazyka

V mnoha scénářích možná nevíte, které vstupní jazyky se mají zadat. Pomocí identifikace jazyka můžete zjistit až 10 možných vstupních jazyků a automaticky přeložit do cílových jazyků.

Kompletní vzorový kód najdete v tématu Identifikace jazyka.

Speech to text REST API reference | Speech to text REST API for short audio reference | Additional Samples on GitHub

K překladu řeči můžete použít rozhraní REST API, ale zatím jsme do tohoto průvodce nezahrnuli. Začněte výběrem jiného programovacího jazyka a seznamte se s koncepty.

V tomto návodu se naučíte rozpoznávat lidskou řeč a překládat ji do jiného jazyka.

Další informace o překladu řeči najdete v přehledu překladu řeči:

  • Překlad řeči na text
  • Překlad řeči do více cílových jazyků
  • Provedení přímého překladu řeči na řeč

Požadavky

Stažení a instalace

Postupujte podle těchtokrokůch

  1. Spuštěním následujícího příkazu .NET CLI nainstalujte Rozhraní příkazového řádku služby Speech:

    dotnet tool install --global Microsoft.CognitiveServices.Speech.CLI
    
  2. Spuštěním následujících příkazů nakonfigurujte klíč prostředku a oblast služby Speech. Nahraďte SUBSCRIPTION-KEY klíčem prostředku služby Speech a nahraďte REGION oblastí prostředků služby Speech.

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

Nastavení zdrojových a cílových jazyků

Tento příkaz zavolá rozhraní příkazového řádku řeči k překladu řeči z mikrofonu z italštiny do francouzštiny:

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

Další kroky