1.基于语音识别的音字显示同步方法,首先通过对待处理视频中的音频进行提取,并进行端点检测得到音频中人说话的前后端点,然后对音频进行降噪提取特征值,再通过声音模型和语言模型进行语音识别,然后根据识别出的字的特征值判断该字的起止时间,当音频当前播放时间与起始时间相同时,利用Vue的双向绑定机制在屏幕中显示该字,其特征在于具体包括如下步骤:
步骤1:提取待处理的视频中的音频,并对所提取的音频进行端点检测、降噪,具体为:步骤1.1:首先将音频按照时长与采样率进行分帧,根据式(1)计算每一帧的时长,最后将每一帧乘上汉明窗;
其中,T表示音频帧时长,n表示一个AAC帧对应的采样点个数,v表示采样频率;
步骤1.2:根据式(2)计算每一帧的能量值,其中,En表示第n帧的能量,xni表示第n帧第i个采样点的频率,N表示每帧采样点的总数;
步骤1.3:根据步骤1.2得到的能量值计算出前10帧的平均能量值Ea,若存在某一帧满足它之前连续100帧每帧的能量值小于Ea且之后连续100帧每帧能量值大于Ea,则将该帧的起始时刻作为前端点,反之将该帧的结束时刻作为后端点,一对前后端点间的时间代表人说这句话的时间,一对前后端点间表示这句话;
步骤1.4:取音频起始处50帧的语音作为背景音,将所取的50 帧的语音以每组10帧分为5组,对每组的语音帧进行傅里叶变换,求得每组的频谱,并求5组的频谱平均值,得到10帧长度的频谱作为噪声频谱;对整个音频的全部语音进行傅里叶变换求出频谱,使用噪声频谱进行补偿,即两者相减,再使用傅里叶逆变换得到正常的降噪后的音频;
步骤2:对音频进行特征值提取,具体为:对步骤1)降噪后的音频进行MFCC语音特征提取,通过预加重、分帧、加窗、离散傅里叶变换、应用Mel滤波器、对频谱离散余弦变换和动态差分参数提取,得到每一帧音频的特征值C;
步骤3:通过声音模型和语言模型识别音频中的语音,具体为:根据式(3)求出语音对应概率最高的文本段,记录对应于每个字发音的特征值Ci;
*
S=arg max P(S|C) (3)*
其中,C表示输入的音频的特征值,S表示输入的语音特征C对应的概率,S表示计算得到的最高的文本段概率;
步骤4:根据特征值得出每个字的起止时间,具体为:根据每个字发音的特征值Ci,与步骤2中得到的每一帧音频的特征值C按序进行对比,按序找到每个Ci所在位置,得到每个字所占的帧的位置,再根据式(4)和(5)计算第i个字的起始时间和结束时间;
Tib=Tb+(Nib‑1)*t (4)Tie=Tb+Nie*t 5)其中,Tib表示第i个字的起始时间,Tb表示前端点对应时间,Nib表示第i个字的起始帧为该段语音的第几帧,t表示每一帧对应原音频的长度,Tie表示第i个字的结束时间,Nie表示第i个字的结束帧为该段语音的第几帧;
步骤5:将文字显示与语音完全同步,具体为:步骤5.1:在VUE框架中通过操作DOM的duration函数获得音频的总时长T1,单位为ms,在视频开始播放时,操作DOM的oncanplay函数传递T1触发事件A,其中,事件A表示将显示的文本清空;
步骤5.2:将每个字按起始时间进行升序排序,令持续时间T2结束时间‑起始时间,通过currentTime函数获得音频当前播放时间T3;
步骤5.3:设置标识位Tn=0,令Tn自增,若满足Tn=T3且与当前对象的begintime属性相同时,表示当前字的视频与音频同步,开始显示文字,触发vue中通过watch监听的order数值,order表示当前话语的顺序号即当前视频中的第几句话,order数值发生变化时,将当前这句话赋值给在页面中显示的字符串,通过JavaScript的setTimeout函数将该字显示时间为持续时间T2,单位为毫秒;
步骤5.4:根据步骤1.3得到的该句话的结束时间T4,若Tn≠T4则认定这句话未说完,将与下一个字出现的起始时间之间的时间作无效处理,即不采取任何操作;若Tn=T4,则将显示文本清空,重复步骤5.4,进行下一句话的显示,从而利用VUE的双向绑定完成文字显示与语音的完全同步。