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

原创 2015年07月09日 22:17:36


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






E/art: No implementation found for int com.baidu.speechsynthesizer

今天写一个百度得文字转语音功能 因为之前写过demo 所以直接复制得代码 但是问题来。。。 再播放语音得时候一只报这个错 大概就是说.so文件找不到  但是一共就4个文件 都有了了  为什么会不行呢 ...

【Android语音合成TTS】百度语音接入方法,和使用技巧详解

Ps. 依托于百度开放云,百度语音为合作伙伴提供了业界领先、永久免费的语音技术服务,目前已上线的服务包括语音识别、语义解析、语音合成,后续会继续带来开放资源、多轮对话等技术服务;通过SDK、RES...

调用百度地图 5.0手机报错java.lang.UnsatisfiedLinkError: No implementation found for int

转载请注明:http://blog.csdn.net/seven2729/article/details/47979263 调用百度地图   5.0手机报错,黑屏并闪退 报错日志 java.lang...

百度地图集成报错UnsatisfiedLinkError处理

AndoridStudio环境下bug日志信息,如果你出现这个错误,说明你的so相关文件配置错误. java.lang.UnsatisfiedLinkError: No implementation...

百度语音SDK使用

百度语音SDK提供: 语音识别:将声音转成文字 语音合成:将文字转成语音文件,然后播放语音文件,即文字变声音。 语音唤醒:语音唤醒,激活运用程序...

百度地图开发出现的No implementation found for问题

 问题描述:一直在做的项目中使用百度定位一直没出问题,但是这两天把项目里的推送由百度推送改为了极光推送后使用测试机(5.0一下系统)定位正常,但是使用我自己手机(6.0系统)时会报错:java....
  • cui130
  • cui130
  • 2017年02月16日 17:17
  • 1589

[Photon] 百度语音识别接入【Eclipse+Unity3D】

运行效果   1.背景现在我们要给我们的游戏接入百度语音SDK,让我们的游戏可以被声控,当我们说:上,游戏就响应上,下,游戏就响应下,左,游戏就响应左, 右,游戏就响应右。或者听到玩家频繁 说我靠、...

Android Studio下Android应用开发集成百度语音合成使用方法样例

转载请注明来源: http://blog.csdn.net/kjunchen/article/details/51093134 Android Studio下Android应用开发集成百度语音合成使用...

Java解决java.io.FileNotFoundException: E:\work\work (拒绝访问。)

Java解决java.io.FileNotFoundException: E:\work\work (拒绝访问。)和系统找不到指定路径。...
  • YQS_Love
  • YQS_Love
  • 2016年07月19日 21:36
  • 43414

百度语音合成

百度语音集成
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 百度语音合成例子eclipse版和studio版
举报原因:
原因补充:

(最多只允许输入30个字)