关闭

android 百度语音合成例子eclipse版和studio版

2958人阅读 评论(0) 收藏 举报
分类:


package com.example.baiduspeechmydemo;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import com.baidu.speechsynthesizer.SpeechSynthesizer;
import com.baidu.speechsynthesizer.SpeechSynthesizerListener;
import com.baidu.speechsynthesizer.publicutility.DataInfoUtils;
import com.baidu.speechsynthesizer.publicutility.SpeechError;
import com.baidu.speechsynthesizer.publicutility.SpeechLogger;


import android.media.AudioManager;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity  {

 
 protected static final int UI_LOG_TO_VIEW = 0;
    protected static final int UI_TOAST = 1;
    private SpeechSynthesizer speechSynthesizer;
 
    /** 指定license路径,需要保证该路径的可读写权限 */
    private static final String LICENCE_FILE_NAME = Environment.getExternalStorageDirectory()
            + "/tts/bd_etts_speech_female.dat";
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  
  System.loadLibrary("gnustl_shared");
        // 部分版本不需要BDSpeechDecoder_V1
        try {
            System.loadLibrary("BDSpeechDecoder_V1");
        } catch (UnsatisfiedLinkError e) {
            SpeechLogger.logD("load BDSpeechDecoder_V1 failed, ignore");
        }
        System.loadLibrary("bd_etts");
        System.loadLibrary("bds");

        if (!new File(LICENCE_FILE_NAME).getParentFile().exists()) {
            new File(LICENCE_FILE_NAME).getParentFile().mkdirs();
        }
        
        // 复制license到指定路径
        InputStream licenseInputStream = getResources().openRawResource(R.raw.temp_license_2015_07_09);
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(LICENCE_FILE_NAME);
            byte[] buffer = new byte[1024];
            int size = 0;
            while ((size = licenseInputStream.read(buffer, 0, 1024)) >= 0) {
                SpeechLogger.logD("size written: " + size);
                fos.write(buffer, 0, size);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            try {
                licenseInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        speechSynthesizer =
                SpeechSynthesizer.newInstance(SpeechSynthesizer.SYNTHESIZER_AUTO, getApplicationContext(), "holder",
                        new BaiDuVevio());
        // 请替换为语音开发者平台注册应用得到的apikey和secretkey (在线授权)
       // speechSynthesizer.setApiKey("apikey", "secretkey");
        // 请替换为语音开发者平台上注册应用得到的App ID (离线授权)
    //    speechSynthesizer.setAppId("appid");
        // 设置授权文件路径
        speechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_LICENCE_FILE, LICENCE_FILE_NAME);
        // TTS所需的资源文件,可以放在任意可读目录,可以任意改名
        String ttsTextModelFilePath =
                getApplicationContext().getApplicationInfo().dataDir + "/lib/libbd_etts_text.dat.so";
        String ttsSpeechModelFilePath =
                getApplicationContext().getApplicationInfo().dataDir + "/lib/libbd_etts_speech_female.dat.so";
        speechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_TEXT_MODEL_FILE, ttsTextModelFilePath);
        speechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_SPEECH_MODEL_FILE, ttsSpeechModelFilePath);
        DataInfoUtils.verifyDataFile(ttsTextModelFilePath);
        DataInfoUtils.getDataFileParam(ttsTextModelFilePath, DataInfoUtils.TTS_DATA_PARAM_DATE);
        DataInfoUtils.getDataFileParam(ttsTextModelFilePath, DataInfoUtils.TTS_DATA_PARAM_SPEAKER);
        DataInfoUtils.getDataFileParam(ttsTextModelFilePath, DataInfoUtils.TTS_DATA_PARAM_GENDER);
        DataInfoUtils.getDataFileParam(ttsTextModelFilePath, DataInfoUtils.TTS_DATA_PARAM_CATEGORY);
        DataInfoUtils.getDataFileParam(ttsTextModelFilePath, DataInfoUtils.TTS_DATA_PARAM_LANGUAGE);
        speechSynthesizer.initEngine();
        setVolumeControlStream(AudioManager.STREAM_MUSIC);
       
        int ret = speechSynthesizer.speak("百度几下才知道天下");
        if (ret != 0) {
         //   logError("开始合成器失败:" + errorCodeAndDescription(ret));
        } else {
           // logDebug("开始工作,请等待数据...");
         Log.i("MainAcitivity", "开始缓冲");
        }
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }


 
 class BaiDuVevio implements SpeechSynthesizerListener {

  @Override
  public void onBufferProgressChanged(SpeechSynthesizer arg0, int arg1) {
   // TODO Auto-generated method stub
   
  }

  @Override
  public void onCancel(SpeechSynthesizer arg0) {
   // TODO Auto-generated method stub
   
  }

  @Override
  public void onError(SpeechSynthesizer arg0, SpeechError arg1) {
   // TODO Auto-generated method stub
   
  }

  @Override
  public void onNewDataArrive(SpeechSynthesizer arg0, byte[] arg1,
    boolean arg2) {
   // TODO Auto-generated method stub
   
  }

  @Override
  public void onSpeechFinish(SpeechSynthesizer arg0) {
   // TODO Auto-generated method stub
   
  }

  @Override
  public void onSpeechPause(SpeechSynthesizer arg0) {
   // TODO Auto-generated method stub
   
  }

  @Override
  public void onSpeechProgressChanged(SpeechSynthesizer arg0, int arg1) {
   // TODO Auto-generated method stub
   
  }

  @Override
  public void onSpeechResume(SpeechSynthesizer arg0) {
   // TODO Auto-generated method stub
   
  }

  @Override
  public void onSpeechStart(SpeechSynthesizer arg0) {
   // TODO Auto-generated method stub
   
  }

  @Override
  public void onStartWorking(SpeechSynthesizer arg0) {
   // TODO Auto-generated method stub
   
  }

  @Override
  public void onSynthesizeFinish(SpeechSynthesizer arg0) {
   // TODO Auto-generated method stub
   
  }
  
 }

}


这个是临时的授权,如果你要得到 授权必须到百度上去注册;然后下载语音包;包里也有DEMO,DEMO里有几行其它的界面上的东西,我就把它删除了,现在有就是最主要有的

Studio版的引用别人的一个文章:

http://www.cnblogs.com/xrwang/p/AndroidStudioImportJarAndSoLibrary.html





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11298次
    • 积分:469
    • 等级:
    • 排名:千里之外
    • 原创:34篇
    • 转载:11篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论