Как настроить голос через код для Android текста в речь?он давал ответ по умолчанию для недоступного голоса.как я могу решить это? - PullRequest
1 голос
/ 27 сентября 2019

Привет друзья! Я создал плагин для единства.плагин работает как создание аудио файлов из текстового ввода.Я использую текст по умолчанию функциональность Android.Иногда это дает вывод правильно, но иногда это идет с голосом по умолчанию.как я могу разобраться? ...... пожалуйста, если кто-то уже решил это, пожалуйста, дайте мне знать.

Если это не может решить, пожалуйста, дайте мне знать.если есть способ генерировать аудио файлы из любого другого движка в Android.я нахожу решение, которое будет работать в автономном режиме.

открытый класс TextToSpeechLib расширяет приложение {

private Context mContext;
String Error = "";
public float mSpeed=1f;
public float mPitch=1f;
public boolean _isAvatar = true;
public boolean _doEveryTime = false;
String _voiceNameAvatar = "en-in-x-ahp#male_1-local";
String _voiceNameJudge = "en-in-x-cxx#male_3-local";

public  void DoLog(final Context ctx, final String message){
    new Handler(Looper.getMainLooper()).post(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(ctx, message, Toast.LENGTH_SHORT).show();
        }
    });
}

public void setSppedAndPitch(float speed,float pitch,boolean isAvatar,boolean everyTime,String voice){
    mSpeed = speed;
    mPitch = pitch;
    _isAvatar = isAvatar;
    _doEveryTime = everyTime;
    _voiceNameAvatar = voice;
    }
public void textToAudio(Context ctx, String text,String fileName,String folderName){
    mContext = ctx;
    AsyncTextToSpeech atts = new AsyncTextToSpeech();
    atts.execute(text,fileName,folderName);
}
private  class  AsyncTextToSpeech extends AsyncTask<String,Void,Void>{
    private  String msg;
    private String fileName,folderName;
    TextToSpeech TTS1;

    @Override
    protected Void doInBackground(String... strings) {

        msg = strings[0];
        fileName = strings[1];
        folderName = strings[2];
        TTS1 = new TextToSpeech(mContext, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {
                if(status == TextToSpeech.SUCCESS){





                    for ( Voice tmpVoice : TTS1.getVoices()) {
                        if(_isAvatar) {
                            if (tmpVoice.getName().equals(_voiceNameAvatar)) {

                                TTS1.setVoice(tmpVoice);
                                break;
                            }
                        }else {
                            if (tmpVoice.getName().equals(_voiceNameAvatar)) {
                               TTS1.setVoice(tmpVoice);
                                break;
                            }
                        }


                    }
                    TTS1.setSpeechRate(mSpeed);
                    TTS1.setPitch(mPitch);
                    HashMap<String, String> myHashRender = new HashMap<String, String>();
                    myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,msg);
                    File appTmpPath = new File(folderName);
                    appTmpPath.mkdirs();
                    String tempFilename = fileName;
                    String tempDestFile = appTmpPath.getAbsolutePath() + "/"+ tempFilename;
                    final File appTmp = new File(tempDestFile);
                    String utteranceId=this.hashCode() + "";
                    TTS1.synthesizeToFile(msg,null,appTmp,utteranceId);
                                            }
            }
        });
        return null;
    }
}

}

...