xf-tts-socket

    1.2.5 • Public • Published

    科大讯飞文本转语音API - 基于最新的Websocket版本协议

    • 支持回调函数
    • 支持async-await
    • 支持pcm, mp3, wav等常见音频格式
    • 支持音频保存成本地文件
    • 支持各发音人及其他详细参数的设置
    • 支持windows, mac, linux
    • 不需要关注websocket握手细节
    • 不需要关心各种复杂的鉴权,格式转换问题

    Inspired by easychen/xf-tts-sdk

    使用说明

    • 使用前可以先去讯飞官网注册用户,在线体验和注册用户
    • 本项目为Nodejs版本的优化,Php/Java开发人员如需使用,可以搭建Nodejs微服务,作为Rest API调用
    • 注意:js文件必须是utf-8编码格式,其他格式文件会出现返回空语音的情况

    安装

    • npm install xf-tts-socket --save

    示例代码

    async-await-mp3

    • async-await使用方式(自定义发音人设置-mp3格式音频)
    // 执行成功后会在你的项目指定目录下生成一个mp3文件,使用播放器直接播放即可
    // 注意:js文件必须是utf-8编码格式,其他格式文件会出现返回空语音的情况
    const xunfeiTTS = require('xf-tts-socket');
    const { promisify } = require('util');
    const tts = promisify(xunfeiTTS);
     
    const test_async_await_mp3 = async (app_id, app_skey, app_akey) => {
      const auth = { app_id, app_skey, app_akey };
      // business 支持所有语音参数,详见: 
      // https://www.xfyun.cn/doc/tts/online_tts/API.html#%E4%B8%9A%E5%8A%A1%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E-business
      const business = { aue: 'lame', sfl: 1, vcn: 'aisjiuxu', speed: 80, pitch: 50, volume: 100 };
      const text = '两块钱不算多,去不了香港去不了新加坡';
      const file = path.resolve('./test/test_async_await_mp3.mp3');
     
      try {
        await tts(auth, business, text, file);
      } catch (e) {
        console.log('test exception', e);
      }
    };
     
    test_async_await_mp3('xxxxxx', 'xxxxxx', 'xxxxxx');

    callback-mp3

    • callback使用方式(默认发音人设置-mp3格式音频)
    // 执行成功后会在你的项目指定目录下生成一个mp3文件,使用播放器直接播放即可
    // 注意:js文件必须是utf-8编码格式,其他格式文件会出现返回空语音的情况
    const xunfeiTTS = require('xf-tts-socket');
     
    const test_callback_mp3 = (app_id, app_skey, app_akey) => {
      const auth = { app_id, app_skey, app_akey };
      const business = { aue: 'lame', sfl: 1 };
      // business 支持所有语音参数,详见: 
      // https://www.xfyun.cn/doc/tts/online_tts/API.html#%E4%B8%9A%E5%8A%A1%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E-business
      const text = '两块钱,不算贵,不用回去开家庭会。';
      const file = path.resolve('./test/test_callback_mp3.mp3');
      xunfeiTTS(auth, business, text, file, (err, ret) => {
        console.log('test_callback_mp3 end', err);
      });
    };
     
    test_callback_mp3('xxxxxx', 'xxxxxx', 'xxxxxx');

    async-await-pcm

    • async-await使用方式(自定义发音人设置-pcm格式音频)
    // 执行成功后会在你的项目指定目录下生成一个pcm文件,使用播放器直接播放即可
    // 注意:js文件必须是utf-8编码格式,其他格式文件会出现返回空语音的情况
    const xunfeiTTS = require('xf-tts-socket');
    const { promisify } = require('util');
    const tts = promisify(xunfeiTTS);
     
    const test_async_await_pcm = async (app_id, app_skey, app_akey) => {
      const auth = { app_id, app_skey, app_akey };
      // business 支持所有语音参数,
      // 详见: https://www.xfyun.cn/doc/tts/online_tts/API.html#%E4%B8%9A%E5%8A%A1%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E-business
      const business = { aue: 'raw', vcn: 'aisjiuxu', speed: 80, pitch: 50, volume: 100 };
      const text = '去不了香港去不了新加坡,两块钱';
      const file = path.resolve('./test/test_async_await_pcm.pcm');
      try {
        // 如有需要ffmpeg软件可以将pcm转换成其他任意格式的语音文件: 
        // ffmpeg -hide_banner -loglevel panic -y -f s16le -ar 16000 -ac 1 -i test_async_await_pcm.pcm test_async_await_pcm.mp3
        await tts(auth, business, text, file);
      } catch (e) {
        console.log('test exception', e);
      }
    };
     
    test_async_await_pcm('xxxxxx', 'xxxxxx', 'xxxxxx');

    callback-pcm

    • callback使用方式(默认发音人设置-pcm格式音频)
    // 执行成功后会在你的项目指定目录下生成一个pcm文件,使用播放器直接播放即可
    // 注意:js文件必须是utf-8编码格式,其他格式文件会出现返回空语音的情况
    const xunfeiTTS = require('xf-tts-socket');
     
    const test_callback_pcm = (app_id, app_skey, app_akey) => {
      const auth = { app_id, app_skey, app_akey };
      // business 支持所有语音参数,详见:
      // https://www.xfyun.cn/doc/tts/online_tts/API.html#%E4%B8%9A%E5%8A%A1%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E-business
      const business = { aue: 'raw' };
      const text = '香港去不了新加坡,两块钱';
      const file = path.resolve('./test/test_callback_pcm.pcm');
      xunfeiTTS(auth, business, text, file, (err, ret) => {
        // 如有需要ffmpeg软件可以将pcm转换成其他任意格式的语音文件: 
        // ffmpeg -hide_banner -loglevel panic -y -f s16le -ar 16000 -ac 1 -i test_callback_pcm.pcm test_callback_pcm.mp3
        console.log('test_callback_pcm end', err);
      });
    };
     
    test_callback_pcm('xxxxxx', 'xxxxxx', 'xxxxxx');

    实现原理

    • 鉴权,webscoket连接和数据转码细节都在库里边实现了,详情可查看本库源码

    支持所有讯飞指定参数的设置

    测试(需要提供讯飞账户上的验证key)

    • git clone https://github.com/jimuyouyou/xf-tts-socket.git
    • npm install
    • npm run test xxx1 xxx2 xxx3
    • xxx1是app_id
    • xxx2是app_skey
    • xxx3是app_akey

    贡献与反馈

    • 可以直接在github issue里边提问题
    • 或者提交merge request
    • 文档更新及其他

    改进清单

    • 提升代码可读性

    Install

    npm i xf-tts-socket

    DownloadsWeekly Downloads

    7

    Version

    1.2.5

    License

    MIT

    Unpacked Size

    13 kB

    Total Files

    6

    Last publish

    Collaborators

    • jimuyouyou