最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

2.1 data_prep.sh

2023-08-01 16:11 作者:叫我小云或者云哥  | 我要投稿


首先檢查格式和flac工具(原數(shù)據(jù)集是flac文件)

然后開始生成wav_scp、trans、utt2spk、spk2gender這四個(gè)文件,具體步驟是

wav_scp=$dst/wav.scp; [[ -f "$wav_scp" ]] && rm $wav_scp
trans=$dst/text; [[ -f "$trans" ]] && rm $trans
utt2spk=$dst/utt2spk; [[ -f "$utt2spk" ]] && rm $utt2spk
spk2gender=$dst/spk2gender; [[ -f $spk2gender ]] && rm $spk2gender

#首先定義這4個(gè)文件,如果存在就刪除他們

for reader_dir in $(find -L $src -mindepth 1 -maxdepth 1 -type d | sort); do

#$(find -L $src -mindepth 1 -maxdepth 1 -type d | sort): 這部分命令會查找$src變量所指定的目錄下所有的子目錄。-L選項(xiàng)會跟隨所有符號鏈接,-mindepth 1 -maxdepth 1指定查找深度為1,這意味著只會查找指定目錄下的子目錄,不會再向下查找。-type d表示只查找目錄類型。這些找到的目錄通過sort進(jìn)行排序。然后將子目錄名就被設(shè)置為了reader_dir,這也就是該音頻的reader,以下是原始數(shù)據(jù)集的文件結(jié)構(gòu)


? reader=$(basename $reader_dir)
? if ! [ $reader -eq $reader ]; then ?# not integer.#如果reader不是整數(shù)就報(bào)錯(cuò)
? ? echo "$0: unexpected subdirectory name $reader"
? ? exit 1;
? fi

? reader_gender=$(egrep "^$reader[ ]+\|" $spk_file | awk -F'|' '{gsub(/[ ]+/, ""); print tolower($2)}')
? if [ "$reader_gender" != 'm' ] && [ "$reader_gender" != 'f' ]; then
? ? echo "Unexpected gender: '$reader_gender'"
? ? exit 1;
? fi

#對于每一個(gè)說話者,從SPEAKERS.TXT文件中提取性別信息,如果性別不是'm'(男性)或者'f'(女性),就打印錯(cuò)誤信息并退出。

? for chapter_dir in $(find -L $reader_dir/ -mindepth 1 -maxdepth 1 -type d | sort); do
? ? chapter=$(basename $chapter_dir)#對于每個(gè)reader目錄下的章節(jié)進(jìn)行類似處理
? ? if ! [ "$chapter" -eq "$chapter" ]; then
? ? ? echo "$0: unexpected chapter-subdirectory name $chapter"
? ? ? exit 1;
? ? fi

? ? find -L $chapter_dir/ -iname "*.flac" | sort | xargs -I% basename % .flac | \
? ? ? awk -v "dir=$chapter_dir" '{printf "lbi-%s flac -c -d -s %s/%s.flac |\n", $0, dir, $0}' >>$wav_scp || exit 1;

#find命令用于在 $chapter_dir 指定的目錄及其子目錄中查找所有擴(kuò)展名為 .flac 的文件。-L 選項(xiàng)會讓 find 命令跟隨符號鏈接,而 -iname 選項(xiàng)會忽略文件名的大小寫。sort: 將 find 命令找到的文件列表進(jìn)行排序。xargs -I% basename % .flac: xargs 命令將輸入的文件列表傳遞給 basename 命令。basename 命令用于刪除文件路徑,只留下文件名。這里,-I% 表示將 % 作為占位符使用,用來表示 xargs 命令輸入的每一項(xiàng)。所以 basename % .flac 會刪除每個(gè)文件名的路徑和擴(kuò)展名 .flac。

#awk -v "dir=$chapter_dir" '{printf "lbi-%s flac -c -d -s %s/%s.flac |\n", $0, dir, $0}': awk 命令用于處理每個(gè)已刪除路徑和擴(kuò)展名的文件名。這里,-v "dir=$chapter_dir" 是將 $chapter_dir 傳遞給 awk 腳本的方法。在 awk 腳本中,printf 命令用于格式化輸出字符串,$0 代表當(dāng)前行的完整輸入,也就是文件名。這段 awk 腳本的結(jié)果是 "lbi-文件名 flac -c -d -s 文件路徑/文件名.flac |" 的形式。>>$wav_scp || exit 1;: >> 是重定向操作符,將前面的所有輸出追加到 $wav_scp 指定的文件中。如果這個(gè)操作失敗,|| exit 1 會使腳本立即退出,返回值為 1,表示發(fā)生了錯(cuò)誤。


? ? chapter_trans=$chapter_dir/${reader}-${chapter}.trans.txt #找到reader下該章節(jié)中的txt文件


? ? if $prepare_text; then #如果上文該變量設(shè)置為true(實(shí)際為true)
? ? ? [ ! -f ?$chapter_trans ] && echo "$0: expected file $chapter_trans to exist" && exit 1

#這行代碼首先檢查 $chapter_trans 指定的文件是否存在。如果文件不存在([ ! -f $chapter_trans ] 返回 true),那么將會打印一條錯(cuò)誤消息,并使腳本以錯(cuò)誤代碼 1 退出。
? ? ? sed -e 's/^/lbi\-/' $chapter_trans >> $trans

#這行命令使用 sed(流編輯器)在 $chapter_trans 指定的文件的每一行開始處添加字符串 "lbi-"。-e 參數(shù)指定了要執(zhí)行的編輯命令,'s/^/lbi\-/' 是一個(gè)替換命令,^ 表示每一行的開始處。最后,>> $trans 將這個(gè)操作的結(jié)果追加到 $trans 文件中。
? ? fi

#原始txt和生成的text文件

? ? # NOTE: For now we are using per-chapter utt2spk. That is each chapter is considered
? ? # ? ? ? to be a different speaker. This is done for simplicity and because we want
? ? # ? ? ? e.g. the CMVN to be calculated per-chapter
? ? awk -v "reader=$reader" -v "chapter=$chapter" '{printf "lbi-%s lbi-%s-%s\n", $1, reader, chapter}' \
? ? ? <$chapter_trans >>$utt2spk || exit 1

#創(chuàng)建utt2spk文件,該文件是一個(gè)映射,記錄每一個(gè)話語(utterance)是由哪一個(gè)說話者(speaker)說的。這里的說話者是以章節(jié)為單位的,即每一個(gè)章節(jié)都被視為不同的說話者。

#awk -v "reader=$reader" -v "chapter=$chapter" '{printf "lbi-%s lbi-%s-%s\n", $1, reader, chapter}': 這是一個(gè)awk命令,用于處理每一行輸入。這里,-v "reader=$reader"和-v "chapter=$chapter"是將$reader和$chapter變量的值傳遞給awk腳本的方式。在awk腳本中,printf命令用于格式化輸出字符串,$1代表當(dāng)前行的第一個(gè)字段。這個(gè)awk腳本的結(jié)果是 "lbi-第一個(gè)字段 lbi-reader字段-chapter字段" 的形式。

#<$chapter_trans: 這部分命令將$chapter_trans文件作為awk命令的輸入。

#>>$utt2spk || exit 1: >>是重定向操作符,將前面的所有輸出追加到$utt2spk指定的文件中。如果這個(gè)操作失敗,|| exit 1會使腳本立即退出,返回值為1,表示發(fā)生了錯(cuò)誤。

#簡單來說就是取chapter_trans文件的每一行的第一個(gè)字段,"lbi-%s lbi-%s-%s\n", $1, reader, chapter作為s1的內(nèi)容,然后用reader和chapter補(bǔ)充后面兩個(gè)占位符,寫入utt2spk

? ? # reader -> gender map (again using per-chapter granularity)
? ? echo "lbi-${reader}-${chapter} $reader_gender" >>$spk2gender

#創(chuàng)建spk2gender文件,該文件是一個(gè)映射,記錄每一個(gè)說話者(這里還是以章節(jié)為單位)的性別。

? done
done

然后

utils/utt2spk_to_spk2utt.pl <$utt2spk >$spk2utt || exit 1:這一行使用一個(gè)Perl腳本將utt2spk文件轉(zhuǎn)換為spk2utt文件(說話者到話語的映射)。

if $prepare_text; then ... fi:如果啟用了文本準(zhǔn)備,這一部分將檢查轉(zhuǎn)錄文本的數(shù)量是否等于utt2spk的數(shù)量。如果不等,腳本會打印錯(cuò)誤信息并退出。

utils/validate_data_dir.sh --no-feats $($prepare_text || echo "--no-text") $dst || exit 1:這一行使用一個(gè)驗(yàn)證腳本檢查目標(biāo)目錄。這個(gè)驗(yàn)證腳本會檢查數(shù)據(jù)是否符合Kaldi的要求。

該腳本結(jié)束

上面寫的有一點(diǎn)點(diǎn)亂,后面的格式規(guī)整了很多

后續(xù)讓我確定一下這個(gè)內(nèi)容是否公司保密先....

要守公司規(guī)定啊

2.1 data_prep.sh的評論 (共 條)

分享到微博請遵守國家法律
偃师市| 洞头县| 闸北区| 阳西县| 会泽县| 禄丰县| 屏南县| 和平县| 阳高县| 乌恰县| 分宜县| 白银市| 长寿区| 鄂托克前旗| 叶城县| 麟游县| 义马市| 洪雅县| 三穗县| 辛集市| 休宁县| 贡觉县| 苏尼特右旗| 涟源市| 百色市| 古田县| 郯城县| 莱西市| 高州市| 色达县| 泰和县| 太谷县| 阿合奇县| 邯郸市| 宝丰县| 泗水县| 宽城| 柏乡县| 湘乡市| 防城港市| 衡山县|