TOC

This article has been localized into Vietnamese by the community.

Audio & Video:

Tổng hợp giọng nói (làm cho WPF nói)

Trong tổ hợp System.Speech, Microsoft đã bổ sung một thứ thực sự hay: Tổng hợp lời nói(Speech Synthesis), khả năng chuyển đổi văn bản thành lời nói và Nhận dạng giọng nói, khả năng dịch từ ngữ thành văn bản. Chúng ta sẽ tập trung vào tổng hợp giọng nói trong bài viết này, và sau đó đi vào nhận dạng giọng nói trong phần tiếp theo.

Để chuyển đổi văn bản thành lời nói, chúng tôi sẽ sử dụng lớp SpeechSynthesizer. Lớp này nằm trong System.Speech, chúng ta sẽ cần thêm nó để sử dụng nó trong ứng dụng của mình. Tùy thuộc vào phiên bản Visual Studio bạn sử dụng, quy trình này trông giống như thế này:

Với tập hợp thích hợp được thêm vào, bây giờ chúng ta có thể sử dụng lớp SpeechSynthesizer từ không gian tên System.Speech.Synthesis. Với vị trí đó, chúng tôi sẽ khởi động với một câu "Hello, world!" Rất đơn giản để lấy cảm hứng trong ví dụ, lần này là lời nói:

<Window x:Class="WpfTutorialSamples.Audio_and_Video.SpeechSynthesisSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="SpeechSynthesisSample" Height="150" Width="150">
    <Grid>
        <Button Name="btnSayIt" Click="btnSayHello_Click" VerticalAlignment="Center" HorizontalAlignment="Center">Say hello!</Button>
    </Grid>
</Window>
using System;
using System.Speech.Synthesis;
using System.Windows;

namespace WpfTutorialSamples.Audio_and_Video
{
	public partial class SpeechSynthesisSample : Window
	{
		public SpeechSynthesisSample()
		{
			InitializeComponent();
		}

		private void btnSayHello_Click(object sender, RoutedEventArgs e)
		{
			SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();
			speechSynthesizer.Speak("Hello, world!");
		}
	}
}

Điều này khá đơn giản như nó có được, và vì ảnh chụp màn hình thực sự không giúp ích gì nhiều trong việc thể hiện giọng nói, tôi khuyên bạn nên thử tự xây dựng ví dụ để trải nghiệm nó.

Kiểm soát phát âm

SpeechSynthesizer có thể làm nhiều hơn thế. Thông qua việc sử dụng lớp PromptBuilder, chúng ta có thể kiểm soát nhiều hơn cách nói của một câu. Ví dụ tiếp theo này, là phần mở rộng của ví dụ đầu tiên, sẽ minh họa rằng:

<Window x:Class="WpfTutorialSamples.Audio_and_Video.SpeechSynthesisPromptBuilderSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="SpeechSynthesisPromptBuilderSample" Height="150" Width="150">
    <Grid>
        <Button Name="btnSayIt" Click="btnSayHello_Click" VerticalAlignment="Center" HorizontalAlignment="Center">Say hello!</Button>
    </Grid>
</Window>
using System;
using System.Speech.Synthesis;
using System.Windows;

namespace WpfTutorialSamples.Audio_and_Video
{
	public partial class SpeechSynthesisPromptBuilderSample : Window
	{
		public SpeechSynthesisPromptBuilderSample()
		{
			InitializeComponent();
		}

		private void btnSayHello_Click(object sender, RoutedEventArgs e)
		{
			PromptBuilder promptBuilder = new PromptBuilder();
			promptBuilder.AppendText("Hello world");

			PromptStyle promptStyle = new PromptStyle();
			promptStyle.Volume = PromptVolume.Soft;
			promptStyle.Rate = PromptRate.Slow;
			promptBuilder.StartStyle(promptStyle);
			promptBuilder.AppendText("and hello to the universe too.");
			promptBuilder.EndStyle();

			promptBuilder.AppendText("On this day, ");
			promptBuilder.AppendTextWithHint(DateTime.Now.ToShortDateString(), SayAs.Date);

			promptBuilder.AppendText(", we're gathered here to learn");
			promptBuilder.AppendText("all", PromptEmphasis.Strong);
			promptBuilder.AppendText("about");
			promptBuilder.AppendTextWithHint("WPF", SayAs.SpellOut);

			SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();
			speechSynthesizer.Speak(promptBuilder);
		}
	}
}

Đây là nơi mà nó sẽ thú vị. Hãy thử chạy ví dụ và xem cách nó hoạt động độc đáo. Bằng cách cung cấp cho SpeechSynthesizer một thứ gì đó không chỉ là một chuỗi văn bản, chúng ta có thể kiểm soát rất nhiều cách các phần khác nhau của câu được nói. Trong trường hợp này, ứng dụng sẽ nói như sau:

Hello world and hello to the universe too. On this day, <today's date>, we're gathered here to learn all about WPF.

Bây giờ hãy thử gửi nó trực tiếp đến SpeechSynthesizer và bạn có thể sẽ cười khúc khích một chút về kết quả. Thay vào đó, những gì chúng ta làm là hướng dẫn phương thức Speak() vào cách sử dụng các phần khác nhau của câu. Trước hết, chúng tôi yêu cầu WPF nói "and hello to the universe too" - một phần với âm lượng thấp hơn và tốc độ chậm hơn, như thể nó được thì thầm.

Phần tiếp theo không chỉ sử dụng phát âm mặc định là ngày. Chúng tôi sử dụng bảng liệt kê SayAs đặc biệt để chỉ định rằng ngày nên được đọc là ngày thực tế và không chỉ là một tập hợp các số, dấu cách và ký tự đặc biệt.

Chúng tôi cũng yêu cầu từ "all" được nói với trọng tâm mạnh mẽ hơn, để làm cho câu trở nên năng động hơn và cuối cùng, chúng tôi yêu cầu từ "WPF" được đánh vần (W-P-F) thay vì được phát âm như một từ thực tế.

Nói chung, điều này cho phép chúng tôi làm cho SpeechSynthesizer dễ hiểu hơn rất nhiều!

Tổng kết

Làm cho ứng dụng WPF của bạn nói rất dễ dàng và bằng cách sử dụng lớp PromptBuilder, bạn thậm chí có thể kiểm soát được cách nói của bạn. Đây là một tính năng rất mạnh, nhưng nó có thể không liên quan đến nhiều ứng dụng ngày nay. Mặc dù vậy nó vẫn rất tuyệt!


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!