您的位置:首页 > 其它

语音模仿相似度评价系统

2015-06-16 23:05 323 查看
功能: 对用户模仿某种语音语调的相似程度的机器评分—— 模仿歌曲、唱腔、名人演讲口吻、方言语调等。

输入: 模仿的语音

被模仿的语音

输出: 显示两者时域波形; 显示两者基音轨迹;显示两者强度轨迹; 输出匹配分数。

算法: 自相关求基音频率;

动态时间规整计算相似度;

实测:



改进: 可增加 MFCC 特征。

可基于小波变换系数进行语音分割,对准后再匹配打分。

扩展应用: 固定文本的说话人辨识;

有限词汇量的口令识别;

附主函数入口:

void AnyTwoWavMatchTest(char *fileTest1, char *fileTest2, double* myScore)
{
double *sound_buffer = (double *)malloc(sizeof(double) * CLEN10240 * WIDTH / 2);
//能量
double *energy_buffer1;
energy_buffer1 = (double *)malloc(sizeof(double) * CLEN10240);
//基音
double *pitch_buffer1;
pitch_buffer1 = (double *)malloc(sizeof(double) * CLEN10240);
//能量
double *energy_buffer2;
energy_buffer2 = (double *)malloc(sizeof(double) * CLEN10240);
//基音
double *pitch_buffer2;
pitch_buffer2 = (double *)malloc(sizeof(double) * CLEN10240);
int nX1 = ReadWavFileData(fileTest1, sound_buffer, 11.025);
int FramX1 = ExtractPitchMy(sound_buffer, nX1, pitch_buffer1, energy_buffer1, 11.025);
int nX2 = ReadWavFileData(fileTest2, sound_buffer, 11.025);
int FramX2 = ExtractPitchMy(sound_buffer, nX2, pitch_buffer2, energy_buffer2, 11.025);
double mean;
mean = GetMean(pitch_buffer1,FramX1);
GenderCheck(pitch_buffer1,FramX1,mean);
mean = GetMean(pitch_buffer1,FramX1);
GenderCheck(pitch_buffer2,FramX2,mean);
Norm2MeanVale(pitch_buffer1,FramX1);
Norm2MeanVale(pitch_buffer2,FramX2);
Norm2MeanVale(energy_buffer1,FramX1);
Norm2MeanVale(energy_buffer2,FramX2);
*(myScore+1) = (double)abs(FramX1 - FramX2)/(double)(FramX1+FramX2)*2;
*(myScore+2) = MatchingDTW(pitch_buffer1, pitch_buffer2, FramX1, FramX2, 1 , 0.1);
*(myScore+3) = MatchingDTW(energy_buffer1, energy_buffer2, FramX1, FramX2, 1 , 0.1);
*(myScore+0) = (*(myScore+1)+*(myScore+2)+*(myScore+3))/3;

free(pitch_buffer1);
free(energy_buffer1);
free(pitch_buffer2);
free(energy_buffer2);
free(sound_buffer);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: