#!/usr/bin/env bash set -e set -o pipefail log() { local fname=${BASH_SOURCE[1]##*/} echo -e "$(date '+%Y-%m-%dT%H:%M:%S') (${fname}:${BASH_LINENO[0]}:${FUNCNAME[1]}) $*" } SECONDS=0 # general configuration stage=1 stop_stage=3 nj=10 log "$0 $*" . utils/parse_options.sh . ./path.sh || exit 1 train_cmd=utils/run.pl data_source_dir=$DATA_SOURCE audio_dir=$data_source_dir/audio_dir output_wpe_dir=$data_source_dir/wpe_audio_dir output_gss_dir=$data_source_dir/gss_audio_dir asr_data_path=./data/${DATA_NAME}_wpegss channel=$1 log "Start Speech Enhancement." if [ ! -L ./utils ]; then ln -s ./pb_chime5/pb_bss fi # WPE if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then log "stage 1: Start WPE." for ch in `seq ${channel}`; do mkdir -p ${output_wpe_dir}_${ch}/log/ # split wav.scp find $audio_dir/ -name "*.wav" > ${output_wpe_dir}_${ch}/wav.scp arr="" for i in `seq ${nj}`; do arr="$arr ${output_wpe_dir}_${ch}/log/wav.${i}.scp" done split_scp.pl ${output_wpe_dir}_${ch}/wav.scp $arr # do wpe for n in `seq ${nj}`; do cat <<-EOF >${output_wpe_dir}_${ch}/log/wpe.${n}.sh python local/run_wpe.py \ --wav-scp ${output_wpe_dir}_${ch}/log/wav.${n}.scp \ --audio-dir ${audio_dir} \ --output-dir ${output_wpe_dir}_${ch} \ --ch $ch EOF done chmod a+x ${output_wpe_dir}_${ch}/log/wpe.*.sh ${train_cmd} JOB=1:${nj} ${output_wpe_dir}_${ch}/log/wpe.JOB.log \ ${output_wpe_dir}_${ch}/log/wpe.JOB.sh done fi # GSS if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then log "stage 2: Start GSS" if [ ! -d pb_chime5/ ]; then log "Please install pb_chime5 by local/install_pb_chime5.sh" exit 1 fi mkdir -p $output_gss_dir/log # split wpe.scp for i in `seq ${channel}`; do find ${output_wpe_dir}_${i}/ -name "*.wav" > $output_gss_dir/tmp${i} done awk -F '/' '{print($NF)}' $output_gss_dir/tmp1 | cut -d "." -f1 > $output_gss_dir/tmp arr="" for i in `seq ${channel}`; do arr="$arr $output_gss_dir/tmp${i}" done paste -d " " $output_gss_dir/tmp $arr > $output_gss_dir/wpe.scp rm -f $output_gss_dir/tmp* arr="" for i in `seq ${nj}`; do arr="$arr $output_gss_dir/log/wpe.${i}.scp" done split_scp.pl $output_gss_dir/wpe.scp $arr # do gss for n in `seq ${nj}`; do cat <<-EOF >${output_gss_dir}/log/gss.${n}.sh python local/run_gss.py \ --wav-scp ${output_gss_dir}/log/wpe.${n}.scp \ --segments $asr_data_path/org/segments \ --output-dir ${output_gss_dir} EOF done chmod a+x ${output_gss_dir}/log/gss.*.sh ${train_cmd} JOB=1:${nj} ${output_gss_dir}/log/gss.JOB.log \ ${output_gss_dir}/log/gss.JOB.sh fi # Prepare data for ASR if [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ]; then log "stage 3: Preparing data for ASR" find $output_gss_dir -name "*.wav" > $asr_data_path/org/wav_list awk -F '/' '{print($NF)}' $asr_data_path/org/wav_list | sed 's/\.wav//g' > $asr_data_path/org/uttid paste -d " " $asr_data_path/org/uttid $asr_data_path/org/wav_list > $asr_data_path/org/wav.scp bash local/format_wav_scp.sh --nj "${nj}" --cmd "${train_cmd}" \ --audio-format wav --segments $asr_data_path/org/segments \ "$asr_data_path/org/wav.scp" "$asr_data_path" fi log "End speech enhancement"