ROS语音学习

来源:互联网 发布:g900 支持 mac 编辑:程序博客网 时间:2024/05/16 15:03

开源的语音识别:CMUSphinx
开源的语音合成:festival
sudo apt-get install festival
echo “Hello world, i am festival” | festival –tts
~$ locate festival
/etc/speech-dispatcher/modules/festival.conf
/usr/share/speech-dispatcher/conf/modules/festival.conf

ASR:自动语音识别技术(Automatic Speech Recognition)是一种将人的语音转换成文本的技术。
NLU:自然语言理解(Natural Language Understanding)
TTS:Text to Speech,即“从文本到语音”。把文字智能地转化为自然语音流。

语音交互流程
1、语音唤醒wakeup–本地处理
2、语音识别ASR–在线识别
–离线命令词识别
3、语义理解NLU–在线处理
4、语音合成TTS–在线合成
–离线合成

麦克风阵列
——科大讯飞二、四、六麦克风
——思必驰六、七麦克环形阵列
——捷通华声五麦克环形阵列
语音唤醒
——百度语音唤醒
——科大询飞
——思必驰
语音识别ASR
——百度语音在线识别
——科大讯飞在线ASR
——云之声在线识别
语义理解NLU
——图灵OS-免费在线使用5000次/天
——云之声在线体验
——科大讯飞免费在线使用体验
——捷通华声(灵云在线体验)
语音合成TTS
——科大讯飞支持各地方口音,卡通特色语音
——云之声
——百度在线语音
——捷通华声(灵云在线语音合成)

科大讯飞在线语音合成
注册讯飞开放平台帐号
下载讯飞SDK-linux版
Linux_voice_1158_59570e03.zip
解压到voice文件:unzip Linux_voice_1158_59570e03.zip -d voice
cd voice
tree以树形结构显示文件目录结构
cd samples/tts_sample
查看Makefile和64bit_make.sh
运行样例:source 64bit_make.sh
再运行make
出现:make: `../../bin/tts_sample’ is up to date.表示运行成功
cp 64bit_make.sh ../../bin/ (bin里用到了动态库)
cd ../../bin
运行 ./tts_sample
生成tts_sample.wav
安装sox软件包库(命令行工具)
sudo apt-get install sox
play tts_sample.wav
备注:
voice/libs/x64$ sudo cp libmsc.so /usr/lib

ctags
sudo apt-get install ctags
taglist
https://vim.sourceforge.io/scripts/script.php?script_id=273
下载解压 unzip -d taglist taglist_46.zip
配置taglist环境,具体如下:
cp doc/taglist.txt /usr/share/vim/vim74/doc
cp plugin/taglist.vim /usr/share/vim/vim74/plugin/
默认打开taglist,需配置如下:
编辑/etc/vim/vimrc文件,在文件最后添加如下配置信息:
let Tlist_Auto_Open = 1
let Tlist_Ctags_Cmd = ‘/usr/bin/ctags’
let Tlist_Show_One_File = 1
let Tlist_Exit_OnlyWindow = 1

讯飞——TTS_demo
* rdn: 合成音频数字发音方式
* volume: 合成音频的音量
* pitch: 合成音频的音调
* speed: 合成音频对应的语速
* voice_name: 合成发音人
* sample_rate: 合成音频采样率
* text_encoding: 合成文本编码格式
/* wav音频头部格式 */
typedef struct _wave_pcm_hdr
{
char riff[4]; // = “RIFF” 资源交换文件标志(RIFF)
int size_8; // = FileSize - 8 从下个地址开始到文件尾的总字节数
char wave[4]; // = “WAVE” WAV文件标志(WAVE)
char fmt[4]; // = “fmt ” 波形格式标志(fmt ),最后一位空格。
int fmt_size; // = 下一个结构体的大小 : 16 过滤字节(一般为00000010H),若为00000012H则说明数据头携带附加信息

short int       format_tag;             // = PCM : 1  格式种类(值为1时,表示数据为线性PCM编码)short int       channels;               // = 通道数 : 1  通道数,单声道为1,双声道为2int     samples_per_sec;        // = 采样率 : 8000 | 6000 | 11025 | 16000  采样频率int     avg_bytes_per_sec;      // = 每秒字节数 : samples_per_sec * bits_per_sample / 8  波形数据传输速率(每秒平均字节数)short int       block_align;            // = 每采样点字节数 : wBitsPerSample / 8  DATA数据块长度,字节。short int       bits_per_sample;        // = 量化比特数: 8 | 16  PCM位宽char            data[4];                // = "data";  “fact”,该部分是可选部分,一般当WAV文件是由某些软件转换而来时,包含该部分。int     data_size;              // = 纯数据长度 : FileSize - 44   数据标志符(data)

} wave_pcm_hdr;

将科大讯飞TTS代码改造成ROS节点流程
1、创建xf_tts_node节点
——初始化若干节点的消息队列
2、/voice/xf_tts_topic话题
——std_msgs/String
——2到1订阅
3、将收到的文本输入进行语音合成wav文件
——调用科大讯飞在线合成代码
——1到3回调函数
4、通过system函数来调用play命令,播放wav文件
5、其他节点
——“今天星期几”
——5发布到2话题里

这里写图片描述

编写过程
mkdir -p catkin_ws/src
cd catkin_ws/src
catkin_init_workspace
cd ..
catkin_make
cd catkin_ws/src
catkin_create_pkg voice_system roscpp rospy std_msgs
将讯飞的sample的.c文件和头文件考到voice_system
具体操作:
~/SoftWare/voice/samples/tts_samplecpttssample.c /catkinws/src/voicesystem/src/ /SoftWare/voice/include cp * ~/catkin_ws/src/voice_system/include
voice/libs/x64$ sudo cp libmsc.so /usr/lib

参考:
http://i.youku.com/rostutorials