Android文字転音声2方式

3850 ワード

今日は開発中に文字を音声に変換する機能を作り、多くの穴に入った.
まず私が採用したのは科大訊飛のオンライン音声合成技術です.書き終わったら、彼は低バージョンの携帯電話で読むことができますが、高バージョンの7.0以上では読めません.何を読むか分かりません.
まず科大訊飛公式サイトでアプリケーションを作成し、APPIDを手に入れてからsdk jarパッケージを生成します.
これは文字を音声に変換するツールクラスです.
public class AudioUtils {

    private static AudioUtils audioUtils;

    private SpeechSynthesizer mySynthesizer;

    public AudioUtils() {
    }

    /**
     *   :  
     *   :   
     *   :[email protected]
     *     : 2016/8/19 14:38
     */
    public static AudioUtils getInstance() {
        if (audioUtils == null) {
            synchronized (AudioUtils.class) {
                if (audioUtils == null) {
                    audioUtils = new AudioUtils();
                }
            }
        }
        return audioUtils;
    }

    private InitListener myInitListener = new InitListener() {
        @Override
        public void onInit(int code) {
            Log.d("mySynthesiezer:", "InitListener init() code = " + code);
        }
    };


    /**
     *   :       
     *   :   
     *   :[email protected]
     *     : 2016/8/19 14:38
     */
    public void init(Context context) {
        //         
        mySynthesizer = SpeechSynthesizer.createSynthesizer(context, myInitListener);
        //     
        mySynthesizer.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");
        //    
        mySynthesizer.setParameter(SpeechConstant.PITCH, "50");
        //    
        mySynthesizer.setParameter(SpeechConstant.VOLUME, "50");
        mySynthesizer.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_CLOUD);

    }

    /**
     *   :              
     *   :   
     *   :[email protected]
     *     : 2016/8/19 14:39
     */
    public void speakText(String content) {
        int code = mySynthesizer.startSpeaking(content, new SynthesizerListener() {
            @Override
            public void onSpeakBegin() {

            }

            @Override
            public void onBufferProgress(int i, int i1, int i2, String s) {

            }

            @Override
            public void onSpeakPaused() {

            }

            @Override
            public void onSpeakResumed() {

            }

            @Override
            public void onSpeakProgress(int i, int i1, int i2) {

            }

            @Override
            public void onCompleted(SpeechError speechError) {

            }

            @Override
            public void onEvent(int i, int i1, int i2, Bundle bundle) {

            }
        });
    }
}

使うときにアプリ登録して初期化して、
SpeechUtility.createUtility(getApplicationContext(), "appid=           APPID");
AudioUtils.getInstance().init(getApplicationContext());

次の操作を行います.
AudioUtils.getInstance().speakText("  ");

これはどのように高バージョンの携帯電話に適しているか分からないので、このような方法は採用されていません.
私が使っているのはAndroidシステムが持っている文字を音声に変換する方法です.簡単で使いやすいです.(簡単で乱暴で、あなたが望んでいる効果を直接実現します)
コードを直接手で引く:
private TextToSpeech mTextToSpeech;
private void speakChina(){
    //      
    mTextToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {

        @Override
        public void onInit(int status) {
            if (status==TextToSpeech.SUCCESS) {
                //      
                int supported= mTextToSpeech.setLanguage(Locale.US);
                if ((supported!=TextToSpeech.LANG_AVAILABLE)&&(supported!=TextToSpeech.LANG_COUNTRY_AVAILABLE)) {
                    Toast.makeText(sAppContext, "       !", Toast.LENGTH_SHORT).show();
                }
            }

        }
    });
}        

使用
mTextToSpeech.speak("             ", TextToSpeech.QUEUE_FLUSH, null);

これで文字を音声に変換する機能が実現しました.
猿たちに助けてほしい!