android:TTS可以说广东话吗?

pea*_*mak 2 android text-to-speech internationalization machine-translation

我正在学习编写一个旨在对给定字符串执行TTS的应用程序,并尝试了从web修改的示例:

编码如下:

// setup TTS part 1
            mTts = new TextToSpeech(Lesson2_dialog_revision_simple.this, this);  // TextToSpeech.OnInitListener
            speakBtn.setOnClickListener(new OnClickListener() 
            {         
                public void onClick(View v) 
                {  
                    StringTokenizer loveTokens = new StringTokenizer("?? one two? three ",",.");  
                    int i = 0;  
                    loveArray = new String[loveTokens.countTokens()];  
                    while(loveTokens.hasMoreTokens())  
                    {  
                        loveArray[i++] = loveTokens.nextToken();  
                    }  
                    speakText();  
                }  
            });        
    }

// setup TTS part 2 
    @Override
    public void onUtteranceCompleted(String utteranceId) 
    {  
        Log.v(TAG, "Get completed message for the utteranceId " + utteranceId);  
        lastUtterance = Integer.parseInt(utteranceId);  
    }  

// setup TTS part 3 
    @Override
    public void onInit(int status) 
    {  
        if(status == TextToSpeech.SUCCESS)  
        {  
            int result = mTts.setLanguage(Locale.CHINESE);  // <====== set speech location
            if(result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED)  
            {  
                Toast.makeText(Lesson2_dialog_revision_simple.this, "Language is not supported", Toast.LENGTH_LONG).show();
                speakBtn.setEnabled(false);  
            }  
            else  
            {  
                speakBtn.setEnabled(true);  
                mTts.setOnUtteranceCompletedListener(this);  
            }  
        }     
    }  

// setup TTS part 4 
    private void speakText()  
    {  
        lastUtterance++;  
        if(lastUtterance >= loveArray.length)  
        {  
            lastUtterance = 0;  
        }  
        Log.v(TAG, "the begin utterance is " + lastUtterance);  
        for(int i = lastUtterance; i < loveArray.length; i++)  
        {  
            params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, String.valueOf(i));  
            mTts.speak(loveArray[i], TextToSpeech.QUEUE_ADD, params);  
        }  
    }  
Run Code Online (Sandbox Code Playgroud)

问题:

如果将int result = mTts.setLanguage(Locale.US); 上面的第3部分设置为美国并且用英语完美地读出"一二三",那么一切都会好的.(在上面的例子中,它会跳过所有的中文单词,只读出一两三个)

但是,如果我通过将语言设置为setLanguage(Locale.CHINESE)来更改字符串以读出中文,它会立即声明"不支持语言".

我想问一下

  1. 目前的TTS还不支持中文吗?我甚至更喜欢粤语而不是中文.

  2. 当我通过语音输入消息时,手机可以识别广东话(广东话).实际上是否有其他方式来执行TTS,输出是广东话?

谢谢!!

小智 5

1 - 当前版本的Google TTS Engine不支持广东话作为输出.普通话工作正常.

2 - Ekho是支持广东话的TTS引擎.

您可能想试试我开发的与Ekho和Google TTS引擎一起使用的TTS应用程序:Voice Out TTS

据我所知,JAVA中没有特定的区域可以区分广东话或普通话,因为广东话是一种中国方言.JAVA中的Locale仅指文字(简体或繁体).

例如,您可以阅读用繁体中文和粤语或普通话书写的字符串.