mirror of
https://github.com/k2-fsa/icefall.git
synced 2025-08-08 09:32:20 +00:00
101 lines
3.5 KiB
Bash
Executable File
101 lines
3.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -eou pipefail
|
|
|
|
# fix segmentation fault reported in https://github.com/k2-fsa/icefall/issues/674
|
|
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
|
|
|
|
stage=1
|
|
stop_stage=4
|
|
|
|
dl_dir=$PWD/download
|
|
|
|
dataset_parts="Premium" # Basic for all 10k hours data, Premium for about 10% of the data
|
|
|
|
text_extractor="pypinyin_initials_finals" # default is espeak for English
|
|
audio_extractor="Encodec" # or Fbank
|
|
audio_feats_dir=data/tokenized
|
|
|
|
. shared/parse_options.sh || exit 1
|
|
|
|
|
|
# All files generated by this script are saved in "data".
|
|
# You can safely remove "data" and rerun this script to regenerate it.
|
|
mkdir -p data
|
|
log() {
|
|
# This function is from espnet
|
|
local fname=${BASH_SOURCE[1]##*/}
|
|
echo -e "$(date '+%Y-%m-%d %H:%M:%S') (${fname}:${BASH_LINENO[0]}:${FUNCNAME[1]}) $*"
|
|
}
|
|
|
|
if [ $stage -le 0 ] && [ $stop_stage -ge 0 ]; then
|
|
log "dl_dir: $dl_dir"
|
|
log "Stage 0: Download data"
|
|
huggingface-cli login
|
|
huggingface-cli download --repo-type dataset --local-dir $dl_dir Wenetspeech4TTS/WenetSpeech4TTS
|
|
|
|
# Extract the downloaded data:
|
|
for folder in Standard Premium Basic; do
|
|
for file in "$dl_dir/$folder"/*.tar.gz; do
|
|
tar -xzvf "$file" -C "$dl_dir/$folder"
|
|
done
|
|
done
|
|
fi
|
|
|
|
if [ $stage -le 1 ] && [ $stop_stage -ge 1 ]; then
|
|
log "Stage 1: Prepare wenetspeech4tts manifest"
|
|
# We assume that you have downloaded the wenetspeech4tts corpus
|
|
# to $dl_dir/wenetspeech4tts
|
|
mkdir -p data/manifests
|
|
if [ ! -e data/manifests/.wenetspeech4tts.done ]; then
|
|
lhotse prepare wenetspeech4tts $dl_dir data/manifests --dataset-parts "${dataset_parts}"
|
|
touch data/manifests/.wenetspeech4tts.done
|
|
fi
|
|
fi
|
|
|
|
|
|
if [ $stage -le 2 ] && [ $stop_stage -ge 2 ]; then
|
|
log "Stage 2: Tokenize/Fbank wenetspeech4tts"
|
|
mkdir -p ${audio_feats_dir}
|
|
if [ ! -e ${audio_feats_dir}/.wenetspeech4tts.tokenize.done ]; then
|
|
python3 ./local/compute_neural_codec_and_prepare_text_tokens.py --dataset-parts "${dataset_parts}" \
|
|
--text-extractor ${text_extractor} \
|
|
--audio-extractor ${audio_extractor} \
|
|
--batch-duration 2500 --prefix "wenetspeech4tts" \
|
|
--src-dir "data/manifests" \
|
|
--split 100 \
|
|
--output-dir "${audio_feats_dir}/wenetspeech4tts_${dataset_parts}_split_100"
|
|
cp ${audio_feats_dir}/wenetspeech4tts_${dataset_parts}_split_100/unique_text_tokens.k2symbols ${audio_feats_dir}
|
|
fi
|
|
touch ${audio_feats_dir}/.wenetspeech4tts.tokenize.done
|
|
fi
|
|
|
|
if [ $stage -le 3 ] && [ $stop_stage -ge 3 ]; then
|
|
log "Stage 3: Combine features"
|
|
if [ ! -f ${audio_feats_dir}/wenetspeech4tts_cuts_${dataset_parts}.jsonl.gz ]; then
|
|
pieces=$(find ${audio_feats_dir}/wenetspeech4tts_${dataset_parts}_split_100 -name "*.jsonl.gz")
|
|
lhotse combine $pieces ${audio_feats_dir}/wenetspeech4tts_cuts_${dataset_parts}.jsonl.gz
|
|
fi
|
|
fi
|
|
|
|
if [ $stage -le 4 ] && [ $stop_stage -ge 4 ]; then
|
|
log "Stage 4: Prepare wenetspeech4tts train/dev/test"
|
|
if [ ! -e ${audio_feats_dir}/.wenetspeech4tts.train.done ]; then
|
|
|
|
lhotse subset --first 400 \
|
|
${audio_feats_dir}/wenetspeech4tts_cuts_${dataset_parts}.jsonl.gz \
|
|
${audio_feats_dir}/cuts_dev.jsonl.gz
|
|
|
|
lhotse subset --last 400 \
|
|
${audio_feats_dir}/wenetspeech4tts_cuts_${dataset_parts}.jsonl.gz \
|
|
${audio_feats_dir}/cuts_test.jsonl.gz
|
|
|
|
lhotse copy \
|
|
${audio_feats_dir}/wenetspeech4tts_cuts_${dataset_parts}.jsonl.gz \
|
|
${audio_feats_dir}/cuts_train.jsonl.gz
|
|
|
|
touch ${audio_feats_dir}/.wenetspeech4tts.train.done
|
|
fi
|
|
python3 ./local/display_manifest_statistics.py --manifest-dir ${audio_feats_dir}
|
|
fi
|