首页 > 编程语言 >matlab工具箱TTSBOX源码中文分析

matlab工具箱TTSBOX源码中文分析

时间:2022-11-25 15:09:33浏览次数:47  
标签:TTS TTSBOX SV pace 源码 matlab MS wav voice


function wav = tts(txt,voice,pace,fs)
%TTS text to speech.
% TTS (TXT) synthesizes speech from string TXT, and speaks it. The audio
% format is mono, 16 bit, 16k Hz by default.
%
% WAV = TTS(TXT) does not vocalize but output to the variable WAV.
%
% TTS(TXT,VOICE) uses the specific voice. Use TTS('','List') to see a
% list of availble voices. Default is the first voice.
%
% TTS(...,PACE) set the pace of speech to PACE. PACE ranges from
% -10 (slowest) to 10 (fastest). Default 0.
%
% TTS(...,FS) set the sampling rate of the speech to FS kHz. FS must be
% one of the following: 8000, 11025, 12000, 16000, 22050, 24000, 32000,
% 44100, 48000. Default 16.
%
% This function requires the Microsoft Win32 Speech API (SAPI).
%
% Examples:
% % Speak the text;
% tts('I can speak.');
% % List availble voices;
% tts('I can speak.','List');
% % Do not speak out, store the speech in a variable;
% w = tts('I can speak.',[],-4,44100);
% wavplay(w,44100);
%
% See also WAVREAD, WAVWRITE, WAVPLAY.

% Written by Siyi Deng; 12-21-2007;

if ~ispc, error('Microsoft Win32 SAPI is required.'); end
if ~ischar(txt), error('First input must be string.'); end

SV = actxserver('SAPI.SpVoice');%创建一个object对象COM.SAPI_SpVoice
TK = invoke(SV,'GetVoices');%创建一个object对象Interface.928....
if nargin > 1 %判断参数多余一个
% Select voice;%根据文字选择中文发音对象或者英文发音对象。或这系统中的其他国家语言发音对象
for k = 0:TK.Count-1
if strcmpi(voice,TK.Item(k).GetDescription)
SV.Voice = TK.Item(k);
break;
elseif strcmpi(voice,'list')
disp(TK.Item(k).GetDescription);
end
end
% Set pace;
if nargin > 2
if isempty(pace), pace = 0; end %如果pace为空那么默认不加速
if abs(pace) > 10, pace = sign(pace)*10; end %如果加/减速大于10那么只取左右端的极限
SV.Rate = pace;%接口语音速率设置
end
end

if nargin < 4 || ~ismember(fs,[8000,11025,12000,16000,22050,24000,32000,...
44100,48000]), fs = 16000; end %如果没有采样频率或者采样频率取值不再规定成员里面,那么使用默认值 16kHz

if nargout > 0 %如果函数有输入参数
% Output variable;
MS = actxserver('SAPI.SpMemoryStream');%创建COM.API_SpMemoryStream对象
MS.Format.Type = sprintf('SAFT%dkHz16BitMono',fix(fs/1000));%设置语音生成频率kHz fix(fs/1000)取商部分
SV.AudioOutputStream = MS; %把生成接口MS生成的语音流<-连接->SVobject输出对象
end

invoke(SV,'Speak',txt);%调用COM的服务对象[SV]使用方法['Speak']处理文本数据[txt]

if nargout > 0 %r如果函数有输入数据
% Convert uint8 to double precision;
wav = reshape(double(invoke(MS,'GetData')),2,[])';
%invoke(MS,'GetData')调用返回矩阵信息
%根据数据把数据填成提取[2,:]矩阵先列后行,奇数提取,偶数提取
wav = (wav(:,2)*256+wav(:,1))/32768;
%2字节提取,归一化计算获得单声道wav文件 2^16=32768 (量化16位)
wav(wav >= 1) = wav(wav >= 1)-2;
%处理数据后大于等于1的相当于对值为复数的进行处理
%16bit =2字节。小端模式(低字节 高字节)
%存放数据在电脑中用补码表示,
%样例: 05 34 =0 0110100 00000101 显然符号位0为正数(正数三码一样)值为0x(3405)
% 05 80=1 0000000 00000101显然符号位1为负数,值为5-32768
delete(MS);%释放空间
clear MS;
end

delete(SV); %释放空间
clear SV TK;
pause(0.2);

end % TTS;


标签:TTS,TTSBOX,SV,pace,源码,matlab,MS,wav,voice
From: https://blog.51cto.com/datrilla/5886718

相关文章

  • 【iOS-Cocos2d游戏开发之十五】详解CCProgressTimer 进度条并修改cocos2d源码实现“理
    ​​ 李华明Himi ​​​原创,转载务必在明显处注明     游戏开发中难免用到进度条,例如做一些游戏技能的CD时间等都会使用到;那么cocos2d当然也封装了进度条,但是不......
  • 手机直播源码,flutter 随机数的生成和保留两位小数
    手机直播源码,flutter随机数的生成和保留两位小数一、生成最小值和最大值之间的随机数使用Random().nextInt()方法,生成一个整数 random(min,max){ //+min 表......
  • 视频直播系统源码,flutter Wrap 自动换行组件
    视频直播系统源码,flutterWrap自动换行组件 先来简单的看一下源码 Wrap({  super.key,  this.direction=Axis.horizontal,  this.alignment=WrapAl......
  • matlab中文注释nmat2snd
    不是很懂,粗浅理解。有误请指出functionw=lrcnmat2snd(nmat,synthtype,fs)%nmat每行:启始(拍数)、间隔(拍数)、声道、音高(dB)、速率、起始(时间sec)、间隔(时间sec)%Createwa......
  • matlab工具voicebox函数中文说明
    需要自己去下载文件解压到toolbox里面并设置路径方可使用Voicebox:在matlab使用的语音程序工具 一些文件使用加前缀"v_"避免命名冲突  音频文件输入或输出   ......
  • matlab带有自变量(参数)的累加求因变量
    这个代码需要小号很大的空间,如果数量大到一定的话,那么系统会内存占99%,然后电脑就宕机了。如果用时间换空间,那么多加及格循环就可以咯求解当t=0.5、0.75、1时函数f(t)=Σ......
  • matlab使用readmidi以后统计
    这个算法速度很慢就是了,更改算法后发现break和continue和我像的不一样,还是先保持这个全部遍历的clearall;[nmatnstr]=readmidi('再回首.mid');Cchannel=8;%统计nstr里面......
  • matlab注释分析高斯混合模型
    ​​Rachel-Zhang​​ 提供的源码。高斯混合模型没有输入参数判断,没有协方差是否可逆验证。我要用语音处理的,电脑卡死机,逆矩阵不是所有的都有的。或者用文库里面的代码​......
  • matlab纵向一维数组(向量)维数不一样尾部延展合成
    matlab纵向一维数据维数不一致合成两个语音波形数据简单合成一个试听播放sound(w,18000)sound(波形数据,采样频率)%两个维度不一样的纵向数组波形文件合成一个音轨%codeby......
  • matlab与C对照以及matlab之_极限_微分_积分_定积分
    名称matlabC++介绍脚本语言,类似科学计算器输入式子如果没有赋值默认赋值给ans,每条语句默认窗口输出计算结果编程语言,面向对象基于过程基本位置在.m文件(命令/函数文件)或命令......