tts语音播报

news/2024/11/8 15:07:54/

在嵌入式设备中常常会用到tts(Text To Speech)播报,在使用tts语音库时需要注意一下几点:

1、生成tts语音的频率。通常情况下 tts语音频率为8k。

2、设备声卡支持的频率。这个跟硬件有关系。有8k、16、32等。

如果生成的语音频率与硬件不匹配,那么我们怎么处理呢?

我们可以把tts语音频率转换为硬件支持的频率。

通常 SOUND_PCM_WRITE_BITS 为16位

如把 8k 转 16k 

就是每个16位复制一次。(相同16位出现 2次)

如果是8k转32k

就是每个16位复制3次。(相同16位出现 4次)

下面是8k转16k

int i = 0;
int j = 0;
for(i = 0 ; i < len; i += 2)//每两个字节即使16位
{

for(j = 0; j < 2 ;j++)//2次相同 16k = 8k*2
{
status = write(fd_dev_w,ttsbuf+i,2);//每次写16位
if(status <= 0)
{
perror("Cannot write soundcard");
close(fd_dev_w);
return 1;
}
}
}



下面附上tts播放代码



#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/soundcard.h>
#include <xxx_tts.h>
#define SIZE     16  
#define CHANNELS 1   




//播放tts语音 buf
int play_pcm(char *ttsbuf,int len)
{
int fd_dev_w;
int arg;
int status;
fd_dev_w = open("/dev/dsp", O_WRONLY,0777);
if (fd_dev_w < 0)
{
        perror("Cannot open /dev/dsp device");
        return 1;
}
arg = SIZE;//16位
status = ioctl(fd_dev_w, SOUND_PCM_WRITE_BITS, &arg);//set SOUND_PCM_WRITE_BITS   if (status == -1)
{
      perror("Cannot set SOUND_PCM_WRITE_BITS ");
close(fd_dev_w);
return 1;
}
arg = CHANNELS;       
status = ioctl(fd_dev_w, SOUND_PCM_WRITE_CHANNELS, &arg);//set SOUND_PCM_WRITE_CHANNELS
if (status == -1)
{
    perror("Cannot set SOUND_PCM_WRITE_CHANNELS");
close(fd_dev_w);
      return 1;
    }
arg = 32000;
status = ioctl(fd_dev_w, SOUND_PCM_WRITE_RATE, &arg);//set SOUND_PCM_WRITE_RATE
    if (status == -1)
{
        perror("Cannot set SOUND_PCM_WRITE_RATE");
close(fd_dev_w);
        return 1;
}
int i = 0;
int j = 0;
for(i = 0 ; i < len; i += 2)
{

for(j = 0; j < 2 ;j++)
{
status = write(fd_dev_w,ttsbuf+i,2);
if(status <= 0)
{
perror("Cannot write soundcard");
close(fd_dev_w);
return 1;
}
}
}
close(fd_dev_w);
return 0;
}
int main(int argc, char * argv[])
{
char * ptest = "hello jerry";
if(argc >1)
ptest = argv[1];
char ttsbuf[64*1024]= {0};
int nret=xxx_tts_set_speech_text(ptest,ttsbuf,sizeof(ttsbuf));
printf("len = %d\n ",nret);
if(nret > 0)
{
play_pcm(ttsbuf,nret);
}
return 0;
}



http://www.ppmy.cn/news/806288.html

相关文章

ASR、TTS语音相关

***** 语音交互过程&#xff1a; 声音采集(sensor)、前端信号处理(FESP)、语音唤醒(wake up)、语音识别(ASR)、语义理解(NLU)、智能对话/对话管理(DM)、资源调用(API)、回复内容生成/自然语言生成(NLG)、动作执行(action)、合成音播报(TTS) 项目 依赖的资源和能力 说明 对应…

二、语音合成(TTS)

语音合成使用 平台&#xff1a;Microsoft Visual Stduio软件编程 1.添加添加引用&#xff1a;System.Speech Dll库 2. 添加命名空间 System.Speech.Synthesis就可以使用语音合成功能。 在正式调用相关语音包之前&#xff0c;先确认电脑是否已经安装好相关的语音包&#xff0c…

TTS资料

开放分类&#xff1a; 计算机技术、 音频、 语音、 视听、 人力资源培训 目录 • TTS概述 • TTS解析 • 中文TTS系统 • TTS与CTI • TTS漫谈 TTS概述 TTS是Text To Speech的缩写&#xff0c;即“从文本到语音”。它是同时运用 语言学和 心理学的杰出之作&#xff0c;在内置芯…

android TTS语音播报

如今在Android中开发中文语音播报有各式各样的云服务、SDK、API等云云&#xff0c;但是大部分服务是需要联网支持来进行语音合成的&#xff0c;在中文语音合成方面&#xff0c;科大讯飞无疑是佼佼者&#xff0c;而且它也提供了离线语音合成包&#xff08;需要按分发数量和使用时…

2022 interspeech TTS

文章目录 JETS: Jointly Training FastSpeech2 and HiFi-GAN for End to End Text to Speechmethod单阶段训练模型的原理对齐原理 Enhancement of Pitch Controllability using Timbre-Preserving Pitch Augmentation in FastPitchmethodpitch shift by VocGANmodel architectu…

语音合成(TTS)应用方案一二三

前言 语音合成是指将文字转成语音(TextToSpeech)进行播放&#xff0c;本文主要介绍三种实现方案。 一、web端实现 通过h5提供的网页语音API来实现&#xff0c;用到speechSynthesis(获取设备上可用的合成声音的信息、控制声音播放、暂停等命令)和SpeechSynthesisUtterance(管理…

TTS 文字转语音研究,效果原来这么好。

自己做了个在线文字转语音服务&#xff0c;没想到效果竟然这么好 有时候我们需要文字转语音服务&#xff0c;在网上找了好多免费的&#xff0c;但效果都不太好&#xff0c;偶然间发现了微软的Edge浏览器有个大声朗读功能&#xff0c;试了一下&#xff0c;效果竟然出奇的好&…

TTS技术简单介绍和Ekho(余音)TTS的安装与编程

TTS技术简单介绍和Ekho&#xff08;余音&#xff09;TTS的安装与编程 zouxy09qq.com http://blog.csdn.net/zouxy09 一、TTS技术简单介绍&#xff1a; TTS技术&#xff0c;TTS是Text To Speech的缩写&#xff0c;即“从文本到语音”。它将计算机自己产生的、或外部输入的文字信…