Android - Chuyển đổi văn bản thành giọng nói

Mô tả chung :Chương trình chuyển chữ (text) thành giọng nói là một engine được lắp đặt trên thiết bị và đồng thời ngôn ngữ cũng được cài đặt trên đó.

Gần đây thiết bị Android kèm theo một dịch vụ mặc định Google TTS được lắp đặt với ít nhất một ngôn ngữ. Cái này được thiết lập khi dịch vụ lần đầu tiên được thiết lập. Ví dụ một phone được cài đặt ở Đức thì sẽ được cài ngôn ngữ đức. Trong khi đó những cái khác ở mỹ thì cài ngôn ngữ Anh Mỹ.

Bước 1 : Khởi tạo TextToSpeech

TextToSpeed có thể lấy đầu vào 3 parameters, hai cái đầu tiên là đòi hỏi với cái thứ 3 là lựa chọn (AppContext, IOnInitListener, engine). Tối thiểu dịch vụ phải có engine của Google.

Bước 2 : Tìm ra ngôn ngữ sẵn có

The Java.Util.Locale namespace chứa đựng phương thức hữu ích gọi là GetAvailableLocales(). Danh sách các ngôn ngữ được hỗ trợ bởi engine chuyển văn bản thành giọng nó này có thể được kiểm tra trên ngôn ngữ đã cài đặt.

Đó là một vấn đề sống còn để tạo ra danh sách ngôn ngữ có thể hiểu được. Sẽ luôn có ngôn ngữ mặc định( ngôn ngữ mà người dùng thiết lập khi họ lần đầu thiết lập dịch vụ) cho nên trong ví dụ này List<string> có "Default" như tham số đầu tiên, cái còn lại của danh sách sẽ được đưa vào phụ thuộc vào kết quả của textToSpeech.IsLanguageAvailable(locale).

var langAvailable = new List<string>{ "Default" };
var localesAvailable = Java.Util.Locale.GetAvailableLocales().ToList();
foreach (var locale in localesAvailable)
{
    var res = textToSpeech.IsLanguageAvailable(locale);
    switch (res)
    {
        case LanguageAvailableResult.Available:
          langAvailable.Add(locale.DisplayLanguage);
          break;
        case LanguageAvailableResult.CountryAvailable:
          langAvailable.Add(locale.DisplayLanguage);
          break;
        case LanguageAvailableResult.CountryVarAvailable:
          langAvailable.Add(locale.DisplayLanguage);
          break;
    }
}
langAvailable = langAvailable.OrderBy(t => t).Distinct().ToList();

Bước 3 : Thiết lập tốc độ

Android cho phép người dùng thay thế âm thanh của câu nói bằng SpeechRate và Pitch ( tỉ lệ của tốc độ với tông của giọng). Cái này đi từ 0 đến 1 với giọng nói bình thường là 1..

Bước 4 : Kiểm tra và load ngôn ngữ mới:

Điều này được thiết lập sử dụng Intent với kết quả được chuyển dịch trên OnActivityResult. Không như ví dụ speech to text mà sử dụng RecognizerIntent như một tham số PutExtra cho Intent, Intent lắp đặt là sử dụng một Action. Nó có thể cài đặt một ngôn ngữ mới từ Google sử dụng code sau đây. Kết quả của Activity kiểm tra để xem liệu ngôn ngữ là đòi hỏi và nếu nó là vậy thì cài đặt ngôn ngữ sau khi được thông báo download nó.

var checkTTSIntent = new Intent();
checkTTSIntent.SetAction(TextToSpeech.Engine.ActionCheckTtsData);
StartActivityForResult(checkTTSIntent, NeedLang);
//
protected override void OnActivityResult(int req, Result res, Intent data)
{
    if (req == NeedLang)
    {
        var installTTS = new Intent();
        installTTS.SetAction(TextToSpeech.Engine.ActionInstallTtsData);
        StartActivity(installTTS);
    }
}

Bước 5 : Dùng IOnInitListener

Đối với một Activity sẵn có để chuyển đổi từ văn bản thành giọng nói thì giao diện phương thức OnInit phải được tạo ra( đây là tham số thứ 2 chỉ định sự khởi tạo của lớp TextToSpeed0 . Cái này khởi đầu listener và kiểm tra kết quả.

The listerner nên kiểm tra co cả hành động thành công và thất bại. Như ví dụ sau đây:

void TextToSpeech.IOnInitListener.OnInit(OperationResult status)
{
    // if we get an error, default to the default language
    if (status == OperationResult.Error)
        textToSpeech.SetLanguage(Java.Util.Locale.Default);
    // if the listener is ok, set the lang
    if (status == OperationResult.Success)
        textToSpeech.SetLanguage(lang);
}

Tổng kết

Đây là hướng dẫn để chúng ta có cái nhìn cơ bản về việc chuyển đổi văn bản thành giọng nói và giọng nói thành văn bản và những phương thức có thể làm thế nào bao gồm chúng trong chương trình của chúng ta. Trong khi chúng ta chưa bao quát hết được các trường hợp đặt biệt. Bạn nên có một cách hiểu đơn giản về làm thế nào giọng nói được chuyển dịch và làm thế nào cài đặt một ngôn ngữ mới và làm thế nào tăng tính duy nhất của chương trình của bạn.

Dịch từ nguồn : https://developer.xamarin.com/guides/android/platform_features/speech/