Teknologi Text-to-speech (TTS) telah ada sejak lama dan telah menemukan banyak kasus penggunaan, seperti dalam pembelajaran bahasa, alat aksesibilitas untuk individu dengan gangguan penglihatan, dan dalam aplikasi yang mendukung ucapan. Pada artikel ini, kita akan mempelajari cara mengimplementasikan aplikasi TTS sederhana menggunakan C# dan namespace System.Speech.Synthesis.
Sebelum kita mulai, Anda perlu menginstal yang berikut ini di mesin Anda: .NET Framework 4.6.1 atau lebih tinggi dan Visual Studio 2017 atau lebih tinggi.
Kita akan menggunakan namespace System.Speech.Synthesis, yang menyediakan kelas untuk mensintesis ucapan dari teks. Ikuti langkah-langkah di bawah ini untuk membuat aplikasi konsol di C# dan mengimplementasikan TTS.
Buka Visual Studio dan buat proyek Aplikasi Konsol baru. Tambahkan referensi ke rakitan System.Speech. Klik kanan pada proyek di Solution Explorer, pilih Tambahkan Referensi, lalu pilih System.Speech dari daftar rakitan. Di file Program.cs, tambahkan kode berikut:
using System;
using System.IO;
using System.Speech.Synthesis;
class Program
{
static void Main(string[] args)
{
// Basic TTS
SpeechSynthesizer synth = new SpeechSynthesizer();
synth.SetOutputToDefaultAudioDevice();
synth.Speak("Hello, world!");
// Changing the Voice
synth.SelectVoiceByHints(VoiceGender.Female, VoiceAge.Adult);
synth.Speak("Hello, I am a female voice!");
// Changing the Pitch and Rate
synth.Rate = -2;
synth.Volume = 100;
synth.Speak("Hello, I am speaking slower and louder!");
// Pausing and Resuming Speech
synth.Speak("Hello, I will pause for 3 seconds now.");
synth.Pause();
System.Threading.Thread.Sleep(3000); // wait for 3 seconds
synth.Resume();
synth.Speak("I am back!");
// Saving Speech to a WAV File
synth.SetOutputToWaveFile("output.wav");
synth.Speak("Hello, I am saving my speech to a WAV file!");
// Setting the Speech Stream
MemoryStream stream = new MemoryStream();
synth.SetOutputToWaveStream(stream);
synth.Speak("Hello, I am being streamed to a memory stream!");
byte[] speechBytes = stream.GetBuffer();
// Changing the Voice and Pronunciation
PromptBuilder builder = new PromptBuilder();
builder.StartVoice(VoiceGender.Female, VoiceAge.Adult, 1);
builder.AppendText("Hello, my name is Emily.");
builder.StartVoice(VoiceGender.Female, VoiceAge.Teen, 2);
builder.AppendText("I am from New York City.");
builder.StartStyle(new PromptStyle() { Emphasis = PromptEmphasis.Strong });
builder.AppendText("I really love chocolate!");
builder.EndStyle();
builder.StartStyle(new PromptStyle() { Emphasis = PromptEmphasis.Reduced });
builder.AppendText("But I'm allergic to it...");
builder.EndStyle();
synth.Speak(builder);
Console.ReadLine();
}
}
Garis Besar Kode
TTS dasar
Membuat instance SpeechSynthesizer dan mensintesis teks "Hello, world!" menggunakan perangkat audio default.
Mengubah Suara
Memilih suara wanita dewasa dan mensintesis teks "Hello, I am a female voice!" menggunakan suara itu.
Mengubah Pitch dan Rate
Menyetel kecepatan bicara ke -2 (lebih lambat) dan volume ke 100 (lebih keras), dan mensintesis teks "Hello, I am speaking slower and louder!".
Menjeda dan Melanjutkan Pidato
Mensintesis teks "Hello, I will pause for 3 seconds now.", menjeda pidato selama 3 detik, lalu melanjutkan pidato dan mensintesis teks "I am back!".
Menyimpan Ucapan ke File WAV
Menyetel output SpeechSynthesizer ke file WAV bernama "output.wav", dan mensintesis teks "HHello, I am saving my speech to a WAV file!".
Mengatur Aliran Pidato
Menyetel keluaran SpeechSynthesizer ke aliran memori, mensintesis teks "Hello, I am being streamed to a memory stream!", dan mendapatkan byte ucapan yang dihasilkan dari aliran memori.
Mengubah Suara dan Pengucapan
Menggunakan kelas PromptBuilder untuk membuat prompt yang lebih kompleks, mengubah suara untuk bagian tertentu dari prompt, dan menambahkan penekanan dan pengurangan penekanan pada bagian tertentu dari prompt. Prompt yang dihasilkan kemudian disintesis menggunakan SpeechSynthesizer.
Contoh kode ini menunjukkan beberapa fungsi dasar dan lanjutan dari kelas SpeechSynthesizer, termasuk mengubah suara dan nada, menjeda dan melanjutkan ucapan, dan menyimpan ucapan yang disintesis ke file atau aliran memori.
