我正在学习编写一个旨在对给定字符串执行 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);  
        }  
    }  
问题:
int result = mTts.setLanguage(Locale.US);  如果上面的第 3 部分设置为 US 并完美地读出英文“一二三”,则一切正常。(在上面的例子中,它会跳过所有的中文单词,只读出一二三)
但是,如果我通过将语言设置为 setLanguage(Locale.CHINESE) 来更改字符串以读出中文,它会立即提示“不支持语言”。
我想问一下
现在的TTS还不支持中文?我更喜欢粤语而不是中文。
当我通过语音(粤语)输入信息时,手机能够识别粤语。实际上是否有其他方式来执行 TTS 输出为粤语?
谢谢!!