• 2.21 haas506 2.0开发教程 - TTS - Text To Speech (320开发板)


    TTS

    TTS是Text To Speech的缩写,即“从文本到语音”。 TTS是语音合成应用的一种,它将储存于电脑中的文件,如帮助文件或者网页,转换成自然语音输出。对文本文件进行实时转换,转换时间之短可以秒计算。

    案例说明

    1,本案例主要介绍320的TTS接口,使用案例说明TTS接口的用法.

    准备

    器件数量
    haas320开发板1
    喇叭1

    代码

    mian.py

    # -*- coding: UTF-8 -*-
    import TTS as tts
    import utime as time
    
    def tts_play_cb(v):
        if v==7:
            print('play finish...')
        elif v==0:
            print('play start...')
    
    def tts_test():
        global tts_play_cb
        print('---------- tts test ----------')
        playstr = 'tts test'
        playstr1 = '测试'
        playstr2 = '优先级测试'
        playstr3 = 'pppp'
        playstr4 = 'sss'
    
        tts.setCallback(tts_play_cb)
    
        if(1 == tts.getState()):
            print('tts is busy')
            tts.close()
        #音量测试
        ret = tts.getVolume()
        print('get volume1 : ', ret)
    
        ret = tts.setVolume(1)
        print('set volume ret: ', ret)
    
        ret = tts.getVolume()
        print('get volume2 : ', ret)
    
        #播放速度测试
        ret = tts.getSpeed()
        print('get speed1 : ', ret)
    
        ret = tts.setSpeed(6)
        print('set speed ret: ', ret)
    
        ret = tts.getSpeed()
        print('get speed2 : ', ret)
    
        #play播放测试
        #测试停止播放
        ret = tts.play(2,0,2,playstr)
        if(0 == ret):
            print('tts play success')
        elif(-1 == ret):
            print('tts play failed')
    
        ret = tts.play(2,0,1,playstr1)
        if(0 == ret):
            print('tts play success')
        elif(-1 == ret):
            print('tts play failed')
    
        ret = tts.stopAll()
        print('stopAll ret : ', ret)
    
        #优先级测试,测试结果播放playstr2 → playstr4 → playstr3
        ret = tts.play(1,0,1,playstr2)
        if(0 == ret):
            print('tts play success')
        elif(-1 == ret):
            print('tts play failed')
    
        ret = tts.play(2,0,1,playstr3)
        if(0 == ret):
            print('tts play success')
        elif(-1 == ret):
            print('tts play failed')
    
        ret =tts.play(4,0,1,playstr4)
        if(0 == ret):
            print('tts play success')
        elif(-1 == ret):
            print('tts play failed')
    
        time.sleep_ms(1000)
        print('------------------------------------')
    
    if __name__ == '__main__':
        tts_test()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86

    调试

    串口log,测试结果声音播放顺序playstr2 → playstr4 → playstr3

    在这里插入图片描述

    class - TTS

    closeplaystopAllsetCallbackgetVolumegetSpeedsetSpeedgetState
    关闭TTS功能开始TTS播放停止队列播放注册回调函数获取TTS音量大小获取播放速度设置播放速度获取tts状态
    tts.close() - 关闭TTS功能

    参数:

    返回值:

    • 成功返回整型0,失败返回整型-1。
    tts.play(priority, breakin, mode, str) - 开始TTS播放

    语音播放,支持优先级0 ~ 4,数字越大优先级越高,每个优先级组可同时最多加入10个播放任务;播放策略说明如下:

    1. 如果当前正在播放任务A,并且允许被打断,此时有高优先级播放任务B,那么会打断当前低优先级播放任务A,直接播放高优先级任务B;

    2. 如果当前正在播放任务A,并且不允许被打断,此时有高优先级播放任务B,那么B播放任务将会加入到播放队列中合适的位置,等待A播放完成,再依次从队列中按照优先级从高到低播放其他任务;

    3. 如果当前正在播放任务A,且不允许被打断,此时来了一个同优先级播放任务B,那么B会被加入到该优先级组播放队列队尾,等待A播放完成,再依次从队列中按照优先级从高到低播放其他任务;

    4. 如果当前正在播放任务A,且允许被打断,此时来了一个同优先级播放任务B,那么会打断当前播放任务A,直接播放任务B;

    5. 如果当前正在播放任务A,且任务A的优先级组播放队列中已经有几个播放任务存在,且该优先级组播放队列最后一个任务N是允许被打断的,此时如果来了一个同样优先级的播放任务B,那么任务B会直接覆盖掉任务N;也就是说,某个优先级组,只有最后一个元素是允许被打断的,即breakin为1,其他任务都是不允许被打断的;

    6. 如果当前正在播放任务A,不管任务A是否允许被打断,此时来了一个优先级低于任务A的请求B,那么将B加入到B对应优先级组播放队列。

    • 参数
    参数参数类型参数说明
    priorityint播放优先级,支持优先级0 ~ 4,数值越大优先级越高
    breakinint打断模式,0表示不允许被打断,1表示允许被打断
    modeint1-UTF-8 ; 2-GBK
    strstring待播放字符串

    返回值:

    • 播放成功返回整型0;
    • 播放失败返回整型-1;
    • 无法立即播放,加入播放队列,返回整型1;
    • 无法立即播放,且该请求的优先级组队列任务已达上限,无法加入播放队列,返回整型-2。
    tts.stopAll() - 停止队列播放

    停止整个队列的播放,即当前如果正在播放TTS或者音频,并且队列中还有其他待播放内容,调用该接口后,不仅会停止当前播放的内容,还会清除这个队列的内容,不再播放任何内容。如果当前正在播放,且播放队列为空,那么调用该接口效果等同与stop()接口。

    参数:

    返回值:

    • 成功返回整型0,失败返回整型-1。
    tts.setCallback(usrFun) - 注册回调函数

    注册用户的回调函数,用于通知用户TTS播放状态。注意,该回调函数中不要进行耗时以及阻塞性的操作,建议只进行简单、耗时短的操作。

    参数:

    参数参数类型参数说明
    usrFunfunction用户回调函数,函数形式见示例

    返回值:

    • 注册成功返回整型0,失败返回整型-1。
    tts.getVolume() - 获取TTS音量大小

    获取当前播放音量大小,音量值为0 ~ 9,0表示静音,默认值4。

    参数:

    返回值:

    • 成功返回整型音量大小值,失败返回整型-1。

    设置播放音量大小。

    参数

    参数参数类型参数说明
    volint音量值,音量值为0 ~ 9,0表示静音

    返回值|

    • 成功返回0,失败返回整型-1。
    tts.getSpeed() - 获取播放速度

    获取当前播放速度,速度值为0 ~ 9,值越大,速度越快,默认值4。

    参数:

    返回值:

    • 成功返回当前播放速度,失败返回整型-1。
    tts.setSpeed(speed) - 设置播放速度

    参数

    参数参数类型参数说明
    speedint速度值,速度值为0 ~ 9,值越大,速度越快

    返回值:

    • 成功返回整型0,失败返回整型-1。
    tts.getState() - 获取tts状态。

    参数:

    返回值:

    • 0 – 整型值,表示当前无tts播放;

    • 1 – 整型值,表示当前有tts正在播放。

  • 相关阅读:
    在 Android 上部署自定义 YOLOv8 教程
    企业多点组网最直接、最简单的方案是什么?
    6-TRITC 四甲基罗丹明-6-异硫氰酸 CAS 80724-20-5
    小熊听书项目的详细介绍
    wget编译升级故障解决
    OpenCV实战——OpenCV.js介绍
    opencv创建窗口—cv.namedWindow()
    构建灵活、高效的HTTP/1.1应用:探索h11库
    linux安装oracle jdk
    拼多多开放平台订单信息查询接口【pdd.order.basic.list.get订单基础信息列表查询接口(根据成交时间)】代码对接教程
  • 原文地址:https://blog.csdn.net/w_hizyf_m/article/details/126036025