目录

0  引言

1  思路

2  代码

(1)主函数

(2)子函数judge.m

3  代码运行结果

4  结论

5  参考资料


0  引言   

前段时间,朋友让我帮忙剪十段音频,每段音频为约十分钟的包含男女生对话的录音,要求从中分离出男声的语音,男女声声音重叠部分可丢弃,刚开始本以为工作量没多大,遂打开了音频剪辑软件,剪了一段后发现这个事情还是挺麻烦的,于是决定写个matlab程序来自动分离,然后伴以一定的人工校正,从而大大提高剪辑效率。

1  思路

预处理:将原始音频分割成2s一段的音频文件(时间间隔可调);

正式处理:

依次读取已分割为2s一段的音频文件,并从以下两个方面考虑:

(1)男女生基音频率的差异,计算该段语音中基音频率;

(2)声音幅值的差异(录音时男生离录音笔更近),计算语音幅值;

从上述两个方面对该音频文件进行识别分类,考虑到会存在一定的误判,故将识别类别设定为三类:男声、女声、需人工识别,并将判定后的语音存入对应类别的文件中,以便后期人工校正。

2  代码

(1)主函数

%================================================
%作者:Uestc-Sl
%创建日期:2021.04.19
%维护日期:2021.04.19
%功能描述:将剪切声音与判断男女声功能相结合,实现剪切、识别、分类存储一系列功能
%调用函数:judge.m
%使用流程:点击运行--->选择原始音频文件--->选择剪切及识别分类后的文件输出目录---->剪切音频
%         ----->读取剪辑的音频并识别---->根据识别结果将该语音存入对应分类文件,以便人工校对---->结束
%输出结果文件夹及目录结构     指定路径----> interval_2_0?-1 ---> 剪切好的音频
%                                                         --->男声
%                                                         --->女声
%                                                         --->需人工识别
%备注:
%其他:可考虑引入神经网络,构建更高维度的向量,提高基于判断幅值和基音频率判断的准确性
%================================================clear;clc;[file1,PathName,FilterIndex] = uigetfile('.wav','Select the M-file');file=strcat(PathName,file1);outfilePath=uigetdir;%======================创建输出结果文件=========================new_folder0 = strcat(outfilePath,'\','interval_2_',file1(1:4)); % 创建一个加前缀的同名文件夹,保存处理后的数据mkdir(new_folder0); new_folder1 = strcat(new_folder0,'\','剪切好的音频'); mkdir(new_folder1);  new_folder2 = strcat(new_folder0,'\','男声'); mkdir(new_folder2);  new_folder3 = strcat(new_folder0,'\','女声'); mkdir(new_folder3);  new_folder4 = strcat(new_folder0,'\','需人工识别'); mkdir(new_folder4); %=============================================================[x,fs]=audioread(file); % 读入声音文件data=x(:,1);            % 取单声道len=length(data);       % 获取序列长度和深度timeInterval=2;         % 提取的时间间隔(s)for i=1:ceil(len/fs)start_time = timeInterval*(i-1);end_time =timeInterval*i;if end_time*fs <=lenY_new=x((fs*start_time+1):fs*end_time,1);OutFileName=strcat(new_folder1,'\',num2str(i),'.wav')audiowrite(OutFileName,Y_new,fs); %将分割好的音频存入指定文件[ansnum]=judge(OutFileName);if ansnum==0 %男声OutFileName2=strcat(new_folder2,'\',num2str(i),'.wav');audiowrite(OutFileName2,Y_new,fs); endif ansnum==1 %女声OutFileName3=strcat(new_folder3,'\',num2str(i),'.wav');audiowrite(OutFileName3,Y_new,fs); endif ansnum==2 %需人工识别OutFileName4=strcat(new_folder4,'\',num2str(i),'.wav');audiowrite(OutFileName4,Y_new,fs); endend
end

(2)子函数judge.m

%返回值 0 男声
%       1 女声
%       2 需人工识别
function [ansnum]=judge(filename)[x1,fs1]=audioread(filename); % 读入声音文件data1=x1(:,1);            %取单声道%======基音频率提取======N=length(data1); [~,index]=max(data1);          % 返回最大值 最大值索引timewin=floor(0.015*fs1);%避免溢出[a,ind] = sort(data1);count=1;while index+timewin>Na(end)=[];count=count+1;[~,index]=max(a); endtemp=index-timewin;if temp<0temp=1;endxwin=data1(temp:index+timewin);[y,~]=xcov(xwin);ylen=length(y);halflen=(ylen+1)/2 +30;yy=y(halflen: ylen);[~,maxindex] = max(yy);fmax=fs1/(maxindex+30);disp([filename,'基音频率为 ', num2str(fmax), ' Hz'])%================考虑幅值信息======mean=0;for i=1:Nif data1(i)>0mean=mean+data1(i);%只计算正值范围内的平均幅值endendmean=mean/N%======通过基音频率、幅值大小判断男女声======if mean>=0.001 && fmax<160disp([filename,' 是男声文件']);ansnum=0;elseif fmax<160 && fmax>100 ;disp([filename,' 需人工识别']);ansnum=2;elsedisp([filename,' 是女声文件']);ansnum=1;end;end;

3  代码运行结果

图3.1  输出结果文件夹

图3.2  判定为“男声”音频文件夹

图3.3  判定为“女声”音频文件夹

图3.4   判定为“需人工识别”音频文件夹

每次处理输入的语音时,首先会创建一个文件夹用于存处理完成后的数据,文件夹命名为“interval_2_”+输入文件名的前四个字符,并在该文件夹下创建四个文件夹:剪切好的音频、男声、女声、需人工识别。随后会自动分割录音音频为2s一段的音频,并存入“剪切好的音频”文件夹,然后对剪切好的语音进行识别并存入对应文件夹。

4  结论

根据本人人工校对后发现,“男声”的查准率近乎100%,查全率约80%(正常情况下),达到了预期的效果。在这些已分类后的语音基础上再进行人工进行校对分类,大大提高了音频剪切效率,故分享给大家,希望能给用得上的朋友带来帮助。

5  参考资料

【1】http://www.voidcn.com/article/p-hsevylyj-nx.html

【2】https://blog.csdn.net/qq_31821675/article/details/79973532?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-4.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-4.nonecase

【3】https://blog.csdn.net/weixin_29813667/article/details/113902853

【4】https://ww2.mathworks.cn/help/matlab/ref/mkdir.html

语音识别之男女声分类(从一段对话中分离男声)相关推荐

  1. 男女声分类研究及应用

    背景 在很多业务场景下,确定发声人的性别都是很有用的.人类可以很轻松的通过一段语音确定发声者的性别,但是人的成本以及效率是比较低的.此时,假如机器可以完成这项工作的,将极大的解放人力提升效率. 研究过 ...

  2. 谷歌再获语音识别新进展:利用序列转导来实现多人语音识别和说话人分类

    准确识别「谁·在何时·说了啥」 作者 | MrBear 编辑 |  Pita 从 WaveNet 到 Tacotron,再到 RNN-T,谷歌一直站在语音人工智能技术的最前沿.近日,他们又将多人语音识 ...

  3. 语音识别类产品的分类及应用场景

    前言:本文作者@焦糖玛奇朵,是我们"AI产品经理大本营"早期成员,下面是她分享的第1篇文章,欢迎更多有兴趣"主动输出"的朋友们一起加入.共同进步:) 音频由公众 ...

  4. matlab 男女声识别+源码

    代码: file='lixiyang.wav' %file='girl1.mp3' [x,fs]=audioread(file); % 读入声音文件,返回样本数据 y 以及该数据的采样率 Fs. %= ...

  5. 【声纹识别】matlab-辨别男女声

    function man_or_woman(file)[x,fs]=audioread(file); % 读入声音文件 %======时域图像====== 随着时间声音赋值震荡图 data=x(:,1 ...

  6. 男声女声分类之SVM

    男声女声分类之svm 目录 男声女声分类之svm svc 数据 模型构建预测 svc 1.支撑向量机SVM是一种非常重要和广泛的机器学习算法,它的算法出发点是尽可能找到最优的决策边界,使得模型的泛化能 ...

  7. 机器学习 实验二 男声女声分类

    机器学习 实验二 男声女声分类 一.实验环境 PC机,Python 二.代码 #%%import pandas as pd from sklearn.preprocessing import Stan ...

  8. 语音信号处理(1):男女声在线识别系统(倒谱、基音频率)

       语音信号处理是挺有意思的,尤其是在人工智能横行的今天.不过就我看来,现在整个社会上明显对人工智能的作用过于夸大了,大多数写报道和搞炒作宣传的人基本不懂人工智能.尘世若此,其实又何止是在人工智能上 ...

  9. 把音频中的某个人声去掉_能不能把一段音频中的人声和背景音乐分开

    能不能把一段音频中的人声和背景音乐分开 能不能把一段音频中的人声和背景音乐分开 [方法一]1.可以尝试使用音频编辑软件Audacity 2.打开音频文件,在特效菜单有个Vocal Remover工具, ...

最新文章

  1. WordNet简介以及一些语言学知识。
  2. 8086逻辑运算和移位
  3. 将数据归一化到任意区间范围的方法
  4. iPhone软件开发新突破,真正VoIP通话
  5. 信息学奥赛一本通 1185:单词排序 | OpenJudge NOI 1.10 10:单词排序
  6. 在Red Hat Enterprise Linux 上如何安装openoffice
  7. java(8) HashMap源码
  8. 如何免费制作支付宝微信合并收款二维码?
  9. 微信公众号吸粉8大策略,实战运营指南
  10. win10时间线时间轴(Timeline)如何关闭隐藏?
  11. su自带模型库怎么打开_草图大师模型库竟然在软件内部
  12. 小程序or网页前端CSS选择器
  13. 形容词,名词记忆(三):ment, ent后缀常用词
  14. 手机信号不好?真不是套餐原因!4招教你搞定!
  15. Chrome网页翻译失效的解决方案
  16. 为什么HashMap中链表转红黑树的阀值是8?
  17. Ubuntu 16.04启动时进入welcome to emergency mode!
  18. 最少钱币数不java,【动态规划专题】3:换钱的最少货币数
  19. 初学者深度学习工作站配置
  20. 求java Array和及平均数

热门文章

  1. Python描述 LeetCode 732. 我的日程安排表 III
  2. 北京大学计算机专业考研试题,2017年北京大学计算机辅助翻译考研专业课真题(回忆版)...
  3. 数字电路(10)可编程逻辑器件分类
  4. 人体密码学之未来——虹膜识别
  5. 笔记19 | 利用MediaRecorder实现录像
  6. Nginx 实践案例(源码编译安装方式):利用LNMP搭建wordpress站点
  7. 中医推荐!民间养生经典六法
  8. Win11能上网但打不开网页如何解决?
  9. 《收获,不止SQL优化》读书笔记
  10. Apicloud——NVTabBarAnimation插件