2012-03-15 92 views
5

我正在嘗試在我的Activity中實現Android的文本轉語音技術。這是一個簡單的文字遊戲,我希望TTS引擎在用戶按下某個按鈕時拼出單個字母。例如,當用戶按下按鈕時,我想聽到「A」。Android TTS(文本到語音轉換)不能正確發音單個字母

問題是.speak方法只接受一個字符串作爲輸入。所以,當我告訴TTS引擎我只想要一個字母字符串時,聲音不是字母的發音。有沒有什麼方法可以使單字母字符串正確發音?

到目前爲止,解決方案是使用字符串輸入,聽起來像字母的單詞,例如, 「蜜蜂」爲B,「見」爲C等。但F,H等等呢?

還有其他想法嗎?

+0

eff? aitch?我認爲你正在做的事可能是解決這個問題的唯一方法。 – TheLastBert 2012-03-15 12:27:27

+0

這真的取決於TTS引擎;與谷歌TTS引擎版本3.10.10,單個字母正在合成如預期的英文。 – ozbek 2016-10-12 03:05:40

回答

6

實驗了很多之後,我找到了一個更好的解決方案。爲了讓android tts引擎發出一個字母,你必須用大寫字母來寫。例如「B」。這樣它會發音正確!唯一的例外是必須寫成「ay」和「zet」的「A」和「Z」!

希望這有助於

+1

在Motorolo Moto G上運行KitKat 4.4.4,同時播放英國和美國的聲音,我發現我需要使用「Ae」(「ay」聲音爲「i」)。 – 2014-12-07 16:19:31

0

我已經更新了舊項目的測試TTS,所以是的,你說的方法,但把逗號分隔通過信函給力發音信,我是想,你說的太對其他選項(這裏包含這兩者):

enter image description here

主要類有:

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

} 
} 

檢查已完成 - Ode here:

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