1.源码
16k采样率模型训练参考Github:https://github.com/YongyuG/rnnoise_16k
2.编译特征提取工具
编译前,进入denoise.c, 修改count参数,数值根据你的语音文件大小选定,第一次可以选小一点,体验流程
if (count==1000000) break;
cd rnnoise-master/src
./compile.sh
执行后会生成文件denoise_training,使用方式如下:
../src/denoise_training_gao /media/clean_dir /media/noise_dir mixed.wav > training_16k.f32
每个音频数据导出75维特征,只要音频足够长,可以count参数设置大一点。最终导出的数据则为(count, 75)。
3.准备数据
论文数据集可以到作者博客主页下载:
作者主页:https://jmvalin.ca/demo/rnnoise/
噪声数据集下载链接:https://media.xiph.org/rnnoise/rnnoise_contributions.tar.gz
筛选.raw格式语音:
import os
import shutil
def CopyRawFile(src, dest):
# 创建目标文件夹
if os.path.exists(dest) == 0:
os.mkdir(dest)
filenames = os.listdir(src)
for file in filenames:
if file.endswith('.raw'):
src_file = os.path.join(src, file)
dest_file = os.path.join(dest, file)
shutil.copyfile(src_file, dest_file)
if __name__ == '__main__':
src = "/media/Data/rnnoise_contributions"
dest = "/media/Data/rnnOnlyRaw"
CopyRawFile(src, dest)
纯净语音数据选用AIshell-1,纯净语音数据集准备工作如下:
1)批量解压
import zipfile
import tarfile
import os
def unzip_file(zip_file_name, destination_path):
archive = zipfile.ZipFile(zip_file_name, mode='r')
for file in archive.namelist():
archive.extract(file, destination_path)
#解压缩模块
def untar_file(file_name, dest_file_path):
tar = tarfile.open(file_name)
#更改新创建的文件夹的名字
if file_name.find(".tar.gz")!=-1:
file_name=file_name.replace(".tar.gz", "")
else:
pass
print(file_name)
if os.path.isdir(file_name):
pass
else:
pass
#os.mkdir(file_dir+"\\"+file_name)
names = tar.getnames()
#循环解压缩,将压缩文件中的所有文件解压缩
for name in names:
print(name)
print(dest_file_path)
tar.extract(name, dest_file_path)
return
def zipfile_name(file_dir):
# 读取文件夹下面的文件名.zip
L=[]
for root, dirs, files in os.walk(file_dir):
for file in files:
L.append(