2012-03-15 8 views
5

Tôi đang cố gắng triển khai công nghệ chuyển văn bản thành giọng nói của Android trong Hoạt động của tôi. Nó là một trò chơi chữ đơn giản và tôi muốn động cơ TTS đánh vần một chữ cái khi người dùng nhấn một số nút. Ví dụ: khi người dùng nhấn nút A Tôi muốn nghe "A".Android TTS (Text-To-Speech) không phát âm một chữ chính xác

Vấn đề là phương thức .speak chỉ nhận một chuỗi là đầu vào. Vì vậy, khi tôi nói với động cơ TTS rằng tôi chỉ muốn một chuỗi chữ cái duy nhất, âm thanh không phải là cách phát âm của lá thư. Có cách nào mà tôi có thể làm cho nó phát âm chính xác các chuỗi chữ cái duy nhất không?

Giải pháp cho đến nay, là sử dụng làm đầu vào chuỗi, các từ có vẻ giống như các chữ cái, ví dụ: "bee" cho B, "xem" cho C v.v. Nhưng còn khoảng F, H và cứ như vậy?

Bất kỳ ý tưởng nào khác?

+0

eff? aitch? Tôi nghĩ rằng những gì bạn đang làm có thể là cách duy nhất xung quanh hành vi này. – TheLastBert

+0

Điều này thực sự phụ thuộc vào động cơ TTS; với phiên bản động cơ Google TTS 3.10.10, các chữ cái cá nhân đang được tổng hợp như mong đợi bằng tiếng Anh. – ozbek

Trả lời

6

Sau khi thử nghiệm rất nhiều, tôi đã tìm thấy giải pháp tốt hơn. Để động cơ android tts trả lại một chữ cái duy nhất bạn phải viết nó bằng chữ in hoa. Ví dụ "B". Bằng cách này, nó sẽ phát âm chính xác! Các ngoại lệ duy nhất là "A" và "Z" phải được viết thành "ay" và "zet"!

Hope this helps

+1

Trên một Motorolo Moto G, chạy KitKat 4.4.4, với cả tiếng Anh và tiếng Anh, tôi thấy rằng tôi cần phải sử dụng "Ae" ("ay" cho âm "i"). –

0

Tôi đã cập nhật một thử nghiệm dự án cũ TTS, vì vậy có là cách mà bạn nói nhưng đặt dấu phẩy tách ra để buộc thư âm của lá thư, tôi đã cố gắng lựa chọn khác mà bạn nói quá (cả hai đều bao gồm ở đây):

enter image description here

lớp chính là:

public class SpellUtil { 

public static String convertToSpellOnce(String words) { 
    StringBuilder sb = new StringBuilder(); 
    for (char letter : words.toCharArray()) { 
     sb.append(letter); 
     //sb.append(convertSoundBased(letter)); this is another option 
     sb.append(","); 
    } 
    return sb.toString(); 
} 

private static String convertSoundBased(char letter) { 
    switch (letter) { 
     case 'a': 
      return "a"; 
     case 'b': 
      return "bee"; 
     case 'c': 
      return "cee"; 
     case 'd': 
      return "dee"; 
     case 'e': 
      return "e"; 
     case 'f': 
      return "ef"; 
     case 'g': 
      return "gee"; 
     case 'h': 
      return "aitch"; 
     case 'i': 
      return "i"; 
     case 'j': 
      return "jay"; 
     case 'k': 
      return "kay"; 
     case 'l': 
      return "el"; 
     case 'm': 
      return "em"; 
     case 'n': 
      return "en"; 
     case 'o': 
      return "o"; 
     case 'p': 
      return "pee"; 
     case 'q': 
      return "cue"; 
     case 'r': 
      return "ar"; 
     case 's': 
      return "ess"; 
     case 't': 
      return "tee"; 
     case 'u': 
      return "u"; 
     case 'v': 
      return "vee"; 
     case 'w': 
      return "double-u"; 
     case 'x': 
      return "ex"; 
     case 'y': 
      return "wy"; 
     case 'z': 
      return "zed"; 
    } 
    return ""; 

} 
} 

Kiểm tra c hoàn thành ode tại đây:

https://github.com/tiveor/android-intermediate/tree/master/SpeechTest