Bagikan melalui


Cara mengenali dan menerjemahkan ucapan

Paket dokumentasi | referensi (NuGet) | Sampel tambahan di GitHub

Dalam panduan petunjuk ini, Anda belajar bagaimana mengenali ucapan manusia dan menerjemahkannya ke bahasa lain.

Lihat ikhtisar terjemahan ucapan untuk informasi selengkapnya tentang:

  • Menerjemahkan ucapan ke teks
  • Menerjemahkan ucapan ke beberapa bahasa target
  • Melakukan terjemahan ucapan ke ucapan langsung

Variabel data dan lingkungan sensitif

Contoh kode sumber dalam artikel ini bergantung pada variabel lingkungan untuk menyimpan data sensitif, seperti kunci dan wilayah sumber daya Ucapan. Program Kelas ini berisi dua nilai static readonly string yang ditetapkan dari variabel lingkungan komputer host: SPEECH__SUBSCRIPTION__KEY dan SPEECH__SERVICE__REGION. Kedua bidang ini berada di lingkup kelas, membuatnya dapat diakses dalam isi metode kelas:

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

Untuk informasi selengkapnya tentang variabel lingkungan, lihat Variabel lingkungan dan konfigurasi aplikasi.

Penting

Jika Anda menggunakan kunci API, simpan dengan aman di tempat lain, seperti di Azure Key Vault. Jangan sertakan kunci API langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik.

Untuk informasi selengkapnya tentang keamanan layanan AI, lihat Mengautentikasi permintaan ke layanan Azure AI.

Membuat konfigurasi terjemahan ucapan

Untuk memanggil layanan Azure Cognitive Service untuk Ucapan dengan menggunakan Speech SDK, Anda perlu membuat instans SpeechTranslationConfig. Kelas ini mencakup informasi tentang langganan Anda, seperti kunci dan wilayah terkait, titik akhir, host, atau token otorisasi.

Tip

Terlepas dari apakah Anda melakukan pengenalan ucapan, sintesis ucapan, terjemahan, atau pengenalan niat, Anda akan selalu membuat konfigurasi.

Anda dapat menginisialisasi SpeechTranslationConfig dalam beberapa cara:

  • Dengan langganan: teruskan kunci dan wilayah terkait.
  • Dengan titik akhir: teruskan titik akhir layanan Speech. Token kunci atau otorisasi bersifat opsional.
  • Dengan host: teruskan di alamat host. Token kunci atau otorisasi bersifat opsional.
  • Dengan token otorisasi: teruskan token otorisasi dan wilayah terkait.

Mari kita lihat bagaimana Anda membuat instans SpeechTranslationConfig menggunakan kunci dan wilayah. Dapatkan kunci dan wilayah sumber daya Azure Cognitive Service untuk Ucapan di portal Microsoft Azure.

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

Mengubah bahasa sumber

Salah satu tugas umum terjemahan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan bagaimana Anda akan mengubah bahasa input menjadi bahasa Italia. Dalam kode Anda, berinteraksi dengan instas SpeechTranslationConfig dengan menetapkannya ke properti SpeechRecognitionLanguage:

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

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

Properti SpeechRecognitionLanguage memperkirakan string format bahasa lokal. Lihat daftar lokal terjemahan ucapan yang didukung.

Menambahkan bahasa terjemahan

Tugas umum lain dari terjemahan ucapan adalah menentukan bahasa terjemahan target. Setidaknya satu diperlukan, tetapi kelipatan didukung. Cuplikan kode berikut menetapkan bahasa Prancis dan Jerman sebagai target bahasa terjemahan:

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

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

Dengan setiap panggilan ke AddTargetLanguage, bahasa terjemahan target baru ditentukan. Dengan kata lain, ketika ucapan dikenali dari bahasa sumber, setiap terjemahan target tersedia sebagai bagian dari operasi terjemahan yang dihasilkan.

Menginisialisasi pengenal terjemahan

Setelah Anda membuat SpeechTranslationConfig instans, langkah selanjutnya adalah menginisialisasi TranslationRecognizer. Ketika Anda menginisialisasi TranslationRecognizer, Anda harus meneruskan instans speechTranslationConfig Anda. Objek konfigurasi menyediakan info masuk yang diperlukan layanan ucapan untuk memvalidasi permintaan Anda.

Jika Anda mengenali ucapan menggunakan mikrofon default perangkat, berikut tampilan instans TranslationRecognizer:

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

Jika Anda ingin menentukan perangkat input audio, maka Anda perlu membuat instans kelas AudioConfig dan memberikan parameter audioConfig saat menginisialisasi TranslationRecognizer.

Pertama, referensikan objek AudioConfig sebagai berikut:

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

Jika Anda ingin menyediakan file audio alih-alih menggunakan mikrofon, Anda masih perlu menyediakan parameter audioConfig. Namun, ketika Anda membuat instans kelas AudioConfig, alih-alih memanggil FromDefaultMicrophoneInput, Anda memanggil FromWavFileInput dan meneruskan parameter filename:

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

Menerjemahkan ucapan

Untuk menerjemahkan ucapan, Speech SDK bergantung pada mikrofon atau input file audio. Pengenalan ucapan terjadi sebelum terjemahan ucapan. Setelah semua objek diinisialisasi, panggil fungsi recognize-once dan dapatkan hasilnya:

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

Untuk informasi selengkapnya tentang ucapan ke teks, lihat dasar-dasar pengenalan ucapan.

Terjemahan berbasis peristiwa

TranslationRecognizer Objek mengekspos sebuah Recognizing peristiwa. Peristiwa ini diaktifkan beberapa kali dan menyediakan mekanisme untuk mengambil hasil terjemahan perantara.

Catatan

Hasil terjemahan menengah tidak tersedia saat Anda menggunakan terjemahan ucapan multibahasa.

Contoh berikut mencetak hasil terjemahan menengah ke konsol:

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

Menyintesis terjemahan

Setelah pengenalan ucapan dan terjemahan yang berhasil, hasilnya berisi semua terjemahan dalam kamus. Kunci kamus Translations adalah bahasa terjemahan target, dan nilainya adalah teks yang diterjemahkan. Ucapan yang dikenali dapat diterjemahkan dan kemudian disintesis dalam bahasa yang berbeda (speech-to-speech).

Sintesis berbasis peristiwa

TranslationRecognizer Objek mengekspos sebuah Synthesizing peristiwa. Peristiwa ini beberapa kali terjadi, dan menyediakan mekanisme untuk mengambil audio yang disintesis dari hasil pengenalan terjemahan. Jika Anda menerjemahkan ke beberapa bahasa, lihat Sintesis manual.

Tentukan suara sintesis dengan menetapkan instans VoiceName, dan menyediakan penghandel peristiwa untuk peristiwa Synthesizing untuk mendapatkan audio. Contoh berikut menyimpan audio yang diterjemahkan sebagai file .wav.

Penting

Sintesis berbasis peristiwa hanya bekerja dengan terjemahan tunggal. Jangan menambahkan beberapa bahasa terjemahan target. Selain itu, nilai VoiceName harus bahasa yang sama dengan bahasa terjemahan target. Misalnya, "de" dapat memetakan ke "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]}");
    }
}

Sintesis manual

Anda dapat menggunakan kamus Translations untuk mensintesis audio dari teks terjemahan. Iterasi melalui setiap terjemahan, dan mensintesisnya. Saat membuat instans SpeechSynthesizer, objek SpeechConfig harus mengatur propertinya SpeechSynthesisVoiceName ke suara yang diinginkan.

Contoh berikut diterjemahkan menjadi lima bahasa. Setiap terjemahan kemudian disintesis ke file audio dalam bahasa neural yang sesuai.

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

Untuk informasi selengkapnya tentang sintesis ucapan, lihat dasar-dasar sintesis ucapan.

Terjemahan multibahasa dengan identifikasi bahasa

Dalam banyak skenario, Anda mungkin tidak tahu bahasa input mana yang akan ditentukan. Menggunakan identifikasi bahasa, Anda dapat mendeteksi hingga 10 kemungkinan bahasa input dan secara otomatis menerjemahkan ke bahasa target Anda.

Contoh berikut mengantisipasi itu en-US atau zh-CN harus dideteksi karena didefinisikan dalam AutoDetectSourceLanguageConfig. Kemudian, ucapan diterjemahkan ke de dan fr seperti yang ditentukan dalam panggilan ke AddTargetLanguage().

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

Untuk sampel kode lengkap, lihat identifikasi bahasa.

Terjemahan ucapan multibahasa tanpa kandidat bahasa sumber

Terjemahan ucapan multibahasa mengimplementasikan tingkat teknologi terjemahan ucapan baru yang membuka berbagai kemampuan, termasuk tidak memiliki bahasa input yang ditentukan, dan menangani sakelar bahasa dalam sesi yang sama. Fitur-fitur ini memungkinkan tingkat kekuatan terjemahan ucapan baru yang dapat diimplementasikan ke dalam produk Anda.

Saat ini ketika Anda menggunakan ID Bahasa dengan terjemahan ucapan, Anda harus membuat SpeechTranslationConfig objek dari titik akhir v2. Ganti string "YourServiceRegion" dengan wilayah sumber daya Ucapan Anda (seperti "westus"). Ganti "YourSubscriptionKey" dengan kunci sumber daya Ucapan Anda.

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

Tentukan bahasa target terjemahan. Ganti dengan bahasa pilihan Anda. Anda dapat menambahkan lebih banyak baris.

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

Pembferensi utama dengan terjemahan ucapan multibahasa adalah Anda tidak perlu menentukan bahasa sumber. Ini karena layanan akan secara otomatis mendeteksi bahasa sumber. AutoDetectSourceLanguageConfig Buat objek dengan fromOpenRange metode untuk memberi tahu layanan bahwa Anda ingin menggunakan terjemahan ucapan multibahasa tanpa bahasa sumber yang ditentukan.

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

Untuk sampel kode lengkap dengan Speech SDK, lihat sampel terjemahan ucapan di GitHub.

Menggunakan terjemahan kustom dalam terjemahan ucapan

Fitur terjemahan kustom dalam terjemahan ucapan terintegrasi dengan mulus dengan layanan Terjemahan Kustom Azure, memungkinkan Anda mencapai terjemahan yang lebih akurat dan disesuaikan. Saat integrasi secara langsung memanfaatkan kemampuan layanan terjemahan kustom Azure, Anda perlu menggunakan sumber daya multi-layanan untuk memastikan berfungsinya serangkaian fitur lengkap yang benar. Untuk petunjuk terperinci, silakan lihat panduan tentang Membuat sumber daya multi-layanan untuk layanan Azure AI.

Selain itu, untuk pelatihan offline penerjemah kustom dan mendapatkan "ID Kategori," silakan lihat skrip langkah demi langkah yang disediakan dalam Mulai Cepat: Membangun, menyebarkan, dan menggunakan model kustom - Penerjemah Kustom.

// Creates an instance of a translation recognizer using speech translation configuration
// You should use the same subscription key, which you used to generate the custom model before.
// V2 endpoint is required for the “Custom Translation” feature. Example: "wss://westcentralus.stt.speech.microsoft.com/speech/universal/v2"

try (SpeechTranslationConfig config = SpeechTranslationConfig.fromEndpoint(URI.create(endpointUrl), speechSubscriptionKey)) {

            // Sets source and target language(s).
           ….

            // Set the category id
            config.setCustomModelCategoryId("yourCategoryId");

       ….
}

Paket dokumentasi | referensi (NuGet) | Sampel tambahan di GitHub

Dalam panduan petunjuk ini, Anda belajar bagaimana mengenali ucapan manusia dan menerjemahkannya ke bahasa lain.

Lihat ikhtisar terjemahan ucapan untuk informasi selengkapnya tentang:

  • Menerjemahkan ucapan ke teks
  • Menerjemahkan ucapan ke beberapa bahasa target
  • Melakukan terjemahan ucapan ke ucapan langsung

Variabel data dan lingkungan sensitif

Contoh kode sumber dalam artikel ini bergantung pada variabel lingkungan untuk menyimpan data sensitif, seperti kunci dan wilayah sumber daya Ucapan. File kode C++ berisi dua nilai string yang ditetapkan dari variabel lingkungan mesin host: SPEECH__SUBSCRIPTION__KEY dan SPEECH__SERVICE__REGION. Kedua bidang ini berada di lingkup kelas, membuatnya dapat diakses dalam isi metode kelas:

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

Untuk informasi selengkapnya tentang variabel lingkungan, lihat Variabel lingkungan dan konfigurasi aplikasi.

Penting

Jika Anda menggunakan kunci API, simpan dengan aman di tempat lain, seperti di Azure Key Vault. Jangan sertakan kunci API langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik.

Untuk informasi selengkapnya tentang keamanan layanan AI, lihat Mengautentikasi permintaan ke layanan Azure AI.

Membuat konfigurasi terjemahan ucapan

Untuk memanggil layanan Azure Cognitive Service untuk Ucapan dengan menggunakan Speech SDK, Anda perlu membuat instans SpeechTranslationConfig. Kelas ini mencakup informasi tentang langganan Anda, seperti kunci dan wilayah terkait, titik akhir, host, atau token otorisasi.

Tip

Terlepas dari apakah Anda melakukan pengenalan ucapan, sintesis ucapan, terjemahan, atau pengenalan niat, Anda akan selalu membuat konfigurasi.

Anda dapat menginisialisasi SpeechTranslationConfig dalam beberapa cara:

  • Dengan langganan: teruskan kunci dan wilayah terkait.
  • Dengan titik akhir: teruskan titik akhir layanan Speech. Token kunci atau otorisasi bersifat opsional.
  • Dengan host: teruskan di alamat host. Token kunci atau otorisasi bersifat opsional.
  • Dengan token otorisasi: teruskan token otorisasi dan wilayah terkait.

Mari kita lihat bagaimana Anda membuat instans SpeechTranslationConfig menggunakan kunci dan wilayah. Dapatkan kunci dan wilayah sumber daya Azure Cognitive Service untuk Ucapan di portal Microsoft Azure.

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

Mengubah bahasa sumber

Salah satu tugas umum terjemahan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan bagaimana Anda akan mengubah bahasa input menjadi bahasa Italia. Dalam kode Anda, berinteraksi dengan instans SpeechTranslationConfig dengan memanggil metode SetSpeechRecognitionLanguage.

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

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

Properti SpeechRecognitionLanguage memperkirakan string format bahasa lokal. Lihat daftar lokal terjemahan ucapan yang didukung.

Menambahkan bahasa terjemahan

Tugas umum lain dari terjemahan ucapan adalah menentukan bahasa terjemahan target. Setidaknya satu diperlukan, tetapi kelipatan didukung. Cuplikan kode berikut menetapkan bahasa Prancis dan Jerman sebagai target bahasa terjemahan:

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

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

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

Dengan setiap panggilan ke AddTargetLanguage, bahasa terjemahan target baru ditentukan. Dengan kata lain, ketika ucapan dikenali dari bahasa sumber, setiap terjemahan target tersedia sebagai bagian dari operasi terjemahan yang dihasilkan.

Menginisialisasi pengenal terjemahan

Setelah Anda membuat SpeechTranslationConfig instans, langkah selanjutnya adalah menginisialisasi TranslationRecognizer. Ketika Anda menginisialisasi TranslationRecognizer, Anda harus meneruskan instans translationConfig Anda. Objek konfigurasi menyediakan info masuk yang diperlukan layanan ucapan untuk memvalidasi permintaan Anda.

Jika Anda mengenali ucapan dengan menggunakan mikrofon default perangkat, berikut tampilan TranslationRecognizer:

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

Jika Anda ingin menentukan perangkat input audio, maka Anda perlu membuat instans kelas AudioConfig dan memberikan parameter audioConfig saat menginisialisasi TranslationRecognizer.

Pertama, referensikan objek AudioConfig sebagai berikut:

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

Jika Anda ingin menyediakan file audio alih-alih menggunakan mikrofon, Anda masih perlu menyediakan parameter audioConfig. Namun, ketika Anda membuat instans kelas AudioConfig, alih-alih memanggil FromDefaultMicrophoneInput, Anda memanggil FromWavFileInput dan meneruskan parameter filename:

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

Menerjemahkan ucapan

Untuk menerjemahkan ucapan, Speech SDK bergantung pada mikrofon atau input file audio. Pengenalan ucapan terjadi sebelum terjemahan ucapan. Setelah semua objek diinisialisasi, panggil fungsi recognize-once dan dapatkan hasilnya:

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

Untuk informasi selengkapnya tentang ucapan ke teks, lihat dasar-dasar pengenalan ucapan.

Menyintesis terjemahan

Setelah pengenalan ucapan dan terjemahan yang berhasil, hasilnya berisi semua terjemahan dalam kamus. Kunci kamus Translations adalah bahasa terjemahan target, dan nilainya adalah teks yang diterjemahkan. Ucapan yang dikenali dapat diterjemahkan dan kemudian disintesis dalam bahasa yang berbeda (speech-to-speech).

Sintesis berbasis peristiwa

TranslationRecognizer Objek mengekspos sebuah Synthesizing peristiwa. Peristiwa ini beberapa kali terjadi, dan menyediakan mekanisme untuk mengambil audio yang disintesis dari hasil pengenalan terjemahan. Jika Anda menerjemahkan ke beberapa bahasa, lihat Sintesis manual.

Tentukan suara sintesis dengan menetapkan instans SetVoiceName, dan menyediakan penghandel peristiwa untuk peristiwa Synthesizing untuk mendapatkan audio. Contoh berikut menyimpan audio yang diterjemahkan sebagai file .wav.

Penting

Sintesis berbasis peristiwa hanya bekerja dengan terjemahan tunggal. Jangan menambahkan beberapa bahasa terjemahan target. Selain itu, nilai SetVoiceName harus bahasa yang sama dengan bahasa terjemahan target. Misalnya, "de" dapat memetakan ke "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;
        }
    }
}

Sintesis manual

Anda dapat menggunakan kamus Translations untuk mensintesis audio dari teks terjemahan. Iterasi melalui setiap terjemahan, dan mensintesisnya. Saat membuat instans SpeechSynthesizer, objek SpeechConfig harus mengatur propertinya SetSpeechSynthesisVoiceName ke suara yang diinginkan.

Contoh berikut diterjemahkan menjadi lima bahasa. Setiap terjemahan kemudian disintesis ke file audio dalam bahasa neural yang sesuai.

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

Untuk informasi selengkapnya tentang sintesis ucapan, lihat dasar-dasar sintesis ucapan.

Terjemahan multibahasa dengan identifikasi bahasa

Dalam banyak skenario, Anda mungkin tidak tahu bahasa input mana yang akan ditentukan. Menggunakan identifikasi bahasa, Anda dapat mendeteksi hingga 10 kemungkinan bahasa input dan secara otomatis menerjemahkan ke bahasa target Anda.

Contoh berikut mengantisipasi itu en-US atau zh-CN harus dideteksi karena didefinisikan dalam AutoDetectSourceLanguageConfig. Kemudian, pidato akan diterjemahkan ke de dan fr sebagaimana ditentukan dalam panggilan ke AddTargetLanguage().

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

Untuk sampel kode lengkap, lihat identifikasi bahasa.

Dokumentasi | referensi Paket (Go) | Sampel tambahan di GitHub

Speech SDK untuk Go tidak mendukung terjemahan ucapan. Silakan pilih bahasa pemrograman lain atau referensi Go dan sampel yang ditautkan dari awal artikel ini.

Dokumentasi | referensi Sampel tambahan di GitHub

Dalam panduan petunjuk ini, Anda belajar bagaimana mengenali ucapan manusia dan menerjemahkannya ke bahasa lain.

Lihat ikhtisar terjemahan ucapan untuk informasi selengkapnya tentang:

  • Menerjemahkan ucapan ke teks
  • Menerjemahkan ucapan ke beberapa bahasa target
  • Melakukan terjemahan ucapan ke ucapan langsung

Variabel data dan lingkungan sensitif

Contoh kode sumber dalam artikel ini bergantung pada variabel lingkungan untuk menyimpan data sensitif, seperti kunci dan wilayah sumber daya Ucapan. File kode Java berisi dua nilai static final String yang ditetapkan dari variabel lingkungan komputer host: SPEECH__SUBSCRIPTION__KEY dan SPEECH__SERVICE__REGION. Kedua bidang ini berada di lingkup kelas, membuatnya dapat diakses dalam isi metode kelas:

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

Untuk informasi selengkapnya tentang variabel lingkungan, lihat Variabel lingkungan dan konfigurasi aplikasi.

Penting

Jika Anda menggunakan kunci API, simpan dengan aman di tempat lain, seperti di Azure Key Vault. Jangan sertakan kunci API langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik.

Untuk informasi selengkapnya tentang keamanan layanan AI, lihat Mengautentikasi permintaan ke layanan Azure AI.

Membuat konfigurasi terjemahan ucapan

Untuk memanggil layanan Azure Cognitive Service untuk Ucapan dengan menggunakan Speech SDK, Anda perlu membuat instans SpeechTranslationConfig. Kelas ini mencakup informasi tentang langganan Anda, seperti kunci dan wilayah terkait, titik akhir, host, atau token otorisasi.

Tip

Terlepas dari apakah Anda melakukan pengenalan ucapan, sintesis ucapan, terjemahan, atau pengenalan niat, Anda akan selalu membuat konfigurasi.

Anda dapat menginisialisasi instans SpeechTranslationConfig dengan beberapa cara:

  • Dengan langganan: teruskan kunci dan wilayah terkait.
  • Dengan titik akhir: teruskan titik akhir layanan Speech. Token kunci atau otorisasi bersifat opsional.
  • Dengan host: teruskan di alamat host. Token kunci atau otorisasi bersifat opsional.
  • Dengan token otorisasi: teruskan token otorisasi dan wilayah terkait.

Mari kita lihat bagaimana Anda membuat instans SpeechTranslationConfig menggunakan kunci dan wilayah. Dapatkan kunci dan wilayah sumber daya Azure Cognitive Service untuk Ucapan di portal Microsoft Azure.

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

Mengubah bahasa sumber

Salah satu tugas umum terjemahan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan bagaimana Anda akan mengubah bahasa input menjadi bahasa Italia. Dalam kode Anda, berinteraksi dengan instans SpeechTranslationConfig, dengan memanggil metode setSpeechRecognitionLanguage:

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

Properti setSpeechRecognitionLanguage memperkirakan string format bahasa lokal. Lihat daftar lokal terjemahan ucapan yang didukung.

Menambahkan bahasa terjemahan

Tugas umum lain dari terjemahan ucapan adalah menentukan bahasa terjemahan target. Setidaknya satu diperlukan, tetapi kelipatan didukung. Cuplikan kode berikut menetapkan bahasa Prancis dan Jerman sebagai target bahasa terjemahan:

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

Dengan setiap panggilan ke addTargetLanguage, bahasa terjemahan target baru ditentukan. Dengan kata lain, ketika ucapan dikenali dari bahasa sumber, setiap terjemahan target tersedia sebagai bagian dari operasi terjemahan yang dihasilkan.

Menginisialisasi pengenal terjemahan

Setelah Anda membuat SpeechTranslationConfig instans, langkah selanjutnya adalah menginisialisasi TranslationRecognizer. Ketika Anda menginisialisasi TranslationRecognizer, Anda harus meneruskan instans speechTranslationConfig Anda. Objek konfigurasi menyediakan info masuk yang diperlukan layanan ucapan untuk memvalidasi permintaan Anda.

Jika Anda mengenali ucapan dengan menggunakan mikrofon default perangkat, berikut tampilan TranslationRecognizer:

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

Jika Anda ingin menentukan perangkat input audio, maka Anda perlu membuat instans kelas AudioConfig dan memberikan parameter audioConfig saat menginisialisasi TranslationRecognizer.

Pertama, referensikan objek AudioConfig sebagai berikut:

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

Jika Anda ingin menyediakan file audio alih-alih menggunakan mikrofon, Anda masih perlu menyediakan parameter audioConfig. Namun, ketika Anda membuat instans kelas AudioConfig, alih-alih memanggil fromDefaultMicrophoneInput, Anda memanggil fromWavFileInput dan meneruskan parameter filename:

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

Menerjemahkan ucapan

Untuk menerjemahkan ucapan, Speech SDK bergantung pada mikrofon atau input file audio. Pengenalan ucapan terjadi sebelum terjemahan ucapan. Setelah semua objek diinisialisasi, panggil fungsi recognize-once dan dapatkan hasilnya:

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

Untuk informasi selengkapnya tentang ucapan ke teks, lihat dasar-dasar pengenalan ucapan.

Menyintesis terjemahan

Setelah pengenalan ucapan dan terjemahan yang berhasil, hasilnya berisi semua terjemahan dalam kamus. Fungsi getTranslations ini mengembalikan kamus dengan kunci sebagai bahasa terjemahan target dan nilainya adalah teks yang diterjemahkan. Ucapan yang dikenali dapat diterjemahkan dan kemudian disintesis dalam bahasa yang berbeda (speech-to-speech).

Sintesis berbasis peristiwa

TranslationRecognizer Objek mengekspos sebuah synthesizing peristiwa. Peristiwa ini beberapa kali terjadi, dan menyediakan mekanisme untuk mengambil audio yang disintesis dari hasil pengenalan terjemahan. Jika Anda menerjemahkan ke beberapa bahasa, lihat Sintesis manual.

Tentukan suara sintesis dengan menetapkan instans setVoiceName, dan menyediakan penghandel peristiwa untuk peristiwa synthesizing untuk mendapatkan audio. Contoh berikut menyimpan audio yang diterjemahkan sebagai file .wav.

Penting

Sintesis berbasis peristiwa hanya bekerja dengan terjemahan tunggal. Jangan menambahkan beberapa bahasa terjemahan target. Selain itu, nilai setVoiceName harus bahasa yang sama dengan bahasa terjemahan target. Misalnya, "de" dapat memetakan ke "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 translationRecognitionResult = translationRecognizer.recognizeOnceAsync().get();
        if (translationRecognitionResult.getReason() == ResultReason.TranslatedSpeech) {
            System.out.printf("Recognized: \"%s\"\n", translationRecognitionResult.getText());
            for (Map.Entry<String, String> pair : translationRecognitionResult.getTranslations().entrySet()) {
                String language = pair.getKey();
                String translation = pair.getValue();
                System.out.printf("Translated into '%s': %s\n", language, translation);
            }
        }
    }
}

Sintesis manual

Fungsi getTranslations mengembalikan kamus yang dapat digunakan untuk mensintesis audio dari teks terjemahan. Iterasi melalui setiap terjemahan, dan mensintesisnya. Saat membuat instans SpeechSynthesizer, objek SpeechConfig harus mengatur propertinya setSpeechSynthesisVoiceName ke suara yang diinginkan.

Contoh berikut diterjemahkan menjadi lima bahasa. Setiap terjemahan kemudian disintesis ke file audio dalam bahasa neural yang sesuai.

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 translationRecognitionResult = translationRecognizer.recognizeOnceAsync().get();
        if (translationRecognitionResult.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", translationRecognitionResult.getText());
            for (Map.Entry<String, String> pair : translationRecognitionResult.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();
                }
            }
        }
    }
}

Untuk informasi selengkapnya tentang sintesis ucapan, lihat dasar-dasar sintesis ucapan.

Paket dokumentasi | referensi (npm) | Sampel tambahan pada kode sumber Pustaka GitHub |

Dalam panduan petunjuk ini, Anda belajar bagaimana mengenali ucapan manusia dan menerjemahkannya ke bahasa lain.

Lihat ikhtisar terjemahan ucapan untuk informasi selengkapnya tentang:

  • Menerjemahkan ucapan ke teks
  • Menerjemahkan ucapan ke beberapa bahasa target
  • Melakukan terjemahan ucapan ke ucapan langsung

Membuat konfigurasi terjemahan

Untuk memanggil layanan penerjemahan menggunakan SDK Ucapan, Anda perlu membuat instans SpeechTranslationConfig. Kelas ini mencakup informasi tentang langganan Anda, seperti kunci dan wilayah terkait, titik akhir, host, atau token otorisasi.

Catatan

Terlepas dari apakah Anda melakukan pengenalan ucapan, sintesis ucapan, terjemahan, atau pengenalan niat, Anda akan selalu membuat konfigurasi.

Anda dapat menginisialisasi SpeechTranslationConfig dalam beberapa cara:

  • Dengan langganan: teruskan kunci dan wilayah terkait.
  • Dengan titik akhir: teruskan titik akhir layanan Speech. Token kunci atau otorisasi bersifat opsional.
  • Dengan host: teruskan di alamat host. Token kunci atau otorisasi bersifat opsional.
  • Dengan token otorisasi: teruskan token otorisasi dan wilayah terkait.

Mari kita lihat bagaimana Anda membuat instans SpeechTranslationConfig menggunakan kunci dan wilayah. Dapatkan kunci dan wilayah sumber daya Azure Cognitive Service untuk Ucapan di portal Microsoft Azure.

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

Menginisialisasi penerjemah

Setelah Anda membuat SpeechTranslationConfig instans, langkah selanjutnya adalah menginisialisasi TranslationRecognizer. Ketika Anda menginisialisasi TranslationRecognizer, Anda harus meneruskan instans speechTranslationConfig Anda. Objek konfigurasi menyediakan info masuk yang diperlukan layanan terjemahan untuk memvalidasi permintaan Anda.

Jika Anda menerjemahkan ucapan yang disediakan melalui mikrofon default perangkat, berikut tampilan TranslationRecognizer:

const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

Jika Anda ingin menentukan perangkat input audio, maka Anda perlu membuat instans kelas AudioConfig dan memberikan parameter audioConfig saat menginisialisasi TranslationRecognizer.

Referensikan objek AudioConfig sebagai berikut:

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

Jika Anda ingin menyediakan file audio alih-alih menggunakan mikrofon, Anda masih perlu menyediakan parameter audioConfig. Namun, Anda dapat melakukan ini hanya ketika Anda menargetkan Node.js. Namun, ketika Anda membuat instans kelas AudioConfig, alih-alih memanggil fromDefaultMicrophoneInput, Anda akan memanggil fromWavFileOutput dan meneruskan paramater filename:

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

Menerjemahkan ucapan

Kelas TranslationRecognizer untuk Speech SDK untuk JavaScript memaparkan beberapa metode yang dapat Anda gunakan untuk penerjemahan ucapan:

  • Terjemahan satu tembakan (asinkron): Melakukan terjemahan dalam mode non-blok (asinkron). Ini menerjemahkan satu ucapan. Akhir dari ujaran tunggal ditentukan dengan mendengarkan keheningan di akhir atau sampai maksimal 15 detik audio diproses.
  • Terjemahan berkelanjutan (asinkron): Secara asinkron memulai operasi terjemahan berkelanjutan. Pengguna mendaftar ke peristiwa dan menangani berbagai status aplikasi. Untuk menghentikan terjemahan berkelanjutan asinkron, hubungi stopContinuousRecognitionAsync.

Untuk mempelajari selengkapnya tentang cara memilih mode pengenalan ucapan, lihat Mulai menggunakan ucapan ke teks.

Tentukan bahasa target

Untuk menerjemahkan, Anda harus menentukan bahasa sumber dan minimal satu bahasa target.

Anda dapat memilih bahasa sumber menggunakan lokal yang tercantum dalam Tabel terjemahan Azure Cognitive Service untuk Ucapan. Temukan opsi Anda untuk bahasa yang diterjemahkan di tautan yang sama.

Opsi Anda untuk bahasa target berbeda saat Anda ingin menampilkan teks atau ingin mendengar ucapan terjemahan yang disintesis. Untuk menerjemahkan dari bahasa Inggris ke Bahasa Jerman, ubah objek konfigurasi terjemahan:

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

Pengenalan pengucapan tunggal

Berikut adalah contoh penerjemahan pengucapan tunggal asinkron menggunakan recognizeOnceAsync:

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

Anda harus menulis beberapa kode untuk menghandel hasilnya. Sampel ini mengevaluasi result.reason untuk terjemahan ke bahasa Jerman:

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

Kode Anda juga dapat menangani pembaruan yang disediakan saat terjemahan sedang diproses. Anda dapat menggunakan pembaruan ini untuk memberikan umpan balik visual tentang kemajuan terjemahan. Contoh Node.js JavaScript ini menunjukkan jenis pembaruan ini. Kode berikut juga menampilkan detail yang dihasilkan selama proses penerjemahan:

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

Terjemahan berkelanjutan

Pengenalan berkelanjutan sedikit lebih terlibat daripada pengenalan pengucapan tunggal. Pengenalan berkelanjutan mengharuskan Anda berlangganan peristiwa recognizing, recognized, dan canceled untuk mendapatkan hasil pengenalan. Untuk menghentikan terjemahan, Anda harus menelepon stopContinuousRecognitionAsync.

Berikut adalah contoh cara penerjemahan berkelanjutan dilakukan pada file input audio. Mari mulai dengan mendefinisikan input dan menginisialisasi TranslationRecognizer:

const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);

Dalam kode berikut, Anda berlangganan acara yang dikirim dari TranslationRecognizer:

  • recognizing: Sinyal untuk peristiwa yang berisi hasil penerjemahan menengah.
  • recognized: Sinyal untuk peristiwa yang berisi hasil terjemahan akhir. Hasil ini menunjukkan upaya penerjemahan yang berhasil.
  • sessionStopped: Sinyal untuk peristiwa yang mengindikasikan berakhirnya sesi penerjemahan (operasi).
  • canceled: Sinyal untuk peristiwa yang berisi hasil terjemahan yang dibatalkan. Peristiwa ini menunjukkan upaya terjemahan yang dibatalkan sebagai akibat dari pembatalan langsung. Atau, mereka menunjukkan kegagalan transportasi atau protokol.
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();
};

Setelah semuanya siap, Anda dapat memanggil startContinuousRecognitionAsync:

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

Pilih bahasa sumber

Salah satu tugas umum terjemahan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan bagaimana Anda akan mengubah bahasa input menjadi bahasa Italia. Di kode Anda, cari instans SpeechTranslationConfig Anda dan tambahkan baris berikut tepat di bawahnya:

speechTranslationConfig.speechRecognitionLanguage = "it-IT";

Properti speechRecognitionLanguage memperkirakan string format bahasa lokal. Lihat daftar lokal terjemahan ucapan yang didukung.

Memilih satu atau beberapa bahasa target

SDK Ucapan dapat diterjemahkan ke beberapa bahasa target secara paralel. Bahasa target tersedia agak berbeda dari daftar bahasa sumber. Anda menentukan bahasa target dengan menggunakan kode bahasa, bukan lokal.

Untuk daftar kode bahasa untuk target teks, lihat tabel terjemahan ucapan di halaman dukungan bahasa. Anda juga dapat menemukan detail tentang terjemahan ke dalam bahasa yang disintesis di sana.

Kode berikut menambahkan bahasa Jerman sebagai bahasa target:

speechTranslationConfig.addTargetLanguage("de");

Karena beberapa terjemahan bahasa target dimungkinkan, kode Anda harus menentukan bahasa target saat memeriksa hasilnya. Kode berikut mendapatkan hasil terjemahan untuk bahasa Jerman:

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

Paket dokumentasi | referensi (unduh) | Sampel tambahan di GitHub

Speech SDK untuk Objective-C memang mendukung terjemahan ucapan, tetapi kami belum menyertakan panduan di sini. Silakan pilih bahasa pemrograman lain untuk memulai dan belajar tentang konsep, atau lihat referensi Objective-C dan sampel yang ditautkan dari awal artikel ini.

Paket dokumentasi | referensi (unduh) | Sampel tambahan di GitHub

Speech SDK untuk Swift memang mendukung terjemahan ucapan, tetapi kami belum menyertakan panduan di sini. Silakan pilih bahasa pemrograman lain untuk memulai dan mempelajari tentang konsep, atau lihat referensi Swift dan sampel yang ditautkan dari awal artikel ini.

Paket dokumentasi | referensi (PyPi) | Sampel tambahan di GitHub

Dalam panduan petunjuk ini, Anda belajar bagaimana mengenali ucapan manusia dan menerjemahkannya ke bahasa lain.

Lihat ikhtisar terjemahan ucapan untuk informasi selengkapnya tentang:

  • Menerjemahkan ucapan ke teks
  • Menerjemahkan ucapan ke beberapa bahasa target
  • Melakukan terjemahan ucapan ke ucapan langsung

Variabel data dan lingkungan sensitif

Contoh kode sumber dalam artikel ini bergantung pada variabel lingkungan untuk menyimpan data sensitif, seperti kunci dan wilayah langganan sumber daya Azure Cognitive Service untuk Ucapan. File kode python berisi dua nilai yang ditetapkan dari variabel lingkungan mesin host: SPEECH__SUBSCRIPTION__KEY dan SPEECH__SERVICE__REGION. Kedua variabel ini berada pada lingkup global, membuatnya dapat diakses dalam definisi fungsi dari file kode:

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

Untuk informasi selengkapnya tentang variabel lingkungan, lihat Variabel lingkungan dan konfigurasi aplikasi.

Penting

Jika Anda menggunakan kunci API, simpan dengan aman di tempat lain, seperti di Azure Key Vault. Jangan sertakan kunci API langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik.

Untuk informasi selengkapnya tentang keamanan layanan AI, lihat Mengautentikasi permintaan ke layanan Azure AI.

Membuat konfigurasi terjemahan ucapan

Untuk memanggil layanan Azure Cognitive Service untuk Ucapan dengan menggunakan Speech SDK, Anda perlu membuat instans SpeechTranslationConfig. Kelas ini mencakup informasi tentang langganan Anda, seperti kunci dan wilayah terkait, titik akhir, host, atau token otorisasi.

Tip

Terlepas dari apakah Anda melakukan pengenalan ucapan, sintesis ucapan, terjemahan, atau pengenalan niat, Anda akan selalu membuat konfigurasi.

Anda dapat menginisialisasi SpeechTranslationConfig dalam beberapa cara:

  • Dengan langganan: teruskan kunci dan wilayah terkait.
  • Dengan titik akhir: teruskan titik akhir layanan Speech. Token kunci atau otorisasi bersifat opsional.
  • Dengan host: teruskan di alamat host. Token kunci atau otorisasi bersifat opsional.
  • Dengan token otorisasi: teruskan token otorisasi dan wilayah terkait.

Mari kita lihat bagaimana Anda dapat membuat instans SpeechTranslationConfig dengan menggunakan kunci dan wilayah. Dapatkan kunci dan wilayah sumber daya Azure Cognitive Service untuk Ucapan di portal Microsoft Azure.

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

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

Mengubah bahasa sumber

Salah satu tugas umum terjemahan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan bagaimana Anda akan mengubah bahasa input menjadi bahasa Italia. Dalam kode Anda, berinteraksi dengan instans SpeechTranslationConfig dengan menetapkannya ke properti speech_recognition_language.

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

Properti speech_recognition_language memperkirakan string format bahasa lokal. Lihat daftar lokal terjemahan ucapan yang didukung.

Menambahkan bahasa terjemahan

Tugas umum lain dari terjemahan ucapan adalah menentukan bahasa terjemahan target. Setidaknya satu diperlukan, tetapi kelipatan didukung. Cuplikan kode berikut menetapkan bahasa Prancis dan Jerman sebagai target bahasa terjemahan:

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

Dengan setiap panggilan ke add_target_language, bahasa terjemahan target baru ditentukan. Dengan kata lain, ketika ucapan dikenali dari bahasa sumber, setiap terjemahan target tersedia sebagai bagian dari operasi terjemahan yang dihasilkan.

Menginisialisasi pengenal terjemahan

Setelah Anda membuat SpeechTranslationConfig instans, langkah selanjutnya adalah menginisialisasi TranslationRecognizer. Ketika Anda menginisialisasi TranslationRecognizer, Anda harus meneruskan instans translation_config Anda. Objek konfigurasi menyediakan info masuk yang diperlukan layanan ucapan untuk memvalidasi permintaan Anda.

Jika Anda mengenali ucapan dengan menggunakan mikrofon default perangkat, berikut tampilan TranslationRecognizer:

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)

Jika Anda ingin menentukan perangkat input audio, maka Anda perlu membuat instans kelas AudioConfig dan memberikan parameter audio_config saat menginisialisasi TranslationRecognizer.

Pertama, referensikan objek AudioConfig sebagai berikut:

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)

Jika Anda ingin menyediakan file audio alih-alih menggunakan mikrofon, Anda masih perlu menyediakan parameter audioConfig. Namun, saat Anda membuat instans kelasAudioConfig, alih-alih memanggil dengan use_default_microphone=True, Anda akan memanggil dengan filename="path-to-file.wav" dan memberikan parameter 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)

Menerjemahkan ucapan

Untuk menerjemahkan ucapan, Speech SDK bergantung pada mikrofon atau input file audio. Pengenalan ucapan terjadi sebelum terjemahan ucapan. Setelah semua objek diinisialisasi, panggil fungsi recognize-once dan dapatkan hasilnya:

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...')
    translation_recognition_result = translation_recognizer.recognize_once()
    print(get_result_text(reason=translation_recognition_result.reason, result=translation_recognition_result))

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

translate_speech_to_text()

Untuk informasi selengkapnya tentang ucapan ke teks, lihat dasar-dasar pengenalan ucapan.

Menyintesis terjemahan

Setelah pengenalan ucapan dan terjemahan yang berhasil, hasilnya berisi semua terjemahan dalam kamus. Kunci kamus translations adalah bahasa terjemahan target, dan nilainya adalah teks yang diterjemahkan. Ucapan yang dikenali dapat diterjemahkan dan kemudian disintesis dalam bahasa yang berbeda (speech-to-speech).

Sintesis berbasis peristiwa

TranslationRecognizer Objek mengekspos sebuah Synthesizing peristiwa. Peristiwa ini beberapa kali terjadi, dan menyediakan mekanisme untuk mengambil audio yang disintesis dari hasil pengenalan terjemahan. Jika Anda menerjemahkan ke beberapa bahasa, lihat Sintesis manual.

Tentukan suara sintesis dengan menetapkan instans voice_name, dan menyediakan penghandel peristiwa untuk peristiwa Synthesizing untuk mendapatkan audio. Contoh berikut menyimpan audio yang diterjemahkan sebagai file .wav.

Penting

Sintesis berbasis peristiwa hanya bekerja dengan terjemahan tunggal. Jangan menambahkan beberapa bahasa terjemahan target. Selain itu, nilai voice_name harus bahasa yang sama dengan bahasa terjemahan target. Misalnya, "de" dapat memetakan ke "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}".')

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

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

translate_speech_to_text()

Sintesis manual

Anda dapat menggunakan kamus translations untuk mensintesis audio dari teks terjemahan. Iterasi melalui setiap terjemahan, dan mensintesisnya. Saat membuat instans SpeechSynthesizer, objek SpeechConfig harus mengatur propertinya speech_synthesis_voice_name ke suara yang diinginkan.

Contoh berikut diterjemahkan menjadi lima bahasa. Setiap terjemahan kemudian disintesis ke file audio dalam bahasa neural yang sesuai.

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...')
    translation_recognition_result = translation_recognizer.recognize_once()
    synthesize_translations(result=translation_recognition_result)

def synthesize_translations(translation_recognition_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: "{translation_recognition_result.text}"')

    for language in translation_recognition_result.translations:
        translation = translation_recognition_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()

Untuk informasi selengkapnya tentang sintesis ucapan, lihat dasar-dasar sintesis ucapan.

Terjemahan multibahasa dengan identifikasi bahasa

Dalam banyak skenario, Anda mungkin tidak tahu bahasa input mana yang akan ditentukan. Menggunakan identifikasi bahasa, Anda dapat mendeteksi hingga 10 kemungkinan bahasa input dan secara otomatis menerjemahkan ke bahasa target Anda.

Untuk sampel kode lengkap, lihat identifikasi bahasa.

Rest API ucapan ke teks mereferensikan Ucapan ke teks REST API untuk referensi | audio singkat Sampel tambahan di GitHub |

Anda dapat menggunakan REST API untuk terjemahan ucapan, tetapi kami belum menyertakan panduan di sini. Silakan pilih bahasa pemrograman lain untuk memulai dan belajar tentang konsep.

Dalam panduan petunjuk ini, Anda belajar bagaimana mengenali ucapan manusia dan menerjemahkannya ke bahasa lain.

Lihat ikhtisar terjemahan ucapan untuk informasi selengkapnya tentang:

  • Menerjemahkan ucapan ke teks
  • Menerjemahkan ucapan ke beberapa bahasa target
  • Melakukan terjemahan ucapan ke ucapan langsung

Prasyarat

  • Langganan Azure. Anda dapat membuatnya secara gratis.
  • Buat sumber daya Ucapan di portal Azure.
  • Dapatkan kunci dan wilayah sumber daya Ucapan. Setelah sumber daya Azure Cognitive Service untuk Ucapan Anda disebarkan, pilih Buka sumber daya untuk melihat dan mengelola kunci.

Unduh dan instal

Ikuti langkah-langkah ini dan lihat mulai cepat Speech CLI untuk persyaratan lain untuk platform Anda.

  1. Jalankan perintah .NET CLI berikut untuk menginstal Speech CLI:

    dotnet tool install --global Microsoft.CognitiveServices.Speech.CLI
    
  2. Jalankan perintah berikut untuk mengonfigurasi kunci dan wilayah sumber daya Ucapan Anda. Ganti SUBSCRIPTION-KEY dengan kunci sumber daya Ucapan Anda dan ganti REGION dengan wilayah sumber daya Ucapan Anda.

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

Mengatur bahasa sumber dan target

Perintah ini memanggil Speech CLI untuk menerjemahkan pidato dari mikrofon dari bahasa Italia ke bahasa Prancis:

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

Langkah berikutnya