使用(科大讯飞)文字转语音播放

1、在科大讯飞上注册账号,创建项目,获取appid
2、添加对应的jar包 Msc.jar、Sunflower.jar
3、配置权限

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

4、在创建的MyApplication文件中配置:

SpeechUtility.createUtility(this, SpeechConstant.APPID + "=你的id");

5、创建MainActivity文件,在里面实现播放:

public class MainActivity extends AppCompatActivity implements OnClickListener {
    private static String TAG = MainActivity .class.getSimpleName();    
    // 语音合成对象
    private SpeechSynthesizer mTts;
    String text;
    // 默认发音人
    private String voicer = "xiaoyan";

    private String[] mCloudVoicersEntries;
    private String[] mCloudVoicersValue ;

    // 缓冲进度
    private int mPercentForBuffering = 0;
    // 播放进度
    private int mPercentForPlaying = 0;

    private SharedPreferences mSharedPreferences;

@SuppressLint("ShowToast")
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.ttsdemo);
    // 初始化合成对象
    mTts = SpeechSynthesizer.createSynthesizer(TtsDemo.this, mTtsInitListener);

    mSharedPreferences = getSharedPreferences(MainActivity .PREFER_NAME, MODE_PRIVATE);
    mToast = Toast.makeText(this,"",Toast.LENGTH_SHORT);
    setParam();//配置信息
    mTts.startSpeaking("播放的文字", mTtsListener);  //开始播放

    }

/**
 * 初始化监听。
 */
private InitListener mTtsInitListener = new InitListener() {
    @Override
    public void onInit(int code) {
        Log.d(TAG, "InitListener init() code = " + code);
        if (code != ErrorCode.SUCCESS) {
            showTip("初始化失败,错误码:"+code);
        } else {
            // 初始化成功,之后可以调用startSpeaking方法
            // 注:有的开发者在onCreate方法中创建完合成对象之后马上就调用startSpeaking进行合成,
            // 正确的做法是将onCreate中的startSpeaking调用移至这里
        }       
    }
};

/**
 * 合成回调监听。
 */
private SynthesizerListener mTtsListener = new SynthesizerListener() {

    @Override
    public void onSpeakBegin() {
        showTip("开始播放");
    }

    @Override
    public void onSpeakPaused() {
        showTip("暂停播放");
    }

    @Override
    public void onSpeakResumed() {
        showTip("继续播放");
    }

    @Override
    public void onBufferProgress(int percent, int beginPos, int endPos,
            String info) {
        // 合成进度
        mPercentForBuffering = percent;
        showTip(String.format(getString(R.string.tts_toast_format),
                mPercentForBuffering, mPercentForPlaying));
    }

    @Override
    public void onSpeakProgress(int percent, int beginPos, int endPos) {
        // 播放进度
        mPercentForPlaying = percent;
        showTip(String.format(getString(R.string.tts_toast_format),
                mPercentForBuffering, mPercentForPlaying));
    }

    @Override
    public void onCompleted(SpeechError error) {
        if (error == null) {

            mTts.startSpeaking(text, mTtsListener);

            showTip("播放完成");
        } else if (error != null) {
            showTip(error.getPlainDescription(true));
        }
    }

    @Override
    public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
        // 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因
        // 若使用本地能力,会话id为null
        //  if (SpeechEvent.EVENT_SESSION_ID == eventType) {
        //      String sid = obj.getString(SpeechEvent.KEY_EVENT_SESSION_ID);
        //      Log.d(TAG, "session id =" + sid);
        //  }
    }
};

private void showTip(final String str) {
    mToast.setText(str);
    mToast.show();
}

private void setParam(){
    // 清空参数
    mTts.setParameter(SpeechConstant.PARAMS, null);
    // 根据合成引擎设置相应参数
    if(mEngineType.equals(SpeechConstant.TYPE_CLOUD)) {
        mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
        // 设置在线合成发音人
        mTts.setParameter(SpeechConstant.VOICE_NAME, voicer);
        //设置合成语速
        mTts.setParameter(SpeechConstant.SPEED, mSharedPreferences.getString("speed_preference", "50"));
        //设置合成音调
        mTts.setParameter(SpeechConstant.PITCH, mSharedPreferences.getString("pitch_preference", "50"));
        //设置合成音量
        mTts.setParameter(SpeechConstant.VOLUME, mSharedPreferences.getString("volume_preference", "50"));
    }else {
        mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);
        // 设置本地合成发音人 voicer为空,默认通过语记界面指定发音人。
        mTts.setParameter(SpeechConstant.VOICE_NAME, "");
        /**
         * TODO 本地合成不设置语速、音调、音量,默认使用语记设置
         * 开发者如需自定义参数,请参考在线合成参数设置
         */
    }
    //设置播放器音频流类型
    mTts.setParameter(SpeechConstant.STREAM_TYPE, mSharedPreferences.getString("stream_preference", "3"));
    // 设置播放合成音频打断音乐播放,默认为true
    mTts.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "true");

    // 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限
    // 注:AUDIO_FORMAT参数语记需要更新版本才能生效
    mTts.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");
    mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, Environment.getExternalStorageDirectory()+"/msc/tts.wav");
}
    @Override
protected void onDestroy() {
    super.onDestroy();
    mTts.stopSpeaking();
    // 退出时释放连接
    mTts.destroy();
     }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值