标签:utt2spk spkid kaldi 笔记 echo thchs30 spk wav data
数据准备
由于我们已经下载过数据了,直接进行数据准备。
根据注释,我们知道,数据准备就是要产生四个文件分别是text,wav.scp,utt2spk,spk2utt
(1)text:音频标注
(2)wav.scp:指定音频路径
(3)utt2spk:音频对应的说话人信息
(4)spk2utt:说话人对应的音频信息
打开s5/local/thchs-30_data_prep.sh
mkdir -p data/{train,dev,test}
在data文件夹下创建三个文件夹分别是train、dev、test用来存储数据。
for x in train dev test; do
echo "cleaning data/$x"
cd $dir/data/$x
rm -rf wav.scp utt2spk spk2utt word.txt phone.txt text
echo "preparing scps and text in data/$x"
首先判断在这三个文件夹中是否有数据,如果有,进入文件,将其删除。然后重新进行数据准备,这里说的数据是已经处理好的上边的四个数据文件text、wav.scp、utt2spk、spk2utt。
for nn in `find $corpus_dir/$x -name "*.wav" | sort -u | xargs -I {} basename {} .wav`; do
- 第一步是找到原始数据中的所有wav文件,并输出绝对路径
- 第二步是根据上一步得到的路径来进行排序,-u指的是去掉重复行
- 第三步是输出文件的basename(去掉wav), -I 表示逐行操作。
所以上述代码出来的是所有的wav文件的文件名。
spkid=`echo $nn | awk -F"_" '{print "" $1}'`
spk_char=`echo $spkid | sed 's/\([A-Z]\).*/\1/'`
spk_num=`echo $spkid | sed 's/[A-Z]\([0-9]\)/\1/'`
spkid=$(printf '%s%.2d' "$spk_char" "$spk_num")
utt_num=`echo $nn | awk -F"_" '{print $2}'`
uttid=$(printf '%s%.2d_%.3d' "$spk_char" "$spk_num" "$utt_num")
对于类似于 A11_0 这样的文件,以 “_” 区分开,会分成两个部分, A11和0,spkid读取A11,也就是说话人的id。在spkid中读取A-Z的字母片段和0-9的数字片段,对于A11, spk_char=“A”, spk_num=“11”,最后一行读取的是某个说话人说的第几句话的索引。
echo $uttid $corpus_dir/$x/$nn.wav >> wav.scp
echo $uttid $spkid >> utt2spk
echo $uttid `sed -n 1p $corpus_dir/data/$nn.wav.trn` >> word.txt
echo $uttid `sed -n 3p $corpus_dir/data/$nn.wav.trn` >> phone.txt
以上几句是将读取的文件名 文件的绝对路径写到wav.scp,每句话对应的说话人写到 utt2spk,对应的word和phone写到对应的文本中。
标签:utt2spk,spkid,kaldi,笔记,echo,thchs30,spk,wav,data 来源: https://blog.csdn.net/weixin_43587572/article/details/114634955
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。