更新记录

1.0.1(2025-10-21)

  • 新增uniapp完整示例

1.0.0(2025-10-21)

  • 新版发布

平台兼容性

uni-app(4.66)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× × 5.0 × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × ×

uni-app x(4.66)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - - - - -

其他

多语言 暗黑模式 宽屏模式
× ×

科大讯飞离线语音合成(最新版)

开发文档

AIkit通用XTTS合成 Android SDK 文档AIkit通用XTTS合成 iOS SDK 文档错误码查询科大讯飞控制台创建应用获取

特别提醒

  • 购买本插件前,请先试用、请先试用、请先试用,并充分自测确认满足需求之后再行购买。虚拟物品一旦购买之后无法退款;
  • 如有使用上的疑问、bug,可以进交流群联系作者;
  • 作者可承接各种插件定制;
  • 请在合法范围内使用,若使用本插件做非法开发,本方概不负责;
  • 结合文档和示例demo集成使用;
  • 测试需要打自定义基座,测试需要打自定义基座,测试需要打自定义基座。‘
  • 插件目前仅支持Android端后续会支持iOS端

插件说明

插件基于科大讯飞离线语音合成(新版)SDK封装,AIkit通用XTTS合成 Android SDK 文档AIkit通用XTTS合成 iOS SDK 文档

插件使用

1、 引入插件

插件首页点击“试用”按钮,选择需要使用的项目,选完点击确认-->弹框点击“继续导入HBuilderX”-->再次选择需要试用的项目-->确认,会在项目根目录下生成uni_modules/yt-iflytek,至此插件引入成功。 下列文档都是以uniapp为例介绍,文档最底下将给出uniapp-x的完整示例代码。

<!--打基座前现在需要使用的页面导入插件,否则插件不会打包进项目-->
import * as IflyTek from '../../uni_modules/yt-iflytek'

2、初始化插件(离线和成设备第一次初始化需要联网,后续初始化不需要网络,但每次启动后都需要先初始化才能合成)

IflyTek.init({
    appId: '6***8',//您的appid,可在控制台查看(科大讯飞创建应用后得到)
    apiKey: '43*******2fb2',//您的apiKey,可在控制台查看(科大讯飞创建应用后得到)
    apiSecret: 'NWF*******WIz',//您的apiSecret,可在控制台查看(科大讯飞创建应用后得到)
    authInterval: 300,//在线授权校验间隔时长,默认为300s,可自定义设置,最短为60s,单位秒 (可选参数)
    authType: 0,//离线授权类型(0或1),0-->(默认)设备级授权(DEVICE)和 1-->应用级授权(APP)(可选参数)
    refreshFile: false,//是否更新语音文件,默认不更新,更新后会把assets/xtts(修改assets文件需重新打基座)文件覆盖工作目录下的文件
    authHandler: (res) => {//授权(初始化)回调
        console.log(res)
    }
})
参数 参数类型 参数说明 是否必传
appId string appid可在控制台查看(科大讯飞创建应用后得到)
apiKey string apiKey可在控制台查看(科大讯飞创建应用后得到)
apiSecret string apiSecret可在控制台查看(科大讯飞创建应用后得到)
authInterval number 在线授权校验间隔时长,默认为300s,可自定义设置,最短为60s,单位秒
authType number 离线授权类型(0或1),0-->(默认)设备级授权(DEVICE)和 1-->应用级授权(APP)
refreshFile bool 是否更新语音文件,默认false,更新后会把assets/xtts(修改assets文件需重新打基座)文件覆盖工作目录下的文件
authHandler function 授权(初始化)回调,内容包含错误码,错误码查询

3、开始和成

IflyTek.startTTS({
    content: "离线合成能力能将文字信息转化为声音信息,让应用具备离线语音合成的能力。即让机器像人一样开口说话,给开发者的应用配上“嘴巴“。广泛应用于出行导航服务、阅读听书、智能音箱等行业领域",
    isSaveAudio: true,
    vcn: "xiaoyan",
    language: 1,
    textEncoding: "UTF-8",
    pitch: 50,
    volume: 50,
    speed: 50,
    reg: 0,
    rdn: 0,
    successHandler: (path) => {
        console.log(`音频保存路径isSaveAudio==false返回空字符:${path}`)
    },
    compoundHandler: (error) => {
        console.log(error)
    }
})
参数 参数类型 参数说明 是否必传
content string 合成内容
isSaveAudio bool 是否保存音频 默认:false
vcn string 发音人模型,插件里内置有“xiaoyan”、"xianfeng",需要其他模型可前往科大讯飞开放平台购买,后买后把模型文件复制到uni_modules/yt-iflytek/assets/xtts文件夹下,并重新打包测试(增减语音模型初始化SDK必须设置refreshFile为true)
language number 合成语种 1:中文, 2:英文, 3:法语, 5:日语, 6:俄语, 9:德语, 15:意大利语, 16:韩语, 23:西班牙语, 12:粤语, 8:印地语, 27:泰语--默认1
textEncoding string 文本编码 GBK:GBK编码, UTF-8:UTF-8编码, Unicode:Unicode编码 默认UTF-8
pitch number 合成音调最小值:0, 最大值:100 默认50
volume number 合成音调最小值:0, 最大值:100 默认50
pitch number 合成音量最小值:0, 最大值:100 默认50
speed number 合成语速最小值:0, 最大值:100 默认50
reg number 英文发音方式 0:引擎自动判断, 1:按字母发音, 2:按单词发音 默认:0
rdn number 数字发音方式 0:引擎自动判断, 1:按数字发音, 2:按字符串发音 默认:0
compoundHandler function 失败回调,内容包含错误码,错误码查询
successHandler function 成功回调,--isSaveAudio== true 返回音频保存路径

4、停止合成

IflyTek.stopTTS()

5、是否资源

IflyTek.release()

6、获取所有音频文件路径

IflyTek.getAllAudioFilePath(files => {
    console.log(files)
})

uniapp-x完整示例

<template>
    <view class="content">
        <view class="btn" @click="initSDK"><text>初始化</text></view>
        <view class="btn" @click="startTTS"><text>离线合成</text></view>
        <view class="btn" @click="getAllAudioFilePath"><text>获取所有音频文件</text></view>
        <view class="btn" @click="stopTTS"><text>停止</text></view>
        <view class="btn" @click="release"><text>释放资源</text></view>
    </view>
</template>

<script>
    import * as IflyTek from '../../uni_modules/yt-iflytek'
    export default {
        data() {
            return {
                title: 'Hello'
            }
        },
        onLoad() {

        },
        methods: {
            initSDK() {
                IflyTek.init({
                    appId: '6***8',
                    apiKey: '43*******2fb2',
                    apiSecret: 'NWF*******WIz',
                    authInterval: 300,
                    authType: 0,
                    refreshFile: false,
                    authHandler: (res) => {
                        console.log(res)
                    }
                } as IflyTek.IntOptions)
            },
            startTTS() {
                IflyTek.startTTS({
                    content: "离线合成能力能将文字信息转化为声音信息,让应用具备离线语音合成的能力。即让机器像人一样开口说话,给开发者的应用配上“嘴巴“。广泛应用于出行导航服务、阅读听书、智能音箱等行业领域",
                    isSaveAudio: true,
                    vcn: "xiaoyan",
                    language: 1,
                    textEncoding: "UTF-8",
                    pitch: 50,
                    volume: 50,
                    speed: 50,
                    reg: 0,
                    rdn: 0,
                    successHandler: (path) => {
                        console.log(`音频保存路径isSaveAudio==false返回空字符:${path}`)
                    },
                    compoundHandler: (error) => {
                        console.log(error)
                    }
                } as IflyTek.SpeechOptions)
            },
            //停止合成
            stopTTS() {
                IflyTek.stopTTS()
            },
            //释放资源
            release() {
                IflyTek.release()
            },
            //获取已生成的所有音频路径
            getAllAudioFilePath() {
                IflyTek.getAllAudioFilePath(files => {
                    console.log(files)
                })
            }
        }
    }
</script>

<style>
    .content {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
    }

    .btn {
        display: flex;
        align-items: center;
        justify-content: center;
        background-color: antiquewhite;
        border-radius: 8rpx;
        width: 690rpx;
        height: 80rpx;
        margin-top: 40rpx;
    }
</style>

uniapp 完整示例

<template>
    <view class="content">
        <view class="btn" @click="initSDK"><text>初始化</text></view>
        <view class="btn" @click="startTTS"><text>离线合成</text></view>
        <view class="btn" @click="getAllAudioFilePath"><text>获取所有音频文件</text></view>
        <view class="btn" @click="stopTTS"><text>停止</text></view>
        <view class="btn" @click="release"><text>释放资源</text></view>
    </view>
</template>

<script>
    import * as IflyTek from '../../uni_modules/yt-iflytek'
    export default {
        data() {
            return {
                title: 'Hello'
            }
        },
        onLoad() {

        },
        methods: {
            initSDK() {
                IflyTek.init({
                    appId: '6*****8',
                    apiKey: '43*****2fb2',
                    apiSecret: 'NW****WIz',
                    authInterval: 300,
                    authType: 0,
                    refreshFile: false,
                    authHandler: (res) => {
                        console.log(res)
                    }
                })
            },
            startTTS() {
                IflyTek.startTTS({
                    content: "离线合成能力能将文字信息转化为声音信息,让应用具备离线语音合成的能力。即让机器像人一样开口说话,给开发者的应用配上“嘴巴“。广泛应用于出行导航服务、阅读听书、智能音箱等行业领域",
                    isSaveAudio: true,
                    vcn: "xiaoyan",
                    language: 1,
                    textEncoding: "UTF-8",
                    pitch: 50,
                    volume: 50,
                    speed: 50,
                    reg: 0,
                    rdn: 0,
                    successHandler: (path) => {
                        console.log(`音频保存路径isSaveAudio==false返回空字符:${path}`)
                    },
                    compoundHandler: (error) => {
                        console.log(error)
                    }
                })
            },
            //停止合成
            stopTTS() {
                IflyTek.stopTTS()
            },
            //释放资源
            release() {
                IflyTek.release()
            },
            //获取已生成的所有音频路径
            getAllAudioFilePath() {
                IflyTek.getAllAudioFilePath(files => {
                    console.log(files)
                })
            }
        }
    }
</script>

<style>
    .content {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
    }

    .btn {
        display: flex;
        align-items: center;
        justify-content: center;
        background-color: antiquewhite;
        border-radius: 8rpx;
        width: 690rpx;
        height: 80rpx;
        margin-top: 40rpx;
    }
</style>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件本身不会采集用户信息,插件使用科大讯飞离线语音合成(新版)SDK,参考其官方网站https://www.xfyun.cn/doc/policy/sdk_compliance.html#_1、sdk扩展业务功能的配置说明

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: