diff --git a/README.md b/README.md index d99cdd75c..23f1abec6 100644 --- a/README.md +++ b/README.md @@ -15,36 +15,10 @@ | [**Model Zoo**](https://www.modelscope.cn/models/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/summary) | [**Contact**](#contact) + ## What's new: -### 2023.2.17, funasr-0.2.0, modelscope-1.3.0 -- We support a new feature, export paraformer models into [onnx and torchscripts](https://github.com/alibaba-damo-academy/FunASR/tree/main/funasr/export) from modelscope. The local finetuned models are also supported. -- We support a new feature, [onnxruntime](https://github.com/alibaba-damo-academy/FunASR/tree/main/funasr/runtime/python/onnxruntime/paraformer/rapid_paraformer), you could deploy the runtime without modelscope or funasr, for the [paraformer-large](https://www.modelscope.cn/models/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/summary) model, the rtf of onnxruntime is 3x speedup(0.110->0.038) on cpu, [details](https://github.com/alibaba-damo-academy/FunASR/tree/main/funasr/runtime/python/onnxruntime/paraformer/rapid_paraformer#speed). -- We support a new feature, [grpc](https://github.com/alibaba-damo-academy/FunASR/tree/main/funasr/runtime/python/grpc), you could build the ASR service with grpc, by deploying the modelscope pipeline or onnxruntime. -- We release a new model [paraformer-large-contextual](https://www.modelscope.cn/models/damo/speech_paraformer-large-contextual_asr_nat-zh-cn-16k-common-vocab8404/summary), which supports the hotword customization based on the incentive enhancement, and improves the recall and precision of hotwords. -- We optimize the timestamp alignment of [Paraformer-large-long](https://modelscope.cn/models/damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch/summary), the prediction accuracy of timestamp is much improved, and achieving accumulated average shift (aas) of 74.7ms, [details](https://arxiv.org/abs/2301.12343). -- We release a new model, [8k VAD model](https://modelscope.cn/models/damo/speech_fsmn_vad_zh-cn-16k-common-pytorch/summary), which could predict the duration of none-silence speech. It could be freely integrated with any ASR models in [modelscope](https://github.com/alibaba-damo-academy/FunASR/discussions/134). -- We release a new model, [MFCCA](https://www.modelscope.cn/models/NPU-ASLP/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/summary), a multi-channel multi-speaker model which is independent of the number and geometry of microphones and supports Mandarin meeting transcription. -- We release several new UniASR model: -[Southern Fujian Dialect model](https://modelscope.cn/models/damo/speech_UniASR_asr_2pass-minnan-16k-common-vocab3825/summary), -[French model](https://modelscope.cn/models/damo/speech_UniASR_asr_2pass-fr-16k-common-vocab3472-tensorflow1-online/summary), -[German model](https://modelscope.cn/models/damo/speech_UniASR_asr_2pass-de-16k-common-vocab3690-tensorflow1-online/summary), -[Vietnamese model](https://modelscope.cn/models/damo/speech_UniASR_asr_2pass-vi-16k-common-vocab1001-pytorch-online/summary), -[Persian model](https://modelscope.cn/models/damo/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-online/summary). -- We release a new model, [paraformer-data2vec model](https://www.modelscope.cn/models/damo/speech_data2vec_pretrain-paraformer-zh-cn-aishell2-16k/summary), an unsupervised pretraining model on AISHELL-2, which is inited for paraformer model and then finetune on AISHEL-1. -- We release a new feature, the `VAD`, `ASR` and `PUNC` models could be integrated freely, which could be models from [modelscope](https://www.modelscope.cn/models/damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch/summary), or the local finetine models. The [demo](https://github.com/alibaba-damo-academy/FunASR/discussions/134). -- We optimized the [punctuation common model](https://www.modelscope.cn/models/damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch/summary), enhance the recall and precision, fix the badcases of missing punctuation marks. -- Various new types of audio input types are now supported by modelscope inference pipeline, including: mp3、flac、ogg、opus... -### 2023.1.16, funasr-0.1.6, modelscope-1.2.0 -- We release a new version model [Paraformer-large-long](https://modelscope.cn/models/damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch/summary), which integrate the [VAD](https://modelscope.cn/models/damo/speech_fsmn_vad_zh-cn-16k-common-pytorch/summary) model, [ASR](https://www.modelscope.cn/models/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/summary), - [Punctuation](https://www.modelscope.cn/models/damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch/summary) model and timestamp together. The model could take in several hours long inputs. -- We release a new model, [16k VAD model](https://modelscope.cn/models/damo/speech_fsmn_vad_zh-cn-16k-common-pytorch/summary), which could predict the duration of none-silence speech. It could be freely integrated with any ASR models in [modelscope](https://www.modelscope.cn/models/damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch/summary). -- We release a new model, [Punctuation](https://www.modelscope.cn/models/damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch/summary), which could predict the punctuation of ASR models's results. It could be freely integrated with any ASR models in [Model Zoo](docs/modelscope_models.md). -- We release a new model, [Data2vec](https://www.modelscope.cn/models/damo/speech_data2vec_pretrain-zh-cn-aishell2-16k-pytorch/summary), an unsupervised pretraining model which could be finetuned on ASR and other downstream tasks. -- We release a new model, [Paraformer-Tiny](https://www.modelscope.cn/models/damo/speech_paraformer-tiny-commandword_asr_nat-zh-cn-16k-vocab544-pytorch/summary), a lightweight Paraformer model which supports Mandarin command words recognition. -- We release a new model, [SV](https://www.modelscope.cn/models/damo/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch/summary), which could extract speaker embeddings and further perform speaker verification on paired utterances. It will be supported for speaker diarization in the future version. -- We improve the pipeline of modelscope to speedup the inference, by integrating the process of build model into build pipeline. -- Various new types of audio input types are now supported by modelscope inference pipeline, including wav.scp, wav format, audio bytes, wave samples... +For the release notes, please ref to [news](https://github.com/alibaba-damo-academy/FunASR/releases) ## Highlights - Many types of typical models are supported, e.g., [Tranformer](https://arxiv.org/abs/1706.03762), [Conformer](https://arxiv.org/abs/2005.08100), [Paraformer](https://arxiv.org/abs/2206.08317). @@ -56,6 +30,7 @@ ## Installation ``` sh +pip install "modelscope[audio_asr]" --upgrade -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html git clone https://github.com/alibaba/FunASR.git && cd FunASR pip install --editable ./ ``` @@ -76,8 +51,8 @@ If you have any questions about FunASR, please contact us by ## Contributors -|
| -|:---:| +|
|
|
| +|:---------------------------------------------------------------:|:---------------------------------------------------------------:|:-----------------------------------------------------------:| ## Acknowledge @@ -111,4 +86,4 @@ This project is licensed under the [The MIT License](https://opensource.org/lice booktitle={arXiv preprint arXiv:2301.12343} year={2023} } -``` \ No newline at end of file +``` diff --git a/docs/images/damo.png b/docs/images/damo.png new file mode 100644 index 000000000..4e692ed0e Binary files /dev/null and b/docs/images/damo.png differ diff --git a/docs/images/nwpu.png b/docs/images/nwpu.png new file mode 100644 index 000000000..6b4713c98 Binary files /dev/null and b/docs/images/nwpu.png differ diff --git a/egs/aishell/conformer/run.sh b/egs/aishell/conformer/run.sh index 41db45dfd..09ddab8a5 100755 --- a/egs/aishell/conformer/run.sh +++ b/egs/aishell/conformer/run.sh @@ -52,7 +52,7 @@ asr_config=conf/train_asr_conformer.yaml model_dir="baseline_$(basename "${asr_config}" .yaml)_${feats_type}_${lang}_${token_type}_${tag}" inference_config=conf/decode_asr_transformer.yaml -inference_asr_model=valid.acc.ave_10best.pth +inference_asr_model=valid.acc.ave_10best.pb # you can set gpu num for decoding here gpuid_list=$CUDA_VISIBLE_DEVICES # set gpus for decoding, the same as training stage by default diff --git a/egs/aishell/data2vec_paraformer_finetune/run.sh b/egs/aishell/data2vec_paraformer_finetune/run.sh index cada164dc..d033ce26a 100755 --- a/egs/aishell/data2vec_paraformer_finetune/run.sh +++ b/egs/aishell/data2vec_paraformer_finetune/run.sh @@ -55,7 +55,7 @@ asr_config=conf/train_asr_paraformer_transformer_12e_6d_3072_768.yaml model_dir="baseline_$(basename "${asr_config}" .yaml)_${feats_type}_${lang}_${token_type}_${tag}" inference_config=conf/decode_asr_transformer_noctc_1best.yaml -inference_asr_model=valid.acc.ave_10best.pth +inference_asr_model=valid.acc.ave_10best.pb # you can set gpu num for decoding here gpuid_list=$CUDA_VISIBLE_DEVICES # set gpus for decoding, the same as training stage by default diff --git a/egs/aishell/data2vec_transformer_finetune/run.sh b/egs/aishell/data2vec_transformer_finetune/run.sh index 7ab8626bb..26222e666 100755 --- a/egs/aishell/data2vec_transformer_finetune/run.sh +++ b/egs/aishell/data2vec_transformer_finetune/run.sh @@ -55,7 +55,7 @@ asr_config=conf/train_asr_transformer_12e_6d_3072_768.yaml model_dir="baseline_$(basename "${asr_config}" .yaml)_${feats_type}_${lang}_${token_type}_${tag}" inference_config=conf/decode_asr_transformer.yaml -inference_asr_model=valid.cer_ctc.ave_10best.pth +inference_asr_model=valid.cer_ctc.ave_10best.pb # you can set gpu num for decoding here gpuid_list=$CUDA_VISIBLE_DEVICES # set gpus for decoding, the same as training stage by default diff --git a/egs/aishell/paraformer/run.sh b/egs/aishell/paraformer/run.sh index 2b0f1449b..53b5f906d 100755 --- a/egs/aishell/paraformer/run.sh +++ b/egs/aishell/paraformer/run.sh @@ -52,7 +52,7 @@ asr_config=conf/train_asr_paraformer_conformer_12e_6d_2048_256.yaml model_dir="baseline_$(basename "${asr_config}" .yaml)_${feats_type}_${lang}_${token_type}_${tag}" inference_config=conf/decode_asr_transformer_noctc_1best.yaml -inference_asr_model=valid.acc.ave_10best.pth +inference_asr_model=valid.acc.ave_10best.pb # you can set gpu num for decoding here gpuid_list=$CUDA_VISIBLE_DEVICES # set gpus for decoding, the same as training stage by default diff --git a/egs/aishell/paraformerbert/run.sh b/egs/aishell/paraformerbert/run.sh index 96310ab84..2487eacd8 100755 --- a/egs/aishell/paraformerbert/run.sh +++ b/egs/aishell/paraformerbert/run.sh @@ -56,7 +56,7 @@ asr_config=conf/train_asr_paraformerbert_conformer_12e_6d_2048_256.yaml model_dir="baseline_$(basename "${asr_config}" .yaml)_${feats_type}_${lang}_${token_type}_${tag}" inference_config=conf/decode_asr_transformer_noctc_1best.yaml -inference_asr_model=valid.acc.ave_10best.pth +inference_asr_model=valid.acc.ave_10best.pb # you can set gpu num for decoding here gpuid_list=$CUDA_VISIBLE_DEVICES # set gpus for decoding, the same as training stage by default diff --git a/egs/aishell/transformer/run.sh b/egs/aishell/transformer/run.sh index 4c307b07c..f66a338ba 100755 --- a/egs/aishell/transformer/run.sh +++ b/egs/aishell/transformer/run.sh @@ -52,7 +52,7 @@ asr_config=conf/train_asr_conformer.yaml model_dir="baseline_$(basename "${asr_config}" .yaml)_${feats_type}_${lang}_${token_type}_${tag}" inference_config=conf/decode_asr_transformer.yaml -inference_asr_model=valid.acc.ave_10best.pth +inference_asr_model=valid.acc.ave_10best.pb # you can set gpu num for decoding here gpuid_list=$CUDA_VISIBLE_DEVICES # set gpus for decoding, the same as training stage by default diff --git a/egs/aishell2/conformer/run.sh b/egs/aishell2/conformer/run.sh index bd6d81ea9..f9ea69ada 100755 --- a/egs/aishell2/conformer/run.sh +++ b/egs/aishell2/conformer/run.sh @@ -54,7 +54,7 @@ asr_config=conf/train_asr_conformer.yaml model_dir="baseline_$(basename "${asr_config}" .yaml)_${feats_type}_${lang}_${token_type}_${tag}" inference_config=conf/decode_asr_transformer.yaml -inference_asr_model=valid.acc.ave_10best.pth +inference_asr_model=valid.acc.ave_10best.pb # you can set gpu num for decoding here gpuid_list=$CUDA_VISIBLE_DEVICES # set gpus for decoding, e.g., gpuid_list=2,3, the same as training stage by default diff --git a/egs/aishell2/paraformer/run.sh b/egs/aishell2/paraformer/run.sh index 2b7d84131..e1ea4fe73 100755 --- a/egs/aishell2/paraformer/run.sh +++ b/egs/aishell2/paraformer/run.sh @@ -54,7 +54,7 @@ asr_config=conf/train_asr_paraformer_conformer_20e_1280_320_6d_1280_320.yaml model_dir="baseline_$(basename "${asr_config}" .yaml)_${feats_type}_${lang}_${token_type}_${tag}" inference_config=conf/decode_asr_transformer_noctc_1best.yaml -inference_asr_model=valid.acc.ave_10best.pth +inference_asr_model=valid.acc.ave_10best.pb # you can set gpu num for decoding here gpuid_list=$CUDA_VISIBLE_DEVICES # set gpus for decoding, e.g., gpuid_list=2,3, the same as training stage by default diff --git a/egs/aishell2/paraformerbert/run.sh b/egs/aishell2/paraformerbert/run.sh index d0407d480..239a7e339 100755 --- a/egs/aishell2/paraformerbert/run.sh +++ b/egs/aishell2/paraformerbert/run.sh @@ -58,7 +58,7 @@ asr_config=conf/train_asr_paraformerbert_conformer_20e_6d_1280_320.yaml model_dir="baseline_$(basename "${asr_config}" .yaml)_${feats_type}_${lang}_${token_type}_${tag}" inference_config=conf/decode_asr_transformer_noctc_1best.yaml -inference_asr_model=valid.acc.ave_10best.pth +inference_asr_model=valid.acc.ave_10best.pb # you can set gpu num for decoding here gpuid_list=$CUDA_VISIBLE_DEVICES # set gpus for decoding, e.g., gpuid_list=2,3, the same as training stage by default diff --git a/egs/aishell2/transformer/run.sh b/egs/aishell2/transformer/run.sh index a5a14ec09..6f2dd4d8d 100755 --- a/egs/aishell2/transformer/run.sh +++ b/egs/aishell2/transformer/run.sh @@ -54,7 +54,7 @@ asr_config=conf/train_asr_transformer.yaml model_dir="baseline_$(basename "${asr_config}" .yaml)_${feats_type}_${lang}_${token_type}_${tag}" inference_config=conf/decode_asr_transformer.yaml -inference_asr_model=valid.acc.ave_10best.pth +inference_asr_model=valid.acc.ave_10best.pb # you can set gpu num for decoding here gpuid_list=$CUDA_VISIBLE_DEVICES # set gpus for decoding, e.g., gpuid_list=2,3, the same as training stage by default diff --git a/egs/aishell2/transformerLM/run.sh b/egs/aishell2/transformerLM/run.sh index 28e376287..9e7a7135b 100755 --- a/egs/aishell2/transformerLM/run.sh +++ b/egs/aishell2/transformerLM/run.sh @@ -34,7 +34,7 @@ exp_dir=./data tag=exp1 model_dir="baseline_$(basename "${lm_config}" .yaml)_${lang}_${token_type}_${tag}" lm_exp=${exp_dir}/exp/${model_dir} -inference_lm=valid.loss.ave.pth # Language model path for decoding. +inference_lm=valid.loss.ave.pb # Language model path for decoding. stage=0 stop_stage=3 diff --git a/egs/alimeeting/diarization/sond/infer_alimeeting_test.py b/egs/alimeeting/diarization/sond/infer_alimeeting_test.py index 0988f5d03..b4d534bee 100644 --- a/egs/alimeeting/diarization/sond/infer_alimeeting_test.py +++ b/egs/alimeeting/diarization/sond/infer_alimeeting_test.py @@ -4,7 +4,7 @@ import sys def main(): diar_config_path = sys.argv[1] if len(sys.argv) > 1 else "sond_fbank.yaml" - diar_model_path = sys.argv[2] if len(sys.argv) > 2 else "sond.pth" + diar_model_path = sys.argv[2] if len(sys.argv) > 2 else "sond.pb" output_dir = sys.argv[3] if len(sys.argv) > 3 else "./outputs" data_path_and_name_and_type = [ ("data/test_rmsil/feats.scp", "speech", "kaldi_ark"), diff --git a/egs/alimeeting/diarization/sond/run.sh b/egs/alimeeting/diarization/sond/run.sh index 7e9a7f7ba..19ae40cdd 100644 --- a/egs/alimeeting/diarization/sond/run.sh +++ b/egs/alimeeting/diarization/sond/run.sh @@ -17,9 +17,9 @@ if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then echo "Downloading Pre-trained model..." git clone https://www.modelscope.cn/damo/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch.git git clone https://www.modelscope.cn/damo/speech_diarization_sond-zh-cn-alimeeting-16k-n16k4-pytorch.git - ln -s speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch/sv.pth ./sv.pth + ln -s speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch/sv.pb ./sv.pb cp speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch/sv.yaml ./sv.yaml - ln -s speech_diarization_sond-zh-cn-alimeeting-16k-n16k4-pytorch/sond.pth ./sond.pth + ln -s speech_diarization_sond-zh-cn-alimeeting-16k-n16k4-pytorch/sond.pb ./sond.pb cp speech_diarization_sond-zh-cn-alimeeting-16k-n16k4-pytorch/sond_fbank.yaml ./sond_fbank.yaml cp speech_diarization_sond-zh-cn-alimeeting-16k-n16k4-pytorch/sond.yaml ./sond.yaml echo "Done." @@ -30,7 +30,7 @@ fi if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then echo "Calculating diarization results..." - python infer_alimeeting_test.py sond_fbank.yaml sond.pth outputs + python infer_alimeeting_test.py sond_fbank.yaml sond.pb outputs python local/convert_label_to_rttm.py \ outputs/labels.txt \ data/test_rmsil/raw_rmsil_map.scp \ diff --git a/egs/alimeeting/diarization/sond/unit_test.py b/egs/alimeeting/diarization/sond/unit_test.py index 84a424762..0f40ab29e 100644 --- a/egs/alimeeting/diarization/sond/unit_test.py +++ b/egs/alimeeting/diarization/sond/unit_test.py @@ -4,7 +4,7 @@ import os def test_fbank_cpu_infer(): diar_config_path = "config_fbank.yaml" - diar_model_path = "sond.pth" + diar_model_path = "sond.pb" output_dir = "./outputs" data_path_and_name_and_type = [ ("data/unit_test/test_feats.scp", "speech", "kaldi_ark"), @@ -24,7 +24,7 @@ def test_fbank_cpu_infer(): def test_fbank_gpu_infer(): diar_config_path = "config_fbank.yaml" - diar_model_path = "sond.pth" + diar_model_path = "sond.pb" output_dir = "./outputs" data_path_and_name_and_type = [ ("data/unit_test/test_feats.scp", "speech", "kaldi_ark"), @@ -45,7 +45,7 @@ def test_fbank_gpu_infer(): def test_wav_gpu_infer(): diar_config_path = "config.yaml" - diar_model_path = "sond.pth" + diar_model_path = "sond.pb" output_dir = "./outputs" data_path_and_name_and_type = [ ("data/unit_test/test_wav.scp", "speech", "sound"), @@ -66,7 +66,7 @@ def test_wav_gpu_infer(): def test_without_profile_gpu_infer(): diar_config_path = "config.yaml" - diar_model_path = "sond.pth" + diar_model_path = "sond.pb" output_dir = "./outputs" raw_inputs = [[ "data/unit_test/raw_inputs/record.wav", diff --git a/egs/callhome/diarization/sond/sond.yaml b/egs/callhome/diarization/sond/sond.yaml new file mode 100644 index 000000000..868163f0a --- /dev/null +++ b/egs/callhome/diarization/sond/sond.yaml @@ -0,0 +1,2739 @@ +config: finetune.yaml +print_config: false +log_level: INFO +dry_run: false +iterator_type: sequence +output_dir: exp/sond +ngpu: 1 +seed: 0 +num_workers: 16 +num_att_plot: 0 +dist_backend: nccl +dist_init_method: env:// +dist_world_size: null +dist_rank: null +local_rank: 0 +dist_master_addr: null +dist_master_port: null +dist_launcher: null +multiprocessing_distributed: true +distributed: false +unused_parameters: true +sharded_ddp: false +ddp_backend: pytorch_ddp +cudnn_enabled: true +cudnn_benchmark: false +cudnn_deterministic: true +collect_stats: false +write_collected_feats: false +max_epoch: 50 +patience: null +val_scheduler_criterion: +- valid +- acc +early_stopping_criterion: +- valid +- loss +- min +best_model_criterion: +- - valid + - acc + - max +keep_nbest_models: 10 +nbest_averaging_interval: 0 +grad_clip: 5 +grad_clip_type: 2.0 +grad_noise: false +accum_grad: 1 +no_forward_run: false +resume: true +train_dtype: float32 +use_amp: false +log_interval: 50 +use_matplotlib: false +use_tensorboard: true +use_wandb: false +wandb_project: null +wandb_id: null +wandb_entity: null +wandb_name: null +wandb_model_log_interval: -1 +use_pai: true +detect_anomaly: false +pretrain_path: null +init_param: [] +ignore_init_mismatch: false +freeze_param: [] +num_iters_per_epoch: null +batch_size: 20 +valid_batch_size: null +batch_bins: 10000 +valid_batch_bins: null +train_shape_file: +- /data/volume1/youyan/aishell/ark/train/speech_shape.1 +- /data/volume1/youyan/aishell/ark/train/text_shape.1 +valid_shape_file: +- /data/volume1/youyan/aishell/ark/dev/speech_shape.1 +- /data/volume1/youyan/aishell/ark/dev/text_shape.1 +batch_type: length +valid_batch_type: null +fold_length: +- 512 +- 150 +sort_in_batch: descending +sort_batch: descending +multiple_iterator: false +chunk_length: 500 +chunk_shift_ratio: 0.5 +num_cache_chunks: 1024 +train_data_path_and_name_and_type: +- - /data/volume1/youyan/aishell/ark/train/data.scp + - speech + - kaldi_ark +- - /data/volume1/youyan/aishell/ark/train/data.text.1 + - text + - text +valid_data_path_and_name_and_type: +- - /data/volume1/youyan/aishell/ark/dev/data.scp + - speech + - kaldi_ark +- - /data/volume1/youyan/aishell/ark/dev/data.text.1 + - text + - text +allow_variable_data_keys: false +max_cache_size: 0.0 +max_cache_fd: 32 +valid_max_cache_size: null +optim: adam +optim_conf: + lr: 0.0005 +scheduler: warmuplr +scheduler_conf: + warmup_steps: 30000 +token_list: +- '0' +- '1' +- '2' +- '3' +- '4' +- '5' +- '6' +- '7' +- '8' +- '9' +- '10' +- '11' +- '12' +- '13' +- '14' +- '15' +- '16' +- '17' +- '18' +- '19' +- '20' +- '21' +- '22' +- '23' +- '24' +- '25' +- '26' +- '27' +- '28' +- '29' +- '30' +- '32' +- '33' +- '34' +- '35' +- '36' +- '37' +- '38' +- '39' +- '40' +- '41' +- '42' +- '43' +- '44' +- '45' +- '46' +- '48' +- '49' +- '50' +- '51' +- '52' +- '53' +- '54' +- '56' +- '57' +- '58' +- '60' +- '64' +- '65' +- '66' +- '67' +- '68' +- '69' +- '70' +- '71' +- '72' +- '73' +- '74' +- '75' +- '76' +- '77' +- '78' +- '80' +- '81' +- '82' +- '83' +- '84' +- '85' +- '86' +- '88' +- '89' +- '90' +- '92' +- '96' +- '97' +- '98' +- '99' +- '100' +- '101' +- '102' +- '104' +- '105' +- '106' +- '108' +- '112' +- '113' +- '114' +- '116' +- '120' +- '128' +- '129' +- '130' +- '131' +- '132' +- '133' +- '134' +- '135' +- '136' +- '137' +- '138' +- '139' +- '140' +- '141' +- '142' +- '144' +- '145' +- '146' +- '147' +- '148' +- '149' +- '150' +- '152' +- '153' +- '154' +- '156' +- '160' +- '161' +- '162' +- '163' +- '164' +- '165' +- '166' +- '168' +- '169' +- '170' +- '172' +- '176' +- '177' +- '178' +- '180' +- '184' +- '192' +- '193' +- '194' +- '195' +- '196' +- '197' +- '198' +- '200' +- '201' +- '202' +- '204' +- '208' +- '209' +- '210' +- '212' +- '216' +- '224' +- '225' +- '226' +- '228' +- '232' +- '240' +- '256' +- '257' +- '258' +- '259' +- '260' +- '261' +- '262' +- '263' +- '264' +- '265' +- '266' +- '267' +- '268' +- '269' +- '270' +- '272' +- '273' +- '274' +- '275' +- '276' +- '277' +- '278' +- '280' +- '281' +- '282' +- '284' +- '288' +- '289' +- '290' +- '291' +- '292' +- '293' +- '294' +- '296' +- '297' +- '298' +- '300' +- '304' +- '305' +- '306' +- '308' +- '312' +- '320' +- '321' +- '322' +- '323' +- '324' +- '325' +- '326' +- '328' +- '329' +- '330' +- '332' +- '336' +- '337' +- '338' +- '340' +- '344' +- '352' +- '353' +- '354' +- '356' +- '360' +- '368' +- '384' +- '385' +- '386' +- '387' +- '388' +- '389' +- '390' +- '392' +- '393' +- '394' +- '396' +- '400' +- '401' +- '402' +- '404' +- '408' +- '416' +- '417' +- '418' +- '420' +- '424' +- '432' +- '448' +- '449' +- '450' +- '452' +- '456' +- '464' +- '480' +- '512' +- '513' +- '514' +- '515' +- '516' +- '517' +- '518' +- '519' +- '520' +- '521' +- '522' +- '523' +- '524' +- '525' +- '526' +- '528' +- '529' +- '530' +- '531' +- '532' +- '533' +- '534' +- '536' +- '537' +- '538' +- '540' +- '544' +- '545' +- '546' +- '547' +- '548' +- '549' +- '550' +- '552' +- '553' +- '554' +- '556' +- '560' +- '561' +- '562' +- '564' +- '568' +- '576' +- '577' +- '578' +- '579' +- '580' +- '581' +- '582' +- '584' +- '585' +- '586' +- '588' +- '592' +- '593' +- '594' +- '596' +- '600' +- '608' +- '609' +- '610' +- '612' +- '616' +- '624' +- '640' +- '641' +- '642' +- '643' +- '644' +- '645' +- '646' +- '648' +- '649' +- '650' +- '652' +- '656' +- '657' +- '658' +- '660' +- '664' +- '672' +- '673' +- '674' +- '676' +- '680' +- '688' +- '704' +- '705' +- '706' +- '708' +- '712' +- '720' +- '736' +- '768' +- '769' +- '770' +- '771' +- '772' +- '773' +- '774' +- '776' +- '777' +- '778' +- '780' +- '784' +- '785' +- '786' +- '788' +- '792' +- '800' +- '801' +- '802' +- '804' +- '808' +- '816' +- '832' +- '833' +- '834' +- '836' +- '840' +- '848' +- '864' +- '896' +- '897' +- '898' +- '900' +- '904' +- '912' +- '928' +- '960' +- '1024' +- '1025' +- '1026' +- '1027' +- '1028' +- '1029' +- '1030' +- '1031' +- '1032' +- '1033' +- '1034' +- '1035' +- '1036' +- '1037' +- '1038' +- '1040' +- '1041' +- '1042' +- '1043' +- '1044' +- '1045' +- '1046' +- '1048' +- '1049' +- '1050' +- '1052' +- '1056' +- '1057' +- '1058' +- '1059' +- '1060' +- '1061' +- '1062' +- '1064' +- '1065' +- '1066' +- '1068' +- '1072' +- '1073' +- '1074' +- '1076' +- '1080' +- '1088' +- '1089' +- '1090' +- '1091' +- '1092' +- '1093' +- '1094' +- '1096' +- '1097' +- '1098' +- '1100' +- '1104' +- '1105' +- '1106' +- '1108' +- '1112' +- '1120' +- '1121' +- '1122' +- '1124' +- '1128' +- '1136' +- '1152' +- '1153' +- '1154' +- '1155' +- '1156' +- '1157' +- '1158' +- '1160' +- '1161' +- '1162' +- '1164' +- '1168' +- '1169' +- '1170' +- '1172' +- '1176' +- '1184' +- '1185' +- '1186' +- '1188' +- '1192' +- '1200' +- '1216' +- '1217' +- '1218' +- '1220' +- '1224' +- '1232' +- '1248' +- '1280' +- '1281' +- '1282' +- '1283' +- '1284' +- '1285' +- '1286' +- '1288' +- '1289' +- '1290' +- '1292' +- '1296' +- '1297' +- '1298' +- '1300' +- '1304' +- '1312' +- '1313' +- '1314' +- '1316' +- '1320' +- '1328' +- '1344' +- '1345' +- '1346' +- '1348' +- '1352' +- '1360' +- '1376' +- '1408' +- '1409' +- '1410' +- '1412' +- '1416' +- '1424' +- '1440' +- '1472' +- '1536' +- '1537' +- '1538' +- '1539' +- '1540' +- '1541' +- '1542' +- '1544' +- '1545' +- '1546' +- '1548' +- '1552' +- '1553' +- '1554' +- '1556' +- '1560' +- '1568' +- '1569' +- '1570' +- '1572' +- '1576' +- '1584' +- '1600' +- '1601' +- '1602' +- '1604' +- '1608' +- '1616' +- '1632' +- '1664' +- '1665' +- '1666' +- '1668' +- '1672' +- '1680' +- '1696' +- '1728' +- '1792' +- '1793' +- '1794' +- '1796' +- '1800' +- '1808' +- '1824' +- '1856' +- '1920' +- '2048' +- '2049' +- '2050' +- '2051' +- '2052' +- '2053' +- '2054' +- '2055' +- '2056' +- '2057' +- '2058' +- '2059' +- '2060' +- '2061' +- '2062' +- '2064' +- '2065' +- '2066' +- '2067' +- '2068' +- '2069' +- '2070' +- '2072' +- '2073' +- '2074' +- '2076' +- '2080' +- '2081' +- '2082' +- '2083' +- '2084' +- '2085' +- '2086' +- '2088' +- '2089' +- '2090' +- '2092' +- '2096' +- '2097' +- '2098' +- '2100' +- '2104' +- '2112' +- '2113' +- '2114' +- '2115' +- '2116' +- '2117' +- '2118' +- '2120' +- '2121' +- '2122' +- '2124' +- '2128' +- '2129' +- '2130' +- '2132' +- '2136' +- '2144' +- '2145' +- '2146' +- '2148' +- '2152' +- '2160' +- '2176' +- '2177' +- '2178' +- '2179' +- '2180' +- '2181' +- '2182' +- '2184' +- '2185' +- '2186' +- '2188' +- '2192' +- '2193' +- '2194' +- '2196' +- '2200' +- '2208' +- '2209' +- '2210' +- '2212' +- '2216' +- '2224' +- '2240' +- '2241' +- '2242' +- '2244' +- '2248' +- '2256' +- '2272' +- '2304' +- '2305' +- '2306' +- '2307' +- '2308' +- '2309' +- '2310' +- '2312' +- '2313' +- '2314' +- '2316' +- '2320' +- '2321' +- '2322' +- '2324' +- '2328' +- '2336' +- '2337' +- '2338' +- '2340' +- '2344' +- '2352' +- '2368' +- '2369' +- '2370' +- '2372' +- '2376' +- '2384' +- '2400' +- '2432' +- '2433' +- '2434' +- '2436' +- '2440' +- '2448' +- '2464' +- '2496' +- '2560' +- '2561' +- '2562' +- '2563' +- '2564' +- '2565' +- '2566' +- '2568' +- '2569' +- '2570' +- '2572' +- '2576' +- '2577' +- '2578' +- '2580' +- '2584' +- '2592' +- '2593' +- '2594' +- '2596' +- '2600' +- '2608' +- '2624' +- '2625' +- '2626' +- '2628' +- '2632' +- '2640' +- '2656' +- '2688' +- '2689' +- '2690' +- '2692' +- '2696' +- '2704' +- '2720' +- '2752' +- '2816' +- '2817' +- '2818' +- '2820' +- '2824' +- '2832' +- '2848' +- '2880' +- '2944' +- '3072' +- '3073' +- '3074' +- '3075' +- '3076' +- '3077' +- '3078' +- '3080' +- '3081' +- '3082' +- '3084' +- '3088' +- '3089' +- '3090' +- '3092' +- '3096' +- '3104' +- '3105' +- '3106' +- '3108' +- '3112' +- '3120' +- '3136' +- '3137' +- '3138' +- '3140' +- '3144' +- '3152' +- '3168' +- '3200' +- '3201' +- '3202' +- '3204' +- '3208' +- '3216' +- '3232' +- '3264' +- '3328' +- '3329' +- '3330' +- '3332' +- '3336' +- '3344' +- '3360' +- '3392' +- '3456' +- '3584' +- '3585' +- '3586' +- '3588' +- '3592' +- '3600' +- '3616' +- '3648' +- '3712' +- '3840' +- '4096' +- '4097' +- '4098' +- '4099' +- '4100' +- '4101' +- '4102' +- '4103' +- '4104' +- '4105' +- '4106' +- '4107' +- '4108' +- '4109' +- '4110' +- '4112' +- '4113' +- '4114' +- '4115' +- '4116' +- '4117' +- '4118' +- '4120' +- '4121' +- '4122' +- '4124' +- '4128' +- '4129' +- '4130' +- '4131' +- '4132' +- '4133' +- '4134' +- '4136' +- '4137' +- '4138' +- '4140' +- '4144' +- '4145' +- '4146' +- '4148' +- '4152' +- '4160' +- '4161' +- '4162' +- '4163' +- '4164' +- '4165' +- '4166' +- '4168' +- '4169' +- '4170' +- '4172' +- '4176' +- '4177' +- '4178' +- '4180' +- '4184' +- '4192' +- '4193' +- '4194' +- '4196' +- '4200' +- '4208' +- '4224' +- '4225' +- '4226' +- '4227' +- '4228' +- '4229' +- '4230' +- '4232' +- '4233' +- '4234' +- '4236' +- '4240' +- '4241' +- '4242' +- '4244' +- '4248' +- '4256' +- '4257' +- '4258' +- '4260' +- '4264' +- '4272' +- '4288' +- '4289' +- '4290' +- '4292' +- '4296' +- '4304' +- '4320' +- '4352' +- '4353' +- '4354' +- '4355' +- '4356' +- '4357' +- '4358' +- '4360' +- '4361' +- '4362' +- '4364' +- '4368' +- '4369' +- '4370' +- '4372' +- '4376' +- '4384' +- '4385' +- '4386' +- '4388' +- '4392' +- '4400' +- '4416' +- '4417' +- '4418' +- '4420' +- '4424' +- '4432' +- '4448' +- '4480' +- '4481' +- '4482' +- '4484' +- '4488' +- '4496' +- '4512' +- '4544' +- '4608' +- '4609' +- '4610' +- '4611' +- '4612' +- '4613' +- '4614' +- '4616' +- '4617' +- '4618' +- '4620' +- '4624' +- '4625' +- '4626' +- '4628' +- '4632' +- '4640' +- '4641' +- '4642' +- '4644' +- '4648' +- '4656' +- '4672' +- '4673' +- '4674' +- '4676' +- '4680' +- '4688' +- '4704' +- '4736' +- '4737' +- '4738' +- '4740' +- '4744' +- '4752' +- '4768' +- '4800' +- '4864' +- '4865' +- '4866' +- '4868' +- '4872' +- '4880' +- '4896' +- '4928' +- '4992' +- '5120' +- '5121' +- '5122' +- '5123' +- '5124' +- '5125' +- '5126' +- '5128' +- '5129' +- '5130' +- '5132' +- '5136' +- '5137' +- '5138' +- '5140' +- '5144' +- '5152' +- '5153' +- '5154' +- '5156' +- '5160' +- '5168' +- '5184' +- '5185' +- '5186' +- '5188' +- '5192' +- '5200' +- '5216' +- '5248' +- '5249' +- '5250' +- '5252' +- '5256' +- '5264' +- '5280' +- '5312' +- '5376' +- '5377' +- '5378' +- '5380' +- '5384' +- '5392' +- '5408' +- '5440' +- '5504' +- '5632' +- '5633' +- '5634' +- '5636' +- '5640' +- '5648' +- '5664' +- '5696' +- '5760' +- '5888' +- '6144' +- '6145' +- '6146' +- '6147' +- '6148' +- '6149' +- '6150' +- '6152' +- '6153' +- '6154' +- '6156' +- '6160' +- '6161' +- '6162' +- '6164' +- '6168' +- '6176' +- '6177' +- '6178' +- '6180' +- '6184' +- '6192' +- '6208' +- '6209' +- '6210' +- '6212' +- '6216' +- '6224' +- '6240' +- '6272' +- '6273' +- '6274' +- '6276' +- '6280' +- '6288' +- '6304' +- '6336' +- '6400' +- '6401' +- '6402' +- '6404' +- '6408' +- '6416' +- '6432' +- '6464' +- '6528' +- '6656' +- '6657' +- '6658' +- '6660' +- '6664' +- '6672' +- '6688' +- '6720' +- '6784' +- '6912' +- '7168' +- '7169' +- '7170' +- '7172' +- '7176' +- '7184' +- '7200' +- '7232' +- '7296' +- '7424' +- '7680' +- '8192' +- '8193' +- '8194' +- '8195' +- '8196' +- '8197' +- '8198' +- '8199' +- '8200' +- '8201' +- '8202' +- '8203' +- '8204' +- '8205' +- '8206' +- '8208' +- '8209' +- '8210' +- '8211' +- '8212' +- '8213' +- '8214' +- '8216' +- '8217' +- '8218' +- '8220' +- '8224' +- '8225' +- '8226' +- '8227' +- '8228' +- '8229' +- '8230' +- '8232' +- '8233' +- '8234' +- '8236' +- '8240' +- '8241' +- '8242' +- '8244' +- '8248' +- '8256' +- '8257' +- '8258' +- '8259' +- '8260' +- '8261' +- '8262' +- '8264' +- '8265' +- '8266' +- '8268' +- '8272' +- '8273' +- '8274' +- '8276' +- '8280' +- '8288' +- '8289' +- '8290' +- '8292' +- '8296' +- '8304' +- '8320' +- '8321' +- '8322' +- '8323' +- '8324' +- '8325' +- '8326' +- '8328' +- '8329' +- '8330' +- '8332' +- '8336' +- '8337' +- '8338' +- '8340' +- '8344' +- '8352' +- '8353' +- '8354' +- '8356' +- '8360' +- '8368' +- '8384' +- '8385' +- '8386' +- '8388' +- '8392' +- '8400' +- '8416' +- '8448' +- '8449' +- '8450' +- '8451' +- '8452' +- '8453' +- '8454' +- '8456' +- '8457' +- '8458' +- '8460' +- '8464' +- '8465' +- '8466' +- '8468' +- '8472' +- '8480' +- '8481' +- '8482' +- '8484' +- '8488' +- '8496' +- '8512' +- '8513' +- '8514' +- '8516' +- '8520' +- '8528' +- '8544' +- '8576' +- '8577' +- '8578' +- '8580' +- '8584' +- '8592' +- '8608' +- '8640' +- '8704' +- '8705' +- '8706' +- '8707' +- '8708' +- '8709' +- '8710' +- '8712' +- '8713' +- '8714' +- '8716' +- '8720' +- '8721' +- '8722' +- '8724' +- '8728' +- '8736' +- '8737' +- '8738' +- '8740' +- '8744' +- '8752' +- '8768' +- '8769' +- '8770' +- '8772' +- '8776' +- '8784' +- '8800' +- '8832' +- '8833' +- '8834' +- '8836' +- '8840' +- '8848' +- '8864' +- '8896' +- '8960' +- '8961' +- '8962' +- '8964' +- '8968' +- '8976' +- '8992' +- '9024' +- '9088' +- '9216' +- '9217' +- '9218' +- '9219' +- '9220' +- '9221' +- '9222' +- '9224' +- '9225' +- '9226' +- '9228' +- '9232' +- '9233' +- '9234' +- '9236' +- '9240' +- '9248' +- '9249' +- '9250' +- '9252' +- '9256' +- '9264' +- '9280' +- '9281' +- '9282' +- '9284' +- '9288' +- '9296' +- '9312' +- '9344' +- '9345' +- '9346' +- '9348' +- '9352' +- '9360' +- '9376' +- '9408' +- '9472' +- '9473' +- '9474' +- '9476' +- '9480' +- '9488' +- '9504' +- '9536' +- '9600' +- '9728' +- '9729' +- '9730' +- '9732' +- '9736' +- '9744' +- '9760' +- '9792' +- '9856' +- '9984' +- '10240' +- '10241' +- '10242' +- '10243' +- '10244' +- '10245' +- '10246' +- '10248' +- '10249' +- '10250' +- '10252' +- '10256' +- '10257' +- '10258' +- '10260' +- '10264' +- '10272' +- '10273' +- '10274' +- '10276' +- '10280' +- '10288' +- '10304' +- '10305' +- '10306' +- '10308' +- '10312' +- '10320' +- '10336' +- '10368' +- '10369' +- '10370' +- '10372' +- '10376' +- '10384' +- '10400' +- '10432' +- '10496' +- '10497' +- '10498' +- '10500' +- '10504' +- '10512' +- '10528' +- '10560' +- '10624' +- '10752' +- '10753' +- '10754' +- '10756' +- '10760' +- '10768' +- '10784' +- '10816' +- '10880' +- '11008' +- '11264' +- '11265' +- '11266' +- '11268' +- '11272' +- '11280' +- '11296' +- '11328' +- '11392' +- '11520' +- '11776' +- '12288' +- '12289' +- '12290' +- '12291' +- '12292' +- '12293' +- '12294' +- '12296' +- '12297' +- '12298' +- '12300' +- '12304' +- '12305' +- '12306' +- '12308' +- '12312' +- '12320' +- '12321' +- '12322' +- '12324' +- '12328' +- '12336' +- '12352' +- '12353' +- '12354' +- '12356' +- '12360' +- '12368' +- '12384' +- '12416' +- '12417' +- '12418' +- '12420' +- '12424' +- '12432' +- '12448' +- '12480' +- '12544' +- '12545' +- '12546' +- '12548' +- '12552' +- '12560' +- '12576' +- '12608' +- '12672' +- '12800' +- '12801' +- '12802' +- '12804' +- '12808' +- '12816' +- '12832' +- '12864' +- '12928' +- '13056' +- '13312' +- '13313' +- '13314' +- '13316' +- '13320' +- '13328' +- '13344' +- '13376' +- '13440' +- '13568' +- '13824' +- '14336' +- '14337' +- '14338' +- '14340' +- '14344' +- '14352' +- '14368' +- '14400' +- '14464' +- '14592' +- '14848' +- '15360' +- '16384' +- '16385' +- '16386' +- '16387' +- '16388' +- '16389' +- '16390' +- '16391' +- '16392' +- '16393' +- '16394' +- '16395' +- '16396' +- '16397' +- '16398' +- '16400' +- '16401' +- '16402' +- '16403' +- '16404' +- '16405' +- '16406' +- '16408' +- '16409' +- '16410' +- '16412' +- '16416' +- '16417' +- '16418' +- '16419' +- '16420' +- '16421' +- '16422' +- '16424' +- '16425' +- '16426' +- '16428' +- '16432' +- '16433' +- '16434' +- '16436' +- '16440' +- '16448' +- '16449' +- '16450' +- '16451' +- '16452' +- '16453' +- '16454' +- '16456' +- '16457' +- '16458' +- '16460' +- '16464' +- '16465' +- '16466' +- '16468' +- '16472' +- '16480' +- '16481' +- '16482' +- '16484' +- '16488' +- '16496' +- '16512' +- '16513' +- '16514' +- '16515' +- '16516' +- '16517' +- '16518' +- '16520' +- '16521' +- '16522' +- '16524' +- '16528' +- '16529' +- '16530' +- '16532' +- '16536' +- '16544' +- '16545' +- '16546' +- '16548' +- '16552' +- '16560' +- '16576' +- '16577' +- '16578' +- '16580' +- '16584' +- '16592' +- '16608' +- '16640' +- '16641' +- '16642' +- '16643' +- '16644' +- '16645' +- '16646' +- '16648' +- '16649' +- '16650' +- '16652' +- '16656' +- '16657' +- '16658' +- '16660' +- '16664' +- '16672' +- '16673' +- '16674' +- '16676' +- '16680' +- '16688' +- '16704' +- '16705' +- '16706' +- '16708' +- '16712' +- '16720' +- '16736' +- '16768' +- '16769' +- '16770' +- '16772' +- '16776' +- '16784' +- '16800' +- '16832' +- '16896' +- '16897' +- '16898' +- '16899' +- '16900' +- '16901' +- '16902' +- '16904' +- '16905' +- '16906' +- '16908' +- '16912' +- '16913' +- '16914' +- '16916' +- '16920' +- '16928' +- '16929' +- '16930' +- '16932' +- '16936' +- '16944' +- '16960' +- '16961' +- '16962' +- '16964' +- '16968' +- '16976' +- '16992' +- '17024' +- '17025' +- '17026' +- '17028' +- '17032' +- '17040' +- '17056' +- '17088' +- '17152' +- '17153' +- '17154' +- '17156' +- '17160' +- '17168' +- '17184' +- '17216' +- '17280' +- '17408' +- '17409' +- '17410' +- '17411' +- '17412' +- '17413' +- '17414' +- '17416' +- '17417' +- '17418' +- '17420' +- '17424' +- '17425' +- '17426' +- '17428' +- '17432' +- '17440' +- '17441' +- '17442' +- '17444' +- '17448' +- '17456' +- '17472' +- '17473' +- '17474' +- '17476' +- '17480' +- '17488' +- '17504' +- '17536' +- '17537' +- '17538' +- '17540' +- '17544' +- '17552' +- '17568' +- '17600' +- '17664' +- '17665' +- '17666' +- '17668' +- '17672' +- '17680' +- '17696' +- '17728' +- '17792' +- '17920' +- '17921' +- '17922' +- '17924' +- '17928' +- '17936' +- '17952' +- '17984' +- '18048' +- '18176' +- '18432' +- '18433' +- '18434' +- '18435' +- '18436' +- '18437' +- '18438' +- '18440' +- '18441' +- '18442' +- '18444' +- '18448' +- '18449' +- '18450' +- '18452' +- '18456' +- '18464' +- '18465' +- '18466' +- '18468' +- '18472' +- '18480' +- '18496' +- '18497' +- '18498' +- '18500' +- '18504' +- '18512' +- '18528' +- '18560' +- '18561' +- '18562' +- '18564' +- '18568' +- '18576' +- '18592' +- '18624' +- '18688' +- '18689' +- '18690' +- '18692' +- '18696' +- '18704' +- '18720' +- '18752' +- '18816' +- '18944' +- '18945' +- '18946' +- '18948' +- '18952' +- '18960' +- '18976' +- '19008' +- '19072' +- '19200' +- '19456' +- '19457' +- '19458' +- '19460' +- '19464' +- '19472' +- '19488' +- '19520' +- '19584' +- '19712' +- '19968' +- '20480' +- '20481' +- '20482' +- '20483' +- '20484' +- '20485' +- '20486' +- '20488' +- '20489' +- '20490' +- '20492' +- '20496' +- '20497' +- '20498' +- '20500' +- '20504' +- '20512' +- '20513' +- '20514' +- '20516' +- '20520' +- '20528' +- '20544' +- '20545' +- '20546' +- '20548' +- '20552' +- '20560' +- '20576' +- '20608' +- '20609' +- '20610' +- '20612' +- '20616' +- '20624' +- '20640' +- '20672' +- '20736' +- '20737' +- '20738' +- '20740' +- '20744' +- '20752' +- '20768' +- '20800' +- '20864' +- '20992' +- '20993' +- '20994' +- '20996' +- '21000' +- '21008' +- '21024' +- '21056' +- '21120' +- '21248' +- '21504' +- '21505' +- '21506' +- '21508' +- '21512' +- '21520' +- '21536' +- '21568' +- '21632' +- '21760' +- '22016' +- '22528' +- '22529' +- '22530' +- '22532' +- '22536' +- '22544' +- '22560' +- '22592' +- '22656' +- '22784' +- '23040' +- '23552' +- '24576' +- '24577' +- '24578' +- '24579' +- '24580' +- '24581' +- '24582' +- '24584' +- '24585' +- '24586' +- '24588' +- '24592' +- '24593' +- '24594' +- '24596' +- '24600' +- '24608' +- '24609' +- '24610' +- '24612' +- '24616' +- '24624' +- '24640' +- '24641' +- '24642' +- '24644' +- '24648' +- '24656' +- '24672' +- '24704' +- '24705' +- '24706' +- '24708' +- '24712' +- '24720' +- '24736' +- '24768' +- '24832' +- '24833' +- '24834' +- '24836' +- '24840' +- '24848' +- '24864' +- '24896' +- '24960' +- '25088' +- '25089' +- '25090' +- '25092' +- '25096' +- '25104' +- '25120' +- '25152' +- '25216' +- '25344' +- '25600' +- '25601' +- '25602' +- '25604' +- '25608' +- '25616' +- '25632' +- '25664' +- '25728' +- '25856' +- '26112' +- '26624' +- '26625' +- '26626' +- '26628' +- '26632' +- '26640' +- '26656' +- '26688' +- '26752' +- '26880' +- '27136' +- '27648' +- '28672' +- '28673' +- '28674' +- '28676' +- '28680' +- '28688' +- '28704' +- '28736' +- '28800' +- '28928' +- '29184' +- '29696' +- '30720' +- '32768' +- '32769' +- '32770' +- '32771' +- '32772' +- '32773' +- '32774' +- '32775' +- '32776' +- '32777' +- '32778' +- '32779' +- '32780' +- '32781' +- '32782' +- '32784' +- '32785' +- '32786' +- '32787' +- '32788' +- '32789' +- '32790' +- '32792' +- '32793' +- '32794' +- '32796' +- '32800' +- '32801' +- '32802' +- '32803' +- '32804' +- '32805' +- '32806' +- '32808' +- '32809' +- '32810' +- '32812' +- '32816' +- '32817' +- '32818' +- '32820' +- '32824' +- '32832' +- '32833' +- '32834' +- '32835' +- '32836' +- '32837' +- '32838' +- '32840' +- '32841' +- '32842' +- '32844' +- '32848' +- '32849' +- '32850' +- '32852' +- '32856' +- '32864' +- '32865' +- '32866' +- '32868' +- '32872' +- '32880' +- '32896' +- '32897' +- '32898' +- '32899' +- '32900' +- '32901' +- '32902' +- '32904' +- '32905' +- '32906' +- '32908' +- '32912' +- '32913' +- '32914' +- '32916' +- '32920' +- '32928' +- '32929' +- '32930' +- '32932' +- '32936' +- '32944' +- '32960' +- '32961' +- '32962' +- '32964' +- '32968' +- '32976' +- '32992' +- '33024' +- '33025' +- '33026' +- '33027' +- '33028' +- '33029' +- '33030' +- '33032' +- '33033' +- '33034' +- '33036' +- '33040' +- '33041' +- '33042' +- '33044' +- '33048' +- '33056' +- '33057' +- '33058' +- '33060' +- '33064' +- '33072' +- '33088' +- '33089' +- '33090' +- '33092' +- '33096' +- '33104' +- '33120' +- '33152' +- '33153' +- '33154' +- '33156' +- '33160' +- '33168' +- '33184' +- '33216' +- '33280' +- '33281' +- '33282' +- '33283' +- '33284' +- '33285' +- '33286' +- '33288' +- '33289' +- '33290' +- '33292' +- '33296' +- '33297' +- '33298' +- '33300' +- '33304' +- '33312' +- '33313' +- '33314' +- '33316' +- '33320' +- '33328' +- '33344' +- '33345' +- '33346' +- '33348' +- '33352' +- '33360' +- '33376' +- '33408' +- '33409' +- '33410' +- '33412' +- '33416' +- '33424' +- '33440' +- '33472' +- '33536' +- '33537' +- '33538' +- '33540' +- '33544' +- '33552' +- '33568' +- '33600' +- '33664' +- '33792' +- '33793' +- '33794' +- '33795' +- '33796' +- '33797' +- '33798' +- '33800' +- '33801' +- '33802' +- '33804' +- '33808' +- '33809' +- '33810' +- '33812' +- '33816' +- '33824' +- '33825' +- '33826' +- '33828' +- '33832' +- '33840' +- '33856' +- '33857' +- '33858' +- '33860' +- '33864' +- '33872' +- '33888' +- '33920' +- '33921' +- '33922' +- '33924' +- '33928' +- '33936' +- '33952' +- '33984' +- '34048' +- '34049' +- '34050' +- '34052' +- '34056' +- '34064' +- '34080' +- '34112' +- '34176' +- '34304' +- '34305' +- '34306' +- '34308' +- '34312' +- '34320' +- '34336' +- '34368' +- '34432' +- '34560' +- '34816' +- '34817' +- '34818' +- '34819' +- '34820' +- '34821' +- '34822' +- '34824' +- '34825' +- '34826' +- '34828' +- '34832' +- '34833' +- '34834' +- '34836' +- '34840' +- '34848' +- '34849' +- '34850' +- '34852' +- '34856' +- '34864' +- '34880' +- '34881' +- '34882' +- '34884' +- '34888' +- '34896' +- '34912' +- '34944' +- '34945' +- '34946' +- '34948' +- '34952' +- '34960' +- '34976' +- '35008' +- '35072' +- '35073' +- '35074' +- '35076' +- '35080' +- '35088' +- '35104' +- '35136' +- '35200' +- '35328' +- '35329' +- '35330' +- '35332' +- '35336' +- '35344' +- '35360' +- '35392' +- '35456' +- '35584' +- '35840' +- '35841' +- '35842' +- '35844' +- '35848' +- '35856' +- '35872' +- '35904' +- '35968' +- '36096' +- '36352' +- '36864' +- '36865' +- '36866' +- '36867' +- '36868' +- '36869' +- '36870' +- '36872' +- '36873' +- '36874' +- '36876' +- '36880' +- '36881' +- '36882' +- '36884' +- '36888' +- '36896' +- '36897' +- '36898' +- '36900' +- '36904' +- '36912' +- '36928' +- '36929' +- '36930' +- '36932' +- '36936' +- '36944' +- '36960' +- '36992' +- '36993' +- '36994' +- '36996' +- '37000' +- '37008' +- '37024' +- '37056' +- '37120' +- '37121' +- '37122' +- '37124' +- '37128' +- '37136' +- '37152' +- '37184' +- '37248' +- '37376' +- '37377' +- '37378' +- '37380' +- '37384' +- '37392' +- '37408' +- '37440' +- '37504' +- '37632' +- '37888' +- '37889' +- '37890' +- '37892' +- '37896' +- '37904' +- '37920' +- '37952' +- '38016' +- '38144' +- '38400' +- '38912' +- '38913' +- '38914' +- '38916' +- '38920' +- '38928' +- '38944' +- '38976' +- '39040' +- '39168' +- '39424' +- '39936' +- '40960' +- '40961' +- '40962' +- '40963' +- '40964' +- '40965' +- '40966' +- '40968' +- '40969' +- '40970' +- '40972' +- '40976' +- '40977' +- '40978' +- '40980' +- '40984' +- '40992' +- '40993' +- '40994' +- '40996' +- '41000' +- '41008' +- '41024' +- '41025' +- '41026' +- '41028' +- '41032' +- '41040' +- '41056' +- '41088' +- '41089' +- '41090' +- '41092' +- '41096' +- '41104' +- '41120' +- '41152' +- '41216' +- '41217' +- '41218' +- '41220' +- '41224' +- '41232' +- '41248' +- '41280' +- '41344' +- '41472' +- '41473' +- '41474' +- '41476' +- '41480' +- '41488' +- '41504' +- '41536' +- '41600' +- '41728' +- '41984' +- '41985' +- '41986' +- '41988' +- '41992' +- '42000' +- '42016' +- '42048' +- '42112' +- '42240' +- '42496' +- '43008' +- '43009' +- '43010' +- '43012' +- '43016' +- '43024' +- '43040' +- '43072' +- '43136' +- '43264' +- '43520' +- '44032' +- '45056' +- '45057' +- '45058' +- '45060' +- '45064' +- '45072' +- '45088' +- '45120' +- '45184' +- '45312' +- '45568' +- '46080' +- '47104' +- '49152' +- '49153' +- '49154' +- '49155' +- '49156' +- '49157' +- '49158' +- '49160' +- '49161' +- '49162' +- '49164' +- '49168' +- '49169' +- '49170' +- '49172' +- '49176' +- '49184' +- '49185' +- '49186' +- '49188' +- '49192' +- '49200' +- '49216' +- '49217' +- '49218' +- '49220' +- '49224' +- '49232' +- '49248' +- '49280' +- '49281' +- '49282' +- '49284' +- '49288' +- '49296' +- '49312' +- '49344' +- '49408' +- '49409' +- '49410' +- '49412' +- '49416' +- '49424' +- '49440' +- '49472' +- '49536' +- '49664' +- '49665' +- '49666' +- '49668' +- '49672' +- '49680' +- '49696' +- '49728' +- '49792' +- '49920' +- '50176' +- '50177' +- '50178' +- '50180' +- '50184' +- '50192' +- '50208' +- '50240' +- '50304' +- '50432' +- '50688' +- '51200' +- '51201' +- '51202' +- '51204' +- '51208' +- '51216' +- '51232' +- '51264' +- '51328' +- '51456' +- '51712' +- '52224' +- '53248' +- '53249' +- '53250' +- '53252' +- '53256' +- '53264' +- '53280' +- '53312' +- '53376' +- '53504' +- '53760' +- '54272' +- '55296' +- '57344' +- '57345' +- '57346' +- '57348' +- '57352' +- '57360' +- '57376' +- '57408' +- '57472' +- '57600' +- '57856' +- '58368' +- '59392' +- '61440' +init: null +input_size: null +cmvn_file: null +ctc_conf: + dropout_rate: 0.0 + ctc_type: builtin + reduce: true + ignore_nan_grad: true +joint_net_conf: null +use_preprocessor: true +token_type: char +bpemodel: null +non_linguistic_symbols: null +cleaner: null +g2p: null +speech_volume_normalize: null +rir_scp: null +rir_apply_prob: 1.0 +noise_scp: null +noise_apply_prob: 1.0 +noise_db_range: '13_15' +specaug: null +specaug_conf: {} +normalize: null +normalize_conf: {} +label_aggregator: null +label_aggregator_conf: {} +model: sond +model_conf: + lsm_weight: 0.1 + length_normalized_loss: true + max_spk_num: 16 + normalize_speech_speaker: true +# speech encoder +encoder: resnet34_sp_l2reg +encoder_conf: + # pass by model, equal to feature dim + # input_size: 80 + pooling_type: "window_shift" + batchnorm_momentum: 0.01 + pool_size: 20 + stride: 1 + tf2torch_tensor_name_prefix_torch: encoder + tf2torch_tensor_name_prefix_tf: EAND/speech_encoder +speaker_encoder: null +speaker_encoder_conf: {} +ci_scorer: conv +ci_scorer_conf: + input_units: 512 + num_layers: 3 + num_units: 512 + kernel_size: 1 + dropout_rate: 0.0 + position_encoder: null + out_units: 1 + out_norm: false + auxiliary_states: false + tf2torch_tensor_name_prefix_torch: ci_scorer + tf2torch_tensor_name_prefix_tf: EAND/compute_distance_layer/ci_scorer +cd_scorer: san +cd_scorer_conf: + input_size: 512 + output_size: 512 + out_units: 1 + attention_heads: 4 + linear_units: 1024 + num_blocks: 4 + dropout_rate: 0.0 + positional_dropout_rate: 0.0 + attention_dropout_rate: 0.0 + # use string "null" to remove input layer + input_layer: "null" + pos_enc_class: null + normalize_before: true + tf2torch_tensor_name_prefix_torch: cd_scorer + tf2torch_tensor_name_prefix_tf: EAND/compute_distance_layer/cd_scorer +# post net +decoder: fsmn +decoder_conf: + in_units: 32 + out_units: 2517 + filter_size: 31 + fsmn_num_layers: 6 + dnn_num_layers: 1 + num_memory_units: 16 + ffn_inner_dim: 512 + dropout_rate: 0.0 + tf2torch_tensor_name_prefix_torch: decoder + tf2torch_tensor_name_prefix_tf: EAND/post_net +frontend: wav_frontend +frontend_conf: + fs: 8000 + window: povey + n_mels: 80 + frame_length: 25 + frame_shift: 10 + filter_length_min: -1 + filter_length_max: -1 + lfr_m: 1 + lfr_n: 1 + dither: 0.0 + snip_edges: false + upsacle_samples: false +num_worker_count: 1 +required: +- output_dir +- token_list +oss_bucket: 'null' +version: 0.1.4 diff --git a/egs/callhome/diarization/sond/sond_fbank.yaml b/egs/callhome/diarization/sond/sond_fbank.yaml new file mode 100644 index 000000000..fc76259f4 --- /dev/null +++ b/egs/callhome/diarization/sond/sond_fbank.yaml @@ -0,0 +1,2739 @@ +config: finetune.yaml +print_config: false +log_level: INFO +dry_run: false +iterator_type: sequence +output_dir: exp/sond +ngpu: 1 +seed: 0 +num_workers: 16 +num_att_plot: 0 +dist_backend: nccl +dist_init_method: env:// +dist_world_size: null +dist_rank: null +local_rank: 0 +dist_master_addr: null +dist_master_port: null +dist_launcher: null +multiprocessing_distributed: true +distributed: false +unused_parameters: true +sharded_ddp: false +ddp_backend: pytorch_ddp +cudnn_enabled: true +cudnn_benchmark: false +cudnn_deterministic: true +collect_stats: false +write_collected_feats: false +max_epoch: 50 +patience: null +val_scheduler_criterion: +- valid +- acc +early_stopping_criterion: +- valid +- loss +- min +best_model_criterion: +- - valid + - acc + - max +keep_nbest_models: 10 +nbest_averaging_interval: 0 +grad_clip: 5 +grad_clip_type: 2.0 +grad_noise: false +accum_grad: 1 +no_forward_run: false +resume: true +train_dtype: float32 +use_amp: false +log_interval: 50 +use_matplotlib: false +use_tensorboard: true +use_wandb: false +wandb_project: null +wandb_id: null +wandb_entity: null +wandb_name: null +wandb_model_log_interval: -1 +use_pai: true +detect_anomaly: false +pretrain_path: null +init_param: [] +ignore_init_mismatch: false +freeze_param: [] +num_iters_per_epoch: null +batch_size: 20 +valid_batch_size: null +batch_bins: 10000 +valid_batch_bins: null +train_shape_file: +- /data/volume1/youyan/aishell/ark/train/speech_shape.1 +- /data/volume1/youyan/aishell/ark/train/text_shape.1 +valid_shape_file: +- /data/volume1/youyan/aishell/ark/dev/speech_shape.1 +- /data/volume1/youyan/aishell/ark/dev/text_shape.1 +batch_type: length +valid_batch_type: null +fold_length: +- 512 +- 150 +sort_in_batch: descending +sort_batch: descending +multiple_iterator: false +chunk_length: 500 +chunk_shift_ratio: 0.5 +num_cache_chunks: 1024 +train_data_path_and_name_and_type: +- - /data/volume1/youyan/aishell/ark/train/data.scp + - speech + - kaldi_ark +- - /data/volume1/youyan/aishell/ark/train/data.text.1 + - text + - text +valid_data_path_and_name_and_type: +- - /data/volume1/youyan/aishell/ark/dev/data.scp + - speech + - kaldi_ark +- - /data/volume1/youyan/aishell/ark/dev/data.text.1 + - text + - text +allow_variable_data_keys: false +max_cache_size: 0.0 +max_cache_fd: 32 +valid_max_cache_size: null +optim: adam +optim_conf: + lr: 0.0005 +scheduler: warmuplr +scheduler_conf: + warmup_steps: 30000 +token_list: +- '0' +- '1' +- '2' +- '3' +- '4' +- '5' +- '6' +- '7' +- '8' +- '9' +- '10' +- '11' +- '12' +- '13' +- '14' +- '15' +- '16' +- '17' +- '18' +- '19' +- '20' +- '21' +- '22' +- '23' +- '24' +- '25' +- '26' +- '27' +- '28' +- '29' +- '30' +- '32' +- '33' +- '34' +- '35' +- '36' +- '37' +- '38' +- '39' +- '40' +- '41' +- '42' +- '43' +- '44' +- '45' +- '46' +- '48' +- '49' +- '50' +- '51' +- '52' +- '53' +- '54' +- '56' +- '57' +- '58' +- '60' +- '64' +- '65' +- '66' +- '67' +- '68' +- '69' +- '70' +- '71' +- '72' +- '73' +- '74' +- '75' +- '76' +- '77' +- '78' +- '80' +- '81' +- '82' +- '83' +- '84' +- '85' +- '86' +- '88' +- '89' +- '90' +- '92' +- '96' +- '97' +- '98' +- '99' +- '100' +- '101' +- '102' +- '104' +- '105' +- '106' +- '108' +- '112' +- '113' +- '114' +- '116' +- '120' +- '128' +- '129' +- '130' +- '131' +- '132' +- '133' +- '134' +- '135' +- '136' +- '137' +- '138' +- '139' +- '140' +- '141' +- '142' +- '144' +- '145' +- '146' +- '147' +- '148' +- '149' +- '150' +- '152' +- '153' +- '154' +- '156' +- '160' +- '161' +- '162' +- '163' +- '164' +- '165' +- '166' +- '168' +- '169' +- '170' +- '172' +- '176' +- '177' +- '178' +- '180' +- '184' +- '192' +- '193' +- '194' +- '195' +- '196' +- '197' +- '198' +- '200' +- '201' +- '202' +- '204' +- '208' +- '209' +- '210' +- '212' +- '216' +- '224' +- '225' +- '226' +- '228' +- '232' +- '240' +- '256' +- '257' +- '258' +- '259' +- '260' +- '261' +- '262' +- '263' +- '264' +- '265' +- '266' +- '267' +- '268' +- '269' +- '270' +- '272' +- '273' +- '274' +- '275' +- '276' +- '277' +- '278' +- '280' +- '281' +- '282' +- '284' +- '288' +- '289' +- '290' +- '291' +- '292' +- '293' +- '294' +- '296' +- '297' +- '298' +- '300' +- '304' +- '305' +- '306' +- '308' +- '312' +- '320' +- '321' +- '322' +- '323' +- '324' +- '325' +- '326' +- '328' +- '329' +- '330' +- '332' +- '336' +- '337' +- '338' +- '340' +- '344' +- '352' +- '353' +- '354' +- '356' +- '360' +- '368' +- '384' +- '385' +- '386' +- '387' +- '388' +- '389' +- '390' +- '392' +- '393' +- '394' +- '396' +- '400' +- '401' +- '402' +- '404' +- '408' +- '416' +- '417' +- '418' +- '420' +- '424' +- '432' +- '448' +- '449' +- '450' +- '452' +- '456' +- '464' +- '480' +- '512' +- '513' +- '514' +- '515' +- '516' +- '517' +- '518' +- '519' +- '520' +- '521' +- '522' +- '523' +- '524' +- '525' +- '526' +- '528' +- '529' +- '530' +- '531' +- '532' +- '533' +- '534' +- '536' +- '537' +- '538' +- '540' +- '544' +- '545' +- '546' +- '547' +- '548' +- '549' +- '550' +- '552' +- '553' +- '554' +- '556' +- '560' +- '561' +- '562' +- '564' +- '568' +- '576' +- '577' +- '578' +- '579' +- '580' +- '581' +- '582' +- '584' +- '585' +- '586' +- '588' +- '592' +- '593' +- '594' +- '596' +- '600' +- '608' +- '609' +- '610' +- '612' +- '616' +- '624' +- '640' +- '641' +- '642' +- '643' +- '644' +- '645' +- '646' +- '648' +- '649' +- '650' +- '652' +- '656' +- '657' +- '658' +- '660' +- '664' +- '672' +- '673' +- '674' +- '676' +- '680' +- '688' +- '704' +- '705' +- '706' +- '708' +- '712' +- '720' +- '736' +- '768' +- '769' +- '770' +- '771' +- '772' +- '773' +- '774' +- '776' +- '777' +- '778' +- '780' +- '784' +- '785' +- '786' +- '788' +- '792' +- '800' +- '801' +- '802' +- '804' +- '808' +- '816' +- '832' +- '833' +- '834' +- '836' +- '840' +- '848' +- '864' +- '896' +- '897' +- '898' +- '900' +- '904' +- '912' +- '928' +- '960' +- '1024' +- '1025' +- '1026' +- '1027' +- '1028' +- '1029' +- '1030' +- '1031' +- '1032' +- '1033' +- '1034' +- '1035' +- '1036' +- '1037' +- '1038' +- '1040' +- '1041' +- '1042' +- '1043' +- '1044' +- '1045' +- '1046' +- '1048' +- '1049' +- '1050' +- '1052' +- '1056' +- '1057' +- '1058' +- '1059' +- '1060' +- '1061' +- '1062' +- '1064' +- '1065' +- '1066' +- '1068' +- '1072' +- '1073' +- '1074' +- '1076' +- '1080' +- '1088' +- '1089' +- '1090' +- '1091' +- '1092' +- '1093' +- '1094' +- '1096' +- '1097' +- '1098' +- '1100' +- '1104' +- '1105' +- '1106' +- '1108' +- '1112' +- '1120' +- '1121' +- '1122' +- '1124' +- '1128' +- '1136' +- '1152' +- '1153' +- '1154' +- '1155' +- '1156' +- '1157' +- '1158' +- '1160' +- '1161' +- '1162' +- '1164' +- '1168' +- '1169' +- '1170' +- '1172' +- '1176' +- '1184' +- '1185' +- '1186' +- '1188' +- '1192' +- '1200' +- '1216' +- '1217' +- '1218' +- '1220' +- '1224' +- '1232' +- '1248' +- '1280' +- '1281' +- '1282' +- '1283' +- '1284' +- '1285' +- '1286' +- '1288' +- '1289' +- '1290' +- '1292' +- '1296' +- '1297' +- '1298' +- '1300' +- '1304' +- '1312' +- '1313' +- '1314' +- '1316' +- '1320' +- '1328' +- '1344' +- '1345' +- '1346' +- '1348' +- '1352' +- '1360' +- '1376' +- '1408' +- '1409' +- '1410' +- '1412' +- '1416' +- '1424' +- '1440' +- '1472' +- '1536' +- '1537' +- '1538' +- '1539' +- '1540' +- '1541' +- '1542' +- '1544' +- '1545' +- '1546' +- '1548' +- '1552' +- '1553' +- '1554' +- '1556' +- '1560' +- '1568' +- '1569' +- '1570' +- '1572' +- '1576' +- '1584' +- '1600' +- '1601' +- '1602' +- '1604' +- '1608' +- '1616' +- '1632' +- '1664' +- '1665' +- '1666' +- '1668' +- '1672' +- '1680' +- '1696' +- '1728' +- '1792' +- '1793' +- '1794' +- '1796' +- '1800' +- '1808' +- '1824' +- '1856' +- '1920' +- '2048' +- '2049' +- '2050' +- '2051' +- '2052' +- '2053' +- '2054' +- '2055' +- '2056' +- '2057' +- '2058' +- '2059' +- '2060' +- '2061' +- '2062' +- '2064' +- '2065' +- '2066' +- '2067' +- '2068' +- '2069' +- '2070' +- '2072' +- '2073' +- '2074' +- '2076' +- '2080' +- '2081' +- '2082' +- '2083' +- '2084' +- '2085' +- '2086' +- '2088' +- '2089' +- '2090' +- '2092' +- '2096' +- '2097' +- '2098' +- '2100' +- '2104' +- '2112' +- '2113' +- '2114' +- '2115' +- '2116' +- '2117' +- '2118' +- '2120' +- '2121' +- '2122' +- '2124' +- '2128' +- '2129' +- '2130' +- '2132' +- '2136' +- '2144' +- '2145' +- '2146' +- '2148' +- '2152' +- '2160' +- '2176' +- '2177' +- '2178' +- '2179' +- '2180' +- '2181' +- '2182' +- '2184' +- '2185' +- '2186' +- '2188' +- '2192' +- '2193' +- '2194' +- '2196' +- '2200' +- '2208' +- '2209' +- '2210' +- '2212' +- '2216' +- '2224' +- '2240' +- '2241' +- '2242' +- '2244' +- '2248' +- '2256' +- '2272' +- '2304' +- '2305' +- '2306' +- '2307' +- '2308' +- '2309' +- '2310' +- '2312' +- '2313' +- '2314' +- '2316' +- '2320' +- '2321' +- '2322' +- '2324' +- '2328' +- '2336' +- '2337' +- '2338' +- '2340' +- '2344' +- '2352' +- '2368' +- '2369' +- '2370' +- '2372' +- '2376' +- '2384' +- '2400' +- '2432' +- '2433' +- '2434' +- '2436' +- '2440' +- '2448' +- '2464' +- '2496' +- '2560' +- '2561' +- '2562' +- '2563' +- '2564' +- '2565' +- '2566' +- '2568' +- '2569' +- '2570' +- '2572' +- '2576' +- '2577' +- '2578' +- '2580' +- '2584' +- '2592' +- '2593' +- '2594' +- '2596' +- '2600' +- '2608' +- '2624' +- '2625' +- '2626' +- '2628' +- '2632' +- '2640' +- '2656' +- '2688' +- '2689' +- '2690' +- '2692' +- '2696' +- '2704' +- '2720' +- '2752' +- '2816' +- '2817' +- '2818' +- '2820' +- '2824' +- '2832' +- '2848' +- '2880' +- '2944' +- '3072' +- '3073' +- '3074' +- '3075' +- '3076' +- '3077' +- '3078' +- '3080' +- '3081' +- '3082' +- '3084' +- '3088' +- '3089' +- '3090' +- '3092' +- '3096' +- '3104' +- '3105' +- '3106' +- '3108' +- '3112' +- '3120' +- '3136' +- '3137' +- '3138' +- '3140' +- '3144' +- '3152' +- '3168' +- '3200' +- '3201' +- '3202' +- '3204' +- '3208' +- '3216' +- '3232' +- '3264' +- '3328' +- '3329' +- '3330' +- '3332' +- '3336' +- '3344' +- '3360' +- '3392' +- '3456' +- '3584' +- '3585' +- '3586' +- '3588' +- '3592' +- '3600' +- '3616' +- '3648' +- '3712' +- '3840' +- '4096' +- '4097' +- '4098' +- '4099' +- '4100' +- '4101' +- '4102' +- '4103' +- '4104' +- '4105' +- '4106' +- '4107' +- '4108' +- '4109' +- '4110' +- '4112' +- '4113' +- '4114' +- '4115' +- '4116' +- '4117' +- '4118' +- '4120' +- '4121' +- '4122' +- '4124' +- '4128' +- '4129' +- '4130' +- '4131' +- '4132' +- '4133' +- '4134' +- '4136' +- '4137' +- '4138' +- '4140' +- '4144' +- '4145' +- '4146' +- '4148' +- '4152' +- '4160' +- '4161' +- '4162' +- '4163' +- '4164' +- '4165' +- '4166' +- '4168' +- '4169' +- '4170' +- '4172' +- '4176' +- '4177' +- '4178' +- '4180' +- '4184' +- '4192' +- '4193' +- '4194' +- '4196' +- '4200' +- '4208' +- '4224' +- '4225' +- '4226' +- '4227' +- '4228' +- '4229' +- '4230' +- '4232' +- '4233' +- '4234' +- '4236' +- '4240' +- '4241' +- '4242' +- '4244' +- '4248' +- '4256' +- '4257' +- '4258' +- '4260' +- '4264' +- '4272' +- '4288' +- '4289' +- '4290' +- '4292' +- '4296' +- '4304' +- '4320' +- '4352' +- '4353' +- '4354' +- '4355' +- '4356' +- '4357' +- '4358' +- '4360' +- '4361' +- '4362' +- '4364' +- '4368' +- '4369' +- '4370' +- '4372' +- '4376' +- '4384' +- '4385' +- '4386' +- '4388' +- '4392' +- '4400' +- '4416' +- '4417' +- '4418' +- '4420' +- '4424' +- '4432' +- '4448' +- '4480' +- '4481' +- '4482' +- '4484' +- '4488' +- '4496' +- '4512' +- '4544' +- '4608' +- '4609' +- '4610' +- '4611' +- '4612' +- '4613' +- '4614' +- '4616' +- '4617' +- '4618' +- '4620' +- '4624' +- '4625' +- '4626' +- '4628' +- '4632' +- '4640' +- '4641' +- '4642' +- '4644' +- '4648' +- '4656' +- '4672' +- '4673' +- '4674' +- '4676' +- '4680' +- '4688' +- '4704' +- '4736' +- '4737' +- '4738' +- '4740' +- '4744' +- '4752' +- '4768' +- '4800' +- '4864' +- '4865' +- '4866' +- '4868' +- '4872' +- '4880' +- '4896' +- '4928' +- '4992' +- '5120' +- '5121' +- '5122' +- '5123' +- '5124' +- '5125' +- '5126' +- '5128' +- '5129' +- '5130' +- '5132' +- '5136' +- '5137' +- '5138' +- '5140' +- '5144' +- '5152' +- '5153' +- '5154' +- '5156' +- '5160' +- '5168' +- '5184' +- '5185' +- '5186' +- '5188' +- '5192' +- '5200' +- '5216' +- '5248' +- '5249' +- '5250' +- '5252' +- '5256' +- '5264' +- '5280' +- '5312' +- '5376' +- '5377' +- '5378' +- '5380' +- '5384' +- '5392' +- '5408' +- '5440' +- '5504' +- '5632' +- '5633' +- '5634' +- '5636' +- '5640' +- '5648' +- '5664' +- '5696' +- '5760' +- '5888' +- '6144' +- '6145' +- '6146' +- '6147' +- '6148' +- '6149' +- '6150' +- '6152' +- '6153' +- '6154' +- '6156' +- '6160' +- '6161' +- '6162' +- '6164' +- '6168' +- '6176' +- '6177' +- '6178' +- '6180' +- '6184' +- '6192' +- '6208' +- '6209' +- '6210' +- '6212' +- '6216' +- '6224' +- '6240' +- '6272' +- '6273' +- '6274' +- '6276' +- '6280' +- '6288' +- '6304' +- '6336' +- '6400' +- '6401' +- '6402' +- '6404' +- '6408' +- '6416' +- '6432' +- '6464' +- '6528' +- '6656' +- '6657' +- '6658' +- '6660' +- '6664' +- '6672' +- '6688' +- '6720' +- '6784' +- '6912' +- '7168' +- '7169' +- '7170' +- '7172' +- '7176' +- '7184' +- '7200' +- '7232' +- '7296' +- '7424' +- '7680' +- '8192' +- '8193' +- '8194' +- '8195' +- '8196' +- '8197' +- '8198' +- '8199' +- '8200' +- '8201' +- '8202' +- '8203' +- '8204' +- '8205' +- '8206' +- '8208' +- '8209' +- '8210' +- '8211' +- '8212' +- '8213' +- '8214' +- '8216' +- '8217' +- '8218' +- '8220' +- '8224' +- '8225' +- '8226' +- '8227' +- '8228' +- '8229' +- '8230' +- '8232' +- '8233' +- '8234' +- '8236' +- '8240' +- '8241' +- '8242' +- '8244' +- '8248' +- '8256' +- '8257' +- '8258' +- '8259' +- '8260' +- '8261' +- '8262' +- '8264' +- '8265' +- '8266' +- '8268' +- '8272' +- '8273' +- '8274' +- '8276' +- '8280' +- '8288' +- '8289' +- '8290' +- '8292' +- '8296' +- '8304' +- '8320' +- '8321' +- '8322' +- '8323' +- '8324' +- '8325' +- '8326' +- '8328' +- '8329' +- '8330' +- '8332' +- '8336' +- '8337' +- '8338' +- '8340' +- '8344' +- '8352' +- '8353' +- '8354' +- '8356' +- '8360' +- '8368' +- '8384' +- '8385' +- '8386' +- '8388' +- '8392' +- '8400' +- '8416' +- '8448' +- '8449' +- '8450' +- '8451' +- '8452' +- '8453' +- '8454' +- '8456' +- '8457' +- '8458' +- '8460' +- '8464' +- '8465' +- '8466' +- '8468' +- '8472' +- '8480' +- '8481' +- '8482' +- '8484' +- '8488' +- '8496' +- '8512' +- '8513' +- '8514' +- '8516' +- '8520' +- '8528' +- '8544' +- '8576' +- '8577' +- '8578' +- '8580' +- '8584' +- '8592' +- '8608' +- '8640' +- '8704' +- '8705' +- '8706' +- '8707' +- '8708' +- '8709' +- '8710' +- '8712' +- '8713' +- '8714' +- '8716' +- '8720' +- '8721' +- '8722' +- '8724' +- '8728' +- '8736' +- '8737' +- '8738' +- '8740' +- '8744' +- '8752' +- '8768' +- '8769' +- '8770' +- '8772' +- '8776' +- '8784' +- '8800' +- '8832' +- '8833' +- '8834' +- '8836' +- '8840' +- '8848' +- '8864' +- '8896' +- '8960' +- '8961' +- '8962' +- '8964' +- '8968' +- '8976' +- '8992' +- '9024' +- '9088' +- '9216' +- '9217' +- '9218' +- '9219' +- '9220' +- '9221' +- '9222' +- '9224' +- '9225' +- '9226' +- '9228' +- '9232' +- '9233' +- '9234' +- '9236' +- '9240' +- '9248' +- '9249' +- '9250' +- '9252' +- '9256' +- '9264' +- '9280' +- '9281' +- '9282' +- '9284' +- '9288' +- '9296' +- '9312' +- '9344' +- '9345' +- '9346' +- '9348' +- '9352' +- '9360' +- '9376' +- '9408' +- '9472' +- '9473' +- '9474' +- '9476' +- '9480' +- '9488' +- '9504' +- '9536' +- '9600' +- '9728' +- '9729' +- '9730' +- '9732' +- '9736' +- '9744' +- '9760' +- '9792' +- '9856' +- '9984' +- '10240' +- '10241' +- '10242' +- '10243' +- '10244' +- '10245' +- '10246' +- '10248' +- '10249' +- '10250' +- '10252' +- '10256' +- '10257' +- '10258' +- '10260' +- '10264' +- '10272' +- '10273' +- '10274' +- '10276' +- '10280' +- '10288' +- '10304' +- '10305' +- '10306' +- '10308' +- '10312' +- '10320' +- '10336' +- '10368' +- '10369' +- '10370' +- '10372' +- '10376' +- '10384' +- '10400' +- '10432' +- '10496' +- '10497' +- '10498' +- '10500' +- '10504' +- '10512' +- '10528' +- '10560' +- '10624' +- '10752' +- '10753' +- '10754' +- '10756' +- '10760' +- '10768' +- '10784' +- '10816' +- '10880' +- '11008' +- '11264' +- '11265' +- '11266' +- '11268' +- '11272' +- '11280' +- '11296' +- '11328' +- '11392' +- '11520' +- '11776' +- '12288' +- '12289' +- '12290' +- '12291' +- '12292' +- '12293' +- '12294' +- '12296' +- '12297' +- '12298' +- '12300' +- '12304' +- '12305' +- '12306' +- '12308' +- '12312' +- '12320' +- '12321' +- '12322' +- '12324' +- '12328' +- '12336' +- '12352' +- '12353' +- '12354' +- '12356' +- '12360' +- '12368' +- '12384' +- '12416' +- '12417' +- '12418' +- '12420' +- '12424' +- '12432' +- '12448' +- '12480' +- '12544' +- '12545' +- '12546' +- '12548' +- '12552' +- '12560' +- '12576' +- '12608' +- '12672' +- '12800' +- '12801' +- '12802' +- '12804' +- '12808' +- '12816' +- '12832' +- '12864' +- '12928' +- '13056' +- '13312' +- '13313' +- '13314' +- '13316' +- '13320' +- '13328' +- '13344' +- '13376' +- '13440' +- '13568' +- '13824' +- '14336' +- '14337' +- '14338' +- '14340' +- '14344' +- '14352' +- '14368' +- '14400' +- '14464' +- '14592' +- '14848' +- '15360' +- '16384' +- '16385' +- '16386' +- '16387' +- '16388' +- '16389' +- '16390' +- '16391' +- '16392' +- '16393' +- '16394' +- '16395' +- '16396' +- '16397' +- '16398' +- '16400' +- '16401' +- '16402' +- '16403' +- '16404' +- '16405' +- '16406' +- '16408' +- '16409' +- '16410' +- '16412' +- '16416' +- '16417' +- '16418' +- '16419' +- '16420' +- '16421' +- '16422' +- '16424' +- '16425' +- '16426' +- '16428' +- '16432' +- '16433' +- '16434' +- '16436' +- '16440' +- '16448' +- '16449' +- '16450' +- '16451' +- '16452' +- '16453' +- '16454' +- '16456' +- '16457' +- '16458' +- '16460' +- '16464' +- '16465' +- '16466' +- '16468' +- '16472' +- '16480' +- '16481' +- '16482' +- '16484' +- '16488' +- '16496' +- '16512' +- '16513' +- '16514' +- '16515' +- '16516' +- '16517' +- '16518' +- '16520' +- '16521' +- '16522' +- '16524' +- '16528' +- '16529' +- '16530' +- '16532' +- '16536' +- '16544' +- '16545' +- '16546' +- '16548' +- '16552' +- '16560' +- '16576' +- '16577' +- '16578' +- '16580' +- '16584' +- '16592' +- '16608' +- '16640' +- '16641' +- '16642' +- '16643' +- '16644' +- '16645' +- '16646' +- '16648' +- '16649' +- '16650' +- '16652' +- '16656' +- '16657' +- '16658' +- '16660' +- '16664' +- '16672' +- '16673' +- '16674' +- '16676' +- '16680' +- '16688' +- '16704' +- '16705' +- '16706' +- '16708' +- '16712' +- '16720' +- '16736' +- '16768' +- '16769' +- '16770' +- '16772' +- '16776' +- '16784' +- '16800' +- '16832' +- '16896' +- '16897' +- '16898' +- '16899' +- '16900' +- '16901' +- '16902' +- '16904' +- '16905' +- '16906' +- '16908' +- '16912' +- '16913' +- '16914' +- '16916' +- '16920' +- '16928' +- '16929' +- '16930' +- '16932' +- '16936' +- '16944' +- '16960' +- '16961' +- '16962' +- '16964' +- '16968' +- '16976' +- '16992' +- '17024' +- '17025' +- '17026' +- '17028' +- '17032' +- '17040' +- '17056' +- '17088' +- '17152' +- '17153' +- '17154' +- '17156' +- '17160' +- '17168' +- '17184' +- '17216' +- '17280' +- '17408' +- '17409' +- '17410' +- '17411' +- '17412' +- '17413' +- '17414' +- '17416' +- '17417' +- '17418' +- '17420' +- '17424' +- '17425' +- '17426' +- '17428' +- '17432' +- '17440' +- '17441' +- '17442' +- '17444' +- '17448' +- '17456' +- '17472' +- '17473' +- '17474' +- '17476' +- '17480' +- '17488' +- '17504' +- '17536' +- '17537' +- '17538' +- '17540' +- '17544' +- '17552' +- '17568' +- '17600' +- '17664' +- '17665' +- '17666' +- '17668' +- '17672' +- '17680' +- '17696' +- '17728' +- '17792' +- '17920' +- '17921' +- '17922' +- '17924' +- '17928' +- '17936' +- '17952' +- '17984' +- '18048' +- '18176' +- '18432' +- '18433' +- '18434' +- '18435' +- '18436' +- '18437' +- '18438' +- '18440' +- '18441' +- '18442' +- '18444' +- '18448' +- '18449' +- '18450' +- '18452' +- '18456' +- '18464' +- '18465' +- '18466' +- '18468' +- '18472' +- '18480' +- '18496' +- '18497' +- '18498' +- '18500' +- '18504' +- '18512' +- '18528' +- '18560' +- '18561' +- '18562' +- '18564' +- '18568' +- '18576' +- '18592' +- '18624' +- '18688' +- '18689' +- '18690' +- '18692' +- '18696' +- '18704' +- '18720' +- '18752' +- '18816' +- '18944' +- '18945' +- '18946' +- '18948' +- '18952' +- '18960' +- '18976' +- '19008' +- '19072' +- '19200' +- '19456' +- '19457' +- '19458' +- '19460' +- '19464' +- '19472' +- '19488' +- '19520' +- '19584' +- '19712' +- '19968' +- '20480' +- '20481' +- '20482' +- '20483' +- '20484' +- '20485' +- '20486' +- '20488' +- '20489' +- '20490' +- '20492' +- '20496' +- '20497' +- '20498' +- '20500' +- '20504' +- '20512' +- '20513' +- '20514' +- '20516' +- '20520' +- '20528' +- '20544' +- '20545' +- '20546' +- '20548' +- '20552' +- '20560' +- '20576' +- '20608' +- '20609' +- '20610' +- '20612' +- '20616' +- '20624' +- '20640' +- '20672' +- '20736' +- '20737' +- '20738' +- '20740' +- '20744' +- '20752' +- '20768' +- '20800' +- '20864' +- '20992' +- '20993' +- '20994' +- '20996' +- '21000' +- '21008' +- '21024' +- '21056' +- '21120' +- '21248' +- '21504' +- '21505' +- '21506' +- '21508' +- '21512' +- '21520' +- '21536' +- '21568' +- '21632' +- '21760' +- '22016' +- '22528' +- '22529' +- '22530' +- '22532' +- '22536' +- '22544' +- '22560' +- '22592' +- '22656' +- '22784' +- '23040' +- '23552' +- '24576' +- '24577' +- '24578' +- '24579' +- '24580' +- '24581' +- '24582' +- '24584' +- '24585' +- '24586' +- '24588' +- '24592' +- '24593' +- '24594' +- '24596' +- '24600' +- '24608' +- '24609' +- '24610' +- '24612' +- '24616' +- '24624' +- '24640' +- '24641' +- '24642' +- '24644' +- '24648' +- '24656' +- '24672' +- '24704' +- '24705' +- '24706' +- '24708' +- '24712' +- '24720' +- '24736' +- '24768' +- '24832' +- '24833' +- '24834' +- '24836' +- '24840' +- '24848' +- '24864' +- '24896' +- '24960' +- '25088' +- '25089' +- '25090' +- '25092' +- '25096' +- '25104' +- '25120' +- '25152' +- '25216' +- '25344' +- '25600' +- '25601' +- '25602' +- '25604' +- '25608' +- '25616' +- '25632' +- '25664' +- '25728' +- '25856' +- '26112' +- '26624' +- '26625' +- '26626' +- '26628' +- '26632' +- '26640' +- '26656' +- '26688' +- '26752' +- '26880' +- '27136' +- '27648' +- '28672' +- '28673' +- '28674' +- '28676' +- '28680' +- '28688' +- '28704' +- '28736' +- '28800' +- '28928' +- '29184' +- '29696' +- '30720' +- '32768' +- '32769' +- '32770' +- '32771' +- '32772' +- '32773' +- '32774' +- '32775' +- '32776' +- '32777' +- '32778' +- '32779' +- '32780' +- '32781' +- '32782' +- '32784' +- '32785' +- '32786' +- '32787' +- '32788' +- '32789' +- '32790' +- '32792' +- '32793' +- '32794' +- '32796' +- '32800' +- '32801' +- '32802' +- '32803' +- '32804' +- '32805' +- '32806' +- '32808' +- '32809' +- '32810' +- '32812' +- '32816' +- '32817' +- '32818' +- '32820' +- '32824' +- '32832' +- '32833' +- '32834' +- '32835' +- '32836' +- '32837' +- '32838' +- '32840' +- '32841' +- '32842' +- '32844' +- '32848' +- '32849' +- '32850' +- '32852' +- '32856' +- '32864' +- '32865' +- '32866' +- '32868' +- '32872' +- '32880' +- '32896' +- '32897' +- '32898' +- '32899' +- '32900' +- '32901' +- '32902' +- '32904' +- '32905' +- '32906' +- '32908' +- '32912' +- '32913' +- '32914' +- '32916' +- '32920' +- '32928' +- '32929' +- '32930' +- '32932' +- '32936' +- '32944' +- '32960' +- '32961' +- '32962' +- '32964' +- '32968' +- '32976' +- '32992' +- '33024' +- '33025' +- '33026' +- '33027' +- '33028' +- '33029' +- '33030' +- '33032' +- '33033' +- '33034' +- '33036' +- '33040' +- '33041' +- '33042' +- '33044' +- '33048' +- '33056' +- '33057' +- '33058' +- '33060' +- '33064' +- '33072' +- '33088' +- '33089' +- '33090' +- '33092' +- '33096' +- '33104' +- '33120' +- '33152' +- '33153' +- '33154' +- '33156' +- '33160' +- '33168' +- '33184' +- '33216' +- '33280' +- '33281' +- '33282' +- '33283' +- '33284' +- '33285' +- '33286' +- '33288' +- '33289' +- '33290' +- '33292' +- '33296' +- '33297' +- '33298' +- '33300' +- '33304' +- '33312' +- '33313' +- '33314' +- '33316' +- '33320' +- '33328' +- '33344' +- '33345' +- '33346' +- '33348' +- '33352' +- '33360' +- '33376' +- '33408' +- '33409' +- '33410' +- '33412' +- '33416' +- '33424' +- '33440' +- '33472' +- '33536' +- '33537' +- '33538' +- '33540' +- '33544' +- '33552' +- '33568' +- '33600' +- '33664' +- '33792' +- '33793' +- '33794' +- '33795' +- '33796' +- '33797' +- '33798' +- '33800' +- '33801' +- '33802' +- '33804' +- '33808' +- '33809' +- '33810' +- '33812' +- '33816' +- '33824' +- '33825' +- '33826' +- '33828' +- '33832' +- '33840' +- '33856' +- '33857' +- '33858' +- '33860' +- '33864' +- '33872' +- '33888' +- '33920' +- '33921' +- '33922' +- '33924' +- '33928' +- '33936' +- '33952' +- '33984' +- '34048' +- '34049' +- '34050' +- '34052' +- '34056' +- '34064' +- '34080' +- '34112' +- '34176' +- '34304' +- '34305' +- '34306' +- '34308' +- '34312' +- '34320' +- '34336' +- '34368' +- '34432' +- '34560' +- '34816' +- '34817' +- '34818' +- '34819' +- '34820' +- '34821' +- '34822' +- '34824' +- '34825' +- '34826' +- '34828' +- '34832' +- '34833' +- '34834' +- '34836' +- '34840' +- '34848' +- '34849' +- '34850' +- '34852' +- '34856' +- '34864' +- '34880' +- '34881' +- '34882' +- '34884' +- '34888' +- '34896' +- '34912' +- '34944' +- '34945' +- '34946' +- '34948' +- '34952' +- '34960' +- '34976' +- '35008' +- '35072' +- '35073' +- '35074' +- '35076' +- '35080' +- '35088' +- '35104' +- '35136' +- '35200' +- '35328' +- '35329' +- '35330' +- '35332' +- '35336' +- '35344' +- '35360' +- '35392' +- '35456' +- '35584' +- '35840' +- '35841' +- '35842' +- '35844' +- '35848' +- '35856' +- '35872' +- '35904' +- '35968' +- '36096' +- '36352' +- '36864' +- '36865' +- '36866' +- '36867' +- '36868' +- '36869' +- '36870' +- '36872' +- '36873' +- '36874' +- '36876' +- '36880' +- '36881' +- '36882' +- '36884' +- '36888' +- '36896' +- '36897' +- '36898' +- '36900' +- '36904' +- '36912' +- '36928' +- '36929' +- '36930' +- '36932' +- '36936' +- '36944' +- '36960' +- '36992' +- '36993' +- '36994' +- '36996' +- '37000' +- '37008' +- '37024' +- '37056' +- '37120' +- '37121' +- '37122' +- '37124' +- '37128' +- '37136' +- '37152' +- '37184' +- '37248' +- '37376' +- '37377' +- '37378' +- '37380' +- '37384' +- '37392' +- '37408' +- '37440' +- '37504' +- '37632' +- '37888' +- '37889' +- '37890' +- '37892' +- '37896' +- '37904' +- '37920' +- '37952' +- '38016' +- '38144' +- '38400' +- '38912' +- '38913' +- '38914' +- '38916' +- '38920' +- '38928' +- '38944' +- '38976' +- '39040' +- '39168' +- '39424' +- '39936' +- '40960' +- '40961' +- '40962' +- '40963' +- '40964' +- '40965' +- '40966' +- '40968' +- '40969' +- '40970' +- '40972' +- '40976' +- '40977' +- '40978' +- '40980' +- '40984' +- '40992' +- '40993' +- '40994' +- '40996' +- '41000' +- '41008' +- '41024' +- '41025' +- '41026' +- '41028' +- '41032' +- '41040' +- '41056' +- '41088' +- '41089' +- '41090' +- '41092' +- '41096' +- '41104' +- '41120' +- '41152' +- '41216' +- '41217' +- '41218' +- '41220' +- '41224' +- '41232' +- '41248' +- '41280' +- '41344' +- '41472' +- '41473' +- '41474' +- '41476' +- '41480' +- '41488' +- '41504' +- '41536' +- '41600' +- '41728' +- '41984' +- '41985' +- '41986' +- '41988' +- '41992' +- '42000' +- '42016' +- '42048' +- '42112' +- '42240' +- '42496' +- '43008' +- '43009' +- '43010' +- '43012' +- '43016' +- '43024' +- '43040' +- '43072' +- '43136' +- '43264' +- '43520' +- '44032' +- '45056' +- '45057' +- '45058' +- '45060' +- '45064' +- '45072' +- '45088' +- '45120' +- '45184' +- '45312' +- '45568' +- '46080' +- '47104' +- '49152' +- '49153' +- '49154' +- '49155' +- '49156' +- '49157' +- '49158' +- '49160' +- '49161' +- '49162' +- '49164' +- '49168' +- '49169' +- '49170' +- '49172' +- '49176' +- '49184' +- '49185' +- '49186' +- '49188' +- '49192' +- '49200' +- '49216' +- '49217' +- '49218' +- '49220' +- '49224' +- '49232' +- '49248' +- '49280' +- '49281' +- '49282' +- '49284' +- '49288' +- '49296' +- '49312' +- '49344' +- '49408' +- '49409' +- '49410' +- '49412' +- '49416' +- '49424' +- '49440' +- '49472' +- '49536' +- '49664' +- '49665' +- '49666' +- '49668' +- '49672' +- '49680' +- '49696' +- '49728' +- '49792' +- '49920' +- '50176' +- '50177' +- '50178' +- '50180' +- '50184' +- '50192' +- '50208' +- '50240' +- '50304' +- '50432' +- '50688' +- '51200' +- '51201' +- '51202' +- '51204' +- '51208' +- '51216' +- '51232' +- '51264' +- '51328' +- '51456' +- '51712' +- '52224' +- '53248' +- '53249' +- '53250' +- '53252' +- '53256' +- '53264' +- '53280' +- '53312' +- '53376' +- '53504' +- '53760' +- '54272' +- '55296' +- '57344' +- '57345' +- '57346' +- '57348' +- '57352' +- '57360' +- '57376' +- '57408' +- '57472' +- '57600' +- '57856' +- '58368' +- '59392' +- '61440' +init: null +input_size: 80 +cmvn_file: null +ctc_conf: + dropout_rate: 0.0 + ctc_type: builtin + reduce: true + ignore_nan_grad: true +joint_net_conf: null +use_preprocessor: true +token_type: char +bpemodel: null +non_linguistic_symbols: null +cleaner: null +g2p: null +speech_volume_normalize: null +rir_scp: null +rir_apply_prob: 1.0 +noise_scp: null +noise_apply_prob: 1.0 +noise_db_range: '13_15' +specaug: null +specaug_conf: {} +normalize: null +normalize_conf: {} +label_aggregator: null +label_aggregator_conf: {} +model: sond +model_conf: + lsm_weight: 0.1 + length_normalized_loss: true + max_spk_num: 16 + normalize_speech_speaker: true +# speech encoder +encoder: resnet34_sp_l2reg +encoder_conf: + # pass by model, equal to feature dim + # input_size: 80 + batchnorm_momentum: 0.01 + pooling_type: "window_shift" + pool_size: 20 + stride: 1 + tf2torch_tensor_name_prefix_torch: encoder + tf2torch_tensor_name_prefix_tf: EAND/speech_encoder +speaker_encoder: null +speaker_encoder_conf: {} +ci_scorer: conv +ci_scorer_conf: + input_units: 512 + num_layers: 3 + num_units: 512 + kernel_size: 1 + dropout_rate: 0.0 + position_encoder: null + out_units: 1 + out_norm: false + auxiliary_states: false + tf2torch_tensor_name_prefix_torch: ci_scorer + tf2torch_tensor_name_prefix_tf: EAND/compute_distance_layer/ci_scorer +cd_scorer: san +cd_scorer_conf: + input_size: 512 + output_size: 512 + out_units: 1 + attention_heads: 4 + linear_units: 1024 + num_blocks: 4 + dropout_rate: 0.0 + positional_dropout_rate: 0.0 + attention_dropout_rate: 0.0 + # use string "null" to remove input layer + input_layer: "null" + pos_enc_class: null + normalize_before: true + tf2torch_tensor_name_prefix_torch: cd_scorer + tf2torch_tensor_name_prefix_tf: EAND/compute_distance_layer/cd_scorer +# post net +decoder: fsmn +decoder_conf: + in_units: 32 + out_units: 2517 + filter_size: 31 + fsmn_num_layers: 6 + dnn_num_layers: 1 + num_memory_units: 16 + ffn_inner_dim: 512 + dropout_rate: 0.0 + tf2torch_tensor_name_prefix_torch: decoder + tf2torch_tensor_name_prefix_tf: EAND/post_net +frontend: null +frontend_conf: + fs: 8000 + window: povey + n_mels: 80 + frame_length: 25 + frame_shift: 10 + filter_length_min: -1 + filter_length_max: -1 + lfr_m: 1 + lfr_n: 1 + dither: 0.0 + snip_edges: false + upsacle_samples: false +num_worker_count: 0 +required: +- output_dir +- token_list +oss_bucket: 'null' +version: 0.1.4 diff --git a/egs/callhome/diarization/sond/unit_test.py b/egs/callhome/diarization/sond/unit_test.py new file mode 100644 index 000000000..a48eda148 --- /dev/null +++ b/egs/callhome/diarization/sond/unit_test.py @@ -0,0 +1,97 @@ +from funasr.bin.diar_inference_launch import inference_launch +import os + + +def test_fbank_cpu_infer(): + diar_config_path = "sond_fbank.yaml" + diar_model_path = "sond.pb" + output_dir = "./outputs" + data_path_and_name_and_type = [ + ("data/unit_test/test_feats.scp", "speech", "kaldi_ark"), + ("data/unit_test/test_profile.scp", "profile", "kaldi_ark"), + ] + pipeline = inference_launch( + mode="sond", + diar_train_config=diar_config_path, + diar_model_file=diar_model_path, + output_dir=output_dir, + num_workers=0, + log_level="INFO", + ) + results = pipeline(data_path_and_name_and_type) + print(results) + + +def test_fbank_gpu_infer(): + diar_config_path = "sond_fbank.yaml" + diar_model_path = "sond.pb" + output_dir = "./outputs" + data_path_and_name_and_type = [ + ("data/unit_test/test_feats.scp", "speech", "kaldi_ark"), + ("data/unit_test/test_profile.scp", "profile", "kaldi_ark"), + ] + pipeline = inference_launch( + mode="sond", + diar_train_config=diar_config_path, + diar_model_file=diar_model_path, + output_dir=output_dir, + ngpu=1, + num_workers=1, + log_level="INFO", + ) + results = pipeline(data_path_and_name_and_type) + print(results) + + +def test_wav_gpu_infer(): + diar_config_path = "config.yaml" + diar_model_path = "sond.pb" + output_dir = "./outputs" + data_path_and_name_and_type = [ + ("data/unit_test/test_wav.scp", "speech", "sound"), + ("data/unit_test/test_profile.scp", "profile", "kaldi_ark"), + ] + pipeline = inference_launch( + mode="sond", + diar_train_config=diar_config_path, + diar_model_file=diar_model_path, + output_dir=output_dir, + ngpu=1, + num_workers=1, + log_level="WARNING", + ) + results = pipeline(data_path_and_name_and_type) + print(results) + + +def test_without_profile_gpu_infer(): + diar_config_path = "config.yaml" + diar_model_path = "sond.pb" + output_dir = "./outputs" + raw_inputs = [[ + "data/unit_test/raw_inputs/record.wav", + "data/unit_test/raw_inputs/spk1.wav", + "data/unit_test/raw_inputs/spk2.wav", + "data/unit_test/raw_inputs/spk3.wav", + "data/unit_test/raw_inputs/spk4.wav" + ]] + pipeline = inference_launch( + mode="sond_demo", + diar_train_config=diar_config_path, + diar_model_file=diar_model_path, + output_dir=output_dir, + ngpu=1, + num_workers=1, + log_level="WARNING", + param_dict={}, + ) + results = pipeline(raw_inputs=raw_inputs) + print(results) + + +if __name__ == '__main__': + os.environ["CUDA_VISIBLE_DEVICES"] = "7" + test_fbank_cpu_infer() + # test_fbank_gpu_infer() + # test_wav_gpu_infer() + # test_without_profile_gpu_infer() diff --git a/egs/mars/sd/local_run.sh b/egs/mars/sd/local_run.sh index 3b319f46e..4516e9f96 100755 --- a/egs/mars/sd/local_run.sh +++ b/egs/mars/sd/local_run.sh @@ -49,7 +49,7 @@ asr_config=conf/train_asr_conformer.yaml model_dir="baseline_$(basename "${asr_config}" .yaml)_${feats_type}_${lang}_${token_type}_${tag}" inference_config=conf/decode_asr_transformer.yaml -inference_asr_model=valid.acc.ave_10best.pth +inference_asr_model=valid.acc.ave_10best.pb # you can set gpu num for decoding here gpuid_list=$CUDA_VISIBLE_DEVICES # set gpus for decoding, the same as training stage by default diff --git a/egs_modelscope/asr/data2vec/speech_data2vec_pretrain-paraformer-zh-cn-aishell2-16k/README.md b/egs_modelscope/asr/data2vec/speech_data2vec_pretrain-paraformer-zh-cn-aishell2-16k/README.md index c2e4354c1..053986d3d 100644 --- a/egs_modelscope/asr/data2vec/speech_data2vec_pretrain-paraformer-zh-cn-aishell2-16k/README.md +++ b/egs_modelscope/asr/data2vec/speech_data2vec_pretrain-paraformer-zh-cn-aishell2-16k/README.md @@ -41,7 +41,7 @@ The decoding results can be found in `$output_dir/1best_recog/text.cer`, which i - Modify inference related parameters in `infer_after_finetune.py` - output_dir: # result dir - data_dir: # the dataset dir needs to include `test/wav.scp`. If `test/text` is also exists, CER will be computed~~~~ - - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pth` + - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pb` - Then you can run the pipeline to finetune with: ```python diff --git a/egs_modelscope/asr/data2vec/speech_data2vec_pretrain-paraformer-zh-cn-aishell2-16k/infer_after_finetune.py b/egs_modelscope/asr/data2vec/speech_data2vec_pretrain-paraformer-zh-cn-aishell2-16k/infer_after_finetune.py index 56c282ce2..b3260672c 100644 --- a/egs_modelscope/asr/data2vec/speech_data2vec_pretrain-paraformer-zh-cn-aishell2-16k/infer_after_finetune.py +++ b/egs_modelscope/asr/data2vec/speech_data2vec_pretrain-paraformer-zh-cn-aishell2-16k/infer_after_finetune.py @@ -48,5 +48,5 @@ if __name__ == '__main__': params["required_files"] = ["am.mvn", "decoding.yaml", "configuration.json"] params["output_dir"] = "./checkpoint" params["data_dir"] = "./data/test" - params["decoding_model_name"] = "valid.cer_ctc.ave.pth" + params["decoding_model_name"] = "valid.cer_ctc.ave.pb" modelscope_infer_after_finetune(params) diff --git a/egs_modelscope/asr/data2vec/speech_data2vec_pretrain-zh-cn-aishell2-16k-pytorch/README.md b/egs_modelscope/asr/data2vec/speech_data2vec_pretrain-zh-cn-aishell2-16k-pytorch/README.md index c2e4354c1..053986d3d 100644 --- a/egs_modelscope/asr/data2vec/speech_data2vec_pretrain-zh-cn-aishell2-16k-pytorch/README.md +++ b/egs_modelscope/asr/data2vec/speech_data2vec_pretrain-zh-cn-aishell2-16k-pytorch/README.md @@ -41,7 +41,7 @@ The decoding results can be found in `$output_dir/1best_recog/text.cer`, which i - Modify inference related parameters in `infer_after_finetune.py` - output_dir: # result dir - data_dir: # the dataset dir needs to include `test/wav.scp`. If `test/text` is also exists, CER will be computed~~~~ - - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pth` + - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pb` - Then you can run the pipeline to finetune with: ```python diff --git a/egs_modelscope/asr/data2vec/speech_data2vec_pretrain-zh-cn-aishell2-16k-pytorch/infer_after_finetune.py b/egs_modelscope/asr/data2vec/speech_data2vec_pretrain-zh-cn-aishell2-16k-pytorch/infer_after_finetune.py index e163999b7..2f038a85a 100644 --- a/egs_modelscope/asr/data2vec/speech_data2vec_pretrain-zh-cn-aishell2-16k-pytorch/infer_after_finetune.py +++ b/egs_modelscope/asr/data2vec/speech_data2vec_pretrain-zh-cn-aishell2-16k-pytorch/infer_after_finetune.py @@ -48,5 +48,5 @@ if __name__ == '__main__': params["required_files"] = ["am.mvn", "decoding.yaml", "configuration.json"] params["output_dir"] = "./checkpoint" params["data_dir"] = "./data/test" - params["decoding_model_name"] = "valid.cer_ctc.ave.pth" + params["decoding_model_name"] = "valid.cer_ctc.ave.pb" modelscope_infer_after_finetune(params) diff --git a/egs_modelscope/asr/mfcca/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/README.md b/egs_modelscope/asr/mfcca/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/README.md index 9097e7ab9..16aeada4b 100644 --- a/egs_modelscope/asr/mfcca/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/README.md +++ b/egs_modelscope/asr/mfcca/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/README.md @@ -41,7 +41,7 @@ The decoding results can be found in `$output_dir/1best_recog/text.sp.cer` and ` - Modify inference related parameters in `infer_after_finetune.py` - output_dir: # result dir - data_dir: # the dataset dir needs to include `test/wav.scp`. If `test/text` is also exists, CER will be computed - - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pth` + - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pb` - Then you can run the pipeline to finetune with: ```python diff --git a/egs_modelscope/asr/mfcca/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/finetune.py b/egs_modelscope/asr/mfcca/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/finetune.py index bf8176ed1..7db085af1 100755 --- a/egs_modelscope/asr/mfcca/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/finetune.py +++ b/egs_modelscope/asr/mfcca/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/finetune.py @@ -31,5 +31,5 @@ if __name__ == '__main__': params.batch_bins = 1000 # batch size,如果dataset_type="small",batch_bins单位为fbank特征帧数,如果dataset_type="large",batch_bins单位为毫秒, params.max_epoch = 10 # 最大训练轮数 params.lr = 0.0001 # 设置学习率 - params.model_revision = 'v1.0.0' + params.model_revision = 'v3.0.0' modelscope_finetune(params) diff --git a/egs_modelscope/asr/mfcca/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/infer.py b/egs_modelscope/asr/mfcca/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/infer.py index fa22aad05..b3bfe8e24 100755 --- a/egs_modelscope/asr/mfcca/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/infer.py +++ b/egs_modelscope/asr/mfcca/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/infer.py @@ -19,7 +19,7 @@ def modelscope_infer_core(output_dir, split_dir, njob, idx): inference_pipline = pipeline( task=Tasks.auto_speech_recognition, model='NPU-ASLP/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950', - model_revision='v1.0.0', + model_revision='v3.0.0', output_dir=output_dir_job, batch_size=1, ) diff --git a/egs_modelscope/asr/mfcca/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/infer_after_finetune.py b/egs_modelscope/asr/mfcca/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/infer_after_finetune.py index e714a3d03..333b66a72 100755 --- a/egs_modelscope/asr/mfcca/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/infer_after_finetune.py +++ b/egs_modelscope/asr/mfcca/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/infer_after_finetune.py @@ -63,5 +63,5 @@ if __name__ == '__main__': params["required_files"] = ["feats_stats.npz", "decoding.yaml", "configuration.json"] params["output_dir"] = "./checkpoint" params["data_dir"] = "./example_data/validation" - params["decoding_model_name"] = "valid.acc.ave.pth" + params["decoding_model_name"] = "valid.acc.ave.pb" modelscope_infer_after_finetune(params) diff --git a/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-aishell1-vocab8404-pytorch/infer.py b/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-aishell1-vocab8404-pytorch/infer.py index dd3fb4886..2fceb48f8 100644 --- a/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-aishell1-vocab8404-pytorch/infer.py +++ b/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-aishell1-vocab8404-pytorch/infer.py @@ -8,9 +8,14 @@ from modelscope.utils.constant import Tasks from funasr.utils.compute_wer import compute_wer -def modelscope_infer_core(output_dir, split_dir, njob, idx): +def modelscope_infer_core(output_dir, split_dir, njob, idx, batch_size, ngpu, model): output_dir_job = os.path.join(output_dir, "output.{}".format(idx)) - gpu_id = (int(idx) - 1) // njob + if ngpu > 0: + use_gpu = 1 + gpu_id = int(idx) - 1 + else: + use_gpu = 0 + gpu_id = -1 if "CUDA_VISIBLE_DEVICES" in os.environ.keys(): gpu_list = os.environ['CUDA_VISIBLE_DEVICES'].split(",") os.environ['CUDA_VISIBLE_DEVICES'] = str(gpu_list[gpu_id]) @@ -18,9 +23,10 @@ def modelscope_infer_core(output_dir, split_dir, njob, idx): os.environ['CUDA_VISIBLE_DEVICES'] = str(gpu_id) inference_pipline = pipeline( task=Tasks.auto_speech_recognition, - model="damo/speech_paraformer-large_asr_nat-zh-cn-16k-aishell1-vocab8404-pytorch", + model=model, output_dir=output_dir_job, - batch_size=64 + batch_size=batch_size, + ngpu=use_gpu, ) audio_in = os.path.join(split_dir, "wav.{}.scp".format(idx)) inference_pipline(audio_in=audio_in) @@ -30,13 +36,18 @@ def modelscope_infer(params): # prepare for multi-GPU decoding ngpu = params["ngpu"] njob = params["njob"] + batch_size = params["batch_size"] output_dir = params["output_dir"] + model = params["model"] if os.path.exists(output_dir): shutil.rmtree(output_dir) os.mkdir(output_dir) split_dir = os.path.join(output_dir, "split") os.mkdir(split_dir) - nj = ngpu * njob + if ngpu > 0: + nj = ngpu + elif ngpu == 0: + nj = njob wav_scp_file = os.path.join(params["data_dir"], "wav.scp") with open(wav_scp_file) as f: lines = f.readlines() @@ -56,7 +67,7 @@ def modelscope_infer(params): p = Pool(nj) for i in range(nj): p.apply_async(modelscope_infer_core, - args=(output_dir, split_dir, njob, str(i + 1))) + args=(output_dir, split_dir, njob, str(i + 1), batch_size, ngpu, model)) p.close() p.join() @@ -81,8 +92,10 @@ def modelscope_infer(params): if __name__ == "__main__": params = {} + params["model"] = "damo/speech_paraformer-large_asr_nat-zh-cn-16k-aishell1-vocab8404-pytorch" params["data_dir"] = "./data/test" params["output_dir"] = "./results" - params["ngpu"] = 1 - params["njob"] = 1 - modelscope_infer(params) + params["ngpu"] = 1 # if ngpu > 0, will use gpu decoding + params["njob"] = 1 # if ngpu = 0, will use cpu decoding + params["batch_size"] = 64 + modelscope_infer(params) \ No newline at end of file diff --git a/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-aishell1-vocab8404-pytorch/infer_after_finetune.py b/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-aishell1-vocab8404-pytorch/infer_after_finetune.py index 6c34ed099..fafe565f1 100644 --- a/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-aishell1-vocab8404-pytorch/infer_after_finetune.py +++ b/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-aishell1-vocab8404-pytorch/infer_after_finetune.py @@ -4,23 +4,18 @@ import shutil from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks +from modelscope.hub.snapshot_download import snapshot_download from funasr.utils.compute_wer import compute_wer - def modelscope_infer_after_finetune(params): # prepare for decoding - pretrained_model_path = os.path.join(os.environ["HOME"], ".cache/modelscope/hub", params["modelscope_model_name"]) - for file_name in params["required_files"]: - if file_name == "configuration.json": - with open(os.path.join(pretrained_model_path, file_name)) as f: - config_dict = json.load(f) - config_dict["model"]["am_model_name"] = params["decoding_model_name"] - with open(os.path.join(params["output_dir"], "configuration.json"), "w") as f: - json.dump(config_dict, f, indent=4, separators=(',', ': ')) - else: - shutil.copy(os.path.join(pretrained_model_path, file_name), - os.path.join(params["output_dir"], file_name)) + + try: + pretrained_model_path = snapshot_download(params["modelscope_model_name"], cache_dir=params["output_dir"]) + except BaseException: + raise BaseException(f"Please download pretrain model from ModelScope firstly.") + shutil.copy(os.path.join(params["output_dir"], params["decoding_model_name"]), os.path.join(pretrained_model_path, "model.pb")) decoding_path = os.path.join(params["output_dir"], "decode_results") if os.path.exists(decoding_path): shutil.rmtree(decoding_path) @@ -29,9 +24,9 @@ def modelscope_infer_after_finetune(params): # decoding inference_pipeline = pipeline( task=Tasks.auto_speech_recognition, - model=params["output_dir"], + model=pretrained_model_path, output_dir=decoding_path, - batch_size=64 + batch_size=params["batch_size"] ) audio_in = os.path.join(params["data_dir"], "wav.scp") inference_pipeline(audio_in=audio_in) @@ -46,8 +41,8 @@ def modelscope_infer_after_finetune(params): if __name__ == '__main__': params = {} params["modelscope_model_name"] = "damo/speech_paraformer-large_asr_nat-zh-cn-16k-aishell1-vocab8404-pytorch" - params["required_files"] = ["am.mvn", "decoding.yaml", "configuration.json"] params["output_dir"] = "./checkpoint" params["data_dir"] = "./data/test" - params["decoding_model_name"] = "valid.acc.ave_10best.pth" - modelscope_infer_after_finetune(params) + params["decoding_model_name"] = "valid.acc.ave_10best.pb" + params["batch_size"] = 64 + modelscope_infer_after_finetune(params) \ No newline at end of file diff --git a/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-aishell2-vocab8404-pytorch/infer.py b/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-aishell2-vocab8404-pytorch/infer.py index d616d3e22..d70af7245 100644 --- a/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-aishell2-vocab8404-pytorch/infer.py +++ b/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-aishell2-vocab8404-pytorch/infer.py @@ -8,9 +8,14 @@ from modelscope.utils.constant import Tasks from funasr.utils.compute_wer import compute_wer -def modelscope_infer_core(output_dir, split_dir, njob, idx): +def modelscope_infer_core(output_dir, split_dir, njob, idx, batch_size, ngpu, model): output_dir_job = os.path.join(output_dir, "output.{}".format(idx)) - gpu_id = (int(idx) - 1) // njob + if ngpu > 0: + use_gpu = 1 + gpu_id = int(idx) - 1 + else: + use_gpu = 0 + gpu_id = -1 if "CUDA_VISIBLE_DEVICES" in os.environ.keys(): gpu_list = os.environ['CUDA_VISIBLE_DEVICES'].split(",") os.environ['CUDA_VISIBLE_DEVICES'] = str(gpu_list[gpu_id]) @@ -18,9 +23,10 @@ def modelscope_infer_core(output_dir, split_dir, njob, idx): os.environ['CUDA_VISIBLE_DEVICES'] = str(gpu_id) inference_pipline = pipeline( task=Tasks.auto_speech_recognition, - model="damo/speech_paraformer-large_asr_nat-zh-cn-16k-aishell2-vocab8404-pytorch", + model=model, output_dir=output_dir_job, - batch_size=64 + batch_size=batch_size, + ngpu=use_gpu, ) audio_in = os.path.join(split_dir, "wav.{}.scp".format(idx)) inference_pipline(audio_in=audio_in) @@ -30,13 +36,18 @@ def modelscope_infer(params): # prepare for multi-GPU decoding ngpu = params["ngpu"] njob = params["njob"] + batch_size = params["batch_size"] output_dir = params["output_dir"] + model = params["model"] if os.path.exists(output_dir): shutil.rmtree(output_dir) os.mkdir(output_dir) split_dir = os.path.join(output_dir, "split") os.mkdir(split_dir) - nj = ngpu * njob + if ngpu > 0: + nj = ngpu + elif ngpu == 0: + nj = njob wav_scp_file = os.path.join(params["data_dir"], "wav.scp") with open(wav_scp_file) as f: lines = f.readlines() @@ -56,7 +67,7 @@ def modelscope_infer(params): p = Pool(nj) for i in range(nj): p.apply_async(modelscope_infer_core, - args=(output_dir, split_dir, njob, str(i + 1))) + args=(output_dir, split_dir, njob, str(i + 1), batch_size, ngpu, model)) p.close() p.join() @@ -81,8 +92,10 @@ def modelscope_infer(params): if __name__ == "__main__": params = {} + params["model"] = "damo/speech_paraformer-large_asr_nat-zh-cn-16k-aishell2-vocab8404-pytorch" params["data_dir"] = "./data/test" params["output_dir"] = "./results" - params["ngpu"] = 1 - params["njob"] = 1 - modelscope_infer(params) + params["ngpu"] = 1 # if ngpu > 0, will use gpu decoding + params["njob"] = 1 # if ngpu = 0, will use cpu decoding + params["batch_size"] = 64 + modelscope_infer(params) \ No newline at end of file diff --git a/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-aishell2-vocab8404-pytorch/infer_after_finetune.py b/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-aishell2-vocab8404-pytorch/infer_after_finetune.py index 6140bb71f..731cafe15 100644 --- a/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-aishell2-vocab8404-pytorch/infer_after_finetune.py +++ b/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-aishell2-vocab8404-pytorch/infer_after_finetune.py @@ -4,23 +4,18 @@ import shutil from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks +from modelscope.hub.snapshot_download import snapshot_download from funasr.utils.compute_wer import compute_wer - def modelscope_infer_after_finetune(params): # prepare for decoding - pretrained_model_path = os.path.join(os.environ["HOME"], ".cache/modelscope/hub", params["modelscope_model_name"]) - for file_name in params["required_files"]: - if file_name == "configuration.json": - with open(os.path.join(pretrained_model_path, file_name)) as f: - config_dict = json.load(f) - config_dict["model"]["am_model_name"] = params["decoding_model_name"] - with open(os.path.join(params["output_dir"], "configuration.json"), "w") as f: - json.dump(config_dict, f, indent=4, separators=(',', ': ')) - else: - shutil.copy(os.path.join(pretrained_model_path, file_name), - os.path.join(params["output_dir"], file_name)) + + try: + pretrained_model_path = snapshot_download(params["modelscope_model_name"], cache_dir=params["output_dir"]) + except BaseException: + raise BaseException(f"Please download pretrain model from ModelScope firstly.") + shutil.copy(os.path.join(params["output_dir"], params["decoding_model_name"]), os.path.join(pretrained_model_path, "model.pb")) decoding_path = os.path.join(params["output_dir"], "decode_results") if os.path.exists(decoding_path): shutil.rmtree(decoding_path) @@ -29,9 +24,9 @@ def modelscope_infer_after_finetune(params): # decoding inference_pipeline = pipeline( task=Tasks.auto_speech_recognition, - model=params["output_dir"], + model=pretrained_model_path, output_dir=decoding_path, - batch_size=64 + batch_size=params["batch_size"] ) audio_in = os.path.join(params["data_dir"], "wav.scp") inference_pipeline(audio_in=audio_in) @@ -46,8 +41,8 @@ def modelscope_infer_after_finetune(params): if __name__ == '__main__': params = {} params["modelscope_model_name"] = "damo/speech_paraformer-large_asr_nat-zh-cn-16k-aishell2-vocab8404-pytorch" - params["required_files"] = ["am.mvn", "decoding.yaml", "configuration.json"] params["output_dir"] = "./checkpoint" params["data_dir"] = "./data/test" - params["decoding_model_name"] = "valid.acc.ave_10best.pth" - modelscope_infer_after_finetune(params) + params["decoding_model_name"] = "valid.acc.ave_10best.pb" + params["batch_size"] = 64 + modelscope_infer_after_finetune(params) \ No newline at end of file diff --git a/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/README.md b/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/README.md index dfd509dd4..a0443614f 100644 --- a/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/README.md +++ b/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/README.md @@ -22,10 +22,12 @@ Or you can use the finetuned model for inference directly. - Setting parameters in `infer.py` + - model: # model name on ModelScope - data_dir: # the dataset dir needs to include `test/wav.scp`. If `test/text` is also exists, CER will be computed - output_dir: # result dir - - ngpu: # the number of GPUs for decoding - - njob: # the number of jobs for each GPU + - ngpu: # the number of GPUs for decoding, if `ngpu` > 0, use GPU decoding + - njob: # the number of jobs for CPU decoding, if `ngpu` = 0, use CPU decoding, please set `njob` + - batch_size: # batchsize of inference - Then you can run the pipeline to infer with: ```python @@ -39,9 +41,11 @@ The decoding results can be found in `$output_dir/1best_recog/text.cer`, which i ### Inference using local finetuned model - Modify inference related parameters in `infer_after_finetune.py` + - modelscope_model_name: # model name on ModelScope - output_dir: # result dir - data_dir: # the dataset dir needs to include `test/wav.scp`. If `test/text` is also exists, CER will be computed - - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pth` + - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pb` + - batch_size: # batchsize of inference - Then you can run the pipeline to finetune with: ```python diff --git a/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/infer.py b/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/infer.py index f9f61147e..795a1e7c5 100644 --- a/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/infer.py +++ b/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/infer.py @@ -8,9 +8,14 @@ from modelscope.utils.constant import Tasks from funasr.utils.compute_wer import compute_wer -def modelscope_infer_core(output_dir, split_dir, njob, idx): +def modelscope_infer_core(output_dir, split_dir, njob, idx, batch_size, ngpu, model): output_dir_job = os.path.join(output_dir, "output.{}".format(idx)) - gpu_id = (int(idx) - 1) // njob + if ngpu > 0: + use_gpu = 1 + gpu_id = int(idx) - 1 + else: + use_gpu = 0 + gpu_id = -1 if "CUDA_VISIBLE_DEVICES" in os.environ.keys(): gpu_list = os.environ['CUDA_VISIBLE_DEVICES'].split(",") os.environ['CUDA_VISIBLE_DEVICES'] = str(gpu_list[gpu_id]) @@ -18,9 +23,10 @@ def modelscope_infer_core(output_dir, split_dir, njob, idx): os.environ['CUDA_VISIBLE_DEVICES'] = str(gpu_id) inference_pipline = pipeline( task=Tasks.auto_speech_recognition, - model="damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch", + model=model, output_dir=output_dir_job, - batch_size=64 + batch_size=batch_size, + ngpu=use_gpu, ) audio_in = os.path.join(split_dir, "wav.{}.scp".format(idx)) inference_pipline(audio_in=audio_in) @@ -30,13 +36,18 @@ def modelscope_infer(params): # prepare for multi-GPU decoding ngpu = params["ngpu"] njob = params["njob"] + batch_size = params["batch_size"] output_dir = params["output_dir"] + model = params["model"] if os.path.exists(output_dir): shutil.rmtree(output_dir) os.mkdir(output_dir) split_dir = os.path.join(output_dir, "split") os.mkdir(split_dir) - nj = ngpu * njob + if ngpu > 0: + nj = ngpu + elif ngpu == 0: + nj = njob wav_scp_file = os.path.join(params["data_dir"], "wav.scp") with open(wav_scp_file) as f: lines = f.readlines() @@ -56,7 +67,7 @@ def modelscope_infer(params): p = Pool(nj) for i in range(nj): p.apply_async(modelscope_infer_core, - args=(output_dir, split_dir, njob, str(i + 1))) + args=(output_dir, split_dir, njob, str(i + 1), batch_size, ngpu, model)) p.close() p.join() @@ -81,8 +92,10 @@ def modelscope_infer(params): if __name__ == "__main__": params = {} + params["model"] = "damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch" params["data_dir"] = "./data/test" params["output_dir"] = "./results" - params["ngpu"] = 1 - params["njob"] = 1 - modelscope_infer(params) + params["ngpu"] = 1 # if ngpu > 0, will use gpu decoding + params["njob"] = 1 # if ngpu = 0, will use cpu decoding + params["batch_size"] = 64 + modelscope_infer(params) \ No newline at end of file diff --git a/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/infer_after_finetune.py b/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/infer_after_finetune.py index 94393ec5e..295c95d7f 100644 --- a/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/infer_after_finetune.py +++ b/egs_modelscope/asr/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/infer_after_finetune.py @@ -4,23 +4,18 @@ import shutil from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks +from modelscope.hub.snapshot_download import snapshot_download from funasr.utils.compute_wer import compute_wer - def modelscope_infer_after_finetune(params): # prepare for decoding - pretrained_model_path = os.path.join(os.environ["HOME"], ".cache/modelscope/hub", params["modelscope_model_name"]) - for file_name in params["required_files"]: - if file_name == "configuration.json": - with open(os.path.join(pretrained_model_path, file_name)) as f: - config_dict = json.load(f) - config_dict["model"]["am_model_name"] = params["decoding_model_name"] - with open(os.path.join(params["output_dir"], "configuration.json"), "w") as f: - json.dump(config_dict, f, indent=4, separators=(',', ': ')) - else: - shutil.copy(os.path.join(pretrained_model_path, file_name), - os.path.join(params["output_dir"], file_name)) + + try: + pretrained_model_path = snapshot_download(params["modelscope_model_name"], cache_dir=params["output_dir"]) + except BaseException: + raise BaseException(f"Please download pretrain model from ModelScope firstly.") + shutil.copy(os.path.join(params["output_dir"], params["decoding_model_name"]), os.path.join(pretrained_model_path, "model.pb")) decoding_path = os.path.join(params["output_dir"], "decode_results") if os.path.exists(decoding_path): shutil.rmtree(decoding_path) @@ -29,9 +24,9 @@ def modelscope_infer_after_finetune(params): # decoding inference_pipeline = pipeline( task=Tasks.auto_speech_recognition, - model=params["output_dir"], + model=pretrained_model_path, output_dir=decoding_path, - batch_size=64 + batch_size=params["batch_size"] ) audio_in = os.path.join(params["data_dir"], "wav.scp") inference_pipeline(audio_in=audio_in) @@ -46,8 +41,8 @@ def modelscope_infer_after_finetune(params): if __name__ == '__main__': params = {} params["modelscope_model_name"] = "damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch" - params["required_files"] = ["am.mvn", "decoding.yaml", "configuration.json"] params["output_dir"] = "./checkpoint" params["data_dir"] = "./data/test" - params["decoding_model_name"] = "valid.acc.ave_10best.pth" - modelscope_infer_after_finetune(params) + params["decoding_model_name"] = "valid.acc.ave_10best.pb" + params["batch_size"] = 64 + modelscope_infer_after_finetune(params) \ No newline at end of file diff --git a/egs_modelscope/asr/paraformer/speech_paraformer_asr_nat-zh-cn-8k-common-vocab8358-tensorflow1/infer.py b/egs_modelscope/asr/paraformer/speech_paraformer_asr_nat-zh-cn-8k-common-vocab8358-tensorflow1/infer.py index f08b31f7d..0b508fbc2 100644 --- a/egs_modelscope/asr/paraformer/speech_paraformer_asr_nat-zh-cn-8k-common-vocab8358-tensorflow1/infer.py +++ b/egs_modelscope/asr/paraformer/speech_paraformer_asr_nat-zh-cn-8k-common-vocab8358-tensorflow1/infer.py @@ -8,9 +8,14 @@ from modelscope.utils.constant import Tasks from funasr.utils.compute_wer import compute_wer -def modelscope_infer_core(output_dir, split_dir, njob, idx): +def modelscope_infer_core(output_dir, split_dir, njob, idx, batch_size, ngpu, model): output_dir_job = os.path.join(output_dir, "output.{}".format(idx)) - gpu_id = (int(idx) - 1) // njob + if ngpu > 0: + use_gpu = 1 + gpu_id = int(idx) - 1 + else: + use_gpu = 0 + gpu_id = -1 if "CUDA_VISIBLE_DEVICES" in os.environ.keys(): gpu_list = os.environ['CUDA_VISIBLE_DEVICES'].split(",") os.environ['CUDA_VISIBLE_DEVICES'] = str(gpu_list[gpu_id]) @@ -18,9 +23,10 @@ def modelscope_infer_core(output_dir, split_dir, njob, idx): os.environ['CUDA_VISIBLE_DEVICES'] = str(gpu_id) inference_pipline = pipeline( task=Tasks.auto_speech_recognition, - model="damo/speech_paraformer_asr_nat-zh-cn-8k-common-vocab8358-tensorflow1", + model=model, output_dir=output_dir_job, - batch_size=64 + batch_size=batch_size, + ngpu=use_gpu, ) audio_in = os.path.join(split_dir, "wav.{}.scp".format(idx)) inference_pipline(audio_in=audio_in) @@ -30,13 +36,18 @@ def modelscope_infer(params): # prepare for multi-GPU decoding ngpu = params["ngpu"] njob = params["njob"] + batch_size = params["batch_size"] output_dir = params["output_dir"] + model = params["model"] if os.path.exists(output_dir): shutil.rmtree(output_dir) os.mkdir(output_dir) split_dir = os.path.join(output_dir, "split") os.mkdir(split_dir) - nj = ngpu * njob + if ngpu > 0: + nj = ngpu + elif ngpu == 0: + nj = njob wav_scp_file = os.path.join(params["data_dir"], "wav.scp") with open(wav_scp_file) as f: lines = f.readlines() @@ -56,7 +67,7 @@ def modelscope_infer(params): p = Pool(nj) for i in range(nj): p.apply_async(modelscope_infer_core, - args=(output_dir, split_dir, njob, str(i + 1))) + args=(output_dir, split_dir, njob, str(i + 1), batch_size, ngpu, model)) p.close() p.join() @@ -81,8 +92,10 @@ def modelscope_infer(params): if __name__ == "__main__": params = {} + params["model"] = "damo/speech_paraformer_asr_nat-zh-cn-8k-common-vocab8358-tensorflow1" params["data_dir"] = "./data/test" params["output_dir"] = "./results" - params["ngpu"] = 1 - params["njob"] = 1 - modelscope_infer(params) + params["ngpu"] = 1 # if ngpu > 0, will use gpu decoding + params["njob"] = 1 # if ngpu = 0, will use cpu decoding + params["batch_size"] = 64 + modelscope_infer(params) \ No newline at end of file diff --git a/egs_modelscope/asr/paraformer/speech_paraformer_asr_nat-zh-cn-8k-common-vocab8358-tensorflow1/infer_after_finetune.py b/egs_modelscope/asr/paraformer/speech_paraformer_asr_nat-zh-cn-8k-common-vocab8358-tensorflow1/infer_after_finetune.py index 96102ccfa..e8fee02a0 100644 --- a/egs_modelscope/asr/paraformer/speech_paraformer_asr_nat-zh-cn-8k-common-vocab8358-tensorflow1/infer_after_finetune.py +++ b/egs_modelscope/asr/paraformer/speech_paraformer_asr_nat-zh-cn-8k-common-vocab8358-tensorflow1/infer_after_finetune.py @@ -4,23 +4,18 @@ import shutil from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks +from modelscope.hub.snapshot_download import snapshot_download from funasr.utils.compute_wer import compute_wer - def modelscope_infer_after_finetune(params): # prepare for decoding - pretrained_model_path = os.path.join(os.environ["HOME"], ".cache/modelscope/hub", params["modelscope_model_name"]) - for file_name in params["required_files"]: - if file_name == "configuration.json": - with open(os.path.join(pretrained_model_path, file_name)) as f: - config_dict = json.load(f) - config_dict["model"]["am_model_name"] = params["decoding_model_name"] - with open(os.path.join(params["output_dir"], "configuration.json"), "w") as f: - json.dump(config_dict, f, indent=4, separators=(',', ': ')) - else: - shutil.copy(os.path.join(pretrained_model_path, file_name), - os.path.join(params["output_dir"], file_name)) + + try: + pretrained_model_path = snapshot_download(params["modelscope_model_name"], cache_dir=params["output_dir"]) + except BaseException: + raise BaseException(f"Please download pretrain model from ModelScope firstly.") + shutil.copy(os.path.join(params["output_dir"], params["decoding_model_name"]), os.path.join(pretrained_model_path, "model.pb")) decoding_path = os.path.join(params["output_dir"], "decode_results") if os.path.exists(decoding_path): shutil.rmtree(decoding_path) @@ -29,9 +24,9 @@ def modelscope_infer_after_finetune(params): # decoding inference_pipeline = pipeline( task=Tasks.auto_speech_recognition, - model=params["output_dir"], + model=pretrained_model_path, output_dir=decoding_path, - batch_size=64 + batch_size=params["batch_size"] ) audio_in = os.path.join(params["data_dir"], "wav.scp") inference_pipeline(audio_in=audio_in) @@ -46,8 +41,8 @@ def modelscope_infer_after_finetune(params): if __name__ == '__main__': params = {} params["modelscope_model_name"] = "damo/speech_paraformer_asr_nat-zh-cn-8k-common-vocab8358-tensorflow1" - params["required_files"] = ["am.mvn", "decoding.yaml", "configuration.json"] params["output_dir"] = "./checkpoint" params["data_dir"] = "./data/test" - params["decoding_model_name"] = "valid.acc.ave_10best.pth" - modelscope_infer_after_finetune(params) + params["decoding_model_name"] = "valid.acc.ave_10best.pb" + params["batch_size"] = 64 + modelscope_infer_after_finetune(params) \ No newline at end of file diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-offline/README.md b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-offline/README.md index dfd509dd4..b68f1e921 100644 --- a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-offline/README.md +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-offline/README.md @@ -41,7 +41,7 @@ The decoding results can be found in `$output_dir/1best_recog/text.cer`, which i - Modify inference related parameters in `infer_after_finetune.py` - output_dir: # result dir - data_dir: # the dataset dir needs to include `test/wav.scp`. If `test/text` is also exists, CER will be computed - - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pth` + - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pb` - Then you can run the pipeline to finetune with: ```python diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-offline/infer_after_finetune.py b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-offline/infer_after_finetune.py index d91a40a6c..6593f4e3f 100644 --- a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-offline/infer_after_finetune.py +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-offline/infer_after_finetune.py @@ -50,5 +50,5 @@ if __name__ == '__main__': params["required_files"] = ["am.mvn", "decoding.yaml", "configuration.json"] params["output_dir"] = "./checkpoint" params["data_dir"] = "./data/test" - params["decoding_model_name"] = "20epoch.pth" + params["decoding_model_name"] = "20epoch.pb" modelscope_infer_after_finetune(params) diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-online/README.md b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-online/README.md index dfd509dd4..b68f1e921 100644 --- a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-online/README.md +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-online/README.md @@ -41,7 +41,7 @@ The decoding results can be found in `$output_dir/1best_recog/text.cer`, which i - Modify inference related parameters in `infer_after_finetune.py` - output_dir: # result dir - data_dir: # the dataset dir needs to include `test/wav.scp`. If `test/text` is also exists, CER will be computed - - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pth` + - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pb` - Then you can run the pipeline to finetune with: ```python diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-online/infer_after_finetune.py b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-online/infer_after_finetune.py index f9fb0db8a..f067c8193 100644 --- a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-online/infer_after_finetune.py +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-online/infer_after_finetune.py @@ -50,5 +50,5 @@ if __name__ == '__main__': params["required_files"] = ["am.mvn", "decoding.yaml", "configuration.json"] params["output_dir"] = "./checkpoint" params["data_dir"] = "./data/test" - params["decoding_model_name"] = "20epoch.pth" + params["decoding_model_name"] = "20epoch.pb" modelscope_infer_after_finetune(params) diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-he-16k-common-vocab1085-pytorch/finetune.py b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-he-16k-common-vocab1085-pytorch/finetune.py new file mode 100644 index 000000000..56fb58302 --- /dev/null +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-he-16k-common-vocab1085-pytorch/finetune.py @@ -0,0 +1,35 @@ +import os +from modelscope.metainfo import Trainers +from modelscope.trainers import build_trainer +from funasr.datasets.ms_dataset import MsDataset + + +def modelscope_finetune(params): + if not os.path.exists(params["output_dir"]): + os.makedirs(params["output_dir"], exist_ok=True) + # dataset split ["train", "validation"] + ds_dict = MsDataset.load(params["data_dir"]) + kwargs = dict( + model=params["model"], + model_revision=params["model_revision"], + data_dir=ds_dict, + dataset_type=params["dataset_type"], + work_dir=params["output_dir"], + batch_bins=params["batch_bins"], + max_epoch=params["max_epoch"], + lr=params["lr"]) + trainer = build_trainer(Trainers.speech_asr_trainer, default_args=kwargs) + trainer.train() + + +if __name__ == '__main__': + params = {} + params["output_dir"] = "./checkpoint" + params["data_dir"] = "./data" + params["batch_bins"] = 2000 + params["dataset_type"] = "small" + params["max_epoch"] = 50 + params["lr"] = 0.00005 + params["model"] = "damo/speech_UniASR_asr_2pass-he-16k-common-vocab1085-pytorch" + params["model_revision"] = None + modelscope_finetune(params) diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-he-16k-common-vocab1085-pytorch/infer.py b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-he-16k-common-vocab1085-pytorch/infer.py new file mode 100644 index 000000000..c54ab8c83 --- /dev/null +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-he-16k-common-vocab1085-pytorch/infer.py @@ -0,0 +1,13 @@ +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks + +if __name__ == "__main__": + audio_in = "https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_he.wav" + output_dir = "./results" + inference_pipline = pipeline( + task=Tasks.auto_speech_recognition, + model="damo/speech_UniASR_asr_2pass-he-16k-common-vocab1085-pytorch", + output_dir=output_dir, + ) + rec_result = inference_pipline(audio_in=audio_in, param_dict={"decoding_model":"offline"}) + print(rec_result) diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-ja-16k-common-vocab93-tensorflow1-offline/finetune.py b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-ja-16k-common-vocab93-tensorflow1-offline/finetune.py index 4a5efdbe9..5485ff56e 100644 --- a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-ja-16k-common-vocab93-tensorflow1-offline/finetune.py +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-ja-16k-common-vocab93-tensorflow1-offline/finetune.py @@ -30,6 +30,6 @@ if __name__ == '__main__': params["dataset_type"] = "small" params["max_epoch"] = 50 params["lr"] = 0.00005 - params["model"] = "damo/speech_UniASR_asr_2pass-ja-16k-common-vocab93-tensorflow1-online" + params["model"] = "damo/speech_UniASR_asr_2pass-ja-16k-common-vocab93-tensorflow1-offline" params["model_revision"] = None modelscope_finetune(params) diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-ja-16k-common-vocab93-tensorflow1-offline/infer.py b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-ja-16k-common-vocab93-tensorflow1-offline/infer.py index a053957d3..1a174bbca 100644 --- a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-ja-16k-common-vocab93-tensorflow1-offline/infer.py +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-ja-16k-common-vocab93-tensorflow1-offline/infer.py @@ -6,7 +6,7 @@ if __name__ == "__main__": output_dir = "./results" inference_pipline = pipeline( task=Tasks.auto_speech_recognition, - model="damo/speech_UniASR_asr_2pass-ja-16k-common-vocab93-tensorflow1-online", + model="damo/speech_UniASR_asr_2pass-ja-16k-common-vocab93-tensorflow1-offline", output_dir=output_dir, ) rec_result = inference_pipline(audio_in=audio_in, param_dict={"decoding_model":"offline"}) diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-minnan-16k-common-vocab3825/README.md b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-minnan-16k-common-vocab3825/README.md index dd947d329..9a84f9b57 100644 --- a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-minnan-16k-common-vocab3825/README.md +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-minnan-16k-common-vocab3825/README.md @@ -41,7 +41,7 @@ The decoding results can be found in `$output_dir/1best_recog/text.cer`, which i - Modify inference related parameters in `infer_after_finetune.py` - output_dir: # result dir - data_dir: # the dataset dir needs to include `test/wav.scp`. If `test/text` is also exists, CER will be computed - - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pth` + - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pb` - Then you can run the pipeline to finetune with: ```python diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-minnan-16k-common-vocab3825/infer_after_finetune.py b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-minnan-16k-common-vocab3825/infer_after_finetune.py index 030c2e278..d4df29e01 100644 --- a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-minnan-16k-common-vocab3825/infer_after_finetune.py +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-minnan-16k-common-vocab3825/infer_after_finetune.py @@ -50,5 +50,5 @@ if __name__ == '__main__': params["required_files"] = ["am.mvn", "decoding.yaml", "configuration.json"] params["output_dir"] = "./checkpoint" params["data_dir"] = "./data/test" - params["decoding_model_name"] = "20epoch.pth" + params["decoding_model_name"] = "20epoch.pb" modelscope_infer_after_finetune(params) diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-my-16k-common-vocab696-pytorch/finetune.py b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-my-16k-common-vocab696-pytorch/finetune.py new file mode 100644 index 000000000..8bbce606c --- /dev/null +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-my-16k-common-vocab696-pytorch/finetune.py @@ -0,0 +1,35 @@ +import os +from modelscope.metainfo import Trainers +from modelscope.trainers import build_trainer +from funasr.datasets.ms_dataset import MsDataset + + +def modelscope_finetune(params): + if not os.path.exists(params["output_dir"]): + os.makedirs(params["output_dir"], exist_ok=True) + # dataset split ["train", "validation"] + ds_dict = MsDataset.load(params["data_dir"]) + kwargs = dict( + model=params["model"], + model_revision=params["model_revision"], + data_dir=ds_dict, + dataset_type=params["dataset_type"], + work_dir=params["output_dir"], + batch_bins=params["batch_bins"], + max_epoch=params["max_epoch"], + lr=params["lr"]) + trainer = build_trainer(Trainers.speech_asr_trainer, default_args=kwargs) + trainer.train() + + +if __name__ == '__main__': + params = {} + params["output_dir"] = "./checkpoint" + params["data_dir"] = "./data" + params["batch_bins"] = 2000 + params["dataset_type"] = "small" + params["max_epoch"] = 50 + params["lr"] = 0.00005 + params["model"] = "damo/speech_UniASR_asr_2pass-my-16k-common-vocab696-pytorch" + params["model_revision"] = None + modelscope_finetune(params) diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-my-16k-common-vocab696-pytorch/infer.py b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-my-16k-common-vocab696-pytorch/infer.py new file mode 100644 index 000000000..cfd869f04 --- /dev/null +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-my-16k-common-vocab696-pytorch/infer.py @@ -0,0 +1,13 @@ +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks + +if __name__ == "__main__": + audio_in = "https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_my.wav" + output_dir = "./results" + inference_pipline = pipeline( + task=Tasks.auto_speech_recognition, + model="damo/speech_UniASR_asr_2pass-my-16k-common-vocab696-pytorch", + output_dir=output_dir, + ) + rec_result = inference_pipline(audio_in=audio_in, param_dict={"decoding_model":"offline"}) + print(rec_result) diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-pt-16k-common-vocab1617-tensorflow1-offline/finetune.py b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-pt-16k-common-vocab1617-tensorflow1-offline/finetune.py index 60f3c8208..512b844c6 100644 --- a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-pt-16k-common-vocab1617-tensorflow1-offline/finetune.py +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-pt-16k-common-vocab1617-tensorflow1-offline/finetune.py @@ -30,6 +30,6 @@ if __name__ == '__main__': params["dataset_type"] = "small" params["max_epoch"] = 50 params["lr"] = 0.00005 - params["model"] = "damo/speech_UniASR_asr_2pass-pt-16k-common-vocab1617-tensorflow1-online" + params["model"] = "damo/speech_UniASR_asr_2pass-pt-16k-common-vocab1617-tensorflow1-offline" params["model_revision"] = None modelscope_finetune(params) diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-pt-16k-common-vocab1617-tensorflow1-offline/infer.py b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-pt-16k-common-vocab1617-tensorflow1-offline/infer.py index 30a11ffd3..2dcb6638a 100644 --- a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-pt-16k-common-vocab1617-tensorflow1-offline/infer.py +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-pt-16k-common-vocab1617-tensorflow1-offline/infer.py @@ -6,7 +6,7 @@ if __name__ == "__main__": output_dir = "./results" inference_pipline = pipeline( task=Tasks.auto_speech_recognition, - model="damo/speech_UniASR_asr_2pass-pt-16k-common-vocab1617-tensorflow1-online", + model="damo/speech_UniASR_asr_2pass-pt-16k-common-vocab1617-tensorflow1-offline", output_dir=output_dir, ) rec_result = inference_pipline(audio_in=audio_in, param_dict={"decoding_model":"offline"}) diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-ur-16k-common-vocab877-pytorch/finetune.py b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-ur-16k-common-vocab877-pytorch/finetune.py new file mode 100644 index 000000000..5e313e533 --- /dev/null +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-ur-16k-common-vocab877-pytorch/finetune.py @@ -0,0 +1,35 @@ +import os +from modelscope.metainfo import Trainers +from modelscope.trainers import build_trainer +from funasr.datasets.ms_dataset import MsDataset + + +def modelscope_finetune(params): + if not os.path.exists(params["output_dir"]): + os.makedirs(params["output_dir"], exist_ok=True) + # dataset split ["train", "validation"] + ds_dict = MsDataset.load(params["data_dir"]) + kwargs = dict( + model=params["model"], + model_revision=params["model_revision"], + data_dir=ds_dict, + dataset_type=params["dataset_type"], + work_dir=params["output_dir"], + batch_bins=params["batch_bins"], + max_epoch=params["max_epoch"], + lr=params["lr"]) + trainer = build_trainer(Trainers.speech_asr_trainer, default_args=kwargs) + trainer.train() + + +if __name__ == '__main__': + params = {} + params["output_dir"] = "./checkpoint" + params["data_dir"] = "./data" + params["batch_bins"] = 2000 + params["dataset_type"] = "small" + params["max_epoch"] = 50 + params["lr"] = 0.00005 + params["model"] = "damo/speech_UniASR_asr_2pass-ur-16k-common-vocab877-pytorch" + params["model_revision"] = None + modelscope_finetune(params) diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-ur-16k-common-vocab877-pytorch/infer.py b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-ur-16k-common-vocab877-pytorch/infer.py new file mode 100644 index 000000000..e8c5524f0 --- /dev/null +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-ur-16k-common-vocab877-pytorch/infer.py @@ -0,0 +1,13 @@ +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks + +if __name__ == "__main__": + audio_in = "https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_ur.wav" + output_dir = "./results" + inference_pipline = pipeline( + task=Tasks.auto_speech_recognition, + model="damo/speech_UniASR_asr_2pass-ur-16k-common-vocab877-pytorch", + output_dir=output_dir, + ) + rec_result = inference_pipline(audio_in=audio_in, param_dict={"decoding_model":"offline"}) + print(rec_result) diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-offline/README.md b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-offline/README.md index dd947d329..9a84f9b57 100644 --- a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-offline/README.md +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-offline/README.md @@ -41,7 +41,7 @@ The decoding results can be found in `$output_dir/1best_recog/text.cer`, which i - Modify inference related parameters in `infer_after_finetune.py` - output_dir: # result dir - data_dir: # the dataset dir needs to include `test/wav.scp`. If `test/text` is also exists, CER will be computed - - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pth` + - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pb` - Then you can run the pipeline to finetune with: ```python diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-offline/infer_after_finetune.py b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-offline/infer_after_finetune.py index 3b39a1665..861fefb7f 100644 --- a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-offline/infer_after_finetune.py +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-offline/infer_after_finetune.py @@ -49,5 +49,5 @@ if __name__ == '__main__': params["required_files"] = ["am.mvn", "decoding.yaml", "configuration.json"] params["output_dir"] = "./checkpoint" params["data_dir"] = "./data/test" - params["decoding_model_name"] = "20epoch.pth" + params["decoding_model_name"] = "20epoch.pb" modelscope_infer_after_finetune(params) diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-online/README.md b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-online/README.md index dd947d329..eff933e8d 100644 --- a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-online/README.md +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-online/README.md @@ -41,7 +41,8 @@ The decoding results can be found in `$output_dir/1best_recog/text.cer`, which i - Modify inference related parameters in `infer_after_finetune.py` - output_dir: # result dir - data_dir: # the dataset dir needs to include `test/wav.scp`. If `test/text` is also exists, CER will be computed - - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pth` + - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave + .pb` - Then you can run the pipeline to finetune with: ```python diff --git a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-online/infer_after_finetune.py b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-online/infer_after_finetune.py index 4860cf743..d73cae267 100644 --- a/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-online/infer_after_finetune.py +++ b/egs_modelscope/asr/uniasr/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-online/infer_after_finetune.py @@ -49,5 +49,5 @@ if __name__ == '__main__': params["required_files"] = ["am.mvn", "decoding.yaml", "configuration.json"] params["output_dir"] = "./checkpoint" params["data_dir"] = "./data/test" - params["decoding_model_name"] = "20epoch.pth" + params["decoding_model_name"] = "20epoch.pb" modelscope_infer_after_finetune(params) diff --git a/egs_modelscope/asr_vad_punc/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch/README.md b/egs_modelscope/asr_vad_punc/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch/README.md index 1094bb5ff..94144efa7 100644 --- a/egs_modelscope/asr_vad_punc/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch/README.md +++ b/egs_modelscope/asr_vad_punc/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch/README.md @@ -34,7 +34,7 @@ Or you can use the finetuned model for inference directly. - Modify inference related parameters in `infer_after_finetune.py` - output_dir: # result dir - data_dir: # the dataset dir needs to include `test/wav.scp`. If `test/text` is also exists, CER will be computed - - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pth` + - decoding_model_name: # set the checkpoint name for decoding, e.g., `valid.cer_ctc.ave.pb` - Then you can run the pipeline to finetune with: ```python diff --git a/egs_modelscope/asr_vad_punc/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch/infer_after_finetune.py b/egs_modelscope/asr_vad_punc/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch/infer_after_finetune.py index 5f171b419..473019c70 100644 --- a/egs_modelscope/asr_vad_punc/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch/infer_after_finetune.py +++ b/egs_modelscope/asr_vad_punc/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch/infer_after_finetune.py @@ -4,27 +4,17 @@ import shutil from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks +from modelscope.hub.snapshot_download import snapshot_download from funasr.utils.compute_wer import compute_wer - def modelscope_infer_after_finetune(params): # prepare for decoding - if not os.path.exists(os.path.join(params["output_dir"], "punc")): - os.makedirs(os.path.join(params["output_dir"], "punc")) - if not os.path.exists(os.path.join(params["output_dir"], "vad")): - os.makedirs(os.path.join(params["output_dir"], "vad")) - pretrained_model_path = os.path.join(os.environ["HOME"], ".cache/modelscope/hub", params["modelscope_model_name"]) - for file_name in params["required_files"]: - if file_name == "configuration.json": - with open(os.path.join(pretrained_model_path, file_name)) as f: - config_dict = json.load(f) - config_dict["model"]["am_model_name"] = params["decoding_model_name"] - with open(os.path.join(params["output_dir"], "configuration.json"), "w") as f: - json.dump(config_dict, f, indent=4, separators=(',', ': ')) - else: - shutil.copy(os.path.join(pretrained_model_path, file_name), - os.path.join(params["output_dir"], file_name)) + + try: + pretrained_model_path = snapshot_download(params["modelscope_model_name"], cache_dir=params["output_dir"]) + except BaseException: + raise BaseException(f"Please download pretrain model from ModelScope firstly.")shutil.copy(os.path.join(params["output_dir"], params["decoding_model_name"]), os.path.join(pretrained_model_path, "model.pb")) decoding_path = os.path.join(params["output_dir"], "decode_results") if os.path.exists(decoding_path): shutil.rmtree(decoding_path) @@ -33,16 +23,16 @@ def modelscope_infer_after_finetune(params): # decoding inference_pipeline = pipeline( task=Tasks.auto_speech_recognition, - model=params["output_dir"], + model=pretrained_model_path, output_dir=decoding_path, - batch_size=64 + batch_size=params["batch_size"] ) audio_in = os.path.join(params["data_dir"], "wav.scp") inference_pipeline(audio_in=audio_in) # computer CER if GT text is set text_in = os.path.join(params["data_dir"], "text") - if text_in is not None: + if os.path.exists(text_in): text_proc_file = os.path.join(decoding_path, "1best_recog/token") compute_wer(text_in, text_proc_file, os.path.join(decoding_path, "text.cer")) @@ -50,8 +40,8 @@ def modelscope_infer_after_finetune(params): if __name__ == '__main__': params = {} params["modelscope_model_name"] = "damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch" - params["required_files"] = ["am.mvn", "decoding.yaml", "configuration.json", "punc/punc.pb", "punc/punc.yaml", "vad/vad.mvn", "vad/vad.pb", "vad/vad.yaml"] params["output_dir"] = "./checkpoint" params["data_dir"] = "./data/test" - params["decoding_model_name"] = "valid.acc.ave_10best.pth" - modelscope_infer_after_finetune(params) + params["decoding_model_name"] = "valid.acc.ave_10best.pb" + params["batch_size"] = 64 + modelscope_infer_after_finetune(params) \ No newline at end of file diff --git a/egs_modelscope/punctuation/punc_ct-transformer_zh-cn-common-vadrealtime-vocab272727/infer.py b/egs_modelscope/punctuation/punc_ct-transformer_zh-cn-common-vadrealtime-vocab272727/infer.py new file mode 100644 index 000000000..540e3cf64 --- /dev/null +++ b/egs_modelscope/punctuation/punc_ct-transformer_zh-cn-common-vadrealtime-vocab272727/infer.py @@ -0,0 +1,26 @@ + +##################text二进制数据##################### +inputs = "跨境河流是养育沿岸|人民的生命之源长期以来为帮助下游地区防灾减灾中方技术人员|在上游地区极为恶劣的自然条件下克服巨大困难甚至冒着生命危险|向印方提供汛期水文资料处理紧急事件中方重视印方在跨境河流问题上的关切|愿意进一步完善双方联合工作机制|凡是|中方能做的我们|都会去做而且会做得更好我请印度朋友们放心中国在上游的|任何开发利用都会经过科学|规划和论证兼顾上下游的利益" + +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks + +inference_pipeline = pipeline( + task=Tasks.punctuation, + model='damo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727', + model_revision="v1.0.0", + output_dir="./tmp/" +) + +vads = inputs.split("|") + +cache_out = [] +rec_result_all="outputs:" +for vad in vads: + rec_result = inference_pipeline(text_in=vad, cache=cache_out) + #print(rec_result) + cache_out = rec_result['cache'] + rec_result_all += rec_result['text'] + +print(rec_result_all) + diff --git a/egs_modelscope/punctuation/punc_ct-transformer_zh-cn-common-vocab272727-pytorch/infer.py b/egs_modelscope/punctuation/punc_ct-transformer_zh-cn-common-vocab272727-pytorch/infer.py index 8dac29299..0da8d25a1 100644 --- a/egs_modelscope/punctuation/punc_ct-transformer_zh-cn-common-vocab272727-pytorch/infer.py +++ b/egs_modelscope/punctuation/punc_ct-transformer_zh-cn-common-vocab272727-pytorch/infer.py @@ -15,7 +15,7 @@ from modelscope.utils.constant import Tasks inference_pipline = pipeline( task=Tasks.punctuation, model='damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch', - model_revision="v1.1.6", + model_revision="v1.1.7", output_dir="./tmp/" ) diff --git a/egs_modelscope/speaker_diarization/speech_diarization_eend-ola-en-us-callhome-8k/infer.py b/egs_modelscope/speaker_diarization/speech_diarization_eend-ola-en-us-callhome-8k/infer.py new file mode 100644 index 000000000..81cb2c629 --- /dev/null +++ b/egs_modelscope/speaker_diarization/speech_diarization_eend-ola-en-us-callhome-8k/infer.py @@ -0,0 +1,10 @@ +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks + +inference_diar_pipline = pipeline( + task=Tasks.speaker_diarization, + model='damo/speech_diarization_eend-ola-en-us-callhome-8k', + model_revision="v1.0.0", +) +results = inference_diar_pipline(audio_in=["https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/record2.wav"]) +print(results) \ No newline at end of file diff --git a/egs_modelscope/speaker_diarization/speech_diarization_sond-zh-cn-alimeeting-16k-n16k4-pytorch/unit_test.py b/egs_modelscope/speaker_diarization/speech_diarization_sond-zh-cn-alimeeting-16k-n16k4-pytorch/unit_test.py new file mode 100644 index 000000000..5f4563dbc --- /dev/null +++ b/egs_modelscope/speaker_diarization/speech_diarization_sond-zh-cn-alimeeting-16k-n16k4-pytorch/unit_test.py @@ -0,0 +1,25 @@ +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks + +# 初始化推理 pipeline +# 当以原始音频作为输入时使用配置文件 sond.yaml,并设置 mode 为sond_demo +inference_diar_pipline = pipeline( + mode="sond_demo", + num_workers=0, + task=Tasks.speaker_diarization, + diar_model_config="sond.yaml", + model='damo/speech_diarization_sond-en-us-callhome-8k-n16k4-pytorch', + sv_model="damo/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch", + sv_model_revision="master", +) + +# 以 audio_list 作为输入,其中第一个音频为待检测语音,后面的音频为不同说话人的声纹注册语音 +audio_list = [ + "https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/record.wav", + "https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/spk_A.wav", + "https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/spk_B.wav", + "https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/spk_B1.wav" +] + +results = inference_diar_pipline(audio_in=audio_list) +print(results) diff --git a/egs_modelscope/speaker_verification/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch/infer.py b/egs_modelscope/speaker_verification/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch/infer.py new file mode 100644 index 000000000..1fd9dc614 --- /dev/null +++ b/egs_modelscope/speaker_verification/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch/infer.py @@ -0,0 +1,39 @@ +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks +import numpy as np + +if __name__ == '__main__': + inference_sv_pipline = pipeline( + task=Tasks.speaker_verification, + model='damo/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch' + ) + + # extract speaker embedding + # for url use "spk_embedding" as key + rec_result = inference_sv_pipline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/sv_example_enroll.wav') + enroll = rec_result["spk_embedding"] + + # for local file use "spk_embedding" as key + rec_result = inference_sv_pipline(audio_in='example/sv_example_same.wav') + same = rec_result["spk_embedding"] + + import soundfile + wav = soundfile.read('example/sv_example_enroll.wav')[0] + # for raw inputs use "spk_embedding" as key + spk_embedding = inference_sv_pipline(audio_in=wav)["spk_embedding"] + + rec_result = inference_sv_pipline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/sv_example_different.wav') + different = rec_result["spk_embedding"] + + # calculate cosine similarity for same speaker + sv_threshold = 0.80 + same_cos = np.sum(enroll * same) / (np.linalg.norm(enroll) * np.linalg.norm(same)) + same_cos = max(same_cos - sv_threshold, 0.0) / (1.0 - sv_threshold) * 100.0 + print("Similarity:", same_cos) + + # calculate cosine similarity for different speaker + diff_cos = np.sum(enroll * different) / (np.linalg.norm(enroll) * np.linalg.norm(different)) + diff_cos = max(diff_cos - sv_threshold, 0.0) / (1.0 - sv_threshold) * 100.0 + print("Similarity:", diff_cos) diff --git a/egs_modelscope/speaker_verification/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch/infer_sv.py b/egs_modelscope/speaker_verification/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch/infer_sv.py new file mode 100644 index 000000000..880b2d3b1 --- /dev/null +++ b/egs_modelscope/speaker_verification/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch/infer_sv.py @@ -0,0 +1,21 @@ +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks + +if __name__ == '__main__': + inference_sv_pipline = pipeline( + task=Tasks.speaker_verification, + model='damo/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch' + ) + + # the same speaker + rec_result = inference_sv_pipline(audio_in=( + 'https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/sv_example_enroll.wav', + 'https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/sv_example_same.wav')) + print("Similarity", rec_result["scores"]) + + # different speakers + rec_result = inference_sv_pipline(audio_in=( + 'https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/sv_example_enroll.wav', + 'https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/sv_example_different.wav')) + + print("Similarity", rec_result["scores"]) diff --git a/egs_modelscope/speaker_verification/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch/infer.py b/egs_modelscope/speaker_verification/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch/infer.py index e81297a3f..87f38013b 100644 --- a/egs_modelscope/speaker_verification/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch/infer.py +++ b/egs_modelscope/speaker_verification/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch/infer.py @@ -9,14 +9,20 @@ if __name__ == '__main__': ) # 提取不同句子的说话人嵌入码 + # for url use "utt_id" as key rec_result = inference_sv_pipline( audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/sv_example_enroll.wav') enroll = rec_result["spk_embedding"] - rec_result = inference_sv_pipline( - audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/sv_example_same.wav') + # for local file use "utt_id" as key + rec_result = inference_sv_pipline(audio_in='sv_example_same.wav')["test1"] same = rec_result["spk_embedding"] + import soundfile + wav = soundfile.read('sv_example_enroll.wav')[0] + # for raw inputs use "utt_id" as key + spk_embedding = inference_sv_pipline(audio_in=wav)["spk_embedding"] + rec_result = inference_sv_pipline( audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/sv_example_different.wav') different = rec_result["spk_embedding"] diff --git a/egs_modelscope/tp/speech_timestamp_prediction-v1-16k-offline/README.md b/egs_modelscope/tp/speech_timestamp_prediction-v1-16k-offline/README.md new file mode 100644 index 000000000..5488aaa3c --- /dev/null +++ b/egs_modelscope/tp/speech_timestamp_prediction-v1-16k-offline/README.md @@ -0,0 +1,25 @@ +# ModelScope Model + +## How to finetune and infer using a pretrained ModelScope Model + +### Inference + +Or you can use the finetuned model for inference directly. + +- Setting parameters in `infer.py` + - audio_in: # support wav, url, bytes, and parsed audio format. + - text_in: # support text, text url. + - output_dir: # If the input format is wav.scp, it needs to be set. + +- Then you can run the pipeline to infer with: +```python + python infer.py +``` + + +Modify inference related parameters in vad.yaml. + +- max_end_silence_time: The end-point silence duration to judge the end of sentence, the parameter range is 500ms~6000ms, and the default value is 800ms +- speech_noise_thres: The balance of speech and silence scores, the parameter range is (-1,1) + - The value tends to -1, the greater probability of noise being judged as speech + - The value tends to 1, the greater probability of speech being judged as noise diff --git a/egs_modelscope/tp/speech_timestamp_prediction-v1-16k-offline/infer.py b/egs_modelscope/tp/speech_timestamp_prediction-v1-16k-offline/infer.py new file mode 100644 index 000000000..ff42e6857 --- /dev/null +++ b/egs_modelscope/tp/speech_timestamp_prediction-v1-16k-offline/infer.py @@ -0,0 +1,12 @@ +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks + +inference_pipline = pipeline( + task=Tasks.speech_timestamp, + model='damo/speech_timestamp_prediction-v1-16k-offline', + output_dir='./tmp') + +rec_result = inference_pipline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_timestamps.wav', + text_in='一 个 东 太 平 洋 国 家 为 什 么 跑 到 西 太 平 洋 来 了 呢') +print(rec_result) \ No newline at end of file diff --git a/egs_modelscope/vad/speech_fsmn_vad_zh-cn-16k-common/infer.py b/egs_modelscope/vad/speech_fsmn_vad_zh-cn-16k-common/infer.py index c255474b8..2bf3251e3 100644 --- a/egs_modelscope/vad/speech_fsmn_vad_zh-cn-16k-common/infer.py +++ b/egs_modelscope/vad/speech_fsmn_vad_zh-cn-16k-common/infer.py @@ -7,7 +7,7 @@ if __name__ == '__main__': inference_pipline = pipeline( task=Tasks.voice_activity_detection, model="damo/speech_fsmn_vad_zh-cn-16k-common-pytorch", - model_revision=None, + model_revision='v1.2.0', output_dir=output_dir, batch_size=1, ) diff --git a/egs_modelscope/vad/speech_fsmn_vad_zh-cn-16k-common/infer_online.py b/egs_modelscope/vad/speech_fsmn_vad_zh-cn-16k-common/infer_online.py new file mode 100644 index 000000000..66b816149 --- /dev/null +++ b/egs_modelscope/vad/speech_fsmn_vad_zh-cn-16k-common/infer_online.py @@ -0,0 +1,33 @@ +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks +import soundfile + + +if __name__ == '__main__': + output_dir = None + inference_pipline = pipeline( + task=Tasks.voice_activity_detection, + model="damo/speech_fsmn_vad_zh-cn-16k-common-pytorch", + model_revision='v1.2.0', + output_dir=output_dir, + batch_size=1, + mode='online', + ) + speech, sample_rate = soundfile.read("./vad_example_16k.wav") + speech_length = speech.shape[0] + + sample_offset = 0 + + step = 160 * 10 + param_dict = {'in_cache': dict()} + for sample_offset in range(0, speech_length, min(step, speech_length - sample_offset)): + if sample_offset + step >= speech_length - 1: + step = speech_length - sample_offset + is_final = True + else: + is_final = False + param_dict['is_final'] = is_final + segments_result = inference_pipline(audio_in=speech[sample_offset: sample_offset + step], + param_dict=param_dict) + print(segments_result) + diff --git a/egs_modelscope/vad/speech_fsmn_vad_zh-cn-8k-common/infer.py b/egs_modelscope/vad/speech_fsmn_vad_zh-cn-8k-common/infer.py index 71af48656..2e5027500 100644 --- a/egs_modelscope/vad/speech_fsmn_vad_zh-cn-8k-common/infer.py +++ b/egs_modelscope/vad/speech_fsmn_vad_zh-cn-8k-common/infer.py @@ -7,8 +7,8 @@ if __name__ == '__main__': inference_pipline = pipeline( task=Tasks.voice_activity_detection, model="damo/speech_fsmn_vad_zh-cn-8k-common", - model_revision=None, - output_dir='./output_dir', + model_revision='v1.2.0', + output_dir=output_dir, batch_size=1, ) segments_result = inference_pipline(audio_in=audio_in) diff --git a/egs_modelscope/vad/speech_fsmn_vad_zh-cn-8k-common/infer_online.py b/egs_modelscope/vad/speech_fsmn_vad_zh-cn-8k-common/infer_online.py new file mode 100644 index 000000000..abf4ef555 --- /dev/null +++ b/egs_modelscope/vad/speech_fsmn_vad_zh-cn-8k-common/infer_online.py @@ -0,0 +1,33 @@ +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks +import soundfile + + +if __name__ == '__main__': + output_dir = None + inference_pipline = pipeline( + task=Tasks.voice_activity_detection, + model="damo/speech_fsmn_vad_zh-cn-8k-common", + model_revision='v1.2.0', + output_dir=output_dir, + batch_size=1, + mode='online', + ) + speech, sample_rate = soundfile.read("./vad_example_8k.wav") + speech_length = speech.shape[0] + + sample_offset = 0 + + step = 80 * 10 + param_dict = {'in_cache': dict()} + for sample_offset in range(0, speech_length, min(step, speech_length - sample_offset)): + if sample_offset + step >= speech_length - 1: + step = speech_length - sample_offset + is_final = True + else: + is_final = False + param_dict['is_final'] = is_final + segments_result = inference_pipline(audio_in=speech[sample_offset: sample_offset + step], + param_dict=param_dict) + print(segments_result) + diff --git a/funasr/bin/asr_inference.py b/funasr/bin/asr_inference.py index 318d3d7a2..f3b4d560a 100644 --- a/funasr/bin/asr_inference.py +++ b/funasr/bin/asr_inference.py @@ -52,7 +52,7 @@ class Speech2Text: Examples: >>> import soundfile - >>> speech2text = Speech2Text("asr_config.yml", "asr.pth") + >>> speech2text = Speech2Text("asr_config.yml", "asr.pb") >>> audio, rate = soundfile.read("speech.wav") >>> speech2text(audio) [(text, token, token_int, hypothesis object), ...] diff --git a/funasr/bin/asr_inference_launch.py b/funasr/bin/asr_inference_launch.py index 1fae766ea..da1241a66 100644 --- a/funasr/bin/asr_inference_launch.py +++ b/funasr/bin/asr_inference_launch.py @@ -216,6 +216,9 @@ def inference_launch(**kwargs): elif mode == "paraformer": from funasr.bin.asr_inference_paraformer import inference_modelscope return inference_modelscope(**kwargs) + elif mode == "paraformer_streaming": + from funasr.bin.asr_inference_paraformer_streaming import inference_modelscope + return inference_modelscope(**kwargs) elif mode == "paraformer_vad": from funasr.bin.asr_inference_paraformer_vad import inference_modelscope return inference_modelscope(**kwargs) diff --git a/funasr/bin/asr_inference_mfcca.py b/funasr/bin/asr_inference_mfcca.py index e25b2a90b..888d4d2f8 100644 --- a/funasr/bin/asr_inference_mfcca.py +++ b/funasr/bin/asr_inference_mfcca.py @@ -55,7 +55,7 @@ class Speech2Text: Examples: >>> import soundfile - >>> speech2text = Speech2Text("asr_config.yml", "asr.pth") + >>> speech2text = Speech2Text("asr_config.yml", "asr.pb") >>> audio, rate = soundfile.read("speech.wav") >>> speech2text(audio) [(text, token, token_int, hypothesis object), ...] @@ -194,8 +194,8 @@ class Speech2Text: # Input as audio signal if isinstance(speech, np.ndarray): speech = torch.tensor(speech) - - + if(speech.dim()==3): + speech = torch.squeeze(speech, 2) #speech = speech.unsqueeze(0).to(getattr(torch, self.dtype)) speech = speech.to(getattr(torch, self.dtype)) # lenghts: (1,) @@ -534,6 +534,8 @@ def inference_modelscope( data_path_and_name_and_type, dtype=dtype, batch_size=batch_size, + fs=fs, + mc=True, key_file=key_file, num_workers=num_workers, preprocess_fn=ASRTask.build_preprocess_fn(speech2text.asr_train_args, False), diff --git a/funasr/bin/asr_inference_paraformer.py b/funasr/bin/asr_inference_paraformer.py index b807a3452..e45e575ed 100644 --- a/funasr/bin/asr_inference_paraformer.py +++ b/funasr/bin/asr_inference_paraformer.py @@ -42,6 +42,7 @@ from funasr.utils import asr_utils, wav_utils, postprocess_utils from funasr.models.frontend.wav_frontend import WavFrontend from funasr.models.e2e_asr_paraformer import BiCifParaformer, ContextualParaformer from funasr.export.models.e2e_asr_paraformer import Paraformer as Paraformer_export +from funasr.utils.timestamp_tools import ts_prediction_lfr6_standard class Speech2Text: @@ -49,7 +50,7 @@ class Speech2Text: Examples: >>> import soundfile - >>> speech2text = Speech2Text("asr_config.yml", "asr.pth") + >>> speech2text = Speech2Text("asr_config.yml", "asr.pb") >>> audio, rate = soundfile.read("speech.wav") >>> speech2text(audio) [(text, token, token_int, hypothesis object), ...] @@ -190,7 +191,8 @@ class Speech2Text: @torch.no_grad() def __call__( - self, speech: Union[torch.Tensor, np.ndarray], speech_lengths: Union[torch.Tensor, np.ndarray] = None + self, speech: Union[torch.Tensor, np.ndarray], speech_lengths: Union[torch.Tensor, np.ndarray] = None, + begin_time: int = 0, end_time: int = None, ): """Inference @@ -242,6 +244,10 @@ class Speech2Text: decoder_outs = self.asr_model.cal_decoder_with_predictor(enc, enc_len, pre_acoustic_embeds, pre_token_length, hw_list=self.hotword_list) decoder_out, ys_pad_lens = decoder_outs[0], decoder_outs[1] + if isinstance(self.asr_model, BiCifParaformer): + _, _, us_alphas, us_peaks = self.asr_model.calc_predictor_timestamp(enc, enc_len, + pre_token_length) # test no bias cif2 + results = [] b, n, d = decoder_out.size() for i in range(b): @@ -284,7 +290,14 @@ class Speech2Text: else: text = None - results.append((text, token, token_int, hyp, enc_len_batch_total, lfr_factor)) + if isinstance(self.asr_model, BiCifParaformer): + _, timestamp = ts_prediction_lfr6_standard(us_alphas[i], + us_peaks[i], + copy.copy(token), + vad_offset=begin_time) + results.append((text, token, token_int, hyp, timestamp, enc_len_batch_total, lfr_factor)) + else: + results.append((text, token, token_int, hyp, enc_len_batch_total, lfr_factor)) # assert check_return_type(results) return results @@ -683,6 +696,11 @@ def inference_modelscope( inference=True, ) + if param_dict is not None: + use_timestamp = param_dict.get('use_timestamp', True) + else: + use_timestamp = True + forward_time_total = 0.0 length_total = 0.0 finish_count = 0 @@ -724,7 +742,9 @@ def inference_modelscope( result = [results[batch_id][:-2]] key = keys[batch_id] - for n, (text, token, token_int, hyp) in zip(range(1, nbest + 1), result): + for n, result in zip(range(1, nbest + 1), result): + text, token, token_int, hyp = result[0], result[1], result[2], result[3] + time_stamp = None if len(result) < 5 else result[4] # Create a directory: outdir/{n}best_recog if writer is not None: ibest_writer = writer[f"{n}best_recog"] @@ -736,8 +756,20 @@ def inference_modelscope( ibest_writer["rtf"][key] = rtf_cur if text is not None: - text_postprocessed, _ = postprocess_utils.sentence_postprocess(token) + if use_timestamp and time_stamp is not None: + postprocessed_result = postprocess_utils.sentence_postprocess(token, time_stamp) + else: + postprocessed_result = postprocess_utils.sentence_postprocess(token) + time_stamp_postprocessed = "" + if len(postprocessed_result) == 3: + text_postprocessed, time_stamp_postprocessed, word_lists = postprocessed_result[0], \ + postprocessed_result[1], \ + postprocessed_result[2] + else: + text_postprocessed, word_lists = postprocessed_result[0], postprocessed_result[1] item = {'key': key, 'value': text_postprocessed} + if time_stamp_postprocessed != "": + item['time_stamp'] = time_stamp_postprocessed asr_result_list.append(item) finish_count += 1 # asr_utils.print_progress(finish_count / file_count) diff --git a/funasr/bin/asr_inference_paraformer_streaming.py b/funasr/bin/asr_inference_paraformer_streaming.py new file mode 100644 index 000000000..9b572a0af --- /dev/null +++ b/funasr/bin/asr_inference_paraformer_streaming.py @@ -0,0 +1,907 @@ +#!/usr/bin/env python3 +import argparse +import logging +import sys +import time +import copy +import os +import codecs +import tempfile +import requests +from pathlib import Path +from typing import Optional +from typing import Sequence +from typing import Tuple +from typing import Union +from typing import Dict +from typing import Any +from typing import List + +import numpy as np +import torch +from typeguard import check_argument_types + +from funasr.fileio.datadir_writer import DatadirWriter +from funasr.modules.beam_search.beam_search import BeamSearchPara as BeamSearch +from funasr.modules.beam_search.beam_search import Hypothesis +from funasr.modules.scorers.ctc import CTCPrefixScorer +from funasr.modules.scorers.length_bonus import LengthBonus +from funasr.modules.subsampling import TooShortUttError +from funasr.tasks.asr import ASRTaskParaformer as ASRTask +from funasr.tasks.lm import LMTask +from funasr.text.build_tokenizer import build_tokenizer +from funasr.text.token_id_converter import TokenIDConverter +from funasr.torch_utils.device_funcs import to_device +from funasr.torch_utils.set_all_random_seed import set_all_random_seed +from funasr.utils import config_argparse +from funasr.utils.cli_utils import get_commandline_args +from funasr.utils.types import str2bool +from funasr.utils.types import str2triple_str +from funasr.utils.types import str_or_none +from funasr.utils import asr_utils, wav_utils, postprocess_utils +from funasr.models.frontend.wav_frontend import WavFrontend +from funasr.models.e2e_asr_paraformer import BiCifParaformer, ContextualParaformer +from funasr.export.models.e2e_asr_paraformer import Paraformer as Paraformer_export + +class Speech2Text: + """Speech2Text class + + Examples: + >>> import soundfile + >>> speech2text = Speech2Text("asr_config.yml", "asr.pth") + >>> audio, rate = soundfile.read("speech.wav") + >>> speech2text(audio) + [(text, token, token_int, hypothesis object), ...] + + """ + + def __init__( + self, + asr_train_config: Union[Path, str] = None, + asr_model_file: Union[Path, str] = None, + cmvn_file: Union[Path, str] = None, + lm_train_config: Union[Path, str] = None, + lm_file: Union[Path, str] = None, + token_type: str = None, + bpemodel: str = None, + device: str = "cpu", + maxlenratio: float = 0.0, + minlenratio: float = 0.0, + dtype: str = "float32", + beam_size: int = 20, + ctc_weight: float = 0.5, + lm_weight: float = 1.0, + ngram_weight: float = 0.9, + penalty: float = 0.0, + nbest: int = 1, + frontend_conf: dict = None, + hotword_list_or_file: str = None, + **kwargs, + ): + assert check_argument_types() + + # 1. Build ASR model + scorers = {} + asr_model, asr_train_args = ASRTask.build_model_from_file( + asr_train_config, asr_model_file, cmvn_file, device + ) + frontend = None + if asr_train_args.frontend is not None and asr_train_args.frontend_conf is not None: + frontend = WavFrontend(cmvn_file=cmvn_file, **asr_train_args.frontend_conf) + + logging.info("asr_model: {}".format(asr_model)) + logging.info("asr_train_args: {}".format(asr_train_args)) + asr_model.to(dtype=getattr(torch, dtype)).eval() + + if asr_model.ctc != None: + ctc = CTCPrefixScorer(ctc=asr_model.ctc, eos=asr_model.eos) + scorers.update( + ctc=ctc + ) + token_list = asr_model.token_list + scorers.update( + length_bonus=LengthBonus(len(token_list)), + ) + + # 2. Build Language model + if lm_train_config is not None: + lm, lm_train_args = LMTask.build_model_from_file( + lm_train_config, lm_file, device + ) + scorers["lm"] = lm.lm + + # 3. Build ngram model + # ngram is not supported now + ngram = None + scorers["ngram"] = ngram + + # 4. Build BeamSearch object + # transducer is not supported now + beam_search_transducer = None + + weights = dict( + decoder=1.0 - ctc_weight, + ctc=ctc_weight, + lm=lm_weight, + ngram=ngram_weight, + length_bonus=penalty, + ) + beam_search = BeamSearch( + beam_size=beam_size, + weights=weights, + scorers=scorers, + sos=asr_model.sos, + eos=asr_model.eos, + vocab_size=len(token_list), + token_list=token_list, + pre_beam_score_key=None if ctc_weight == 1.0 else "full", + ) + + beam_search.to(device=device, dtype=getattr(torch, dtype)).eval() + for scorer in scorers.values(): + if isinstance(scorer, torch.nn.Module): + scorer.to(device=device, dtype=getattr(torch, dtype)).eval() + + logging.info(f"Decoding device={device}, dtype={dtype}") + + # 5. [Optional] Build Text converter: e.g. bpe-sym -> Text + if token_type is None: + token_type = asr_train_args.token_type + if bpemodel is None: + bpemodel = asr_train_args.bpemodel + + if token_type is None: + tokenizer = None + elif token_type == "bpe": + if bpemodel is not None: + tokenizer = build_tokenizer(token_type=token_type, bpemodel=bpemodel) + else: + tokenizer = None + else: + tokenizer = build_tokenizer(token_type=token_type) + converter = TokenIDConverter(token_list=token_list) + logging.info(f"Text tokenizer: {tokenizer}") + + self.asr_model = asr_model + self.asr_train_args = asr_train_args + self.converter = converter + self.tokenizer = tokenizer + + # 6. [Optional] Build hotword list from str, local file or url + + is_use_lm = lm_weight != 0.0 and lm_file is not None + if (ctc_weight == 0.0 or asr_model.ctc == None) and not is_use_lm: + beam_search = None + self.beam_search = beam_search + logging.info(f"Beam_search: {self.beam_search}") + self.beam_search_transducer = beam_search_transducer + self.maxlenratio = maxlenratio + self.minlenratio = minlenratio + self.device = device + self.dtype = dtype + self.nbest = nbest + self.frontend = frontend + self.encoder_downsampling_factor = 1 + if asr_train_args.encoder == "data2vec_encoder" or asr_train_args.encoder_conf["input_layer"] == "conv2d": + self.encoder_downsampling_factor = 4 + + @torch.no_grad() + def __call__( + self, cache: dict, speech: Union[torch.Tensor, np.ndarray], speech_lengths: Union[torch.Tensor, np.ndarray] = None, + begin_time: int = 0, end_time: int = None, + ): + """Inference + + Args: + speech: Input speech data + Returns: + text, token, token_int, hyp + + """ + assert check_argument_types() + + # Input as audio signal + if isinstance(speech, np.ndarray): + speech = torch.tensor(speech) + + if self.frontend is not None: + feats, feats_len = self.frontend.forward(speech, speech_lengths) + feats = to_device(feats, device=self.device) + feats_len = feats_len.int() + self.asr_model.frontend = None + else: + feats = speech + feats_len = speech_lengths + lfr_factor = max(1, (feats.size()[-1] // 80) - 1) + batch = {"speech": feats, "speech_lengths": feats_len, "cache": cache} + + # a. To device + batch = to_device(batch, device=self.device) + + # b. Forward Encoder + enc, enc_len = self.asr_model.encode_chunk(**batch) + if isinstance(enc, tuple): + enc = enc[0] + # assert len(enc) == 1, len(enc) + enc_len_batch_total = torch.sum(enc_len).item() * self.encoder_downsampling_factor + + predictor_outs = self.asr_model.calc_predictor_chunk(enc, cache) + pre_acoustic_embeds, pre_token_length, alphas, pre_peak_index = predictor_outs[0], predictor_outs[1], \ + predictor_outs[2], predictor_outs[3] + pre_token_length = pre_token_length.floor().long() + if torch.max(pre_token_length) < 1: + return [] + decoder_outs = self.asr_model.cal_decoder_with_predictor_chunk(enc, pre_acoustic_embeds, cache) + decoder_out = decoder_outs + + results = [] + b, n, d = decoder_out.size() + for i in range(b): + x = enc[i, :enc_len[i], :] + am_scores = decoder_out[i, :pre_token_length[i], :] + if self.beam_search is not None: + nbest_hyps = self.beam_search( + x=x, am_scores=am_scores, maxlenratio=self.maxlenratio, minlenratio=self.minlenratio + ) + + nbest_hyps = nbest_hyps[: self.nbest] + else: + yseq = am_scores.argmax(dim=-1) + score = am_scores.max(dim=-1)[0] + score = torch.sum(score, dim=-1) + # pad with mask tokens to ensure compatibility with sos/eos tokens + yseq = torch.tensor( + [self.asr_model.sos] + yseq.tolist() + [self.asr_model.eos], device=yseq.device + ) + nbest_hyps = [Hypothesis(yseq=yseq, score=score)] + + for hyp in nbest_hyps: + assert isinstance(hyp, (Hypothesis)), type(hyp) + + # remove sos/eos and get results + last_pos = -1 + if isinstance(hyp.yseq, list): + token_int = hyp.yseq[1:last_pos] + else: + token_int = hyp.yseq[1:last_pos].tolist() + + # remove blank symbol id, which is assumed to be 0 + token_int = list(filter(lambda x: x != 0 and x != 2, token_int)) + + # Change integer-ids to tokens + token = self.converter.ids2tokens(token_int) + + if self.tokenizer is not None: + text = self.tokenizer.tokens2text(token) + else: + text = None + + results.append((text, token, token_int, hyp, enc_len_batch_total, lfr_factor)) + + # assert check_return_type(results) + return results + + +class Speech2TextExport: + """Speech2TextExport class + + """ + + def __init__( + self, + asr_train_config: Union[Path, str] = None, + asr_model_file: Union[Path, str] = None, + cmvn_file: Union[Path, str] = None, + lm_train_config: Union[Path, str] = None, + lm_file: Union[Path, str] = None, + token_type: str = None, + bpemodel: str = None, + device: str = "cpu", + maxlenratio: float = 0.0, + minlenratio: float = 0.0, + dtype: str = "float32", + beam_size: int = 20, + ctc_weight: float = 0.5, + lm_weight: float = 1.0, + ngram_weight: float = 0.9, + penalty: float = 0.0, + nbest: int = 1, + frontend_conf: dict = None, + hotword_list_or_file: str = None, + **kwargs, + ): + + # 1. Build ASR model + asr_model, asr_train_args = ASRTask.build_model_from_file( + asr_train_config, asr_model_file, cmvn_file, device + ) + frontend = None + if asr_train_args.frontend is not None and asr_train_args.frontend_conf is not None: + frontend = WavFrontend(cmvn_file=cmvn_file, **asr_train_args.frontend_conf) + + logging.info("asr_model: {}".format(asr_model)) + logging.info("asr_train_args: {}".format(asr_train_args)) + asr_model.to(dtype=getattr(torch, dtype)).eval() + + token_list = asr_model.token_list + + logging.info(f"Decoding device={device}, dtype={dtype}") + + # 5. [Optional] Build Text converter: e.g. bpe-sym -> Text + if token_type is None: + token_type = asr_train_args.token_type + if bpemodel is None: + bpemodel = asr_train_args.bpemodel + + if token_type is None: + tokenizer = None + elif token_type == "bpe": + if bpemodel is not None: + tokenizer = build_tokenizer(token_type=token_type, bpemodel=bpemodel) + else: + tokenizer = None + else: + tokenizer = build_tokenizer(token_type=token_type) + converter = TokenIDConverter(token_list=token_list) + logging.info(f"Text tokenizer: {tokenizer}") + + # self.asr_model = asr_model + self.asr_train_args = asr_train_args + self.converter = converter + self.tokenizer = tokenizer + + self.device = device + self.dtype = dtype + self.nbest = nbest + self.frontend = frontend + + model = Paraformer_export(asr_model, onnx=False) + self.asr_model = model + + @torch.no_grad() + def __call__( + self, speech: Union[torch.Tensor, np.ndarray], speech_lengths: Union[torch.Tensor, np.ndarray] = None + ): + """Inference + + Args: + speech: Input speech data + Returns: + text, token, token_int, hyp + + """ + assert check_argument_types() + + # Input as audio signal + if isinstance(speech, np.ndarray): + speech = torch.tensor(speech) + + if self.frontend is not None: + feats, feats_len = self.frontend.forward(speech, speech_lengths) + feats = to_device(feats, device=self.device) + feats_len = feats_len.int() + self.asr_model.frontend = None + else: + feats = speech + feats_len = speech_lengths + + enc_len_batch_total = feats_len.sum() + lfr_factor = max(1, (feats.size()[-1] // 80) - 1) + batch = {"speech": feats, "speech_lengths": feats_len} + + # a. To device + batch = to_device(batch, device=self.device) + + decoder_outs = self.asr_model(**batch) + decoder_out, ys_pad_lens = decoder_outs[0], decoder_outs[1] + + results = [] + b, n, d = decoder_out.size() + for i in range(b): + am_scores = decoder_out[i, :ys_pad_lens[i], :] + + yseq = am_scores.argmax(dim=-1) + score = am_scores.max(dim=-1)[0] + score = torch.sum(score, dim=-1) + # pad with mask tokens to ensure compatibility with sos/eos tokens + yseq = torch.tensor( + yseq.tolist(), device=yseq.device + ) + nbest_hyps = [Hypothesis(yseq=yseq, score=score)] + + for hyp in nbest_hyps: + assert isinstance(hyp, (Hypothesis)), type(hyp) + + # remove sos/eos and get results + last_pos = -1 + if isinstance(hyp.yseq, list): + token_int = hyp.yseq[1:last_pos] + else: + token_int = hyp.yseq[1:last_pos].tolist() + + # remove blank symbol id, which is assumed to be 0 + token_int = list(filter(lambda x: x != 0 and x != 2, token_int)) + + # Change integer-ids to tokens + token = self.converter.ids2tokens(token_int) + + if self.tokenizer is not None: + text = self.tokenizer.tokens2text(token) + else: + text = None + + results.append((text, token, token_int, hyp, enc_len_batch_total, lfr_factor)) + + return results + + +def inference( + maxlenratio: float, + minlenratio: float, + batch_size: int, + beam_size: int, + ngpu: int, + ctc_weight: float, + lm_weight: float, + penalty: float, + log_level: Union[int, str], + data_path_and_name_and_type, + asr_train_config: Optional[str], + asr_model_file: Optional[str], + cmvn_file: Optional[str] = None, + raw_inputs: Union[np.ndarray, torch.Tensor] = None, + lm_train_config: Optional[str] = None, + lm_file: Optional[str] = None, + token_type: Optional[str] = None, + key_file: Optional[str] = None, + word_lm_train_config: Optional[str] = None, + bpemodel: Optional[str] = None, + allow_variable_data_keys: bool = False, + streaming: bool = False, + output_dir: Optional[str] = None, + dtype: str = "float32", + seed: int = 0, + ngram_weight: float = 0.9, + nbest: int = 1, + num_workers: int = 1, + + **kwargs, +): + inference_pipeline = inference_modelscope( + maxlenratio=maxlenratio, + minlenratio=minlenratio, + batch_size=batch_size, + beam_size=beam_size, + ngpu=ngpu, + ctc_weight=ctc_weight, + lm_weight=lm_weight, + penalty=penalty, + log_level=log_level, + asr_train_config=asr_train_config, + asr_model_file=asr_model_file, + cmvn_file=cmvn_file, + raw_inputs=raw_inputs, + lm_train_config=lm_train_config, + lm_file=lm_file, + token_type=token_type, + key_file=key_file, + word_lm_train_config=word_lm_train_config, + bpemodel=bpemodel, + allow_variable_data_keys=allow_variable_data_keys, + streaming=streaming, + output_dir=output_dir, + dtype=dtype, + seed=seed, + ngram_weight=ngram_weight, + nbest=nbest, + num_workers=num_workers, + + **kwargs, + ) + return inference_pipeline(data_path_and_name_and_type, raw_inputs) + + +def inference_modelscope( + maxlenratio: float, + minlenratio: float, + batch_size: int, + beam_size: int, + ngpu: int, + ctc_weight: float, + lm_weight: float, + penalty: float, + log_level: Union[int, str], + # data_path_and_name_and_type, + asr_train_config: Optional[str], + asr_model_file: Optional[str], + cmvn_file: Optional[str] = None, + lm_train_config: Optional[str] = None, + lm_file: Optional[str] = None, + token_type: Optional[str] = None, + key_file: Optional[str] = None, + word_lm_train_config: Optional[str] = None, + bpemodel: Optional[str] = None, + allow_variable_data_keys: bool = False, + dtype: str = "float32", + seed: int = 0, + ngram_weight: float = 0.9, + nbest: int = 1, + num_workers: int = 1, + output_dir: Optional[str] = None, + param_dict: dict = None, + **kwargs, +): + assert check_argument_types() + + if word_lm_train_config is not None: + raise NotImplementedError("Word LM is not implemented") + if ngpu > 1: + raise NotImplementedError("only single GPU decoding is supported") + + logging.basicConfig( + level=log_level, + format="%(asctime)s (%(module)s:%(lineno)d) %(levelname)s: %(message)s", + ) + + export_mode = False + if param_dict is not None: + hotword_list_or_file = param_dict.get('hotword') + export_mode = param_dict.get("export_mode", False) + else: + hotword_list_or_file = None + + if ngpu >= 1 and torch.cuda.is_available(): + device = "cuda" + else: + device = "cpu" + batch_size = 1 + + # 1. Set random-seed + set_all_random_seed(seed) + + # 2. Build speech2text + speech2text_kwargs = dict( + asr_train_config=asr_train_config, + asr_model_file=asr_model_file, + cmvn_file=cmvn_file, + lm_train_config=lm_train_config, + lm_file=lm_file, + token_type=token_type, + bpemodel=bpemodel, + device=device, + maxlenratio=maxlenratio, + minlenratio=minlenratio, + dtype=dtype, + beam_size=beam_size, + ctc_weight=ctc_weight, + lm_weight=lm_weight, + ngram_weight=ngram_weight, + penalty=penalty, + nbest=nbest, + hotword_list_or_file=hotword_list_or_file, + ) + if export_mode: + speech2text = Speech2TextExport(**speech2text_kwargs) + else: + speech2text = Speech2Text(**speech2text_kwargs) + + def _forward( + data_path_and_name_and_type, + raw_inputs: Union[np.ndarray, torch.Tensor] = None, + output_dir_v2: Optional[str] = None, + fs: dict = None, + param_dict: dict = None, + **kwargs, + ): + + hotword_list_or_file = None + if param_dict is not None: + hotword_list_or_file = param_dict.get('hotword') + if 'hotword' in kwargs: + hotword_list_or_file = kwargs['hotword'] + if hotword_list_or_file is not None or 'hotword' in kwargs: + speech2text.hotword_list = speech2text.generate_hotwords_list(hotword_list_or_file) + + # 3. Build data-iterator + if data_path_and_name_and_type is None and raw_inputs is not None: + if isinstance(raw_inputs, torch.Tensor): + raw_inputs = raw_inputs.numpy() + data_path_and_name_and_type = [raw_inputs, "speech", "waveform"] + loader = ASRTask.build_streaming_iterator( + data_path_and_name_and_type, + dtype=dtype, + fs=fs, + batch_size=batch_size, + key_file=key_file, + num_workers=num_workers, + preprocess_fn=ASRTask.build_preprocess_fn(speech2text.asr_train_args, False), + collate_fn=ASRTask.build_collate_fn(speech2text.asr_train_args, False), + allow_variable_data_keys=allow_variable_data_keys, + inference=True, + ) + + if param_dict is not None: + use_timestamp = param_dict.get('use_timestamp', True) + else: + use_timestamp = True + + forward_time_total = 0.0 + length_total = 0.0 + finish_count = 0 + file_count = 1 + cache = None + # 7 .Start for-loop + # FIXME(kamo): The output format should be discussed about + asr_result_list = [] + output_path = output_dir_v2 if output_dir_v2 is not None else output_dir + if output_path is not None: + writer = DatadirWriter(output_path) + else: + writer = None + if param_dict is not None and "cache" in param_dict: + cache = param_dict["cache"] + for keys, batch in loader: + assert isinstance(batch, dict), type(batch) + assert all(isinstance(s, str) for s in keys), keys + _bs = len(next(iter(batch.values()))) + assert len(keys) == _bs, f"{len(keys)} != {_bs}" + # batch = {k: v for k, v in batch.items() if not k.endswith("_lengths")} + logging.info("decoding, utt_id: {}".format(keys)) + # N-best list of (text, token, token_int, hyp_object) + + time_beg = time.time() + results = speech2text(cache=cache, **batch) + if len(results) < 1: + hyp = Hypothesis(score=0.0, scores={}, states={}, yseq=[]) + results = [[" ", ["sil"], [2], hyp, 10, 6]] * nbest + time_end = time.time() + forward_time = time_end - time_beg + lfr_factor = results[0][-1] + length = results[0][-2] + forward_time_total += forward_time + length_total += length + rtf_cur = "decoding, feature length: {}, forward_time: {:.4f}, rtf: {:.4f}".format(length, forward_time, + 100 * forward_time / ( + length * lfr_factor)) + logging.info(rtf_cur) + + for batch_id in range(_bs): + result = [results[batch_id][:-2]] + + key = keys[batch_id] + for n, result in zip(range(1, nbest + 1), result): + text, token, token_int, hyp = result[0], result[1], result[2], result[3] + time_stamp = None if len(result) < 5 else result[4] + # Create a directory: outdir/{n}best_recog + if writer is not None: + ibest_writer = writer[f"{n}best_recog"] + + # Write the result to each file + ibest_writer["token"][key] = " ".join(token) + # ibest_writer["token_int"][key] = " ".join(map(str, token_int)) + ibest_writer["score"][key] = str(hyp.score) + ibest_writer["rtf"][key] = rtf_cur + + if text is not None: + if use_timestamp and time_stamp is not None: + postprocessed_result = postprocess_utils.sentence_postprocess(token, time_stamp) + else: + postprocessed_result = postprocess_utils.sentence_postprocess(token) + time_stamp_postprocessed = "" + if len(postprocessed_result) == 3: + text_postprocessed, time_stamp_postprocessed, word_lists = postprocessed_result[0], \ + postprocessed_result[1], \ + postprocessed_result[2] + else: + text_postprocessed, word_lists = postprocessed_result[0], postprocessed_result[1] + item = {'key': key, 'value': text_postprocessed} + if time_stamp_postprocessed != "": + item['time_stamp'] = time_stamp_postprocessed + asr_result_list.append(item) + finish_count += 1 + # asr_utils.print_progress(finish_count / file_count) + if writer is not None: + ibest_writer["text"][key] = text_postprocessed + + logging.info("decoding, utt: {}, predictions: {}".format(key, text)) + rtf_avg = "decoding, feature length total: {}, forward_time total: {:.4f}, rtf avg: {:.4f}".format(length_total, + forward_time_total, + 100 * forward_time_total / ( + length_total * lfr_factor)) + logging.info(rtf_avg) + if writer is not None: + ibest_writer["rtf"]["rtf_avf"] = rtf_avg + return asr_result_list + + return _forward + + +def get_parser(): + parser = config_argparse.ArgumentParser( + description="ASR Decoding", + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + ) + + # Note(kamo): Use '_' instead of '-' as separator. + # '-' is confusing if written in yaml. + parser.add_argument( + "--log_level", + type=lambda x: x.upper(), + default="INFO", + choices=("CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG", "NOTSET"), + help="The verbose level of logging", + ) + + parser.add_argument("--output_dir", type=str, required=True) + parser.add_argument( + "--ngpu", + type=int, + default=0, + help="The number of gpus. 0 indicates CPU mode", + ) + parser.add_argument("--seed", type=int, default=0, help="Random seed") + parser.add_argument( + "--dtype", + default="float32", + choices=["float16", "float32", "float64"], + help="Data type", + ) + parser.add_argument( + "--num_workers", + type=int, + default=1, + help="The number of workers used for DataLoader", + ) + parser.add_argument( + "--hotword", + type=str_or_none, + default=None, + help="hotword file path or hotwords seperated by space" + ) + group = parser.add_argument_group("Input data related") + group.add_argument( + "--data_path_and_name_and_type", + type=str2triple_str, + required=False, + action="append", + ) + group.add_argument("--key_file", type=str_or_none) + group.add_argument("--allow_variable_data_keys", type=str2bool, default=False) + + group = parser.add_argument_group("The model configuration related") + group.add_argument( + "--asr_train_config", + type=str, + help="ASR training configuration", + ) + group.add_argument( + "--asr_model_file", + type=str, + help="ASR model parameter file", + ) + group.add_argument( + "--cmvn_file", + type=str, + help="Global cmvn file", + ) + group.add_argument( + "--lm_train_config", + type=str, + help="LM training configuration", + ) + group.add_argument( + "--lm_file", + type=str, + help="LM parameter file", + ) + group.add_argument( + "--word_lm_train_config", + type=str, + help="Word LM training configuration", + ) + group.add_argument( + "--word_lm_file", + type=str, + help="Word LM parameter file", + ) + group.add_argument( + "--ngram_file", + type=str, + help="N-gram parameter file", + ) + group.add_argument( + "--model_tag", + type=str, + help="Pretrained model tag. If specify this option, *_train_config and " + "*_file will be overwritten", + ) + + group = parser.add_argument_group("Beam-search related") + group.add_argument( + "--batch_size", + type=int, + default=1, + help="The batch size for inference", + ) + group.add_argument("--nbest", type=int, default=1, help="Output N-best hypotheses") + group.add_argument("--beam_size", type=int, default=20, help="Beam size") + group.add_argument("--penalty", type=float, default=0.0, help="Insertion penalty") + group.add_argument( + "--maxlenratio", + type=float, + default=0.0, + help="Input length ratio to obtain max output length. " + "If maxlenratio=0.0 (default), it uses a end-detect " + "function " + "to automatically find maximum hypothesis lengths." + "If maxlenratio<0.0, its absolute value is interpreted" + "as a constant max output length", + ) + group.add_argument( + "--minlenratio", + type=float, + default=0.0, + help="Input length ratio to obtain min output length", + ) + group.add_argument( + "--ctc_weight", + type=float, + default=0.5, + help="CTC weight in joint decoding", + ) + group.add_argument("--lm_weight", type=float, default=1.0, help="RNNLM weight") + group.add_argument("--ngram_weight", type=float, default=0.9, help="ngram weight") + group.add_argument("--streaming", type=str2bool, default=False) + + group.add_argument( + "--frontend_conf", + default=None, + help="", + ) + group.add_argument("--raw_inputs", type=list, default=None) + # example=[{'key':'EdevDEWdIYQ_0021','file':'/mnt/data/jiangyu.xzy/test_data/speech_io/SPEECHIO_ASR_ZH00007_zhibodaihuo/wav/EdevDEWdIYQ_0021.wav'}]) + + group = parser.add_argument_group("Text converter related") + group.add_argument( + "--token_type", + type=str_or_none, + default=None, + choices=["char", "bpe", None], + help="The token type for ASR model. " + "If not given, refers from the training args", + ) + group.add_argument( + "--bpemodel", + type=str_or_none, + default=None, + help="The model path of sentencepiece. " + "If not given, refers from the training args", + ) + + return parser + + +def main(cmd=None): + print(get_commandline_args(), file=sys.stderr) + parser = get_parser() + args = parser.parse_args(cmd) + param_dict = {'hotword': args.hotword} + kwargs = vars(args) + kwargs.pop("config", None) + kwargs['param_dict'] = param_dict + inference(**kwargs) + + +if __name__ == "__main__": + main() + + # from modelscope.pipelines import pipeline + # from modelscope.utils.constant import Tasks + # + # inference_16k_pipline = pipeline( + # task=Tasks.auto_speech_recognition, + # model='damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch') + # + # rec_result = inference_16k_pipline(audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav') + # print(rec_result) + diff --git a/funasr/bin/asr_inference_paraformer_vad_punc.py b/funasr/bin/asr_inference_paraformer_vad_punc.py index 13208778f..3f5775195 100644 --- a/funasr/bin/asr_inference_paraformer_vad_punc.py +++ b/funasr/bin/asr_inference_paraformer_vad_punc.py @@ -44,11 +44,10 @@ from funasr.utils import asr_utils, wav_utils, postprocess_utils from funasr.models.frontend.wav_frontend import WavFrontend from funasr.tasks.vad import VADTask from funasr.bin.vad_inference import Speech2VadSegment -from funasr.utils.timestamp_tools import time_stamp_lfr6_pl +from funasr.utils.timestamp_tools import time_stamp_sentence, ts_prediction_lfr6_standard from funasr.bin.punctuation_infer import Text2Punc from funasr.models.e2e_asr_paraformer import BiCifParaformer, ContextualParaformer -from funasr.utils.timestamp_tools import time_stamp_sentence header_colors = '\033[95m' end_colors = '\033[0m' @@ -59,7 +58,7 @@ class Speech2Text: Examples: >>> import soundfile - >>> speech2text = Speech2Text("asr_config.yml", "asr.pth") + >>> speech2text = Speech2Text("asr_config.yml", "asr.pb") >>> audio, rate = soundfile.read("speech.wav") >>> speech2text(audio) [(text, token, token_int, hypothesis object), ...] @@ -257,7 +256,7 @@ class Speech2Text: decoder_out, ys_pad_lens = decoder_outs[0], decoder_outs[1] if isinstance(self.asr_model, BiCifParaformer): - _, _, us_alphas, us_cif_peak = self.asr_model.calc_predictor_timestamp(enc, enc_len, + _, _, us_alphas, us_peaks = self.asr_model.calc_predictor_timestamp(enc, enc_len, pre_token_length) # test no bias cif2 results = [] @@ -303,7 +302,10 @@ class Speech2Text: text = None if isinstance(self.asr_model, BiCifParaformer): - timestamp = time_stamp_lfr6_pl(us_alphas[i], us_cif_peak[i], copy.copy(token), begin_time, end_time) + _, timestamp = ts_prediction_lfr6_standard(us_alphas[i], + us_peaks[i], + copy.copy(token), + vad_offset=begin_time) results.append((text, token, token_int, timestamp, enc_len_batch_total, lfr_factor)) else: results.append((text, token, token_int, enc_len_batch_total, lfr_factor)) diff --git a/funasr/bin/asr_inference_rnnt.py b/funasr/bin/asr_inference_rnnt.py index 6cd70613b..4a9ff0bda 100644 --- a/funasr/bin/asr_inference_rnnt.py +++ b/funasr/bin/asr_inference_rnnt.py @@ -49,7 +49,7 @@ class Speech2Text: Examples: >>> import soundfile - >>> speech2text = Speech2Text("asr_config.yml", "asr.pth") + >>> speech2text = Speech2Text("asr_config.yml", "asr.pb") >>> audio, rate = soundfile.read("speech.wav") >>> speech2text(audio) [(text, token, token_int, hypothesis object), ...] diff --git a/funasr/bin/asr_inference_uniasr.py b/funasr/bin/asr_inference_uniasr.py index 8b31fad13..ac71538a6 100644 --- a/funasr/bin/asr_inference_uniasr.py +++ b/funasr/bin/asr_inference_uniasr.py @@ -46,7 +46,7 @@ class Speech2Text: Examples: >>> import soundfile - >>> speech2text = Speech2Text("asr_config.yml", "asr.pth") + >>> speech2text = Speech2Text("asr_config.yml", "asr.pb") >>> audio, rate = soundfile.read("speech.wav") >>> speech2text(audio) [(text, token, token_int, hypothesis object), ...] diff --git a/funasr/bin/asr_inference_uniasr_vad.py b/funasr/bin/asr_inference_uniasr_vad.py index e5815df11..7cb889b7d 100644 --- a/funasr/bin/asr_inference_uniasr_vad.py +++ b/funasr/bin/asr_inference_uniasr_vad.py @@ -46,7 +46,7 @@ class Speech2Text: Examples: >>> import soundfile - >>> speech2text = Speech2Text("asr_config.yml", "asr.pth") + >>> speech2text = Speech2Text("asr_config.yml", "asr.pb") >>> audio, rate = soundfile.read("speech.wav") >>> speech2text(audio) [(text, token, token_int, hypothesis object), ...] diff --git a/funasr/bin/build_trainer.py b/funasr/bin/build_trainer.py index 8dee75827..94f72627e 100644 --- a/funasr/bin/build_trainer.py +++ b/funasr/bin/build_trainer.py @@ -28,7 +28,9 @@ def parse_args(mode): elif mode == "uniasr": from funasr.tasks.asr import ASRTaskUniASR as ASRTask elif mode == "mfcca": - from funasr.tasks.asr import ASRTaskMFCCA as ASRTask + from funasr.tasks.asr import ASRTaskMFCCA as ASRTask + elif mode == "tp": + from funasr.tasks.asr import ASRTaskAligner as ASRTask else: raise ValueError("Unknown mode: {}".format(mode)) parser = ASRTask.get_parser() diff --git a/funasr/bin/diar_inference_launch.py b/funasr/bin/diar_inference_launch.py index 7738f4f4f..85e451836 100755 --- a/funasr/bin/diar_inference_launch.py +++ b/funasr/bin/diar_inference_launch.py @@ -133,7 +133,7 @@ def inference_launch(mode, **kwargs): param_dict = { "extract_profile": True, "sv_train_config": "sv.yaml", - "sv_model_file": "sv.pth", + "sv_model_file": "sv.pb", } if "param_dict" in kwargs and kwargs["param_dict"] is not None: for key in param_dict: @@ -142,6 +142,9 @@ def inference_launch(mode, **kwargs): else: kwargs["param_dict"] = param_dict return inference_modelscope(mode=mode, **kwargs) + elif mode == "eend-ola": + from funasr.bin.eend_ola_inference import inference_modelscope + return inference_modelscope(mode=mode, **kwargs) else: logging.info("Unknown decoding mode: {}".format(mode)) return None diff --git a/funasr/bin/eend_ola_inference.py b/funasr/bin/eend_ola_inference.py new file mode 100755 index 000000000..01d3f296a --- /dev/null +++ b/funasr/bin/eend_ola_inference.py @@ -0,0 +1,427 @@ +#!/usr/bin/env python3 +# Copyright FunASR (https://github.com/alibaba-damo-academy/FunASR). All Rights Reserved. +# MIT License (https://opensource.org/licenses/MIT) + +import argparse +import logging +import os +import sys +from pathlib import Path +from typing import Any +from typing import List +from typing import Optional +from typing import Sequence +from typing import Tuple +from typing import Union + +import numpy as np +import torch +from scipy.signal import medfilt +from typeguard import check_argument_types + +from funasr.models.frontend.wav_frontend import WavFrontendMel23 +from funasr.tasks.diar import EENDOLADiarTask +from funasr.torch_utils.device_funcs import to_device +from funasr.utils import config_argparse +from funasr.utils.cli_utils import get_commandline_args +from funasr.utils.types import str2bool +from funasr.utils.types import str2triple_str +from funasr.utils.types import str_or_none + + +class Speech2Diarization: + """Speech2Diarlization class + + Examples: + >>> import soundfile + >>> import numpy as np + >>> speech2diar = Speech2Diarization("diar_sond_config.yml", "diar_sond.pb") + >>> profile = np.load("profiles.npy") + >>> audio, rate = soundfile.read("speech.wav") + >>> speech2diar(audio, profile) + {"spk1": [(int, int), ...], ...} + + """ + + def __init__( + self, + diar_train_config: Union[Path, str] = None, + diar_model_file: Union[Path, str] = None, + device: str = "cpu", + dtype: str = "float32", + ): + assert check_argument_types() + + # 1. Build Diarization model + diar_model, diar_train_args = EENDOLADiarTask.build_model_from_file( + config_file=diar_train_config, + model_file=diar_model_file, + device=device + ) + frontend = None + if diar_train_args.frontend is not None and diar_train_args.frontend_conf is not None: + frontend = WavFrontendMel23(**diar_train_args.frontend_conf) + + # set up seed for eda + np.random.seed(diar_train_args.seed) + torch.manual_seed(diar_train_args.seed) + torch.cuda.manual_seed(diar_train_args.seed) + os.environ['PYTORCH_SEED'] = str(diar_train_args.seed) + logging.info("diar_model: {}".format(diar_model)) + logging.info("diar_train_args: {}".format(diar_train_args)) + diar_model.to(dtype=getattr(torch, dtype)).eval() + + self.diar_model = diar_model + self.diar_train_args = diar_train_args + self.device = device + self.dtype = dtype + self.frontend = frontend + + @torch.no_grad() + def __call__( + self, + speech: Union[torch.Tensor, np.ndarray], + speech_lengths: Union[torch.Tensor, np.ndarray] = None + ): + """Inference + + Args: + speech: Input speech data + Returns: + diarization results + + """ + assert check_argument_types() + # Input as audio signal + if isinstance(speech, np.ndarray): + speech = torch.tensor(speech) + + if self.frontend is not None: + feats, feats_len = self.frontend.forward(speech, speech_lengths) + feats = to_device(feats, device=self.device) + feats_len = feats_len.int() + self.diar_model.frontend = None + else: + feats = speech + feats_len = speech_lengths + batch = {"speech": feats, "speech_lengths": feats_len} + batch = to_device(batch, device=self.device) + results = self.diar_model.estimate_sequential(**batch) + + return results + + @staticmethod + def from_pretrained( + model_tag: Optional[str] = None, + **kwargs: Optional[Any], + ): + """Build Speech2Diarization instance from the pretrained model. + + Args: + model_tag (Optional[str]): Model tag of the pretrained models. + Currently, the tags of espnet_model_zoo are supported. + + Returns: + Speech2Diarization: Speech2Diarization instance. + + """ + if model_tag is not None: + try: + from espnet_model_zoo.downloader import ModelDownloader + + except ImportError: + logging.error( + "`espnet_model_zoo` is not installed. " + "Please install via `pip install -U espnet_model_zoo`." + ) + raise + d = ModelDownloader() + kwargs.update(**d.download_and_unpack(model_tag)) + + return Speech2Diarization(**kwargs) + + +def inference_modelscope( + diar_train_config: str, + diar_model_file: str, + output_dir: Optional[str] = None, + batch_size: int = 1, + dtype: str = "float32", + ngpu: int = 1, + num_workers: int = 0, + log_level: Union[int, str] = "INFO", + key_file: Optional[str] = None, + model_tag: Optional[str] = None, + allow_variable_data_keys: bool = True, + streaming: bool = False, + param_dict: Optional[dict] = None, + **kwargs, +): + assert check_argument_types() + if batch_size > 1: + raise NotImplementedError("batch decoding is not implemented") + if ngpu > 1: + raise NotImplementedError("only single GPU decoding is supported") + + logging.basicConfig( + level=log_level, + format="%(asctime)s (%(module)s:%(lineno)d) %(levelname)s: %(message)s", + ) + logging.info("param_dict: {}".format(param_dict)) + + if ngpu >= 1 and torch.cuda.is_available(): + device = "cuda" + else: + device = "cpu" + + # 1. Build speech2diar + speech2diar_kwargs = dict( + diar_train_config=diar_train_config, + diar_model_file=diar_model_file, + device=device, + dtype=dtype, + ) + logging.info("speech2diarization_kwargs: {}".format(speech2diar_kwargs)) + speech2diar = Speech2Diarization.from_pretrained( + model_tag=model_tag, + **speech2diar_kwargs, + ) + speech2diar.diar_model.eval() + + def output_results_str(results: dict, uttid: str): + rst = [] + mid = uttid.rsplit("-", 1)[0] + for key in results: + results[key] = [(x[0] / 100, x[1] / 100) for x in results[key]] + template = "SPEAKER {} 0 {:.2f} {:.2f} {} " + for spk, segs in results.items(): + rst.extend([template.format(mid, st, ed, spk) for st, ed in segs]) + + return "\n".join(rst) + + def _forward( + data_path_and_name_and_type: Sequence[Tuple[str, str, str]] = None, + raw_inputs: List[List[Union[np.ndarray, torch.Tensor, str, bytes]]] = None, + output_dir_v2: Optional[str] = None, + param_dict: Optional[dict] = None, + ): + # 2. Build data-iterator + if data_path_and_name_and_type is None and raw_inputs is not None: + if isinstance(raw_inputs, torch.Tensor): + raw_inputs = raw_inputs.numpy() + data_path_and_name_and_type = [raw_inputs[0], "speech", "sound"] + loader = EENDOLADiarTask.build_streaming_iterator( + data_path_and_name_and_type, + dtype=dtype, + batch_size=batch_size, + key_file=key_file, + num_workers=num_workers, + preprocess_fn=EENDOLADiarTask.build_preprocess_fn(speech2diar.diar_train_args, False), + collate_fn=EENDOLADiarTask.build_collate_fn(speech2diar.diar_train_args, False), + allow_variable_data_keys=allow_variable_data_keys, + inference=True, + ) + + # 3. Start for-loop + output_path = output_dir_v2 if output_dir_v2 is not None else output_dir + if output_path is not None: + os.makedirs(output_path, exist_ok=True) + output_writer = open("{}/result.txt".format(output_path), "w") + result_list = [] + for keys, batch in loader: + assert isinstance(batch, dict), type(batch) + assert all(isinstance(s, str) for s in keys), keys + _bs = len(next(iter(batch.values()))) + assert len(keys) == _bs, f"{len(keys)} != {_bs}" + # batch = {k: v[0] for k, v in batch.items() if not k.endswith("_lengths")} + + results = speech2diar(**batch) + + # post process + a = results[0][0].cpu().numpy() + a = medfilt(a, (11, 1)) + rst = [] + for spkid, frames in enumerate(a.T): + frames = np.pad(frames, (1, 1), 'constant') + changes, = np.where(np.diff(frames, axis=0) != 0) + fmt = "SPEAKER {:s} 1 {:7.2f} {:7.2f} {:s} " + for s, e in zip(changes[::2], changes[1::2]): + st = s / 10. + dur = (e - s) / 10. + rst.append(fmt.format(keys[0], st, dur, "{}_{}".format(keys[0], str(spkid)))) + + # Only supporting batch_size==1 + value = "\n".join(rst) + item = {"key": keys[0], "value": value} + result_list.append(item) + if output_path is not None: + output_writer.write(value) + output_writer.flush() + + if output_path is not None: + output_writer.close() + + return result_list + + return _forward + + +def inference( + data_path_and_name_and_type: Sequence[Tuple[str, str, str]], + diar_train_config: Optional[str], + diar_model_file: Optional[str], + output_dir: Optional[str] = None, + batch_size: int = 1, + dtype: str = "float32", + ngpu: int = 0, + seed: int = 0, + num_workers: int = 1, + log_level: Union[int, str] = "INFO", + key_file: Optional[str] = None, + model_tag: Optional[str] = None, + allow_variable_data_keys: bool = True, + streaming: bool = False, + smooth_size: int = 83, + dur_threshold: int = 10, + out_format: str = "vad", + **kwargs, +): + inference_pipeline = inference_modelscope( + diar_train_config=diar_train_config, + diar_model_file=diar_model_file, + output_dir=output_dir, + batch_size=batch_size, + dtype=dtype, + ngpu=ngpu, + seed=seed, + num_workers=num_workers, + log_level=log_level, + key_file=key_file, + model_tag=model_tag, + allow_variable_data_keys=allow_variable_data_keys, + streaming=streaming, + smooth_size=smooth_size, + dur_threshold=dur_threshold, + out_format=out_format, + **kwargs, + ) + + return inference_pipeline(data_path_and_name_and_type, raw_inputs=None) + + +def get_parser(): + parser = config_argparse.ArgumentParser( + description="Speaker verification/x-vector extraction", + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + ) + + # Note(kamo): Use '_' instead of '-' as separator. + # '-' is confusing if written in yaml. + parser.add_argument( + "--log_level", + type=lambda x: x.upper(), + default="INFO", + choices=("CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG", "NOTSET"), + help="The verbose level of logging", + ) + + parser.add_argument("--output_dir", type=str, required=False) + parser.add_argument( + "--ngpu", + type=int, + default=0, + help="The number of gpus. 0 indicates CPU mode", + ) + parser.add_argument( + "--gpuid_list", + type=str, + default="", + help="The visible gpus", + ) + parser.add_argument("--seed", type=int, default=0, help="Random seed") + parser.add_argument( + "--dtype", + default="float32", + choices=["float16", "float32", "float64"], + help="Data type", + ) + parser.add_argument( + "--num_workers", + type=int, + default=1, + help="The number of workers used for DataLoader", + ) + + group = parser.add_argument_group("Input data related") + group.add_argument( + "--data_path_and_name_and_type", + type=str2triple_str, + required=False, + action="append", + ) + group.add_argument("--key_file", type=str_or_none) + group.add_argument("--allow_variable_data_keys", type=str2bool, default=False) + + group = parser.add_argument_group("The model configuration related") + group.add_argument( + "--diar_train_config", + type=str, + help="diarization training configuration", + ) + group.add_argument( + "--diar_model_file", + type=str, + help="diarization model parameter file", + ) + group.add_argument( + "--dur_threshold", + type=int, + default=10, + help="The threshold for short segments in number frames" + ) + parser.add_argument( + "--smooth_size", + type=int, + default=83, + help="The smoothing window length in number frames" + ) + group.add_argument( + "--model_tag", + type=str, + help="Pretrained model tag. If specify this option, *_train_config and " + "*_file will be overwritten", + ) + parser.add_argument( + "--batch_size", + type=int, + default=1, + help="The batch size for inference", + ) + parser.add_argument("--streaming", type=str2bool, default=False) + + return parser + + +def main(cmd=None): + print(get_commandline_args(), file=sys.stderr) + parser = get_parser() + args = parser.parse_args(cmd) + kwargs = vars(args) + kwargs.pop("config", None) + logging.info("args: {}".format(kwargs)) + if args.output_dir is None: + jobid, n_gpu = 1, 1 + gpuid = args.gpuid_list.split(",")[jobid - 1] + else: + jobid = int(args.output_dir.split(".")[-1]) + n_gpu = len(args.gpuid_list.split(",")) + gpuid = args.gpuid_list.split(",")[(jobid - 1) % n_gpu] + os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" + os.environ["CUDA_VISIBLE_DEVICES"] = gpuid + results_list = inference(**kwargs) + for results in results_list: + print("{} {}".format(results["key"], results["value"])) + + +if __name__ == "__main__": + main() diff --git a/funasr/bin/punc_inference_launch.py b/funasr/bin/punc_inference_launch.py index 53db1dfca..e7e3f1558 100755 --- a/funasr/bin/punc_inference_launch.py +++ b/funasr/bin/punc_inference_launch.py @@ -75,6 +75,9 @@ def inference_launch(mode, **kwargs): if mode == "punc": from funasr.bin.punctuation_infer import inference_modelscope return inference_modelscope(**kwargs) + if mode == "punc_VadRealtime": + from funasr.bin.punctuation_infer_vadrealtime import inference_modelscope + return inference_modelscope(**kwargs) else: logging.info("Unknown decoding mode: {}".format(mode)) return None diff --git a/funasr/bin/punctuation_infer_vadrealtime.py b/funasr/bin/punctuation_infer_vadrealtime.py new file mode 100644 index 000000000..d6cc15332 --- /dev/null +++ b/funasr/bin/punctuation_infer_vadrealtime.py @@ -0,0 +1,335 @@ +#!/usr/bin/env python3 +import argparse +import logging +from pathlib import Path +import sys +from typing import Optional +from typing import Sequence +from typing import Tuple +from typing import Union +from typing import Any +from typing import List + +import numpy as np +import torch +from typeguard import check_argument_types + +from funasr.datasets.preprocessor import CodeMixTokenizerCommonPreprocessor +from funasr.utils.cli_utils import get_commandline_args +from funasr.tasks.punctuation import PunctuationTask +from funasr.torch_utils.device_funcs import to_device +from funasr.torch_utils.forward_adaptor import ForwardAdaptor +from funasr.torch_utils.set_all_random_seed import set_all_random_seed +from funasr.utils import config_argparse +from funasr.utils.types import str2triple_str +from funasr.utils.types import str_or_none +from funasr.punctuation.text_preprocessor import split_to_mini_sentence + + +class Text2Punc: + + def __init__( + self, + train_config: Optional[str], + model_file: Optional[str], + device: str = "cpu", + dtype: str = "float32", + ): + # Build Model + model, train_args = PunctuationTask.build_model_from_file(train_config, model_file, device) + self.device = device + # Wrape model to make model.nll() data-parallel + self.wrapped_model = ForwardAdaptor(model, "inference") + self.wrapped_model.to(dtype=getattr(torch, dtype)).to(device=device).eval() + # logging.info(f"Model:\n{model}") + self.punc_list = train_args.punc_list + self.period = 0 + for i in range(len(self.punc_list)): + if self.punc_list[i] == ",": + self.punc_list[i] = "," + elif self.punc_list[i] == "?": + self.punc_list[i] = "?" + elif self.punc_list[i] == "。": + self.period = i + self.preprocessor = CodeMixTokenizerCommonPreprocessor( + train=False, + token_type=train_args.token_type, + token_list=train_args.token_list, + bpemodel=train_args.bpemodel, + text_cleaner=train_args.cleaner, + g2p_type=train_args.g2p, + text_name="text", + non_linguistic_symbols=train_args.non_linguistic_symbols, + ) + print("start decoding!!!") + + @torch.no_grad() + def __call__(self, text: Union[list, str], cache: list, split_size=20): + if cache is not None and len(cache) > 0: + precache = "".join(cache) + else: + precache = "" + data = {"text": precache + text} + result = self.preprocessor(data=data, uid="12938712838719") + split_text = self.preprocessor.pop_split_text_data(result) + mini_sentences = split_to_mini_sentence(split_text, split_size) + mini_sentences_id = split_to_mini_sentence(data["text"], split_size) + assert len(mini_sentences) == len(mini_sentences_id) + cache_sent = [] + cache_sent_id = torch.from_numpy(np.array([], dtype='int32')) + sentence_punc_list = [] + sentence_words_list= [] + cache_pop_trigger_limit = 200 + skip_num = 0 + for mini_sentence_i in range(len(mini_sentences)): + mini_sentence = mini_sentences[mini_sentence_i] + mini_sentence_id = mini_sentences_id[mini_sentence_i] + mini_sentence = cache_sent + mini_sentence + mini_sentence_id = np.concatenate((cache_sent_id, mini_sentence_id), axis=0) + data = { + "text": torch.unsqueeze(torch.from_numpy(mini_sentence_id), 0), + "text_lengths": torch.from_numpy(np.array([len(mini_sentence_id)], dtype='int32')), + "vad_indexes": torch.from_numpy(np.array([len(cache)-1], dtype='int32')), + } + data = to_device(data, self.device) + y, _ = self.wrapped_model(**data) + _, indices = y.view(-1, y.shape[-1]).topk(1, dim=1) + punctuations = indices + if indices.size()[0] != 1: + punctuations = torch.squeeze(indices) + assert punctuations.size()[0] == len(mini_sentence) + + # Search for the last Period/QuestionMark as cache + if mini_sentence_i < len(mini_sentences) - 1: + sentenceEnd = -1 + last_comma_index = -1 + for i in range(len(punctuations) - 2, 1, -1): + if self.punc_list[punctuations[i]] == "。" or self.punc_list[punctuations[i]] == "?": + sentenceEnd = i + break + if last_comma_index < 0 and self.punc_list[punctuations[i]] == ",": + last_comma_index = i + + if sentenceEnd < 0 and len(mini_sentence) > cache_pop_trigger_limit and last_comma_index >= 0: + # The sentence it too long, cut off at a comma. + sentenceEnd = last_comma_index + punctuations[sentenceEnd] = self.period + cache_sent = mini_sentence[sentenceEnd + 1:] + cache_sent_id = mini_sentence_id[sentenceEnd + 1:] + mini_sentence = mini_sentence[0:sentenceEnd + 1] + punctuations = punctuations[0:sentenceEnd + 1] + + punctuations_np = punctuations.cpu().numpy() + sentence_punc_list += [self.punc_list[int(x)] for x in punctuations_np] + sentence_words_list += mini_sentence + + assert len(sentence_punc_list) == len(sentence_words_list) + words_with_punc = [] + sentence_punc_list_out = [] + for i in range(0, len(sentence_words_list)): + if i > 0: + if len(sentence_words_list[i][0].encode()) == 1 and len(sentence_words_list[i - 1][-1].encode()) == 1: + sentence_words_list[i] = " " + sentence_words_list[i] + if skip_num < len(cache): + skip_num += 1 + else: + words_with_punc.append(sentence_words_list[i]) + if skip_num >= len(cache): + sentence_punc_list_out.append(sentence_punc_list[i]) + if sentence_punc_list[i] != "_": + words_with_punc.append(sentence_punc_list[i]) + sentence_out = "".join(words_with_punc) + + sentenceEnd = -1 + for i in range(len(sentence_punc_list) - 2, 1, -1): + if sentence_punc_list[i] == "。" or sentence_punc_list[i] == "?": + sentenceEnd = i + break + cache_out = sentence_words_list[sentenceEnd + 1 :] + if sentence_out[-1] in self.punc_list: + sentence_out = sentence_out[:-1] + sentence_punc_list_out[-1] = "_" + return sentence_out, sentence_punc_list_out, cache_out + + +def inference( + batch_size: int, + dtype: str, + ngpu: int, + seed: int, + num_workers: int, + output_dir: str, + log_level: Union[int, str], + train_config: Optional[str], + model_file: Optional[str], + key_file: Optional[str] = None, + data_path_and_name_and_type: Sequence[Tuple[str, str, str]] = None, + raw_inputs: Union[List[Any], bytes, str] = None, + cache: List[Any] = None, + param_dict: dict = None, + **kwargs, +): + inference_pipeline = inference_modelscope( + output_dir=output_dir, + batch_size=batch_size, + dtype=dtype, + ngpu=ngpu, + seed=seed, + num_workers=num_workers, + log_level=log_level, + key_file=key_file, + train_config=train_config, + model_file=model_file, + param_dict=param_dict, + **kwargs, + ) + return inference_pipeline(data_path_and_name_and_type, raw_inputs, cache) + + +def inference_modelscope( + batch_size: int, + dtype: str, + ngpu: int, + seed: int, + num_workers: int, + log_level: Union[int, str], + #cache: list, + key_file: Optional[str], + train_config: Optional[str], + model_file: Optional[str], + output_dir: Optional[str] = None, + param_dict: dict = None, + **kwargs, +): + assert check_argument_types() + logging.basicConfig( + level=log_level, + format="%(asctime)s (%(module)s:%(lineno)d) %(levelname)s: %(message)s", + ) + + if ngpu >= 1 and torch.cuda.is_available(): + device = "cuda" + else: + device = "cpu" + + # 1. Set random-seed + set_all_random_seed(seed) + text2punc = Text2Punc(train_config, model_file, device) + + def _forward( + data_path_and_name_and_type, + raw_inputs: Union[List[Any], bytes, str] = None, + output_dir_v2: Optional[str] = None, + cache: List[Any] = None, + param_dict: dict = None, + ): + results = [] + split_size = 10 + + if raw_inputs != None: + line = raw_inputs.strip() + key = "demo" + if line == "": + item = {'key': key, 'value': ""} + results.append(item) + return results + #import pdb;pdb.set_trace() + result, _, cache = text2punc(line, cache) + item = {'key': key, 'value': result, 'cache': cache} + results.append(item) + return results + + for inference_text, _, _ in data_path_and_name_and_type: + with open(inference_text, "r", encoding="utf-8") as fin: + for line in fin: + line = line.strip() + segs = line.split("\t") + if len(segs) != 2: + continue + key = segs[0] + if len(segs[1]) == 0: + continue + result, _ = text2punc(segs[1]) + item = {'key': key, 'value': result} + results.append(item) + output_path = output_dir_v2 if output_dir_v2 is not None else output_dir + if output_path != None: + output_file_name = "infer.out" + Path(output_path).mkdir(parents=True, exist_ok=True) + output_file_path = (Path(output_path) / output_file_name).absolute() + with open(output_file_path, "w", encoding="utf-8") as fout: + for item_i in results: + key_out = item_i["key"] + value_out = item_i["value"] + fout.write(f"{key_out}\t{value_out}\n") + return results + + return _forward + + +def get_parser(): + parser = config_argparse.ArgumentParser( + description="Punctuation inference", + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + ) + + parser.add_argument( + "--log_level", + type=lambda x: x.upper(), + default="INFO", + choices=("CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG", "NOTSET"), + help="The verbose level of logging", + ) + + parser.add_argument("--output_dir", type=str, required=False) + parser.add_argument( + "--ngpu", + type=int, + default=0, + help="The number of gpus. 0 indicates CPU mode", + ) + parser.add_argument("--seed", type=int, default=0, help="Random seed") + parser.add_argument( + "--dtype", + default="float32", + choices=["float16", "float32", "float64"], + help="Data type", + ) + parser.add_argument( + "--num_workers", + type=int, + default=1, + help="The number of workers used for DataLoader", + ) + parser.add_argument( + "--batch_size", + type=int, + default=1, + help="The batch size for inference", + ) + + group = parser.add_argument_group("Input data related") + group.add_argument("--data_path_and_name_and_type", type=str2triple_str, action="append", required=False) + group.add_argument("--raw_inputs", type=str, required=False) + group.add_argument("--cache", type=list, required=False) + group.add_argument("--param_dict", type=dict, required=False) + group.add_argument("--key_file", type=str_or_none) + + group = parser.add_argument_group("The model configuration related") + group.add_argument("--train_config", type=str) + group.add_argument("--model_file", type=str) + + return parser + + +def main(cmd=None): + print(get_commandline_args(), file=sys.stderr) + parser = get_parser() + args = parser.parse_args(cmd) + kwargs = vars(args) + # kwargs.pop("config", None) + inference(**kwargs) + + +if __name__ == "__main__": + main() diff --git a/funasr/bin/sond_inference.py b/funasr/bin/sond_inference.py index ab6d26f45..5a0a8e28f 100755 --- a/funasr/bin/sond_inference.py +++ b/funasr/bin/sond_inference.py @@ -42,7 +42,7 @@ class Speech2Diarization: Examples: >>> import soundfile >>> import numpy as np - >>> speech2diar = Speech2Diarization("diar_sond_config.yml", "diar_sond.pth") + >>> speech2diar = Speech2Diarization("diar_sond_config.yml", "diar_sond.pb") >>> profile = np.load("profiles.npy") >>> audio, rate = soundfile.read("speech.wav") >>> speech2diar(audio, profile) @@ -54,7 +54,7 @@ class Speech2Diarization: self, diar_train_config: Union[Path, str] = None, diar_model_file: Union[Path, str] = None, - device: str = "cpu", + device: Union[str, torch.device] = "cpu", batch_size: int = 1, dtype: str = "float32", streaming: bool = False, @@ -114,9 +114,19 @@ class Speech2Diarization: # little-endian order: lower bit first return (np.array(list(b)[::-1]) == '1').astype(dtype) - return np.row_stack([int2vec(int(x), vec_dim) for x in seq]) + # process oov + seq = np.array([int(x) for x in seq]) + new_seq = [] + for i, x in enumerate(seq): + if x < 2 ** vec_dim: + new_seq.append(x) + else: + idx_list = np.where(seq < 2 ** vec_dim)[0] + idx = np.abs(idx_list - i).argmin() + new_seq.append(seq[idx_list[idx]]) + return np.row_stack([int2vec(x, vec_dim) for x in new_seq]) - def post_processing(self, raw_logits: torch.Tensor, spk_num: int): + def post_processing(self, raw_logits: torch.Tensor, spk_num: int, output_format: str = "speaker_turn"): logits_idx = raw_logits.argmax(-1) # B, T, vocab_size -> B, T # upsampling outputs to match inputs ut = logits_idx.shape[1] * self.diar_model.encoder.time_ds_ratio @@ -127,8 +137,14 @@ class Speech2Diarization: ).squeeze(1).long() logits_idx = logits_idx[0].tolist() pse_labels = [self.token_list[x] for x in logits_idx] + if output_format == "pse_labels": + return pse_labels, None + multi_labels = self.seq2arr(pse_labels, spk_num)[:, :spk_num] # remove padding speakers multi_labels = self.smooth_multi_labels(multi_labels) + if output_format == "binary_labels": + return multi_labels, None + spk_list = ["spk{}".format(i + 1) for i in range(spk_num)] spk_turns = self.calc_spk_turns(multi_labels, spk_list) results = OrderedDict() @@ -149,6 +165,7 @@ class Speech2Diarization: self, speech: Union[torch.Tensor, np.ndarray], profile: Union[torch.Tensor, np.ndarray], + output_format: str = "speaker_turn" ): """Inference @@ -178,7 +195,7 @@ class Speech2Diarization: batch = to_device(batch, device=self.device) logits = self.diar_model.prediction_forward(**batch) - results, pse_labels = self.post_processing(logits, profile.shape[1]) + results, pse_labels = self.post_processing(logits, profile.shape[1], output_format) return results, pse_labels @@ -367,7 +384,7 @@ def inference_modelscope( pse_label_writer = open("{}/labels.txt".format(output_path), "w") logging.info("Start to diarize...") result_list = [] - for keys, batch in loader: + for idx, (keys, batch) in enumerate(loader): assert isinstance(batch, dict), type(batch) assert all(isinstance(s, str) for s in keys), keys _bs = len(next(iter(batch.values()))) @@ -385,6 +402,9 @@ def inference_modelscope( pse_label_writer.write("{} {}\n".format(key, " ".join(pse_labels))) pse_label_writer.flush() + if idx % 100 == 0: + logging.info("Processing {:5d}: {}".format(idx, key)) + if output_path is not None: output_writer.close() pse_label_writer.close() diff --git a/funasr/bin/sv_inference.py b/funasr/bin/sv_inference.py index a78bccded..7e63bbd2d 100755 --- a/funasr/bin/sv_inference.py +++ b/funasr/bin/sv_inference.py @@ -36,7 +36,7 @@ class Speech2Xvector: Examples: >>> import soundfile - >>> speech2xvector = Speech2Xvector("sv_config.yml", "sv.pth") + >>> speech2xvector = Speech2Xvector("sv_config.yml", "sv.pb") >>> audio, rate = soundfile.read("speech.wav") >>> speech2xvector(audio) [(text, token, token_int, hypothesis object), ...] @@ -169,7 +169,7 @@ def inference_modelscope( log_level: Union[int, str] = "INFO", key_file: Optional[str] = None, sv_train_config: Optional[str] = "sv.yaml", - sv_model_file: Optional[str] = "sv.pth", + sv_model_file: Optional[str] = "sv.pb", model_tag: Optional[str] = None, allow_variable_data_keys: bool = True, streaming: bool = False, diff --git a/funasr/bin/tp_inference.py b/funasr/bin/tp_inference.py new file mode 100644 index 000000000..e374a227a --- /dev/null +++ b/funasr/bin/tp_inference.py @@ -0,0 +1,379 @@ +import argparse +import logging +from optparse import Option +import sys +import json +from pathlib import Path +from typing import Any +from typing import List +from typing import Optional +from typing import Sequence +from typing import Tuple +from typing import Union +from typing import Dict + +import numpy as np +import torch +from typeguard import check_argument_types + +from funasr.fileio.datadir_writer import DatadirWriter +from funasr.datasets.preprocessor import LMPreprocessor +from funasr.tasks.asr import ASRTaskAligner as ASRTask +from funasr.torch_utils.device_funcs import to_device +from funasr.torch_utils.set_all_random_seed import set_all_random_seed +from funasr.utils import config_argparse +from funasr.utils.cli_utils import get_commandline_args +from funasr.utils.types import str2bool +from funasr.utils.types import str2triple_str +from funasr.utils.types import str_or_none +from funasr.models.frontend.wav_frontend import WavFrontend +from funasr.text.token_id_converter import TokenIDConverter +from funasr.utils.timestamp_tools import ts_prediction_lfr6_standard + + +header_colors = '\033[95m' +end_colors = '\033[0m' + +global_asr_language: str = 'zh-cn' +global_sample_rate: Union[int, Dict[Any, int]] = { + 'audio_fs': 16000, + 'model_fs': 16000 +} + + +class SpeechText2Timestamp: + def __init__( + self, + timestamp_infer_config: Union[Path, str] = None, + timestamp_model_file: Union[Path, str] = None, + timestamp_cmvn_file: Union[Path, str] = None, + device: str = "cpu", + dtype: str = "float32", + **kwargs, + ): + assert check_argument_types() + # 1. Build ASR model + tp_model, tp_train_args = ASRTask.build_model_from_file( + timestamp_infer_config, timestamp_model_file, device + ) + if 'cuda' in device: + tp_model = tp_model.cuda() # force model to cuda + + frontend = None + if tp_train_args.frontend is not None: + frontend = WavFrontend(cmvn_file=timestamp_cmvn_file, **tp_train_args.frontend_conf) + + logging.info("tp_model: {}".format(tp_model)) + logging.info("tp_train_args: {}".format(tp_train_args)) + tp_model.to(dtype=getattr(torch, dtype)).eval() + + logging.info(f"Decoding device={device}, dtype={dtype}") + + + self.tp_model = tp_model + self.tp_train_args = tp_train_args + + token_list = self.tp_model.token_list + self.converter = TokenIDConverter(token_list=token_list) + + self.device = device + self.dtype = dtype + self.frontend = frontend + self.encoder_downsampling_factor = 1 + if tp_train_args.encoder_conf["input_layer"] == "conv2d": + self.encoder_downsampling_factor = 4 + + @torch.no_grad() + def __call__( + self, + speech: Union[torch.Tensor, np.ndarray], + speech_lengths: Union[torch.Tensor, np.ndarray] = None, + text_lengths: Union[torch.Tensor, np.ndarray] = None + ): + assert check_argument_types() + + # Input as audio signal + if isinstance(speech, np.ndarray): + speech = torch.tensor(speech) + if self.frontend is not None: + feats, feats_len = self.frontend.forward(speech, speech_lengths) + feats = to_device(feats, device=self.device) + feats_len = feats_len.int() + self.tp_model.frontend = None + else: + feats = speech + feats_len = speech_lengths + + # lfr_factor = max(1, (feats.size()[-1]//80)-1) + batch = {"speech": feats, "speech_lengths": feats_len} + + # a. To device + batch = to_device(batch, device=self.device) + + # b. Forward Encoder + enc, enc_len = self.tp_model.encode(**batch) + if isinstance(enc, tuple): + enc = enc[0] + + # c. Forward Predictor + _, _, us_alphas, us_cif_peak = self.tp_model.calc_predictor_timestamp(enc, enc_len, text_lengths.to(self.device)+1) + return us_alphas, us_cif_peak + + +def inference( + batch_size: int, + ngpu: int, + log_level: Union[int, str], + data_path_and_name_and_type, + timestamp_infer_config: Optional[str], + timestamp_model_file: Optional[str], + timestamp_cmvn_file: Optional[str] = None, + raw_inputs: Union[np.ndarray, torch.Tensor] = None, + key_file: Optional[str] = None, + allow_variable_data_keys: bool = False, + output_dir: Optional[str] = None, + dtype: str = "float32", + seed: int = 0, + num_workers: int = 1, + split_with_space: bool = True, + seg_dict_file: Optional[str] = None, + **kwargs, +): + inference_pipeline = inference_modelscope( + batch_size=batch_size, + ngpu=ngpu, + log_level=log_level, + timestamp_infer_config=timestamp_infer_config, + timestamp_model_file=timestamp_model_file, + timestamp_cmvn_file=timestamp_cmvn_file, + key_file=key_file, + allow_variable_data_keys=allow_variable_data_keys, + output_dir=output_dir, + dtype=dtype, + seed=seed, + num_workers=num_workers, + split_with_space=split_with_space, + seg_dict_file=seg_dict_file, + **kwargs, + ) + return inference_pipeline(data_path_and_name_and_type, raw_inputs) + + +def inference_modelscope( + batch_size: int, + ngpu: int, + log_level: Union[int, str], + # data_path_and_name_and_type, + timestamp_infer_config: Optional[str], + timestamp_model_file: Optional[str], + timestamp_cmvn_file: Optional[str] = None, + # raw_inputs: Union[np.ndarray, torch.Tensor] = None, + key_file: Optional[str] = None, + allow_variable_data_keys: bool = False, + output_dir: Optional[str] = None, + dtype: str = "float32", + seed: int = 0, + num_workers: int = 1, + split_with_space: bool = True, + seg_dict_file: Optional[str] = None, + **kwargs, +): + assert check_argument_types() + if batch_size > 1: + raise NotImplementedError("batch decoding is not implemented") + if ngpu > 1: + raise NotImplementedError("only single GPU decoding is supported") + + logging.basicConfig( + level=log_level, + format="%(asctime)s (%(module)s:%(lineno)d) %(levelname)s: %(message)s", + ) + + if ngpu >= 1 and torch.cuda.is_available(): + device = "cuda" + else: + device = "cpu" + # 1. Set random-seed + set_all_random_seed(seed) + + # 2. Build speech2vadsegment + speechtext2timestamp_kwargs = dict( + timestamp_infer_config=timestamp_infer_config, + timestamp_model_file=timestamp_model_file, + timestamp_cmvn_file=timestamp_cmvn_file, + device=device, + dtype=dtype, + ) + logging.info("speechtext2timestamp_kwargs: {}".format(speechtext2timestamp_kwargs)) + speechtext2timestamp = SpeechText2Timestamp(**speechtext2timestamp_kwargs) + + preprocessor = LMPreprocessor( + train=False, + token_type=speechtext2timestamp.tp_train_args.token_type, + token_list=speechtext2timestamp.tp_train_args.token_list, + bpemodel=None, + text_cleaner=None, + g2p_type=None, + text_name="text", + non_linguistic_symbols=speechtext2timestamp.tp_train_args.non_linguistic_symbols, + split_with_space=split_with_space, + seg_dict_file=seg_dict_file, + ) + + def _forward( + data_path_and_name_and_type, + raw_inputs: Union[np.ndarray, torch.Tensor] = None, + output_dir_v2: Optional[str] = None, + fs: dict = None, + param_dict: dict = None, + **kwargs + ): + # 3. Build data-iterator + if data_path_and_name_and_type is None and raw_inputs is not None: + if isinstance(raw_inputs, torch.Tensor): + raw_inputs = raw_inputs.numpy() + data_path_and_name_and_type = [raw_inputs, "speech", "waveform"] + + loader = ASRTask.build_streaming_iterator( + data_path_and_name_and_type, + dtype=dtype, + batch_size=batch_size, + key_file=key_file, + num_workers=num_workers, + preprocess_fn=preprocessor, + collate_fn=ASRTask.build_collate_fn(speechtext2timestamp.tp_train_args, False), + allow_variable_data_keys=allow_variable_data_keys, + inference=True, + ) + + tp_result_list = [] + for keys, batch in loader: + assert isinstance(batch, dict), type(batch) + assert all(isinstance(s, str) for s in keys), keys + _bs = len(next(iter(batch.values()))) + assert len(keys) == _bs, f"{len(keys)} != {_bs}" + + logging.info("timestamp predicting, utt_id: {}".format(keys)) + _batch = {'speech':batch['speech'], + 'speech_lengths':batch['speech_lengths'], + 'text_lengths':batch['text_lengths']} + us_alphas, us_cif_peak = speechtext2timestamp(**_batch) + + for batch_id in range(_bs): + key = keys[batch_id] + token = speechtext2timestamp.converter.ids2tokens(batch['text'][batch_id]) + ts_str, ts_list = ts_prediction_lfr6_standard(us_alphas[batch_id], us_cif_peak[batch_id], token, force_time_shift=-3.0) + logging.warning(ts_str) + item = {'key': key, 'value': ts_str, 'timestamp':ts_list} + tp_result_list.append(item) + return tp_result_list + + return _forward + + +def get_parser(): + parser = config_argparse.ArgumentParser( + description="Timestamp Prediction Inference", + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + ) + + # Note(kamo): Use '_' instead of '-' as separator. + # '-' is confusing if written in yaml. + parser.add_argument( + "--log_level", + type=lambda x: x.upper(), + default="INFO", + choices=("CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG", "NOTSET"), + help="The verbose level of logging", + ) + + parser.add_argument("--output_dir", type=str, required=False) + parser.add_argument( + "--ngpu", + type=int, + default=0, + help="The number of gpus. 0 indicates CPU mode", + ) + parser.add_argument( + "--gpuid_list", + type=str, + default="", + help="The visible gpus", + ) + parser.add_argument("--seed", type=int, default=0, help="Random seed") + parser.add_argument( + "--dtype", + default="float32", + choices=["float16", "float32", "float64"], + help="Data type", + ) + parser.add_argument( + "--num_workers", + type=int, + default=0, + help="The number of workers used for DataLoader", + ) + + group = parser.add_argument_group("Input data related") + group.add_argument( + "--data_path_and_name_and_type", + type=str2triple_str, + required=False, + action="append", + ) + group.add_argument("--raw_inputs", type=list, default=None) + # example=[{'key':'EdevDEWdIYQ_0021','file':'/mnt/data/jiangyu.xzy/test_data/speech_io/SPEECHIO_ASR_ZH00007_zhibodaihuo/wav/EdevDEWdIYQ_0021.wav'}]) + group.add_argument("--key_file", type=str_or_none) + group.add_argument("--allow_variable_data_keys", type=str2bool, default=False) + + group = parser.add_argument_group("The model configuration related") + group.add_argument( + "--timestamp_infer_config", + type=str, + help="VAD infer configuration", + ) + group.add_argument( + "--timestamp_model_file", + type=str, + help="VAD model parameter file", + ) + group.add_argument( + "--timestamp_cmvn_file", + type=str, + help="Global cmvn file", + ) + + group = parser.add_argument_group("infer related") + group.add_argument( + "--batch_size", + type=int, + default=1, + help="The batch size for inference", + ) + group.add_argument( + "--seg_dict_file", + type=str, + default=None, + help="The batch size for inference", + ) + group.add_argument( + "--split_with_space", + type=bool, + default=False, + help="The batch size for inference", + ) + + return parser + + +def main(cmd=None): + print(get_commandline_args(), file=sys.stderr) + parser = get_parser() + args = parser.parse_args(cmd) + kwargs = vars(args) + kwargs.pop("config", None) + inference(**kwargs) + + +if __name__ == "__main__": + main() diff --git a/funasr/bin/tp_inference_launch.py b/funasr/bin/tp_inference_launch.py new file mode 100644 index 000000000..dd76df61b --- /dev/null +++ b/funasr/bin/tp_inference_launch.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python3 +# Copyright ESPnet (https://github.com/espnet/espnet). All Rights Reserved. +# Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0) + +import argparse +import logging +import os +import sys +from typing import Union, Dict, Any + +from funasr.utils import config_argparse +from funasr.utils.cli_utils import get_commandline_args +from funasr.utils.types import str2bool +from funasr.utils.types import str2triple_str +from funasr.utils.types import str_or_none + + +def get_parser(): + parser = config_argparse.ArgumentParser( + description="Timestamp Prediction Inference", + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + ) + + # Note(kamo): Use '_' instead of '-' as separator. + # '-' is confusing if written in yaml. + parser.add_argument( + "--log_level", + type=lambda x: x.upper(), + default="INFO", + choices=("CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG", "NOTSET"), + help="The verbose level of logging", + ) + + parser.add_argument("--output_dir", type=str, required=False) + parser.add_argument( + "--ngpu", + type=int, + default=0, + help="The number of gpus. 0 indicates CPU mode", + ) + parser.add_argument( + "--njob", + type=int, + default=1, + help="The number of jobs for each gpu", + ) + parser.add_argument( + "--gpuid_list", + type=str, + default="", + help="The visible gpus", + ) + parser.add_argument("--seed", type=int, default=0, help="Random seed") + parser.add_argument( + "--dtype", + default="float32", + choices=["float16", "float32", "float64"], + help="Data type", + ) + parser.add_argument( + "--num_workers", + type=int, + default=1, + help="The number of workers used for DataLoader", + ) + + group = parser.add_argument_group("Input data related") + group.add_argument( + "--data_path_and_name_and_type", + type=str2triple_str, + required=True, + action="append", + ) + group.add_argument("--key_file", type=str_or_none) + group.add_argument("--allow_variable_data_keys", type=str2bool, default=False) + + group = parser.add_argument_group("The model configuration related") + group.add_argument( + "--timestamp_infer_config", + type=str, + help="VAD infer configuration", + ) + group.add_argument( + "--timestamp_model_file", + type=str, + help="VAD model parameter file", + ) + group.add_argument( + "--timestamp_cmvn_file", + type=str, + help="Global CMVN file", + ) + + group = parser.add_argument_group("The inference configuration related") + group.add_argument( + "--batch_size", + type=int, + default=1, + help="The batch size for inference", + ) + return parser + + +def inference_launch(mode, **kwargs): + if mode == "tp_norm": + from funasr.bin.tp_inference import inference_modelscope + return inference_modelscope(**kwargs) + else: + logging.info("Unknown decoding mode: {}".format(mode)) + return None + +def main(cmd=None): + print(get_commandline_args(), file=sys.stderr) + parser = get_parser() + parser.add_argument( + "--mode", + type=str, + default="tp_norm", + help="The decoding mode", + ) + args = parser.parse_args(cmd) + kwargs = vars(args) + kwargs.pop("config", None) + + # set logging messages + logging.basicConfig( + level=args.log_level, + format="%(asctime)s (%(module)s:%(lineno)d) %(levelname)s: %(message)s", + ) + logging.info("Decoding args: {}".format(kwargs)) + + # gpu setting + if args.ngpu > 0: + jobid = int(args.output_dir.split(".")[-1]) + gpuid = args.gpuid_list.split(",")[(jobid - 1) // args.njob] + os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" + os.environ["CUDA_VISIBLE_DEVICES"] = gpuid + + inference_launch(**kwargs) + + +if __name__ == "__main__": + main() diff --git a/funasr/bin/vad_inference_launch.py b/funasr/bin/vad_inference_launch.py index 18eba33fb..42c5c1e12 100644 --- a/funasr/bin/vad_inference_launch.py +++ b/funasr/bin/vad_inference_launch.py @@ -110,8 +110,7 @@ def inference_launch(mode, **kwargs): if mode == "offline": from funasr.bin.vad_inference import inference_modelscope return inference_modelscope(**kwargs) - # elif mode == "online": - if "param_dict" in kwargs and kwargs["param_dict"]["online"]: + elif mode == "online": from funasr.bin.vad_inference_online import inference_modelscope return inference_modelscope(**kwargs) else: diff --git a/funasr/bin/vad_inference_online.py b/funasr/bin/vad_inference_online.py new file mode 100644 index 000000000..d18488ed0 --- /dev/null +++ b/funasr/bin/vad_inference_online.py @@ -0,0 +1,345 @@ +import argparse +import logging +import sys +import json +from pathlib import Path +from typing import Any +from typing import List +from typing import Optional +from typing import Sequence +from typing import Tuple +from typing import Union +from typing import Dict + +import numpy as np +import torch +from typeguard import check_argument_types +from typeguard import check_return_type + +from funasr.fileio.datadir_writer import DatadirWriter +from funasr.tasks.vad import VADTask +from funasr.torch_utils.device_funcs import to_device +from funasr.torch_utils.set_all_random_seed import set_all_random_seed +from funasr.utils import config_argparse +from funasr.utils.cli_utils import get_commandline_args +from funasr.utils.types import str2bool +from funasr.utils.types import str2triple_str +from funasr.utils.types import str_or_none +from funasr.models.frontend.wav_frontend import WavFrontendOnline +from funasr.models.frontend.wav_frontend import WavFrontend +from funasr.bin.vad_inference import Speech2VadSegment + +header_colors = '\033[95m' +end_colors = '\033[0m' + +global_asr_language: str = 'zh-cn' +global_sample_rate: Union[int, Dict[Any, int]] = { + 'audio_fs': 16000, + 'model_fs': 16000 +} + + +class Speech2VadSegmentOnline(Speech2VadSegment): + """Speech2VadSegmentOnline class + + Examples: + >>> import soundfile + >>> speech2segment = Speech2VadSegmentOnline("vad_config.yml", "vad.pt") + >>> audio, rate = soundfile.read("speech.wav") + >>> speech2segment(audio) + [[10, 230], [245, 450], ...] + + """ + def __init__(self, **kwargs): + super(Speech2VadSegmentOnline, self).__init__(**kwargs) + vad_cmvn_file = kwargs.get('vad_cmvn_file', None) + self.frontend = None + if self.vad_infer_args.frontend is not None: + self.frontend = WavFrontendOnline(cmvn_file=vad_cmvn_file, **self.vad_infer_args.frontend_conf) + + + @torch.no_grad() + def __call__( + self, speech: Union[torch.Tensor, np.ndarray], speech_lengths: Union[torch.Tensor, np.ndarray] = None, + in_cache: Dict[str, torch.Tensor] = dict(), is_final: bool = False + ) -> Tuple[torch.Tensor, List[List[int]], torch.Tensor]: + """Inference + + Args: + speech: Input speech data + Returns: + text, token, token_int, hyp + + """ + assert check_argument_types() + + # Input as audio signal + if isinstance(speech, np.ndarray): + speech = torch.tensor(speech) + batch_size = speech.shape[0] + segments = [[]] * batch_size + if self.frontend is not None: + feats, feats_len = self.frontend.forward(speech, speech_lengths, is_final) + fbanks, _ = self.frontend.get_fbank() + else: + raise Exception("Need to extract feats first, please configure frontend configuration") + if feats.shape[0]: + feats = to_device(feats, device=self.device) + feats_len = feats_len.int() + waveforms = self.frontend.get_waveforms() + + batch = { + "feats": feats, + "waveform": waveforms, + "in_cache": in_cache, + "is_final": is_final + } + # a. To device + batch = to_device(batch, device=self.device) + segments, in_cache = self.vad_model.forward_online(**batch) + # in_cache.update(batch['in_cache']) + # in_cache = {key: value for key, value in batch['in_cache'].items()} + return fbanks, segments, in_cache + + +def inference( + batch_size: int, + ngpu: int, + log_level: Union[int, str], + data_path_and_name_and_type, + vad_infer_config: Optional[str], + vad_model_file: Optional[str], + vad_cmvn_file: Optional[str] = None, + raw_inputs: Union[np.ndarray, torch.Tensor] = None, + key_file: Optional[str] = None, + allow_variable_data_keys: bool = False, + output_dir: Optional[str] = None, + dtype: str = "float32", + seed: int = 0, + num_workers: int = 1, + **kwargs, +): + inference_pipeline = inference_modelscope( + batch_size=batch_size, + ngpu=ngpu, + log_level=log_level, + vad_infer_config=vad_infer_config, + vad_model_file=vad_model_file, + vad_cmvn_file=vad_cmvn_file, + key_file=key_file, + allow_variable_data_keys=allow_variable_data_keys, + output_dir=output_dir, + dtype=dtype, + seed=seed, + num_workers=num_workers, + **kwargs, + ) + return inference_pipeline(data_path_and_name_and_type, raw_inputs) + + +def inference_modelscope( + batch_size: int, + ngpu: int, + log_level: Union[int, str], + # data_path_and_name_and_type, + vad_infer_config: Optional[str], + vad_model_file: Optional[str], + vad_cmvn_file: Optional[str] = None, + # raw_inputs: Union[np.ndarray, torch.Tensor] = None, + key_file: Optional[str] = None, + allow_variable_data_keys: bool = False, + output_dir: Optional[str] = None, + dtype: str = "float32", + seed: int = 0, + num_workers: int = 1, + **kwargs, +): + assert check_argument_types() + if batch_size > 1: + raise NotImplementedError("batch decoding is not implemented") + if ngpu > 1: + raise NotImplementedError("only single GPU decoding is supported") + + logging.basicConfig( + level=log_level, + format="%(asctime)s (%(module)s:%(lineno)d) %(levelname)s: %(message)s", + ) + + if ngpu >= 1 and torch.cuda.is_available(): + device = "cuda" + else: + device = "cpu" + + # 1. Set random-seed + set_all_random_seed(seed) + + # 2. Build speech2vadsegment + speech2vadsegment_kwargs = dict( + vad_infer_config=vad_infer_config, + vad_model_file=vad_model_file, + vad_cmvn_file=vad_cmvn_file, + device=device, + dtype=dtype, + ) + logging.info("speech2vadsegment_kwargs: {}".format(speech2vadsegment_kwargs)) + speech2vadsegment = Speech2VadSegmentOnline(**speech2vadsegment_kwargs) + + def _forward( + data_path_and_name_and_type, + raw_inputs: Union[np.ndarray, torch.Tensor] = None, + output_dir_v2: Optional[str] = None, + fs: dict = None, + param_dict: dict = None, + ): + # 3. Build data-iterator + if data_path_and_name_and_type is None and raw_inputs is not None: + if isinstance(raw_inputs, torch.Tensor): + raw_inputs = raw_inputs.numpy() + data_path_and_name_and_type = [raw_inputs, "speech", "waveform"] + loader = VADTask.build_streaming_iterator( + data_path_and_name_and_type, + dtype=dtype, + batch_size=batch_size, + key_file=key_file, + num_workers=num_workers, + preprocess_fn=VADTask.build_preprocess_fn(speech2vadsegment.vad_infer_args, False), + collate_fn=VADTask.build_collate_fn(speech2vadsegment.vad_infer_args, False), + allow_variable_data_keys=allow_variable_data_keys, + inference=True, + ) + + finish_count = 0 + file_count = 1 + # 7 .Start for-loop + # FIXME(kamo): The output format should be discussed about + output_path = output_dir_v2 if output_dir_v2 is not None else output_dir + if output_path is not None: + writer = DatadirWriter(output_path) + ibest_writer = writer[f"1best_recog"] + else: + writer = None + ibest_writer = None + + vad_results = [] + batch_in_cache = param_dict['in_cache'] if param_dict is not None else dict() + is_final = param_dict['is_final'] if param_dict is not None else False + for keys, batch in loader: + assert isinstance(batch, dict), type(batch) + assert all(isinstance(s, str) for s in keys), keys + _bs = len(next(iter(batch.values()))) + assert len(keys) == _bs, f"{len(keys)} != {_bs}" + batch['in_cache'] = batch_in_cache + batch['is_final'] = is_final + + # do vad segment + _, results, param_dict['in_cache'] = speech2vadsegment(**batch) + # param_dict['in_cache'] = batch['in_cache'] + if results: + for i, _ in enumerate(keys): + if results[i]: + results[i] = json.dumps(results[i]) + item = {'key': keys[i], 'value': results[i]} + vad_results.append(item) + if writer is not None: + results[i] = json.loads(results[i]) + ibest_writer["text"][keys[i]] = "{}".format(results[i]) + + return vad_results + + return _forward + + +def get_parser(): + parser = config_argparse.ArgumentParser( + description="VAD Decoding", + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + ) + + # Note(kamo): Use '_' instead of '-' as separator. + # '-' is confusing if written in yaml. + parser.add_argument( + "--log_level", + type=lambda x: x.upper(), + default="INFO", + choices=("CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG", "NOTSET"), + help="The verbose level of logging", + ) + + parser.add_argument("--output_dir", type=str, required=False) + parser.add_argument( + "--ngpu", + type=int, + default=0, + help="The number of gpus. 0 indicates CPU mode", + ) + parser.add_argument( + "--gpuid_list", + type=str, + default="", + help="The visible gpus", + ) + parser.add_argument("--seed", type=int, default=0, help="Random seed") + parser.add_argument( + "--dtype", + default="float32", + choices=["float16", "float32", "float64"], + help="Data type", + ) + parser.add_argument( + "--num_workers", + type=int, + default=1, + help="The number of workers used for DataLoader", + ) + + group = parser.add_argument_group("Input data related") + group.add_argument( + "--data_path_and_name_and_type", + type=str2triple_str, + required=False, + action="append", + ) + group.add_argument("--raw_inputs", type=list, default=None) + # example=[{'key':'EdevDEWdIYQ_0021','file':'/mnt/data/jiangyu.xzy/test_data/speech_io/SPEECHIO_ASR_ZH00007_zhibodaihuo/wav/EdevDEWdIYQ_0021.wav'}]) + group.add_argument("--key_file", type=str_or_none) + group.add_argument("--allow_variable_data_keys", type=str2bool, default=False) + + group = parser.add_argument_group("The model configuration related") + group.add_argument( + "--vad_infer_config", + type=str, + help="VAD infer configuration", + ) + group.add_argument( + "--vad_model_file", + type=str, + help="VAD model parameter file", + ) + group.add_argument( + "--vad_cmvn_file", + type=str, + help="Global cmvn file", + ) + + group = parser.add_argument_group("infer related") + group.add_argument( + "--batch_size", + type=int, + default=1, + help="The batch size for inference", + ) + + return parser + + +def main(cmd=None): + print(get_commandline_args(), file=sys.stderr) + parser = get_parser() + args = parser.parse_args(cmd) + kwargs = vars(args) + kwargs.pop("config", None) + inference(**kwargs) + + +if __name__ == "__main__": + main() diff --git a/funasr/datasets/dataset.py b/funasr/datasets/dataset.py index 2af93d0bc..1595224fd 100644 --- a/funasr/datasets/dataset.py +++ b/funasr/datasets/dataset.py @@ -107,7 +107,7 @@ class H5FileWrapper: return value[()] -def sound_loader(path, float_dtype=None): +def sound_loader(path, dest_sample_rate=16000, float_dtype=None): # The file is as follows: # utterance_id_A /some/where/a.wav # utterance_id_B /some/where/a.flac @@ -115,7 +115,7 @@ def sound_loader(path, float_dtype=None): # NOTE(kamo): SoundScpReader doesn't support pipe-fashion # like Kaldi e.g. "cat a.wav |". # NOTE(kamo): The audio signal is normalized to [-1,1] range. - loader = SoundScpReader(path, normalize=True, always_2d=False) + loader = SoundScpReader(path, dest_sample_rate, normalize=True, always_2d=False) # SoundScpReader.__getitem__() returns Tuple[int, ndarray], # but ndarray is desired, so Adapter class is inserted here @@ -139,7 +139,7 @@ def rand_int_loader(filepath, loader_type): DATA_TYPES = { "sound": dict( func=sound_loader, - kwargs=["float_dtype"], + kwargs=["dest_sample_rate","float_dtype"], help="Audio format types which supported by sndfile wav, flac, etc." "\n\n" " utterance_id_a a.wav\n" @@ -282,6 +282,7 @@ class ESPnetDataset(AbsDataset): int_dtype: str = "long", max_cache_size: Union[float, int, str] = 0.0, max_cache_fd: int = 0, + dest_sample_rate: int = 16000, ): assert check_argument_types() if len(path_name_type_list) == 0: @@ -295,6 +296,7 @@ class ESPnetDataset(AbsDataset): self.float_dtype = float_dtype self.int_dtype = int_dtype self.max_cache_fd = max_cache_fd + self.dest_sample_rate = dest_sample_rate self.loader_dict = {} self.debug_info = {} @@ -335,6 +337,8 @@ class ESPnetDataset(AbsDataset): for key2 in dic["kwargs"]: if key2 == "loader_type": kwargs["loader_type"] = loader_type + elif key2 == "dest_sample_rate" and loader_type=="sound": + kwargs["dest_sample_rate"] = self.dest_sample_rate elif key2 == "float_dtype": kwargs["float_dtype"] = self.float_dtype elif key2 == "int_dtype": diff --git a/funasr/datasets/iterable_dataset.py b/funasr/datasets/iterable_dataset.py index 2f97e78b9..c8c51d458 100644 --- a/funasr/datasets/iterable_dataset.py +++ b/funasr/datasets/iterable_dataset.py @@ -8,6 +8,7 @@ from typing import Dict from typing import Iterator from typing import Tuple from typing import Union +from typing import List import kaldiio import numpy as np @@ -66,7 +67,7 @@ def load_pcm(input): return load_bytes(bytes) DATA_TYPES = { - "sound": lambda x: torchaudio.load(x)[0][0].numpy(), + "sound": lambda x: torchaudio.load(x)[0].numpy(), "pcm": load_pcm, "kaldi_ark": load_kaldi, "bytes": load_bytes, @@ -106,6 +107,7 @@ class IterableESPnetDataset(IterableDataset): ] = None, float_dtype: str = "float32", fs: dict = None, + mc: bool = False, int_dtype: str = "long", key_file: str = None, ): @@ -122,12 +124,13 @@ class IterableESPnetDataset(IterableDataset): self.int_dtype = int_dtype self.key_file = key_file self.fs = fs + self.mc = mc self.debug_info = {} non_iterable_list = [] self.path_name_type_list = [] - if not isinstance(path_name_type_list[0], Tuple): + if not isinstance(path_name_type_list[0], (Tuple, List)): path = path_name_type_list[0] name = path_name_type_list[1] _type = path_name_type_list[2] @@ -192,6 +195,7 @@ class IterableESPnetDataset(IterableDataset): array = torchaudio.transforms.Resample(orig_freq=audio_fs, new_freq=model_fs)(array) array = array.squeeze(0).numpy() + data[name] = array if self.preprocess is not None: @@ -238,11 +242,17 @@ class IterableESPnetDataset(IterableDataset): model_fs = self.fs["model_fs"] if audio_fs is not None and model_fs is not None: array = torch.from_numpy(array) - array = array.unsqueeze(0) array = torchaudio.transforms.Resample(orig_freq=audio_fs, new_freq=model_fs)(array) - array = array.squeeze(0).numpy() - data[name] = array + array = array.numpy() + + if _type == "sound": + if self.mc: + data[name] = array.transpose((1, 0)) + else: + data[name] = array[0] + else: + data[name] = array if self.preprocess is not None: data = self.preprocess(uid, data) @@ -340,11 +350,16 @@ class IterableESPnetDataset(IterableDataset): model_fs = self.fs["model_fs"] if audio_fs is not None and model_fs is not None: array = torch.from_numpy(array) - array = array.unsqueeze(0) array = torchaudio.transforms.Resample(orig_freq=audio_fs, new_freq=model_fs)(array) - array = array.squeeze(0).numpy() - data[name] = array + array = array.numpy() + if _type == "sound": + if self.mc: + data[name] = array.transpose((1, 0)) + else: + data[name] = array[0] + else: + data[name] = array if self.non_iterable_dataset is not None: # 2.b. Load data from non-iterable dataset _, from_non_iterable = self.non_iterable_dataset[uid] diff --git a/funasr/export/README.md b/funasr/export/README.md index bde1e94a5..b3068d050 100644 --- a/funasr/export/README.md +++ b/funasr/export/README.md @@ -55,3 +55,4 @@ python -m funasr.export.export_model --model-name /mnt/workspace/damo/speech_par ## Acknowledge Torch model quantization is supported by [BladeDISC](https://github.com/alibaba/BladeDISC), an end-to-end DynamIc Shape Compiler project for machine learning workloads. BladeDISC provides general, transparent, and ease of use performance optimization for TensorFlow/PyTorch workloads on GPGPU and CPU backends. If you are interested, please contact us. + diff --git a/funasr/fileio/sound_scp.py b/funasr/fileio/sound_scp.py index 459369efb..dc872b047 100644 --- a/funasr/fileio/sound_scp.py +++ b/funasr/fileio/sound_scp.py @@ -4,6 +4,7 @@ from typing import Union import numpy as np import soundfile +import librosa from typeguard import check_argument_types from funasr.fileio.read_text import read_2column_text @@ -30,6 +31,7 @@ class SoundScpReader(collections.abc.Mapping): dtype=np.int16, always_2d: bool = False, normalize: bool = False, + dest_sample_rate: int = 16000, ): assert check_argument_types() self.fname = fname @@ -37,15 +39,18 @@ class SoundScpReader(collections.abc.Mapping): self.always_2d = always_2d self.normalize = normalize self.data = read_2column_text(fname) + self.dest_sample_rate = dest_sample_rate def __getitem__(self, key): wav = self.data[key] if self.normalize: # soundfile.read normalizes data to [-1,1] if dtype is not given - array, rate = soundfile.read(wav, always_2d=self.always_2d) + array, rate = librosa.load( + wav, sr=self.dest_sample_rate, mono=not self.always_2d + ) else: - array, rate = soundfile.read( - wav, dtype=self.dtype, always_2d=self.always_2d + array, rate = librosa.load( + wav, sr=self.dest_sample_rate, mono=not self.always_2d, dtype=self.dtype ) return rate, array diff --git a/funasr/main_funcs/average_nbest_models.py b/funasr/main_funcs/average_nbest_models.py index 53f956800..d8df94985 100644 --- a/funasr/main_funcs/average_nbest_models.py +++ b/funasr/main_funcs/average_nbest_models.py @@ -66,13 +66,13 @@ def average_nbest_models( elif n == 1: # The averaged model is same as the best model e, _ = epoch_and_values[0] - op = output_dir / f"{e}epoch.pth" - sym_op = output_dir / f"{ph}.{cr}.ave_1best.{suffix}pth" + op = output_dir / f"{e}epoch.pb" + sym_op = output_dir / f"{ph}.{cr}.ave_1best.{suffix}pb" if sym_op.is_symlink() or sym_op.exists(): sym_op.unlink() sym_op.symlink_to(op.name) else: - op = output_dir / f"{ph}.{cr}.ave_{n}best.{suffix}pth" + op = output_dir / f"{ph}.{cr}.ave_{n}best.{suffix}pb" logging.info( f"Averaging {n}best models: " f'criterion="{ph}.{cr}": {op}' ) @@ -83,12 +83,12 @@ def average_nbest_models( if e not in _loaded: if oss_bucket is None: _loaded[e] = torch.load( - output_dir / f"{e}epoch.pth", + output_dir / f"{e}epoch.pb", map_location="cpu", ) else: buffer = BytesIO( - oss_bucket.get_object(os.path.join(pai_output_dir, f"{e}epoch.pth")).read()) + oss_bucket.get_object(os.path.join(pai_output_dir, f"{e}epoch.pb")).read()) _loaded[e] = torch.load(buffer) states = _loaded[e] @@ -115,13 +115,13 @@ def average_nbest_models( else: buffer = BytesIO() torch.save(avg, buffer) - oss_bucket.put_object(os.path.join(pai_output_dir, f"{ph}.{cr}.ave_{n}best.{suffix}pth"), + oss_bucket.put_object(os.path.join(pai_output_dir, f"{ph}.{cr}.ave_{n}best.{suffix}pb"), buffer.getvalue()) - # 3. *.*.ave.pth is a symlink to the max ave model + # 3. *.*.ave.pb is a symlink to the max ave model if oss_bucket is None: - op = output_dir / f"{ph}.{cr}.ave_{max(_nbests)}best.{suffix}pth" - sym_op = output_dir / f"{ph}.{cr}.ave.{suffix}pth" + op = output_dir / f"{ph}.{cr}.ave_{max(_nbests)}best.{suffix}pb" + sym_op = output_dir / f"{ph}.{cr}.ave.{suffix}pb" if sym_op.is_symlink() or sym_op.exists(): sym_op.unlink() sym_op.symlink_to(op.name) diff --git a/funasr/main_funcs/pack_funcs.py b/funasr/main_funcs/pack_funcs.py index ffa807e23..fe365d8e7 100644 --- a/funasr/main_funcs/pack_funcs.py +++ b/funasr/main_funcs/pack_funcs.py @@ -191,12 +191,12 @@ def unpack( Examples: tarfile: - model.pth + model.pb some1.file some2.file >>> unpack("tarfile", "out") - {'asr_model_file': 'out/model.pth'} + {'asr_model_file': 'out/model.pb'} """ input_archive = Path(input_archive) outpath = Path(outpath) diff --git a/funasr/models/decoder/sanm_decoder.py b/funasr/models/decoder/sanm_decoder.py index ab03f0b61..3bfcffc3f 100644 --- a/funasr/models/decoder/sanm_decoder.py +++ b/funasr/models/decoder/sanm_decoder.py @@ -90,6 +90,47 @@ class DecoderLayerSANM(nn.Module): tgt = self.norm1(tgt) tgt = self.feed_forward(tgt) + x = tgt + if self.self_attn: + if self.normalize_before: + tgt = self.norm2(tgt) + x, _ = self.self_attn(tgt, tgt_mask) + x = residual + self.dropout(x) + + if self.src_attn is not None: + residual = x + if self.normalize_before: + x = self.norm3(x) + + x = residual + self.dropout(self.src_attn(x, memory, memory_mask)) + + + return x, tgt_mask, memory, memory_mask, cache + + def forward_chunk(self, tgt, tgt_mask, memory, memory_mask=None, cache=None): + """Compute decoded features. + + Args: + tgt (torch.Tensor): Input tensor (#batch, maxlen_out, size). + tgt_mask (torch.Tensor): Mask for input tensor (#batch, maxlen_out). + memory (torch.Tensor): Encoded memory, float32 (#batch, maxlen_in, size). + memory_mask (torch.Tensor): Encoded memory mask (#batch, maxlen_in). + cache (List[torch.Tensor]): List of cached tensors. + Each tensor shape should be (#batch, maxlen_out - 1, size). + + Returns: + torch.Tensor: Output tensor(#batch, maxlen_out, size). + torch.Tensor: Mask for output tensor (#batch, maxlen_out). + torch.Tensor: Encoded memory (#batch, maxlen_in, size). + torch.Tensor: Encoded memory mask (#batch, maxlen_in). + + """ + # tgt = self.dropout(tgt) + residual = tgt + if self.normalize_before: + tgt = self.norm1(tgt) + tgt = self.feed_forward(tgt) + x = tgt if self.self_attn: if self.normalize_before: @@ -109,7 +150,6 @@ class DecoderLayerSANM(nn.Module): return x, tgt_mask, memory, memory_mask, cache - class FsmnDecoderSCAMAOpt(BaseTransformerDecoder): """ author: Speech Lab, Alibaba Group, China @@ -947,6 +987,65 @@ class ParaformerSANMDecoder(BaseTransformerDecoder): ) return logp.squeeze(0), state + def forward_chunk( + self, + memory: torch.Tensor, + tgt: torch.Tensor, + cache: dict = None, + ) -> Tuple[torch.Tensor, torch.Tensor]: + """Forward decoder. + + Args: + hs_pad: encoded memory, float32 (batch, maxlen_in, feat) + hlens: (batch) + ys_in_pad: + input token ids, int64 (batch, maxlen_out) + if input_layer == "embed" + input tensor (batch, maxlen_out, #mels) in the other cases + ys_in_lens: (batch) + Returns: + (tuple): tuple containing: + + x: decoded token score before softmax (batch, maxlen_out, token) + if use_output_layer is True, + olens: (batch, ) + """ + x = tgt + if cache["decode_fsmn"] is None: + cache_layer_num = len(self.decoders) + if self.decoders2 is not None: + cache_layer_num += len(self.decoders2) + new_cache = [None] * cache_layer_num + else: + new_cache = cache["decode_fsmn"] + for i in range(self.att_layer_num): + decoder = self.decoders[i] + x, tgt_mask, memory, memory_mask, c_ret = decoder.forward_chunk( + x, None, memory, None, cache=new_cache[i] + ) + new_cache[i] = c_ret + + if self.num_blocks - self.att_layer_num > 1: + for i in range(self.num_blocks - self.att_layer_num): + j = i + self.att_layer_num + decoder = self.decoders2[i] + x, tgt_mask, memory, memory_mask, c_ret = decoder.forward_chunk( + x, None, memory, None, cache=new_cache[j] + ) + new_cache[j] = c_ret + + for decoder in self.decoders3: + + x, tgt_mask, memory, memory_mask, _ = decoder.forward_chunk( + x, None, memory, None, cache=None + ) + if self.normalize_before: + x = self.after_norm(x) + if self.output_layer is not None: + x = self.output_layer(x) + cache["decode_fsmn"] = new_cache + return x + def forward_one_step( self, tgt: torch.Tensor, diff --git a/funasr/models/e2e_asr_paraformer.py b/funasr/models/e2e_asr_paraformer.py index 5786bc46e..02f60af22 100644 --- a/funasr/models/e2e_asr_paraformer.py +++ b/funasr/models/e2e_asr_paraformer.py @@ -325,6 +325,65 @@ class Paraformer(AbsESPnetModel): return encoder_out, encoder_out_lens + def encode_chunk( + self, speech: torch.Tensor, speech_lengths: torch.Tensor, cache: dict = None + ) -> Tuple[torch.Tensor, torch.Tensor]: + """Frontend + Encoder. Note that this method is used by asr_inference.py + + Args: + speech: (Batch, Length, ...) + speech_lengths: (Batch, ) + """ + with autocast(False): + # 1. Extract feats + feats, feats_lengths = self._extract_feats(speech, speech_lengths) + + # 2. Data augmentation + if self.specaug is not None and self.training: + feats, feats_lengths = self.specaug(feats, feats_lengths) + + # 3. Normalization for feature: e.g. Global-CMVN, Utterance-CMVN + if self.normalize is not None: + feats, feats_lengths = self.normalize(feats, feats_lengths) + + # Pre-encoder, e.g. used for raw input data + if self.preencoder is not None: + feats, feats_lengths = self.preencoder(feats, feats_lengths) + + # 4. Forward encoder + # feats: (Batch, Length, Dim) + # -> encoder_out: (Batch, Length2, Dim2) + if self.encoder.interctc_use_conditioning: + encoder_out, encoder_out_lens, _ = self.encoder.forward_chunk( + feats, feats_lengths, cache=cache["encoder"], ctc=self.ctc + ) + else: + encoder_out, encoder_out_lens, _ = self.encoder.forward_chunk(feats, feats_lengths, cache=cache["encoder"]) + intermediate_outs = None + if isinstance(encoder_out, tuple): + intermediate_outs = encoder_out[1] + encoder_out = encoder_out[0] + + # Post-encoder, e.g. NLU + if self.postencoder is not None: + encoder_out, encoder_out_lens = self.postencoder( + encoder_out, encoder_out_lens + ) + + assert encoder_out.size(0) == speech.size(0), ( + encoder_out.size(), + speech.size(0), + ) + assert encoder_out.size(1) <= encoder_out_lens.max(), ( + encoder_out.size(), + encoder_out_lens.max(), + ) + + if intermediate_outs is not None: + return (encoder_out, intermediate_outs), encoder_out_lens + + return encoder_out, encoder_out_lens + def calc_predictor(self, encoder_out, encoder_out_lens): encoder_out_mask = (~make_pad_mask(encoder_out_lens, maxlen=encoder_out.size(1))[:, None, :]).to( @@ -333,6 +392,11 @@ class Paraformer(AbsESPnetModel): ignore_id=self.ignore_id) return pre_acoustic_embeds, pre_token_length, alphas, pre_peak_index + def calc_predictor_chunk(self, encoder_out, cache=None): + + pre_acoustic_embeds, pre_token_length, alphas, pre_peak_index = self.predictor.forward_chunk(encoder_out, cache["encoder"]) + return pre_acoustic_embeds, pre_token_length, alphas, pre_peak_index + def cal_decoder_with_predictor(self, encoder_out, encoder_out_lens, sematic_embeds, ys_pad_lens): decoder_outs = self.decoder( @@ -342,6 +406,14 @@ class Paraformer(AbsESPnetModel): decoder_out = torch.log_softmax(decoder_out, dim=-1) return decoder_out, ys_pad_lens + def cal_decoder_with_predictor_chunk(self, encoder_out, sematic_embeds, cache=None): + decoder_outs = self.decoder.forward_chunk( + encoder_out, sematic_embeds, cache["decoder"] + ) + decoder_out = decoder_outs + decoder_out = torch.log_softmax(decoder_out, dim=-1) + return decoder_out + def _extract_feats( self, speech: torch.Tensor, speech_lengths: torch.Tensor ) -> Tuple[torch.Tensor, torch.Tensor]: @@ -926,10 +998,10 @@ class BiCifParaformer(Paraformer): def calc_predictor_timestamp(self, encoder_out, encoder_out_lens, token_num): encoder_out_mask = (~make_pad_mask(encoder_out_lens, maxlen=encoder_out.size(1))[:, None, :]).to( encoder_out.device) - ds_alphas, ds_cif_peak, us_alphas, us_cif_peak = self.predictor.get_upsample_timestamp(encoder_out, + ds_alphas, ds_cif_peak, us_alphas, us_peaks = self.predictor.get_upsample_timestamp(encoder_out, encoder_out_mask, token_num) - return ds_alphas, ds_cif_peak, us_alphas, us_cif_peak + return ds_alphas, ds_cif_peak, us_alphas, us_peaks def forward( self, @@ -978,6 +1050,7 @@ class BiCifParaformer(Paraformer): loss, stats, weight = force_gatherable((loss, stats, batch_size), loss.device) return loss, stats, weight + class ContextualParaformer(Paraformer): """ Paraformer model with contextual hotword @@ -1458,4 +1531,4 @@ class ContextualParaformer(Paraformer): "torch tensor: {}, {}, loading from tf tensor: {}, {}".format(name, data_tf.size(), name_tf, var_dict_tf[name_tf].shape)) - return var_dict_torch_update \ No newline at end of file + return var_dict_torch_update diff --git a/funasr/models/e2e_diar_eend_ola.py b/funasr/models/e2e_diar_eend_ola.py new file mode 100644 index 000000000..097b23a57 --- /dev/null +++ b/funasr/models/e2e_diar_eend_ola.py @@ -0,0 +1,253 @@ +# Copyright ESPnet (https://github.com/espnet/espnet). All Rights Reserved. +# Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0) + +from contextlib import contextmanager +from distutils.version import LooseVersion +from typing import Dict +from typing import Tuple + +import numpy as np +import torch +import torch.nn as nn +from typeguard import check_argument_types + +from funasr.models.frontend.wav_frontend import WavFrontendMel23 +from funasr.modules.eend_ola.encoder import EENDOLATransformerEncoder +from funasr.modules.eend_ola.encoder_decoder_attractor import EncoderDecoderAttractor +from funasr.modules.eend_ola.utils.power import generate_mapping_dict +from funasr.torch_utils.device_funcs import force_gatherable +from funasr.train.abs_espnet_model import AbsESPnetModel + +if LooseVersion(torch.__version__) >= LooseVersion("1.6.0"): + pass +else: + # Nothing to do if torch<1.6.0 + @contextmanager + def autocast(enabled=True): + yield + + +def pad_attractor(att, max_n_speakers): + C, D = att.shape + if C < max_n_speakers: + att = torch.cat([att, torch.zeros(max_n_speakers - C, D).to(torch.float32).to(att.device)], dim=0) + return att + + +class DiarEENDOLAModel(AbsESPnetModel): + """EEND-OLA diarization model""" + + def __init__( + self, + frontend: WavFrontendMel23, + encoder: EENDOLATransformerEncoder, + encoder_decoder_attractor: EncoderDecoderAttractor, + n_units: int = 256, + max_n_speaker: int = 8, + attractor_loss_weight: float = 1.0, + mapping_dict=None, + **kwargs, + ): + assert check_argument_types() + + super().__init__() + self.frontend = frontend + self.enc = encoder + self.eda = encoder_decoder_attractor + self.attractor_loss_weight = attractor_loss_weight + self.max_n_speaker = max_n_speaker + if mapping_dict is None: + mapping_dict = generate_mapping_dict(max_speaker_num=self.max_n_speaker) + self.mapping_dict = mapping_dict + # PostNet + self.postnet = nn.LSTM(self.max_n_speaker, n_units, 1, batch_first=True) + self.output_layer = nn.Linear(n_units, mapping_dict['oov'] + 1) + + def forward_encoder(self, xs, ilens): + xs = nn.utils.rnn.pad_sequence(xs, batch_first=True, padding_value=-1) + pad_shape = xs.shape + xs_mask = [torch.ones(ilen).to(xs.device) for ilen in ilens] + xs_mask = torch.nn.utils.rnn.pad_sequence(xs_mask, batch_first=True, padding_value=0).unsqueeze(-2) + emb = self.enc(xs, xs_mask) + emb = torch.split(emb.view(pad_shape[0], pad_shape[1], -1), 1, dim=0) + emb = [e[0][:ilen] for e, ilen in zip(emb, ilens)] + return emb + + def forward_post_net(self, logits, ilens): + maxlen = torch.max(ilens).to(torch.int).item() + logits = nn.utils.rnn.pad_sequence(logits, batch_first=True, padding_value=-1) + logits = nn.utils.rnn.pack_padded_sequence(logits, ilens.cpu().to(torch.int64), batch_first=True, enforce_sorted=False) + outputs, (_, _) = self.postnet(logits) + outputs = nn.utils.rnn.pad_packed_sequence(outputs, batch_first=True, padding_value=-1, total_length=maxlen)[0] + outputs = [output[:ilens[i].to(torch.int).item()] for i, output in enumerate(outputs)] + outputs = [self.output_layer(output) for output in outputs] + return outputs + + def forward( + self, + speech: torch.Tensor, + speech_lengths: torch.Tensor, + text: torch.Tensor, + text_lengths: torch.Tensor, + ) -> Tuple[torch.Tensor, Dict[str, torch.Tensor], torch.Tensor]: + """Frontend + Encoder + Decoder + Calc loss + + Args: + speech: (Batch, Length, ...) + speech_lengths: (Batch, ) + text: (Batch, Length) + text_lengths: (Batch,) + """ + assert text_lengths.dim() == 1, text_lengths.shape + # Check that batch_size is unified + assert ( + speech.shape[0] + == speech_lengths.shape[0] + == text.shape[0] + == text_lengths.shape[0] + ), (speech.shape, speech_lengths.shape, text.shape, text_lengths.shape) + batch_size = speech.shape[0] + + # for data-parallel + text = text[:, : text_lengths.max()] + + # 1. Encoder + encoder_out, encoder_out_lens = self.enc(speech, speech_lengths) + intermediate_outs = None + if isinstance(encoder_out, tuple): + intermediate_outs = encoder_out[1] + encoder_out = encoder_out[0] + + loss_att, acc_att, cer_att, wer_att = None, None, None, None + loss_ctc, cer_ctc = None, None + stats = dict() + + # 1. CTC branch + if self.ctc_weight != 0.0: + loss_ctc, cer_ctc = self._calc_ctc_loss( + encoder_out, encoder_out_lens, text, text_lengths + ) + + # Collect CTC branch stats + stats["loss_ctc"] = loss_ctc.detach() if loss_ctc is not None else None + stats["cer_ctc"] = cer_ctc + + # Intermediate CTC (optional) + loss_interctc = 0.0 + if self.interctc_weight != 0.0 and intermediate_outs is not None: + for layer_idx, intermediate_out in intermediate_outs: + # we assume intermediate_out has the same length & padding + # as those of encoder_out + loss_ic, cer_ic = self._calc_ctc_loss( + intermediate_out, encoder_out_lens, text, text_lengths + ) + loss_interctc = loss_interctc + loss_ic + + # Collect Intermedaite CTC stats + stats["loss_interctc_layer{}".format(layer_idx)] = ( + loss_ic.detach() if loss_ic is not None else None + ) + stats["cer_interctc_layer{}".format(layer_idx)] = cer_ic + + loss_interctc = loss_interctc / len(intermediate_outs) + + # calculate whole encoder loss + loss_ctc = ( + 1 - self.interctc_weight + ) * loss_ctc + self.interctc_weight * loss_interctc + + # 2b. Attention decoder branch + if self.ctc_weight != 1.0: + loss_att, acc_att, cer_att, wer_att = self._calc_att_loss( + encoder_out, encoder_out_lens, text, text_lengths + ) + + # 3. CTC-Att loss definition + if self.ctc_weight == 0.0: + loss = loss_att + elif self.ctc_weight == 1.0: + loss = loss_ctc + else: + loss = self.ctc_weight * loss_ctc + (1 - self.ctc_weight) * loss_att + + # Collect Attn branch stats + stats["loss_att"] = loss_att.detach() if loss_att is not None else None + stats["acc"] = acc_att + stats["cer"] = cer_att + stats["wer"] = wer_att + + # Collect total loss stats + stats["loss"] = torch.clone(loss.detach()) + + # force_gatherable: to-device and to-tensor if scalar for DataParallel + loss, stats, weight = force_gatherable((loss, stats, batch_size), loss.device) + return loss, stats, weight + + def estimate_sequential(self, + speech: torch.Tensor, + speech_lengths: torch.Tensor, + n_speakers: int = None, + shuffle: bool = True, + threshold: float = 0.5, + **kwargs): + speech = [s[:s_len] for s, s_len in zip(speech, speech_lengths)] + emb = self.forward_encoder(speech, speech_lengths) + if shuffle: + orders = [np.arange(e.shape[0]) for e in emb] + for order in orders: + np.random.shuffle(order) + attractors, probs = self.eda.estimate( + [e[torch.from_numpy(order).to(torch.long).to(speech[0].device)] for e, order in zip(emb, orders)]) + else: + attractors, probs = self.eda.estimate(emb) + attractors_active = [] + for p, att, e in zip(probs, attractors, emb): + if n_speakers and n_speakers >= 0: + att = att[:n_speakers, ] + attractors_active.append(att) + elif threshold is not None: + silence = torch.nonzero(p < threshold)[0] + n_spk = silence[0] if silence.size else None + att = att[:n_spk, ] + attractors_active.append(att) + else: + NotImplementedError('n_speakers or threshold has to be given.') + raw_n_speakers = [att.shape[0] for att in attractors_active] + attractors = [ + pad_attractor(att, self.max_n_speaker) if att.shape[0] <= self.max_n_speaker else att[:self.max_n_speaker] + for att in attractors_active] + ys = [torch.matmul(e, att.permute(1, 0)) for e, att in zip(emb, attractors)] + logits = self.forward_post_net(ys, speech_lengths) + ys = [self.recover_y_from_powerlabel(logit, raw_n_speaker) for logit, raw_n_speaker in + zip(logits, raw_n_speakers)] + + return ys, emb, attractors, raw_n_speakers + + def recover_y_from_powerlabel(self, logit, n_speaker): + pred = torch.argmax(torch.softmax(logit, dim=-1), dim=-1) + oov_index = torch.where(pred == self.mapping_dict['oov'])[0] + for i in oov_index: + if i > 0: + pred[i] = pred[i - 1] + else: + pred[i] = 0 + pred = [self.inv_mapping_func(i) for i in pred] + decisions = [bin(num)[2:].zfill(self.max_n_speaker)[::-1] for num in pred] + decisions = torch.from_numpy( + np.stack([np.array([int(i) for i in dec]) for dec in decisions], axis=0)).to(logit.device).to( + torch.float32) + decisions = decisions[:, :n_speaker] + return decisions + + def inv_mapping_func(self, label): + + if not isinstance(label, int): + label = int(label) + if label in self.mapping_dict['label2dec'].keys(): + num = self.mapping_dict['label2dec'][label] + else: + num = -1 + return num + + def collect_feats(self, **batch: torch.Tensor) -> Dict[str, torch.Tensor]: + pass \ No newline at end of file diff --git a/funasr/models/e2e_diar_sond.py b/funasr/models/e2e_diar_sond.py index 419c8133a..de669f2ee 100644 --- a/funasr/models/e2e_diar_sond.py +++ b/funasr/models/e2e_diar_sond.py @@ -59,7 +59,8 @@ class DiarSondModel(AbsESPnetModel): normalize_speech_speaker: bool = False, ignore_id: int = -1, speaker_discrimination_loss_weight: float = 1.0, - inter_score_loss_weight: float = 0.0 + inter_score_loss_weight: float = 0.0, + inputs_type: str = "raw", ): assert check_argument_types() @@ -86,14 +87,12 @@ class DiarSondModel(AbsESPnetModel): ) self.criterion_bce = SequenceBinaryCrossEntropy(normalize_length=length_normalized_loss) self.pse_embedding = self.generate_pse_embedding() - # self.register_buffer("pse_embedding", pse_embedding) self.power_weight = torch.from_numpy(2 ** np.arange(max_spk_num)[np.newaxis, np.newaxis, :]).float() - # self.register_buffer("power_weight", power_weight) self.int_token_arr = torch.from_numpy(np.array(self.token_list).astype(int)[np.newaxis, np.newaxis, :]).int() - # self.register_buffer("int_token_arr", int_token_arr) self.speaker_discrimination_loss_weight = speaker_discrimination_loss_weight self.inter_score_loss_weight = inter_score_loss_weight self.forward_steps = 0 + self.inputs_type = inputs_type def generate_pse_embedding(self): embedding = np.zeros((len(self.token_list), self.max_spk_num), dtype=np.float) @@ -125,9 +124,14 @@ class DiarSondModel(AbsESPnetModel): binary_labels: (Batch, frames, max_spk_num) binary_labels_lengths: (Batch,) """ - assert speech.shape[0] == binary_labels.shape[0], (speech.shape, binary_labels.shape) + assert speech.shape[0] <= binary_labels.shape[0], (speech.shape, binary_labels.shape) batch_size = speech.shape[0] self.forward_steps = self.forward_steps + 1 + if self.pse_embedding.device != speech.device: + self.pse_embedding = self.pse_embedding.to(speech.device) + self.power_weight = self.power_weight.to(speech.device) + self.int_token_arr = self.int_token_arr.to(speech.device) + # 1. Network forward pred, inter_outputs = self.prediction_forward( speech, speech_lengths, @@ -149,9 +153,13 @@ class DiarSondModel(AbsESPnetModel): # the sequence length of 'pred' might be slightly less than the # length of 'spk_labels'. Here we force them to be equal. length_diff_tolerance = 2 - length_diff = pse_labels.shape[1] - pred.shape[1] - if 0 < length_diff <= length_diff_tolerance: - pse_labels = pse_labels[:, 0: pred.shape[1]] + length_diff = abs(pse_labels.shape[1] - pred.shape[1]) + if length_diff <= length_diff_tolerance: + min_len = min(pred.shape[1], pse_labels.shape[1]) + pse_labels = pse_labels[:, :min_len] + pred = pred[:, :min_len] + cd_score = cd_score[:, :min_len] + ci_score = ci_score[:, :min_len] loss_diar = self.classification_loss(pred, pse_labels, binary_labels_lengths) loss_spk_dis = self.speaker_discrimination_loss(profile, profile_lengths) @@ -299,7 +307,7 @@ class DiarSondModel(AbsESPnetModel): speech: torch.Tensor, speech_lengths: torch.Tensor, ) -> Tuple[torch.Tensor, torch.Tensor]: - if self.encoder is not None: + if self.encoder is not None and self.inputs_type == "raw": speech, speech_lengths = self.encode(speech, speech_lengths) speech_mask = ~make_pad_mask(speech_lengths, maxlen=speech.shape[1]) speech_mask = speech_mask.to(speech.device).unsqueeze(-1).float() @@ -342,6 +350,7 @@ class DiarSondModel(AbsESPnetModel): if isinstance(self.ci_scorer, AbsEncoder): ci_simi = self.ci_scorer(ge_in, ge_len)[0] + ci_simi = torch.reshape(ci_simi, [bb, self.max_spk_num, tt]).permute([0, 2, 1]) else: ci_simi = self.ci_scorer(speech_encoder_outputs, speaker_encoder_outputs) diff --git a/funasr/models/e2e_tp.py b/funasr/models/e2e_tp.py new file mode 100644 index 000000000..887439c5e --- /dev/null +++ b/funasr/models/e2e_tp.py @@ -0,0 +1,175 @@ +import logging +from contextlib import contextmanager +from distutils.version import LooseVersion +from typing import Dict +from typing import List +from typing import Optional +from typing import Tuple +from typing import Union + +import torch +import numpy as np +from typeguard import check_argument_types + +from funasr.models.encoder.abs_encoder import AbsEncoder +from funasr.models.frontend.abs_frontend import AbsFrontend +from funasr.models.predictor.cif import mae_loss +from funasr.modules.add_sos_eos import add_sos_eos +from funasr.modules.nets_utils import make_pad_mask, pad_list +from funasr.torch_utils.device_funcs import force_gatherable +from funasr.train.abs_espnet_model import AbsESPnetModel +from funasr.models.predictor.cif import CifPredictorV3 + + +if LooseVersion(torch.__version__) >= LooseVersion("1.6.0"): + from torch.cuda.amp import autocast +else: + # Nothing to do if torch<1.6.0 + @contextmanager + def autocast(enabled=True): + yield + + +class TimestampPredictor(AbsESPnetModel): + """ + Author: Speech Lab, Alibaba Group, China + """ + + def __init__( + self, + frontend: Optional[AbsFrontend], + encoder: AbsEncoder, + predictor: CifPredictorV3, + predictor_bias: int = 0, + token_list=None, + ): + assert check_argument_types() + + super().__init__() + # note that eos is the same as sos (equivalent ID) + + self.frontend = frontend + self.encoder = encoder + self.encoder.interctc_use_conditioning = False + + self.predictor = predictor + self.predictor_bias = predictor_bias + self.criterion_pre = mae_loss() + self.token_list = token_list + + def forward( + self, + speech: torch.Tensor, + speech_lengths: torch.Tensor, + text: torch.Tensor, + text_lengths: torch.Tensor, + ) -> Tuple[torch.Tensor, Dict[str, torch.Tensor], torch.Tensor]: + """Frontend + Encoder + Decoder + Calc loss + + Args: + speech: (Batch, Length, ...) + speech_lengths: (Batch, ) + text: (Batch, Length) + text_lengths: (Batch,) + """ + assert text_lengths.dim() == 1, text_lengths.shape + # Check that batch_size is unified + assert ( + speech.shape[0] + == speech_lengths.shape[0] + == text.shape[0] + == text_lengths.shape[0] + ), (speech.shape, speech_lengths.shape, text.shape, text_lengths.shape) + batch_size = speech.shape[0] + # for data-parallel + text = text[:, : text_lengths.max()] + speech = speech[:, :speech_lengths.max()] + + # 1. Encoder + encoder_out, encoder_out_lens = self.encode(speech, speech_lengths) + + encoder_out_mask = (~make_pad_mask(encoder_out_lens, maxlen=encoder_out.size(1))[:, None, :]).to( + encoder_out.device) + if self.predictor_bias == 1: + _, text = add_sos_eos(text, 1, 2, -1) + text_lengths = text_lengths + self.predictor_bias + _, _, _, _, pre_token_length2 = self.predictor(encoder_out, text, encoder_out_mask, ignore_id=-1) + + # loss_pre = self.criterion_pre(ys_pad_lens.type_as(pre_token_length), pre_token_length) + loss_pre = self.criterion_pre(text_lengths.type_as(pre_token_length2), pre_token_length2) + + loss = loss_pre + stats = dict() + + # Collect Attn branch stats + stats["loss_pre"] = loss_pre.detach().cpu() if loss_pre is not None else None + stats["loss"] = torch.clone(loss.detach()) + + # force_gatherable: to-device and to-tensor if scalar for DataParallel + loss, stats, weight = force_gatherable((loss, stats, batch_size), loss.device) + return loss, stats, weight + + def encode( + self, speech: torch.Tensor, speech_lengths: torch.Tensor + ) -> Tuple[torch.Tensor, torch.Tensor]: + """Frontend + Encoder. Note that this method is used by asr_inference.py + + Args: + speech: (Batch, Length, ...) + speech_lengths: (Batch, ) + """ + with autocast(False): + # 1. Extract feats + feats, feats_lengths = self._extract_feats(speech, speech_lengths) + + # 4. Forward encoder + # feats: (Batch, Length, Dim) + # -> encoder_out: (Batch, Length2, Dim2) + encoder_out, encoder_out_lens, _ = self.encoder(feats, feats_lengths) + + return encoder_out, encoder_out_lens + + def _extract_feats( + self, speech: torch.Tensor, speech_lengths: torch.Tensor + ) -> Tuple[torch.Tensor, torch.Tensor]: + assert speech_lengths.dim() == 1, speech_lengths.shape + + # for data-parallel + speech = speech[:, : speech_lengths.max()] + if self.frontend is not None: + # Frontend + # e.g. STFT and Feature extract + # data_loader may send time-domain signal in this case + # speech (Batch, NSamples) -> feats: (Batch, NFrames, Dim) + feats, feats_lengths = self.frontend(speech, speech_lengths) + else: + # No frontend and no feature extract + feats, feats_lengths = speech, speech_lengths + return feats, feats_lengths + + def calc_predictor_timestamp(self, encoder_out, encoder_out_lens, token_num): + encoder_out_mask = (~make_pad_mask(encoder_out_lens, maxlen=encoder_out.size(1))[:, None, :]).to( + encoder_out.device) + ds_alphas, ds_cif_peak, us_alphas, us_peaks = self.predictor.get_upsample_timestamp(encoder_out, + encoder_out_mask, + token_num) + return ds_alphas, ds_cif_peak, us_alphas, us_peaks + + def collect_feats( + self, + speech: torch.Tensor, + speech_lengths: torch.Tensor, + text: torch.Tensor, + text_lengths: torch.Tensor, + ) -> Dict[str, torch.Tensor]: + if self.extract_feats_in_collect_stats: + feats, feats_lengths = self._extract_feats(speech, speech_lengths) + else: + # Generate dummy stats if extract_feats_in_collect_stats is False + logging.warning( + "Generating dummy stats for feats and feats_lengths, " + "because encoder_conf.extract_feats_in_collect_stats is " + f"{self.extract_feats_in_collect_stats}" + ) + feats, feats_lengths = speech, speech_lengths + return {"feats": feats, "feats_lengths": feats_lengths} diff --git a/funasr/models/e2e_vad.py b/funasr/models/e2e_vad.py index b9be89aaa..2c5673cb1 100755 --- a/funasr/models/e2e_vad.py +++ b/funasr/models/e2e_vad.py @@ -215,6 +215,7 @@ class E2EVadModel(nn.Module): self.sil_pdf_ids = self.vad_opts.sil_pdf_ids self.noise_average_decibel = -100.0 self.pre_end_silence_detected = False + self.next_seg = True self.output_data_buf = [] self.output_data_buf_offset = 0 @@ -244,6 +245,7 @@ class E2EVadModel(nn.Module): self.sil_pdf_ids = self.vad_opts.sil_pdf_ids self.noise_average_decibel = -100.0 self.pre_end_silence_detected = False + self.next_seg = True self.output_data_buf = [] self.output_data_buf_offset = 0 @@ -441,7 +443,7 @@ class E2EVadModel(nn.Module): - 1)) / self.vad_opts.noise_frame_num_used_for_snr return frame_state - + def forward(self, feats: torch.Tensor, waveform: torch.tensor, in_cache: Dict[str, torch.Tensor] = dict(), is_final: bool = False ) -> Tuple[List[List[List[int]]], Dict[str, torch.Tensor]]: @@ -470,6 +472,42 @@ class E2EVadModel(nn.Module): self.AllResetDetection() return segments, in_cache + def forward_online(self, feats: torch.Tensor, waveform: torch.tensor, in_cache: Dict[str, torch.Tensor] = dict(), + is_final: bool = False + ) -> Tuple[List[List[List[int]]], Dict[str, torch.Tensor]]: + self.waveform = waveform # compute decibel for each frame + self.ComputeDecibel() + self.ComputeScores(feats, in_cache) + if not is_final: + self.DetectCommonFrames() + else: + self.DetectLastFrames() + segments = [] + for batch_num in range(0, feats.shape[0]): # only support batch_size = 1 now + segment_batch = [] + if len(self.output_data_buf) > 0: + for i in range(self.output_data_buf_offset, len(self.output_data_buf)): + if not self.output_data_buf[i].contain_seg_start_point: + continue + if not self.next_seg and not self.output_data_buf[i].contain_seg_end_point: + continue + start_ms = self.output_data_buf[i].start_ms if self.next_seg else -1 + if self.output_data_buf[i].contain_seg_end_point: + end_ms = self.output_data_buf[i].end_ms + self.next_seg = True + self.output_data_buf_offset += 1 + else: + end_ms = -1 + self.next_seg = False + segment = [start_ms, end_ms] + segment_batch.append(segment) + if segment_batch: + segments.append(segment_batch) + if is_final: + # reset class variables and clear the dict for the next query + self.AllResetDetection() + return segments, in_cache + def DetectCommonFrames(self) -> int: if self.vad_state_machine == VadStateMachine.kVadInStateEndPointDetected: return 0 diff --git a/funasr/models/encoder/opennmt_encoders/conv_encoder.py b/funasr/models/encoder/opennmt_encoders/conv_encoder.py index 40967437b..a33e0b718 100644 --- a/funasr/models/encoder/opennmt_encoders/conv_encoder.py +++ b/funasr/models/encoder/opennmt_encoders/conv_encoder.py @@ -137,12 +137,12 @@ class ConvEncoder(AbsEncoder): self.out_padding = nn.ConstantPad1d((left_padding, right_padding), 0.0) self.conv_out = nn.Conv1d( num_units, - num_units, + out_units, kernel_size, ) if self.out_norm: - self.after_norm = LayerNorm(num_units) + self.after_norm = LayerNorm(out_units) def output_size(self) -> int: return self.num_units diff --git a/funasr/models/encoder/opennmt_encoders/self_attention_encoder.py b/funasr/models/encoder/opennmt_encoders/self_attention_encoder.py index 443b37ae3..cf77bce4b 100644 --- a/funasr/models/encoder/opennmt_encoders/self_attention_encoder.py +++ b/funasr/models/encoder/opennmt_encoders/self_attention_encoder.py @@ -272,7 +272,7 @@ class SelfAttentionEncoder(AbsEncoder): position embedded tensor and mask """ masks = (~make_pad_mask(ilens)[:, None, :]).to(xs_pad.device) - xs_pad *= self.output_size()**0.5 + xs_pad = xs_pad * self.output_size()**0.5 if self.embed is None: xs_pad = xs_pad elif ( diff --git a/funasr/models/encoder/resnet34_encoder.py b/funasr/models/encoder/resnet34_encoder.py index 952ce1597..7d7179a00 100644 --- a/funasr/models/encoder/resnet34_encoder.py +++ b/funasr/models/encoder/resnet34_encoder.py @@ -387,7 +387,6 @@ class ResNet34_SP_L2Reg(AbsEncoder): return var_dict_torch_update - class ResNet34Diar(ResNet34): def __init__( self, @@ -613,3 +612,230 @@ class ResNet34Diar(ResNet34): logging.warning("{} is missed from tf checkpoint".format(name)) return var_dict_torch_update + + +class ResNet34SpL2RegDiar(ResNet34_SP_L2Reg): + def __init__( + self, + input_size, + embedding_node="resnet1_dense", + use_head_conv=True, + batchnorm_momentum=0.5, + use_head_maxpool=False, + num_nodes_pooling_layer=256, + layers_in_block=(3, 4, 6, 3), + filters_in_block=(32, 64, 128, 256), + num_nodes_resnet1=256, + num_nodes_last_layer=256, + pooling_type="window_shift", + pool_size=20, + stride=1, + tf2torch_tensor_name_prefix_torch="encoder", + tf2torch_tensor_name_prefix_tf="seq2seq/speech_encoder" + ): + super(ResNet34SpL2RegDiar, self).__init__( + input_size, + use_head_conv=use_head_conv, + batchnorm_momentum=batchnorm_momentum, + use_head_maxpool=use_head_maxpool, + num_nodes_pooling_layer=num_nodes_pooling_layer, + layers_in_block=layers_in_block, + filters_in_block=filters_in_block, + ) + + self.embedding_node = embedding_node + self.num_nodes_resnet1 = num_nodes_resnet1 + self.num_nodes_last_layer = num_nodes_last_layer + self.pooling_type = pooling_type + self.pool_size = pool_size + self.stride = stride + self.tf2torch_tensor_name_prefix_torch = tf2torch_tensor_name_prefix_torch + self.tf2torch_tensor_name_prefix_tf = tf2torch_tensor_name_prefix_tf + + self.resnet1_dense = torch.nn.Linear(num_nodes_pooling_layer * 2, num_nodes_resnet1) + self.resnet1_bn = torch.nn.BatchNorm1d(num_nodes_resnet1, eps=1e-3, momentum=batchnorm_momentum) + + self.resnet2_dense = torch.nn.Linear(num_nodes_resnet1, num_nodes_last_layer) + self.resnet2_bn = torch.nn.BatchNorm1d(num_nodes_last_layer, eps=1e-3, momentum=batchnorm_momentum) + + def output_size(self) -> int: + if self.embedding_node.startswith("resnet1"): + return self.num_nodes_resnet1 + elif self.embedding_node.startswith("resnet2"): + return self.num_nodes_last_layer + + return self.num_nodes_pooling_layer + + def forward( + self, + xs_pad: torch.Tensor, + ilens: torch.Tensor, + prev_states: torch.Tensor = None, + ) -> Tuple[torch.Tensor, torch.Tensor, Optional[torch.Tensor]]: + + endpoints = OrderedDict() + res_out, ilens = super().forward(xs_pad, ilens) + endpoints["resnet0_bn"] = res_out + if self.pooling_type == "frame_gsp": + features = statistic_pooling(res_out, ilens, (2, )) + else: + features, ilens = windowed_statistic_pooling(res_out, ilens, (2, ), self.pool_size, self.stride) + features = features.transpose(1, 2) + endpoints["pooling"] = features + + features = self.resnet1_dense(features) + endpoints["resnet1_dense"] = features + features = F.relu(features) + endpoints["resnet1_relu"] = features + features = self.resnet1_bn(features.transpose(1, 2)).transpose(1, 2) + endpoints["resnet1_bn"] = features + + features = self.resnet2_dense(features) + endpoints["resnet2_dense"] = features + features = F.relu(features) + endpoints["resnet2_relu"] = features + features = self.resnet2_bn(features.transpose(1, 2)).transpose(1, 2) + endpoints["resnet2_bn"] = features + + return endpoints[self.embedding_node], ilens, None + + def gen_tf2torch_map_dict(self): + tensor_name_prefix_torch = self.tf2torch_tensor_name_prefix_torch + tensor_name_prefix_tf = self.tf2torch_tensor_name_prefix_tf + train_steps = 720000 + map_dict_local = { + # torch: conv1d.weight in "out_channel in_channel kernel_size" + # tf : conv1d.weight in "kernel_size in_channel out_channel" + # torch: linear.weight in "out_channel in_channel" + # tf : dense.weight in "in_channel out_channel" + "{}.pre_conv.weight".format(tensor_name_prefix_torch): + {"name": "{}/pre_conv/kernel".format(tensor_name_prefix_tf), + "squeeze": None, + "transpose": (3, 2, 0, 1), + }, + "{}.pre_conv_bn.bias".format(tensor_name_prefix_torch): + {"name": "{}/pre_conv_bn/beta".format(tensor_name_prefix_tf), + "squeeze": None, + "transpose": None, + }, + "{}.pre_conv_bn.weight".format(tensor_name_prefix_torch): + {"name": "{}/pre_conv_bn/gamma".format(tensor_name_prefix_tf), + "squeeze": None, + "transpose": None, + }, + "{}.pre_conv_bn.running_mean".format(tensor_name_prefix_torch): + {"name": "{}/pre_conv_bn/moving_mean".format(tensor_name_prefix_tf), + "squeeze": None, + "transpose": None, + }, + "{}.pre_conv_bn.running_var".format(tensor_name_prefix_torch): + {"name": "{}/pre_conv_bn/moving_variance".format(tensor_name_prefix_tf), + "squeeze": None, + "transpose": None, + }, + "{}.pre_conv_bn.num_batches_tracked".format(tensor_name_prefix_torch): train_steps + } + for layer_idx in range(3): + map_dict_local.update({ + "{}.resnet{}_dense.weight".format(tensor_name_prefix_torch, layer_idx): + {"name": "{}/resnet{}_dense/kernel".format(tensor_name_prefix_tf, layer_idx), + "squeeze": None, + "transpose": (2, 1, 0) if layer_idx == 0 else (1, 0), + }, + "{}.resnet{}_dense.bias".format(tensor_name_prefix_torch, layer_idx): + {"name": "{}/resnet{}_dense/bias".format(tensor_name_prefix_tf, layer_idx), + "squeeze": None, + "transpose": None, + }, + "{}.resnet{}_bn.weight".format(tensor_name_prefix_torch, layer_idx): + {"name": "{}/resnet{}_bn/gamma".format(tensor_name_prefix_tf, layer_idx), + "squeeze": None, + "transpose": None, + }, + "{}.resnet{}_bn.bias".format(tensor_name_prefix_torch, layer_idx): + {"name": "{}/resnet{}_bn/beta".format(tensor_name_prefix_tf, layer_idx), + "squeeze": None, + "transpose": None, + }, + "{}.resnet{}_bn.running_mean".format(tensor_name_prefix_torch, layer_idx): + {"name": "{}/resnet{}_bn/moving_mean".format(tensor_name_prefix_tf, layer_idx), + "squeeze": None, + "transpose": None, + }, + "{}.resnet{}_bn.running_var".format(tensor_name_prefix_torch, layer_idx): + {"name": "{}/resnet{}_bn/moving_variance".format(tensor_name_prefix_tf, layer_idx), + "squeeze": None, + "transpose": None, + }, + "{}.resnet{}_bn.num_batches_tracked".format(tensor_name_prefix_torch, layer_idx): train_steps + }) + + for block_idx in range(len(self.layers_in_block)): + for layer_idx in range(self.layers_in_block[block_idx]): + for i in ["1", "2", "_sc"]: + map_dict_local.update({ + "{}.block_{}.layer_{}.conv{}.weight".format(tensor_name_prefix_torch, block_idx, layer_idx, i): + {"name": "{}/block_{}/layer_{}/conv{}/kernel".format(tensor_name_prefix_tf, block_idx, layer_idx, i), + "squeeze": None, + "transpose": (3, 2, 0, 1), + }, + "{}.block_{}.layer_{}.bn{}.weight".format(tensor_name_prefix_torch, block_idx, layer_idx, i): + {"name": "{}/block_{}/layer_{}/bn{}/gamma".format(tensor_name_prefix_tf, block_idx, layer_idx, i), + "squeeze": None, + "transpose": None, + }, + "{}.block_{}.layer_{}.bn{}.bias".format(tensor_name_prefix_torch, block_idx, layer_idx, i): + {"name": "{}/block_{}/layer_{}/bn{}/beta".format(tensor_name_prefix_tf, block_idx, layer_idx, i), + "squeeze": None, + "transpose": None, + }, + "{}.block_{}.layer_{}.bn{}.running_mean".format(tensor_name_prefix_torch, block_idx, layer_idx, i): + {"name": "{}/block_{}/layer_{}/bn{}/moving_mean".format(tensor_name_prefix_tf, block_idx, layer_idx, i), + "squeeze": None, + "transpose": None, + }, + "{}.block_{}.layer_{}.bn{}.running_var".format(tensor_name_prefix_torch, block_idx, layer_idx, i): + {"name": "{}/block_{}/layer_{}/bn{}/moving_variance".format(tensor_name_prefix_tf, block_idx, layer_idx, i), + "squeeze": None, + "transpose": None, + }, + "{}.block_{}.layer_{}.bn{}.num_batches_tracked".format(tensor_name_prefix_torch, block_idx, layer_idx, i): train_steps, + }) + + return map_dict_local + + def convert_tf2torch(self, + var_dict_tf, + var_dict_torch, + ): + + map_dict = self.gen_tf2torch_map_dict() + + var_dict_torch_update = dict() + for name in sorted(var_dict_torch.keys(), reverse=False): + if name.startswith(self.tf2torch_tensor_name_prefix_torch): + if name in map_dict: + if "num_batches_tracked" not in name: + name_tf = map_dict[name]["name"] + data_tf = var_dict_tf[name_tf] + if map_dict[name]["squeeze"] is not None: + data_tf = np.squeeze(data_tf, axis=map_dict[name]["squeeze"]) + if map_dict[name]["transpose"] is not None: + data_tf = np.transpose(data_tf, map_dict[name]["transpose"]) + data_tf = torch.from_numpy(data_tf).type(torch.float32).to("cpu") + assert var_dict_torch[name].size() == data_tf.size(), \ + "{}, {}, {} != {}".format(name, name_tf, + var_dict_torch[name].size(), data_tf.size()) + var_dict_torch_update[name] = data_tf + logging.info("torch tensor: {}, {}, loading from tf tensor: {}, {}".format( + name, data_tf.size(), name_tf, var_dict_tf[name_tf].shape + )) + else: + var_dict_torch_update[name] = torch.from_numpy(np.array(map_dict[name])).type(torch.int64).to("cpu") + logging.info("torch tensor: {}, manually assigning to: {}".format( + name, map_dict[name] + )) + else: + logging.warning("{} is missed from tf checkpoint".format(name)) + + return var_dict_torch_update diff --git a/funasr/models/encoder/sanm_encoder.py b/funasr/models/encoder/sanm_encoder.py index 0751a1020..57890efe6 100644 --- a/funasr/models/encoder/sanm_encoder.py +++ b/funasr/models/encoder/sanm_encoder.py @@ -347,6 +347,48 @@ class SANMEncoder(AbsEncoder): return (xs_pad, intermediate_outs), olens, None return xs_pad, olens, None + def forward_chunk(self, + xs_pad: torch.Tensor, + ilens: torch.Tensor, + cache: dict = None, + ctc: CTC = None, + ): + xs_pad *= self.output_size() ** 0.5 + if self.embed is None: + xs_pad = xs_pad + else: + xs_pad = self.embed.forward_chunk(xs_pad, cache) + + encoder_outs = self.encoders0(xs_pad, None, None, None, None) + xs_pad, masks = encoder_outs[0], encoder_outs[1] + intermediate_outs = [] + if len(self.interctc_layer_idx) == 0: + encoder_outs = self.encoders(xs_pad, None, None, None, None) + xs_pad, masks = encoder_outs[0], encoder_outs[1] + else: + for layer_idx, encoder_layer in enumerate(self.encoders): + encoder_outs = encoder_layer(xs_pad, None, None, None, None) + xs_pad, masks = encoder_outs[0], encoder_outs[1] + if layer_idx + 1 in self.interctc_layer_idx: + encoder_out = xs_pad + + # intermediate outputs are also normalized + if self.normalize_before: + encoder_out = self.after_norm(encoder_out) + + intermediate_outs.append((layer_idx + 1, encoder_out)) + + if self.interctc_use_conditioning: + ctc_out = ctc.softmax(encoder_out) + xs_pad = xs_pad + self.conditioning_layer(ctc_out) + + if self.normalize_before: + xs_pad = self.after_norm(xs_pad) + + if len(intermediate_outs) > 0: + return (xs_pad, intermediate_outs), None, None + return xs_pad, ilens, None + def gen_tf2torch_map_dict(self): tensor_name_prefix_torch = self.tf2torch_tensor_name_prefix_torch tensor_name_prefix_tf = self.tf2torch_tensor_name_prefix_tf diff --git a/funasr/models/frontend/eend_ola_feature.py b/funasr/models/frontend/eend_ola_feature.py new file mode 100644 index 000000000..e15b71c25 --- /dev/null +++ b/funasr/models/frontend/eend_ola_feature.py @@ -0,0 +1,51 @@ +# Copyright 2019 Hitachi, Ltd. (author: Yusuke Fujita) +# Licensed under the MIT license. +# +# This module is for computing audio features + +import librosa +import numpy as np + + +def transform(Y, dtype=np.float32): + Y = np.abs(Y) + n_fft = 2 * (Y.shape[1] - 1) + sr = 8000 + n_mels = 23 + mel_basis = librosa.filters.mel(sr, n_fft, n_mels) + Y = np.dot(Y ** 2, mel_basis.T) + Y = np.log10(np.maximum(Y, 1e-10)) + mean = np.mean(Y, axis=0) + Y = Y - mean + return Y.astype(dtype) + + +def subsample(Y, T, subsampling=1): + Y_ss = Y[::subsampling] + T_ss = T[::subsampling] + return Y_ss, T_ss + + +def splice(Y, context_size=0): + Y_pad = np.pad( + Y, + [(context_size, context_size), (0, 0)], + 'constant') + Y_spliced = np.lib.stride_tricks.as_strided( + np.ascontiguousarray(Y_pad), + (Y.shape[0], Y.shape[1] * (2 * context_size + 1)), + (Y.itemsize * Y.shape[1], Y.itemsize), writeable=False) + return Y_spliced + + +def stft( + data, + frame_size=1024, + frame_shift=256): + fft_size = 1 << (frame_size - 1).bit_length() + if len(data) % frame_shift == 0: + return librosa.stft(data, n_fft=fft_size, win_length=frame_size, + hop_length=frame_shift).T[:-1] + else: + return librosa.stft(data, n_fft=fft_size, win_length=frame_size, + hop_length=frame_shift).T \ No newline at end of file diff --git a/funasr/models/frontend/wav_frontend.py b/funasr/models/frontend/wav_frontend.py index ed8cb3646..475a9398a 100644 --- a/funasr/models/frontend/wav_frontend.py +++ b/funasr/models/frontend/wav_frontend.py @@ -1,14 +1,15 @@ # Copyright (c) Alibaba, Inc. and its affiliates. # Part of the implementation is borrowed from espnet/espnet. - from typing import Tuple import numpy as np import torch import torchaudio.compliance.kaldi as kaldi -from funasr.models.frontend.abs_frontend import AbsFrontend -from typeguard import check_argument_types from torch.nn.utils.rnn import pad_sequence +from typeguard import check_argument_types + +import funasr.models.frontend.eend_ola_feature as eend_ola_feature +from funasr.models.frontend.abs_frontend import AbsFrontend def load_cmvn(cmvn_file): @@ -33,9 +34,9 @@ def load_cmvn(cmvn_file): means = np.array(means_list).astype(np.float) vars = np.array(vars_list).astype(np.float) cmvn = np.array([means, vars]) - cmvn = torch.as_tensor(cmvn) - return cmvn - + cmvn = torch.as_tensor(cmvn) + return cmvn + def apply_cmvn(inputs, cmvn_file): # noqa """ @@ -78,21 +79,22 @@ def apply_lfr(inputs, lfr_m, lfr_n): class WavFrontend(AbsFrontend): """Conventional frontend structure for ASR. """ + def __init__( - self, - cmvn_file: str = None, - fs: int = 16000, - window: str = 'hamming', - n_mels: int = 80, - frame_length: int = 25, - frame_shift: int = 10, - filter_length_min: int = -1, - filter_length_max: int = -1, - lfr_m: int = 1, - lfr_n: int = 1, - dither: float = 1.0, - snip_edges: bool = True, - upsacle_samples: bool = True, + self, + cmvn_file: str = None, + fs: int = 16000, + window: str = 'hamming', + n_mels: int = 80, + frame_length: int = 25, + frame_shift: int = 10, + filter_length_min: int = -1, + filter_length_max: int = -1, + lfr_m: int = 1, + lfr_n: int = 1, + dither: float = 1.0, + snip_edges: bool = True, + upsacle_samples: bool = True, ): assert check_argument_types() super().__init__() @@ -135,11 +137,11 @@ class WavFrontend(AbsFrontend): window_type=self.window, sample_frequency=self.fs, snip_edges=self.snip_edges) - + if self.lfr_m != 1 or self.lfr_n != 1: mat = apply_lfr(mat, self.lfr_m, self.lfr_n) if self.cmvn_file is not None: - mat = apply_cmvn(mat, self.cmvn_file) + mat = apply_cmvn(mat, self.cmvn_file) feat_length = mat.size(0) feats.append(mat) feats_lens.append(feat_length) @@ -171,7 +173,6 @@ class WavFrontend(AbsFrontend): window_type=self.window, sample_frequency=self.fs) - feat_length = mat.size(0) feats.append(mat) feats_lens.append(feat_length) @@ -204,3 +205,299 @@ class WavFrontend(AbsFrontend): batch_first=True, padding_value=0.0) return feats_pad, feats_lens + + +class WavFrontendOnline(AbsFrontend): + """Conventional frontend structure for streaming ASR/VAD. + """ + + def __init__( + self, + cmvn_file: str = None, + fs: int = 16000, + window: str = 'hamming', + n_mels: int = 80, + frame_length: int = 25, + frame_shift: int = 10, + filter_length_min: int = -1, + filter_length_max: int = -1, + lfr_m: int = 1, + lfr_n: int = 1, + dither: float = 1.0, + snip_edges: bool = True, + upsacle_samples: bool = True, + ): + assert check_argument_types() + super().__init__() + self.fs = fs + self.window = window + self.n_mels = n_mels + self.frame_length = frame_length + self.frame_shift = frame_shift + self.frame_sample_length = int(self.frame_length * self.fs / 1000) + self.frame_shift_sample_length = int(self.frame_shift * self.fs / 1000) + self.filter_length_min = filter_length_min + self.filter_length_max = filter_length_max + self.lfr_m = lfr_m + self.lfr_n = lfr_n + self.cmvn_file = cmvn_file + self.dither = dither + self.snip_edges = snip_edges + self.upsacle_samples = upsacle_samples + self.waveforms = None + self.reserve_waveforms = None + self.fbanks = None + self.fbanks_lens = None + self.cmvn = None if self.cmvn_file is None else load_cmvn(self.cmvn_file) + self.input_cache = None + self.lfr_splice_cache = [] + + def output_size(self) -> int: + return self.n_mels * self.lfr_m + + @staticmethod + def apply_cmvn(inputs: torch.Tensor, cmvn: torch.Tensor) -> torch.Tensor: + """ + Apply CMVN with mvn data + """ + + device = inputs.device + dtype = inputs.dtype + frame, dim = inputs.shape + + means = np.tile(cmvn[0:1, :dim], (frame, 1)) + vars = np.tile(cmvn[1:2, :dim], (frame, 1)) + inputs += torch.from_numpy(means).type(dtype).to(device) + inputs *= torch.from_numpy(vars).type(dtype).to(device) + + return inputs.type(torch.float32) + + @staticmethod + # inputs tensor has catted the cache tensor + # def apply_lfr(inputs: torch.Tensor, lfr_m: int, lfr_n: int, inputs_lfr_cache: torch.Tensor = None, + # is_final: bool = False) -> Tuple[torch.Tensor, torch.Tensor, int]: + def apply_lfr(inputs: torch.Tensor, lfr_m: int, lfr_n: int, is_final: bool = False) -> Tuple[ + torch.Tensor, torch.Tensor, int]: + """ + Apply lfr with data + """ + + LFR_inputs = [] + # inputs = torch.vstack((inputs_lfr_cache, inputs)) + T = inputs.shape[0] # include the right context + T_lfr = int(np.ceil((T - (lfr_m - 1) // 2) / lfr_n)) # minus the right context: (lfr_m - 1) // 2 + splice_idx = T_lfr + for i in range(T_lfr): + if lfr_m <= T - i * lfr_n: + LFR_inputs.append((inputs[i * lfr_n:i * lfr_n + lfr_m]).view(1, -1)) + else: # process last LFR frame + if is_final: + num_padding = lfr_m - (T - i * lfr_n) + frame = (inputs[i * lfr_n:]).view(-1) + for _ in range(num_padding): + frame = torch.hstack((frame, inputs[-1])) + LFR_inputs.append(frame) + else: + # update splice_idx and break the circle + splice_idx = i + break + splice_idx = min(T - 1, splice_idx * lfr_n) + lfr_splice_cache = inputs[splice_idx:, :] + LFR_outputs = torch.vstack(LFR_inputs) + return LFR_outputs.type(torch.float32), lfr_splice_cache, splice_idx + + @staticmethod + def compute_frame_num(sample_length: int, frame_sample_length: int, frame_shift_sample_length: int) -> int: + frame_num = int((sample_length - frame_sample_length) / frame_shift_sample_length + 1) + return frame_num if frame_num >= 1 and sample_length >= frame_sample_length else 0 + + def forward_fbank( + self, + input: torch.Tensor, + input_lengths: torch.Tensor + ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]: + batch_size = input.size(0) + if self.input_cache is None: + self.input_cache = torch.empty(0) + input = torch.cat((self.input_cache, input), dim=1) + frame_num = self.compute_frame_num(input.shape[-1], self.frame_sample_length, self.frame_shift_sample_length) + # update self.in_cache + self.input_cache = input[:, -(input.shape[-1] - frame_num * self.frame_shift_sample_length):] + waveforms = torch.empty(0) + feats_pad = torch.empty(0) + feats_lens = torch.empty(0) + if frame_num: + waveforms = [] + feats = [] + feats_lens = [] + for i in range(batch_size): + waveform = input[i] + # we need accurate wave samples that used for fbank extracting + waveforms.append( + waveform[:((frame_num - 1) * self.frame_shift_sample_length + self.frame_sample_length)]) + waveform = waveform * (1 << 15) + waveform = waveform.unsqueeze(0) + mat = kaldi.fbank(waveform, + num_mel_bins=self.n_mels, + frame_length=self.frame_length, + frame_shift=self.frame_shift, + dither=self.dither, + energy_floor=0.0, + window_type=self.window, + sample_frequency=self.fs) + + feat_length = mat.size(0) + feats.append(mat) + feats_lens.append(feat_length) + + waveforms = torch.stack(waveforms) + feats_lens = torch.as_tensor(feats_lens) + feats_pad = pad_sequence(feats, + batch_first=True, + padding_value=0.0) + self.fbanks = feats_pad + import copy + self.fbanks_lens = copy.deepcopy(feats_lens) + return waveforms, feats_pad, feats_lens + + def get_fbank(self) -> Tuple[torch.Tensor, torch.Tensor]: + return self.fbanks, self.fbanks_lens + + def forward_lfr_cmvn( + self, + input: torch.Tensor, + input_lengths: torch.Tensor, + is_final: bool = False + ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]: + batch_size = input.size(0) + feats = [] + feats_lens = [] + lfr_splice_frame_idxs = [] + for i in range(batch_size): + mat = input[i, :input_lengths[i], :] + if self.lfr_m != 1 or self.lfr_n != 1: + # update self.lfr_splice_cache in self.apply_lfr + # mat, self.lfr_splice_cache[i], lfr_splice_frame_idx = self.apply_lfr(mat, self.lfr_m, self.lfr_n, self.lfr_splice_cache[i], + mat, self.lfr_splice_cache[i], lfr_splice_frame_idx = self.apply_lfr(mat, self.lfr_m, self.lfr_n, + is_final) + if self.cmvn_file is not None: + mat = self.apply_cmvn(mat, self.cmvn) + feat_length = mat.size(0) + feats.append(mat) + feats_lens.append(feat_length) + lfr_splice_frame_idxs.append(lfr_splice_frame_idx) + + feats_lens = torch.as_tensor(feats_lens) + feats_pad = pad_sequence(feats, + batch_first=True, + padding_value=0.0) + lfr_splice_frame_idxs = torch.as_tensor(lfr_splice_frame_idxs) + return feats_pad, feats_lens, lfr_splice_frame_idxs + + def forward( + self, input: torch.Tensor, input_lengths: torch.Tensor, is_final: bool = False + ) -> Tuple[torch.Tensor, torch.Tensor]: + batch_size = input.shape[0] + assert batch_size == 1, 'we support to extract feature online only when the batch size is equal to 1 now' + waveforms, feats, feats_lengths = self.forward_fbank(input, input_lengths) # input shape: B T D + if feats.shape[0]: + # if self.reserve_waveforms is None and self.lfr_m > 1: + # self.reserve_waveforms = waveforms[:, :(self.lfr_m - 1) // 2 * self.frame_shift_sample_length] + self.waveforms = waveforms if self.reserve_waveforms is None else torch.cat( + (self.reserve_waveforms, waveforms), dim=1) + if not self.lfr_splice_cache: # 初始化splice_cache + for i in range(batch_size): + self.lfr_splice_cache.append(feats[i][0, :].unsqueeze(dim=0).repeat((self.lfr_m - 1) // 2, 1)) + # need the number of the input frames + self.lfr_splice_cache[0].shape[0] is greater than self.lfr_m + if feats_lengths[0] + self.lfr_splice_cache[0].shape[0] >= self.lfr_m: + lfr_splice_cache_tensor = torch.stack(self.lfr_splice_cache) # B T D + feats = torch.cat((lfr_splice_cache_tensor, feats), dim=1) + feats_lengths += lfr_splice_cache_tensor[0].shape[0] + frame_from_waveforms = int( + (self.waveforms.shape[1] - self.frame_sample_length) / self.frame_shift_sample_length + 1) + minus_frame = (self.lfr_m - 1) // 2 if self.reserve_waveforms is None else 0 + feats, feats_lengths, lfr_splice_frame_idxs = self.forward_lfr_cmvn(feats, feats_lengths, is_final) + if self.lfr_m == 1: + self.reserve_waveforms = None + else: + reserve_frame_idx = lfr_splice_frame_idxs[0] - minus_frame + # print('reserve_frame_idx: ' + str(reserve_frame_idx)) + # print('frame_frame: ' + str(frame_from_waveforms)) + self.reserve_waveforms = self.waveforms[:, reserve_frame_idx * self.frame_shift_sample_length:frame_from_waveforms * self.frame_shift_sample_length] + sample_length = (frame_from_waveforms - 1) * self.frame_shift_sample_length + self.frame_sample_length + self.waveforms = self.waveforms[:, :sample_length] + else: + # update self.reserve_waveforms and self.lfr_splice_cache + self.reserve_waveforms = self.waveforms[:, + :-(self.frame_sample_length - self.frame_shift_sample_length)] + for i in range(batch_size): + self.lfr_splice_cache[i] = torch.cat((self.lfr_splice_cache[i], feats[i]), dim=0) + return torch.empty(0), feats_lengths + else: + if is_final: + self.waveforms = waveforms if self.reserve_waveforms is None else self.reserve_waveforms + feats = torch.stack(self.lfr_splice_cache) + feats_lengths = torch.zeros(batch_size, dtype=torch.int) + feats.shape[1] + feats, feats_lengths, _ = self.forward_lfr_cmvn(feats, feats_lengths, is_final) + if is_final: + self.cache_reset() + return feats, feats_lengths + + def get_waveforms(self): + return self.waveforms + + def cache_reset(self): + self.reserve_waveforms = None + self.input_cache = None + self.lfr_splice_cache = [] + + +class WavFrontendMel23(AbsFrontend): + """Conventional frontend structure for ASR. + """ + + def __init__( + self, + fs: int = 16000, + frame_length: int = 25, + frame_shift: int = 10, + lfr_m: int = 1, + lfr_n: int = 1, + ): + assert check_argument_types() + super().__init__() + self.fs = fs + self.frame_length = frame_length + self.frame_shift = frame_shift + self.lfr_m = lfr_m + self.lfr_n = lfr_n + self.n_mels = 23 + + def output_size(self) -> int: + return self.n_mels * (2 * self.lfr_m + 1) + + def forward( + self, + input: torch.Tensor, + input_lengths: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor]: + batch_size = input.size(0) + feats = [] + feats_lens = [] + for i in range(batch_size): + waveform_length = input_lengths[i] + waveform = input[i][:waveform_length] + waveform = waveform.numpy() + mat = eend_ola_feature.stft(waveform, self.frame_length, self.frame_shift) + mat = eend_ola_feature.transform(mat) + mat = eend_ola_feature.splice(mat, context_size=self.lfr_m) + mat = mat[::self.lfr_n] + mat = torch.from_numpy(mat) + feat_length = mat.size(0) + feats.append(mat) + feats_lens.append(feat_length) + + feats_lens = torch.as_tensor(feats_lens) + feats_pad = pad_sequence(feats, + batch_first=True, + padding_value=0.0) + return feats_pad, feats_lens diff --git a/funasr/models/pooling/statistic_pooling.py b/funasr/models/pooling/statistic_pooling.py index dc8c98f0d..8f85de99d 100644 --- a/funasr/models/pooling/statistic_pooling.py +++ b/funasr/models/pooling/statistic_pooling.py @@ -82,13 +82,16 @@ def windowed_statistic_pooling( tt = xs_pad.shape[2] num_chunk = int(math.ceil(tt / pooling_stride)) pad = pooling_size // 2 - features = F.pad(xs_pad, (0, 0, pad, pad), "reflect") + if len(xs_pad.shape) == 4: + features = F.pad(xs_pad, (0, 0, pad, pad), "reflect") + else: + features = F.pad(xs_pad, (pad, pad), "reflect") stat_list = [] for i in range(num_chunk): # B x C st, ed = i*pooling_stride, i*pooling_stride+pooling_size - stat = statistic_pooling(features[:, :, st: ed, :], pooling_dim=pooling_dim) + stat = statistic_pooling(features[:, :, st: ed], pooling_dim=pooling_dim) stat_list.append(stat.unsqueeze(2)) # B x C x T diff --git a/funasr/models/predictor/cif.py b/funasr/models/predictor/cif.py index 561537323..74f3e68a9 100644 --- a/funasr/models/predictor/cif.py +++ b/funasr/models/predictor/cif.py @@ -199,6 +199,63 @@ class CifPredictorV2(nn.Module): return acoustic_embeds, token_num, alphas, cif_peak + def forward_chunk(self, hidden, cache=None): + h = hidden + context = h.transpose(1, 2) + queries = self.pad(context) + output = torch.relu(self.cif_conv1d(queries)) + output = output.transpose(1, 2) + output = self.cif_output(output) + alphas = torch.sigmoid(output) + alphas = torch.nn.functional.relu(alphas * self.smooth_factor - self.noise_threshold) + + alphas = alphas.squeeze(-1) + mask_chunk_predictor = None + if cache is not None: + mask_chunk_predictor = None + mask_chunk_predictor = torch.zeros_like(alphas) + mask_chunk_predictor[:, cache["pad_left"]:cache["stride"] + cache["pad_left"]] = 1.0 + + if mask_chunk_predictor is not None: + alphas = alphas * mask_chunk_predictor + + if cache is not None: + if cache["cif_hidden"] is not None: + hidden = torch.cat((cache["cif_hidden"], hidden), 1) + if cache["cif_alphas"] is not None: + alphas = torch.cat((cache["cif_alphas"], alphas), -1) + + token_num = alphas.sum(-1) + acoustic_embeds, cif_peak = cif(hidden, alphas, self.threshold) + len_time = alphas.size(-1) + last_fire_place = len_time - 1 + last_fire_remainds = 0.0 + pre_alphas_length = 0 + + mask_chunk_peak_predictor = None + if cache is not None: + mask_chunk_peak_predictor = None + mask_chunk_peak_predictor = torch.zeros_like(cif_peak) + if cache["cif_alphas"] is not None: + pre_alphas_length = cache["cif_alphas"].size(-1) + mask_chunk_peak_predictor[:, :pre_alphas_length] = 1.0 + mask_chunk_peak_predictor[:, pre_alphas_length + cache["pad_left"]:pre_alphas_length + cache["stride"] + cache["pad_left"]] = 1.0 + + + if mask_chunk_peak_predictor is not None: + cif_peak = cif_peak * mask_chunk_peak_predictor.squeeze(-1) + + for i in range(len_time): + if cif_peak[0][len_time - 1 - i] > self.threshold or cif_peak[0][len_time - 1 - i] == self.threshold: + last_fire_place = len_time - 1 - i + last_fire_remainds = cif_peak[0][len_time - 1 - i] - self.threshold + break + last_fire_remainds = torch.tensor([last_fire_remainds], dtype=alphas.dtype).to(alphas.device) + cache["cif_hidden"] = hidden[:, last_fire_place:, :] + cache["cif_alphas"] = torch.cat((last_fire_remainds.unsqueeze(0), alphas[:, last_fire_place+1:]), -1) + token_num_int = token_num.floor().type(torch.int32).item() + return acoustic_embeds[:, 0:token_num_int, :], token_num, alphas, cif_peak + def tail_process_fn(self, hidden, alphas, token_num=None, mask=None): b, t, d = hidden.size() tail_threshold = self.tail_threshold diff --git a/funasr/modules/attention.py b/funasr/modules/attention.py index 627700524..31d5a8775 100644 --- a/funasr/modules/attention.py +++ b/funasr/modules/attention.py @@ -347,15 +347,17 @@ class MultiHeadedAttentionSANM(nn.Module): mask = torch.reshape(mask, (b, -1, 1)) if mask_shfit_chunk is not None: mask = mask * mask_shfit_chunk + inputs = inputs * mask - inputs = inputs * mask x = inputs.transpose(1, 2) x = self.pad_fn(x) x = self.fsmn_block(x) x = x.transpose(1, 2) x += inputs x = self.dropout(x) - return x * mask + if mask is not None: + x = x * mask + return x def forward_qkv(self, x): """Transform query, key and value. @@ -505,7 +507,7 @@ class MultiHeadedAttentionSANMDecoder(nn.Module): # print("in fsmn, cache is None, x", x.size()) x = self.pad_fn(x) - if not self.training and t <= 1: + if not self.training: cache = x else: # print("in fsmn, cache is not None, x", x.size()) @@ -513,7 +515,7 @@ class MultiHeadedAttentionSANMDecoder(nn.Module): # if t < self.kernel_size: # x = self.pad_fn(x) x = torch.cat((cache[:, :, 1:], x), dim=2) - x = x[:, :, -self.kernel_size:] + x = x[:, :, -(self.kernel_size+t-1):] # print("in fsmn, cache is not None, x_cat", x.size()) cache = x x = self.fsmn_block(x) diff --git a/funasr/modules/eend_ola/__init__.py b/funasr/modules/eend_ola/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/funasr/modules/eend_ola/encoder.py b/funasr/modules/eend_ola/encoder.py new file mode 100644 index 000000000..90a63f369 --- /dev/null +++ b/funasr/modules/eend_ola/encoder.py @@ -0,0 +1,133 @@ +import math + +import torch +import torch.nn.functional as F +from torch import nn + + +class MultiHeadSelfAttention(nn.Module): + def __init__(self, n_units, h=8, dropout_rate=0.1): + super(MultiHeadSelfAttention, self).__init__() + self.linearQ = nn.Linear(n_units, n_units) + self.linearK = nn.Linear(n_units, n_units) + self.linearV = nn.Linear(n_units, n_units) + self.linearO = nn.Linear(n_units, n_units) + self.d_k = n_units // h + self.h = h + self.dropout = nn.Dropout(dropout_rate) + + def __call__(self, x, batch_size, x_mask): + q = self.linearQ(x).view(batch_size, -1, self.h, self.d_k) + k = self.linearK(x).view(batch_size, -1, self.h, self.d_k) + v = self.linearV(x).view(batch_size, -1, self.h, self.d_k) + scores = torch.matmul( + q.permute(0, 2, 1, 3), k.permute(0, 2, 3, 1)) / math.sqrt(self.d_k) + if x_mask is not None: + x_mask = x_mask.unsqueeze(1) + scores = scores.masked_fill(x_mask == 0, -1e9) + self.att = F.softmax(scores, dim=3) + p_att = self.dropout(self.att) + x = torch.matmul(p_att, v.permute(0, 2, 1, 3)) + x = x.permute(0, 2, 1, 3).contiguous().view(-1, self.h * self.d_k) + return self.linearO(x) + + +class PositionwiseFeedForward(nn.Module): + def __init__(self, n_units, d_units, dropout_rate): + super(PositionwiseFeedForward, self).__init__() + self.linear1 = nn.Linear(n_units, d_units) + self.linear2 = nn.Linear(d_units, n_units) + self.dropout = nn.Dropout(dropout_rate) + + def __call__(self, x): + return self.linear2(self.dropout(F.relu(self.linear1(x)))) + + +class PositionalEncoding(torch.nn.Module): + def __init__(self, d_model, dropout_rate, max_len=5000, reverse=False): + super(PositionalEncoding, self).__init__() + self.d_model = d_model + self.reverse = reverse + self.xscale = math.sqrt(self.d_model) + self.dropout = torch.nn.Dropout(p=dropout_rate) + self.pe = None + self.extend_pe(torch.tensor(0.0).expand(1, max_len)) + + def extend_pe(self, x): + if self.pe is not None: + if self.pe.size(1) >= x.size(1): + if self.pe.dtype != x.dtype or self.pe.device != x.device: + self.pe = self.pe.to(dtype=x.dtype, device=x.device) + return + pe = torch.zeros(x.size(1), self.d_model) + if self.reverse: + position = torch.arange( + x.size(1) - 1, -1, -1.0, dtype=torch.float32 + ).unsqueeze(1) + else: + position = torch.arange(0, x.size(1), dtype=torch.float32).unsqueeze(1) + div_term = torch.exp( + torch.arange(0, self.d_model, 2, dtype=torch.float32) + * -(math.log(10000.0) / self.d_model) + ) + pe[:, 0::2] = torch.sin(position * div_term) + pe[:, 1::2] = torch.cos(position * div_term) + pe = pe.unsqueeze(0) + self.pe = pe.to(device=x.device, dtype=x.dtype) + + def forward(self, x: torch.Tensor): + self.extend_pe(x) + x = x * self.xscale + self.pe[:, : x.size(1)] + return self.dropout(x) + + +class EENDOLATransformerEncoder(nn.Module): + def __init__(self, + idim: int, + n_layers: int, + n_units: int, + e_units: int = 2048, + h: int = 4, + dropout_rate: float = 0.1, + use_pos_emb: bool = False): + super(EENDOLATransformerEncoder, self).__init__() + self.lnorm_in = nn.LayerNorm(n_units) + self.n_layers = n_layers + self.dropout = nn.Dropout(dropout_rate) + for i in range(n_layers): + setattr(self, '{}{:d}'.format("lnorm1_", i), + nn.LayerNorm(n_units)) + setattr(self, '{}{:d}'.format("self_att_", i), + MultiHeadSelfAttention(n_units, h)) + setattr(self, '{}{:d}'.format("lnorm2_", i), + nn.LayerNorm(n_units)) + setattr(self, '{}{:d}'.format("ff_", i), + PositionwiseFeedForward(n_units, e_units, dropout_rate)) + self.lnorm_out = nn.LayerNorm(n_units) + if use_pos_emb: + self.pos_enc = torch.nn.Sequential( + torch.nn.Linear(idim, n_units), + torch.nn.LayerNorm(n_units), + torch.nn.Dropout(dropout_rate), + torch.nn.ReLU(), + PositionalEncoding(n_units, dropout_rate), + ) + else: + self.linear_in = nn.Linear(idim, n_units) + self.pos_enc = None + + def __call__(self, x, x_mask=None): + BT_size = x.shape[0] * x.shape[1] + if self.pos_enc is not None: + e = self.pos_enc(x) + e = e.view(BT_size, -1) + else: + e = self.linear_in(x.reshape(BT_size, -1)) + for i in range(self.n_layers): + e = getattr(self, '{}{:d}'.format("lnorm1_", i))(e) + s = getattr(self, '{}{:d}'.format("self_att_", i))(e, x.shape[0], x_mask) + e = e + self.dropout(s) + e = getattr(self, '{}{:d}'.format("lnorm2_", i))(e) + s = getattr(self, '{}{:d}'.format("ff_", i))(e) + e = e + self.dropout(s) + return self.lnorm_out(e) diff --git a/funasr/modules/eend_ola/encoder_decoder_attractor.py b/funasr/modules/eend_ola/encoder_decoder_attractor.py new file mode 100644 index 000000000..45ac98219 --- /dev/null +++ b/funasr/modules/eend_ola/encoder_decoder_attractor.py @@ -0,0 +1,50 @@ +import numpy as np +import torch +import torch.nn.functional as F +from torch import nn + + +class EncoderDecoderAttractor(nn.Module): + + def __init__(self, n_units, encoder_dropout=0.1, decoder_dropout=0.1): + super(EncoderDecoderAttractor, self).__init__() + self.enc0_dropout = nn.Dropout(encoder_dropout) + self.encoder = nn.LSTM(n_units, n_units, 1, batch_first=True, dropout=encoder_dropout) + self.dec0_dropout = nn.Dropout(decoder_dropout) + self.decoder = nn.LSTM(n_units, n_units, 1, batch_first=True, dropout=decoder_dropout) + self.counter = nn.Linear(n_units, 1) + self.n_units = n_units + + def forward_core(self, xs, zeros): + ilens = torch.from_numpy(np.array([x.shape[0] for x in xs])).to(torch.int64) + xs = [self.enc0_dropout(x) for x in xs] + xs = nn.utils.rnn.pad_sequence(xs, batch_first=True, padding_value=-1) + xs = nn.utils.rnn.pack_padded_sequence(xs, ilens, batch_first=True, enforce_sorted=False) + _, (hx, cx) = self.encoder(xs) + zlens = torch.from_numpy(np.array([z.shape[0] for z in zeros])).to(torch.int64) + max_zlen = torch.max(zlens).to(torch.int).item() + zeros = [self.enc0_dropout(z) for z in zeros] + zeros = nn.utils.rnn.pad_sequence(zeros, batch_first=True, padding_value=-1) + zeros = nn.utils.rnn.pack_padded_sequence(zeros, zlens, batch_first=True, enforce_sorted=False) + attractors, (_, _) = self.decoder(zeros, (hx, cx)) + attractors = nn.utils.rnn.pad_packed_sequence(attractors, batch_first=True, padding_value=-1, + total_length=max_zlen)[0] + attractors = [att[:zlens[i].to(torch.int).item()] for i, att in enumerate(attractors)] + return attractors + + def forward(self, xs, n_speakers): + zeros = [torch.zeros(n_spk + 1, self.n_units).to(torch.float32).to(xs[0].device) for n_spk in n_speakers] + attractors = self.forward_core(xs, zeros) + labels = torch.cat([torch.from_numpy(np.array([[1] * n_spk + [0]], np.float32)) for n_spk in n_speakers], dim=1) + labels = labels.to(xs[0].device) + logit = torch.cat([self.counter(att).view(-1, n_spk + 1) for att, n_spk in zip(attractors, n_speakers)], dim=1) + loss = F.binary_cross_entropy(torch.sigmoid(logit), labels) + + attractors = [att[slice(0, att.shape[0] - 1)] for att in attractors] + return loss, attractors + + def estimate(self, xs, max_n_speakers=15): + zeros = [torch.zeros(max_n_speakers, self.n_units).to(torch.float32).to(xs[0].device) for _ in xs] + attractors = self.forward_core(xs, zeros) + probs = [torch.sigmoid(torch.flatten(self.counter(att))) for att in attractors] + return attractors, probs diff --git a/funasr/modules/eend_ola/utils/losses.py b/funasr/modules/eend_ola/utils/losses.py new file mode 100644 index 000000000..af0181dda --- /dev/null +++ b/funasr/modules/eend_ola/utils/losses.py @@ -0,0 +1,67 @@ +import numpy as np +import torch +import torch.nn.functional as F +from itertools import permutations +from torch import nn + + +def standard_loss(ys, ts, label_delay=0): + losses = [F.binary_cross_entropy(torch.sigmoid(y), t) * len(y) for y, t in zip(ys, ts)] + loss = torch.sum(torch.stack(losses)) + n_frames = torch.from_numpy(np.array(np.sum([t.shape[0] for t in ts]))).to(torch.float32).to(ys[0].device) + loss = loss / n_frames + return loss + + +def batch_pit_n_speaker_loss(ys, ts, n_speakers_list): + max_n_speakers = ts[0].shape[1] + olens = [y.shape[0] for y in ys] + ys = nn.utils.rnn.pad_sequence(ys, batch_first=True, padding_value=-1) + ys_mask = [torch.ones(olen).to(ys.device) for olen in olens] + ys_mask = torch.nn.utils.rnn.pad_sequence(ys_mask, batch_first=True, padding_value=0).unsqueeze(-1) + + losses = [] + for shift in range(max_n_speakers): + ts_roll = [torch.roll(t, -shift, dims=1) for t in ts] + ts_roll = nn.utils.rnn.pad_sequence(ts_roll, batch_first=True, padding_value=-1) + loss = F.binary_cross_entropy(torch.sigmoid(ys), ts_roll, reduction='none') + if ys_mask is not None: + loss = loss * ys_mask + loss = torch.sum(loss, dim=1) + losses.append(loss) + losses = torch.stack(losses, dim=2) + + perms = np.array(list(permutations(range(max_n_speakers)))).astype(np.float32) + perms = torch.from_numpy(perms).to(losses.device) + y_ind = torch.arange(max_n_speakers, dtype=torch.float32, device=losses.device) + t_inds = torch.fmod(perms - y_ind, max_n_speakers).to(torch.long) + + losses_perm = [] + for t_ind in t_inds: + losses_perm.append( + torch.mean(losses[:, y_ind.to(torch.long), t_ind], dim=1)) + losses_perm = torch.stack(losses_perm, dim=1) + + def select_perm_indices(num, max_num): + perms = list(permutations(range(max_num))) + sub_perms = list(permutations(range(num))) + return [ + [x[:num] for x in perms].index(perm) + for perm in sub_perms] + + masks = torch.full_like(losses_perm, device=losses.device, fill_value=float('inf')) + for i, t in enumerate(ts): + n_speakers = n_speakers_list[i] + indices = select_perm_indices(n_speakers, max_n_speakers) + masks[i, indices] = 0 + losses_perm += masks + + min_loss = torch.sum(torch.min(losses_perm, dim=1)[0]) + n_frames = torch.from_numpy(np.array(np.sum([t.shape[0] for t in ts]))).to(losses.device) + min_loss = min_loss / n_frames + + min_indices = torch.argmin(losses_perm, dim=1) + labels_perm = [t[:, perms[idx].to(torch.long)] for t, idx in zip(ts, min_indices)] + labels_perm = [t[:, :n_speakers] for t, n_speakers in zip(labels_perm, n_speakers_list)] + + return min_loss, labels_perm diff --git a/funasr/modules/eend_ola/utils/power.py b/funasr/modules/eend_ola/utils/power.py new file mode 100644 index 000000000..7144e24da --- /dev/null +++ b/funasr/modules/eend_ola/utils/power.py @@ -0,0 +1,95 @@ +import numpy as np +import torch +import torch.multiprocessing +import torch.nn.functional as F +from itertools import combinations +from itertools import permutations + + +def generate_mapping_dict(max_speaker_num=6, max_olp_speaker_num=3): + all_kinds = [] + all_kinds.append(0) + for i in range(max_olp_speaker_num): + selected_num = i + 1 + coms = np.array(list(combinations(np.arange(max_speaker_num), selected_num))) + for com in coms: + tmp = np.zeros(max_speaker_num) + tmp[com] = 1 + item = int(raw_dec_trans(tmp.reshape(1, -1), max_speaker_num)[0]) + all_kinds.append(item) + all_kinds_order = sorted(all_kinds) + + mapping_dict = {} + mapping_dict['dec2label'] = {} + mapping_dict['label2dec'] = {} + for i in range(len(all_kinds_order)): + dec = all_kinds_order[i] + mapping_dict['dec2label'][dec] = i + mapping_dict['label2dec'][i] = dec + oov_id = len(all_kinds_order) + mapping_dict['oov'] = oov_id + return mapping_dict + + +def raw_dec_trans(x, max_speaker_num): + num_list = [] + for i in range(max_speaker_num): + num_list.append(x[:, i]) + base = 1 + T = x.shape[0] + res = np.zeros((T)) + for num in num_list: + res += num * base + base = base * 2 + return res + + +def mapping_func(num, mapping_dict): + if num in mapping_dict['dec2label'].keys(): + label = mapping_dict['dec2label'][num] + else: + label = mapping_dict['oov'] + return label + + +def dec_trans(x, max_speaker_num, mapping_dict): + num_list = [] + for i in range(max_speaker_num): + num_list.append(x[:, i]) + base = 1 + T = x.shape[0] + res = np.zeros((T)) + for num in num_list: + res += num * base + base = base * 2 + res = np.array([mapping_func(i, mapping_dict) for i in res]) + return res + + +def create_powerlabel(label, mapping_dict, max_speaker_num=6, max_olp_speaker_num=3): + T, C = label.shape + padding_label = np.zeros((T, max_speaker_num)) + padding_label[:, :C] = label + out_label = dec_trans(padding_label, max_speaker_num, mapping_dict) + out_label = torch.from_numpy(out_label) + return out_label + + +def generate_perm_pse(label, n_speaker, mapping_dict, max_speaker_num, max_olp_speaker_num=3): + perms = np.array(list(permutations(range(n_speaker)))).astype(np.float32) + perms = torch.from_numpy(perms).to(label.device).to(torch.int64) + perm_labels = [label[:, perm] for perm in perms] + perm_pse_labels = [create_powerlabel(perm_label.cpu().numpy(), mapping_dict, max_speaker_num). + to(perm_label.device, non_blocking=True) for perm_label in perm_labels] + return perm_labels, perm_pse_labels + + +def generate_min_pse(label, n_speaker, mapping_dict, max_speaker_num, pse_logit, max_olp_speaker_num=3): + perm_labels, perm_pse_labels = generate_perm_pse(label, n_speaker, mapping_dict, max_speaker_num, + max_olp_speaker_num=max_olp_speaker_num) + losses = [F.cross_entropy(input=pse_logit, target=perm_pse_label.to(torch.long)) * len(pse_logit) + for perm_pse_label in perm_pse_labels] + loss = torch.stack(losses) + min_index = torch.argmin(loss) + selected_perm_label, selected_pse_label = perm_labels[min_index], perm_pse_labels[min_index] + return selected_perm_label, selected_pse_label diff --git a/funasr/modules/eend_ola/utils/report.py b/funasr/modules/eend_ola/utils/report.py new file mode 100644 index 000000000..bfccedfe0 --- /dev/null +++ b/funasr/modules/eend_ola/utils/report.py @@ -0,0 +1,159 @@ +import copy +import numpy as np +import time +import torch +from eend.utils.power import create_powerlabel +from itertools import combinations + +metrics = [ + ('diarization_error', 'speaker_scored', 'DER'), + ('speech_miss', 'speech_scored', 'SAD_MR'), + ('speech_falarm', 'speech_scored', 'SAD_FR'), + ('speaker_miss', 'speaker_scored', 'MI'), + ('speaker_falarm', 'speaker_scored', 'FA'), + ('speaker_error', 'speaker_scored', 'CF'), + ('correct', 'frames', 'accuracy') +] + + +def recover_prediction(y, n_speaker): + if n_speaker <= 1: + return y + elif n_speaker == 2: + com_index = torch.from_numpy( + np.array(list(combinations(np.arange(n_speaker), 2)))).to( + y.dtype) + num_coms = com_index.shape[0] + y_single = y[:, :-num_coms] + y_olp = y[:, -num_coms:] + olp_map_index = torch.where(y_olp > 0.5) + olp_map_index = torch.stack(olp_map_index, dim=1) + com_map_index = com_index[olp_map_index[:, -1]] + speaker_map_index = torch.from_numpy(np.array(com_map_index)).view(-1).to(torch.int64) + frame_map_index = olp_map_index[:, 0][:, None].repeat([1, 2]).view(-1).to( + torch.int64) + y_single[frame_map_index] = 0 + y_single[frame_map_index, speaker_map_index] = 1 + return y_single + else: + olp2_com_index = torch.from_numpy(np.array(list(combinations(np.arange(n_speaker), 2)))).to(y.dtype) + olp2_num_coms = olp2_com_index.shape[0] + olp3_com_index = torch.from_numpy(np.array(list(combinations(np.arange(n_speaker), 3)))).to(y.dtype) + olp3_num_coms = olp3_com_index.shape[0] + y_single = y[:, :n_speaker] + y_olp2 = y[:, n_speaker:n_speaker + olp2_num_coms] + y_olp3 = y[:, -olp3_num_coms:] + + olp3_map_index = torch.where(y_olp3 > 0.5) + olp3_map_index = torch.stack(olp3_map_index, dim=1) + olp3_com_map_index = olp3_com_index[olp3_map_index[:, -1]] + olp3_speaker_map_index = torch.from_numpy(np.array(olp3_com_map_index)).view(-1).to(torch.int64) + olp3_frame_map_index = olp3_map_index[:, 0][:, None].repeat([1, 3]).view(-1).to(torch.int64) + y_single[olp3_frame_map_index] = 0 + y_single[olp3_frame_map_index, olp3_speaker_map_index] = 1 + y_olp2[olp3_frame_map_index] = 0 + + olp2_map_index = torch.where(y_olp2 > 0.5) + olp2_map_index = torch.stack(olp2_map_index, dim=1) + olp2_com_map_index = olp2_com_index[olp2_map_index[:, -1]] + olp2_speaker_map_index = torch.from_numpy(np.array(olp2_com_map_index)).view(-1).to(torch.int64) + olp2_frame_map_index = olp2_map_index[:, 0][:, None].repeat([1, 2]).view(-1).to(torch.int64) + y_single[olp2_frame_map_index] = 0 + y_single[olp2_frame_map_index, olp2_speaker_map_index] = 1 + return y_single + + +class PowerReporter(): + def __init__(self, valid_data_loader, mapping_dict, max_n_speaker): + valid_data_loader_cp = copy.deepcopy(valid_data_loader) + self.valid_data_loader = valid_data_loader_cp + del valid_data_loader + self.mapping_dict = mapping_dict + self.max_n_speaker = max_n_speaker + + def report(self, model, eidx, device): + self.report_val(model, eidx, device) + + def report_val(self, model, eidx, device): + model.eval() + ud_valid_start = time.time() + valid_res, valid_loss, stats_keys, vad_valid_accuracy = self.report_core(model, self.valid_data_loader, device) + + # Epoch Display + valid_der = valid_res['diarization_error'] / valid_res['speaker_scored'] + valid_accuracy = valid_res['correct'].to(torch.float32) / valid_res['frames'] * 100 + vad_valid_accuracy = vad_valid_accuracy * 100 + print('Epoch ', eidx + 1, 'Valid Loss ', valid_loss, 'Valid_DER %.5f' % valid_der, + 'Valid_Accuracy %.5f%% ' % valid_accuracy, 'VAD_Valid_Accuracy %.5f%% ' % vad_valid_accuracy) + ud_valid = (time.time() - ud_valid_start) / 60. + print('Valid cost time ... ', ud_valid) + + def inv_mapping_func(self, label, mapping_dict): + if not isinstance(label, int): + label = int(label) + if label in mapping_dict['label2dec'].keys(): + num = mapping_dict['label2dec'][label] + else: + num = -1 + return num + + def report_core(self, model, data_loader, device): + res = {} + for item in metrics: + res[item[0]] = 0. + res[item[1]] = 0. + with torch.no_grad(): + loss_s = 0. + uidx = 0 + for xs, ts, orders in data_loader: + xs = [x.to(device) for x in xs] + ts = [t.to(device) for t in ts] + orders = [o.to(device) for o in orders] + loss, pit_loss, mpit_loss, att_loss, ys, logits, labels, attractors = model(xs, ts, orders) + loss_s += loss.item() + uidx += 1 + + for logit, t, att in zip(logits, labels, attractors): + pred = torch.argmax(torch.softmax(logit, dim=-1), dim=-1) # (T, ) + oov_index = torch.where(pred == self.mapping_dict['oov'])[0] + for i in oov_index: + if i > 0: + pred[i] = pred[i - 1] + else: + pred[i] = 0 + pred = [self.inv_mapping_func(i, self.mapping_dict) for i in pred] + decisions = [bin(num)[2:].zfill(self.max_n_speaker)[::-1] for num in pred] + decisions = torch.from_numpy( + np.stack([np.array([int(i) for i in dec]) for dec in decisions], axis=0)).to(att.device).to( + torch.float32) + decisions = decisions[:, :att.shape[0]] + + stats = self.calc_diarization_error(decisions, t) + res['speaker_scored'] += stats['speaker_scored'] + res['speech_scored'] += stats['speech_scored'] + res['frames'] += stats['frames'] + for item in metrics: + res[item[0]] += stats[item[0]] + loss_s /= uidx + vad_acc = 0 + + return res, loss_s, stats.keys(), vad_acc + + def calc_diarization_error(self, decisions, label, label_delay=0): + label = label[:len(label) - label_delay, ...] + n_ref = torch.sum(label, dim=-1) + n_sys = torch.sum(decisions, dim=-1) + res = {} + res['speech_scored'] = torch.sum(n_ref > 0) + res['speech_miss'] = torch.sum((n_ref > 0) & (n_sys == 0)) + res['speech_falarm'] = torch.sum((n_ref == 0) & (n_sys > 0)) + res['speaker_scored'] = torch.sum(n_ref) + res['speaker_miss'] = torch.sum(torch.max(n_ref - n_sys, torch.zeros_like(n_ref))) + res['speaker_falarm'] = torch.sum(torch.max(n_sys - n_ref, torch.zeros_like(n_ref))) + n_map = torch.sum(((label == 1) & (decisions == 1)), dim=-1).to(torch.float32) + res['speaker_error'] = torch.sum(torch.min(n_ref, n_sys) - n_map) + res['correct'] = torch.sum(label == decisions) / label.shape[1] + res['diarization_error'] = ( + res['speaker_miss'] + res['speaker_falarm'] + res['speaker_error']) + res['frames'] = len(label) + return res diff --git a/funasr/modules/embedding.py b/funasr/modules/embedding.py index b61a61a88..e4f9bff03 100644 --- a/funasr/modules/embedding.py +++ b/funasr/modules/embedding.py @@ -405,4 +405,13 @@ class SinusoidalPositionEncoder(torch.nn.Module): positions = torch.arange(1, timesteps+1)[None, :] position_encoding = self.encode(positions, input_dim, x.dtype).to(x.device) - return x + position_encoding \ No newline at end of file + return x + position_encoding + + def forward_chunk(self, x, cache=None): + start_idx = 0 + batch_size, timesteps, input_dim = x.size() + if cache is not None: + start_idx = cache["start_idx"] + positions = torch.arange(1, timesteps+start_idx+1)[None, :] + position_encoding = self.encode(positions, input_dim, x.dtype).to(x.device) + return x + position_encoding[:, start_idx: start_idx + timesteps] diff --git a/funasr/runtime/grpc/CMakeLists.txt b/funasr/runtime/grpc/CMakeLists.txt new file mode 100644 index 000000000..56e307482 --- /dev/null +++ b/funasr/runtime/grpc/CMakeLists.txt @@ -0,0 +1,83 @@ +# Copyright 2018 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# cmake build file for C++ paraformer example. +# Assumes protobuf and gRPC have been installed using cmake. +# See cmake_externalproject/CMakeLists.txt for all-in-one cmake build +# that automatically builds all the dependencies before building paraformer. + +cmake_minimum_required(VERSION 3.10) + +project(ASR C CXX) + +include(common.cmake) + +# Proto file +get_filename_component(rg_proto "../python/grpc/proto/paraformer.proto" ABSOLUTE) +get_filename_component(rg_proto_path "${rg_proto}" PATH) + +# Generated sources +set(rg_proto_srcs "${CMAKE_CURRENT_BINARY_DIR}/paraformer.pb.cc") +set(rg_proto_hdrs "${CMAKE_CURRENT_BINARY_DIR}/paraformer.pb.h") +set(rg_grpc_srcs "${CMAKE_CURRENT_BINARY_DIR}/paraformer.grpc.pb.cc") +set(rg_grpc_hdrs "${CMAKE_CURRENT_BINARY_DIR}/paraformer.grpc.pb.h") +add_custom_command( + OUTPUT "${rg_proto_srcs}" "${rg_proto_hdrs}" "${rg_grpc_srcs}" "${rg_grpc_hdrs}" + COMMAND ${_PROTOBUF_PROTOC} + ARGS --grpc_out "${CMAKE_CURRENT_BINARY_DIR}" + --cpp_out "${CMAKE_CURRENT_BINARY_DIR}" + -I "${rg_proto_path}" + --plugin=protoc-gen-grpc="${_GRPC_CPP_PLUGIN_EXECUTABLE}" + "${rg_proto}" + DEPENDS "${rg_proto}") + + +# Include generated *.pb.h files +include_directories("${CMAKE_CURRENT_BINARY_DIR}") + +include_directories(../onnxruntime/include/) +link_directories(../onnxruntime/build/src/) +link_directories(../onnxruntime/build/third_party/webrtc/) + +link_directories(${ONNXRUNTIME_DIR}/lib) +add_subdirectory("../onnxruntime/src" onnx_src) + +# rg_grpc_proto +add_library(rg_grpc_proto + ${rg_grpc_srcs} + ${rg_grpc_hdrs} + ${rg_proto_srcs} + ${rg_proto_hdrs}) + + + +target_link_libraries(rg_grpc_proto + ${_REFLECTION} + ${_GRPC_GRPCPP} + ${_PROTOBUF_LIBPROTOBUF}) + +# Targets paraformer_(server) +foreach(_target + paraformer_server) + add_executable(${_target} + "${_target}.cc") + target_link_libraries(${_target} + rg_grpc_proto + rapidasr + webrtcvad + ${EXTRA_LIBS} + ${_REFLECTION} + ${_GRPC_GRPCPP} + ${_PROTOBUF_LIBPROTOBUF}) +endforeach() diff --git a/funasr/runtime/grpc/Readme.md b/funasr/runtime/grpc/Readme.md new file mode 100644 index 000000000..80e55aab2 --- /dev/null +++ b/funasr/runtime/grpc/Readme.md @@ -0,0 +1,57 @@ +## paraformer grpc onnx server in c++ + + +#### Step 1. Build ../onnxruntime as it's document +``` +#put onnx-lib & onnx-asr-model & vocab.txt into /path/to/asrmodel(eg: /data/asrmodel) +ls /data/asrmodel/ +onnxruntime-linux-x64-1.14.0 speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch + +file /data/asrmodel/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/vocab.txt +UTF-8 Unicode text +``` + +#### Step 2. Compile and install grpc v1.52.0 in case of grpc bugs +``` +export GRPC_INSTALL_DIR=/data/soft/grpc +export PKG_CONFIG_PATH=$GRPC_INSTALL_DIR/lib/pkgconfig + +git clone -b v1.52.0 --depth=1 https://github.com/grpc/grpc.git +cd grpc +git submodule update --init --recursive + +mkdir -p cmake/build +pushd cmake/build +cmake -DgRPC_INSTALL=ON \ + -DgRPC_BUILD_TESTS=OFF \ + -DCMAKE_INSTALL_PREFIX=$GRPC_INSTALL_DIR \ + ../.. +make +make install +popd + +echo "export GRPC_INSTALL_DIR=/data/soft/grpc" >> ~/.bashrc +echo "export PKG_CONFIG_PATH=\$GRPC_INSTALL_DIR/lib/pkgconfig" >> ~/.bashrc +echo "export PATH=\$GRPC_INSTALL_DIR/bin/:\$PKG_CONFIG_PATH:\$PATH" >> ~/.bashrc +source ~/.bashrc +``` + +#### Step 3. Compile and start grpc onnx paraformer server +``` +# set -DONNXRUNTIME_DIR=/path/to/asrmodel/onnxruntime-linux-x64-1.14.0 +./rebuild.sh +``` + +#### Step 4. Start grpc paraformer server +``` +Usage: ./cmake/build/paraformer_server port thread_num /path/to/model_file +./cmake/build/paraformer_server 10108 4 /data/asrmodel/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch +``` + + + +#### Step 5. Start grpc python paraformer client on PC with MIC +``` +cd ../python/grpc +python grpc_main_client_mic.py --host $server_ip --port 10108 +``` diff --git a/funasr/runtime/grpc/common.cmake b/funasr/runtime/grpc/common.cmake new file mode 100644 index 000000000..1326a5be3 --- /dev/null +++ b/funasr/runtime/grpc/common.cmake @@ -0,0 +1,125 @@ +# Copyright 2018 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# cmake build file for C++ route_guide example. +# Assumes protobuf and gRPC have been installed using cmake. +# See cmake_externalproject/CMakeLists.txt for all-in-one cmake build +# that automatically builds all the dependencies before building route_guide. + +cmake_minimum_required(VERSION 3.5.1) + +if (NOT DEFINED CMAKE_CXX_STANDARD) + set (CMAKE_CXX_STANDARD 14) +endif() + +if(MSVC) + add_definitions(-D_WIN32_WINNT=0x600) +endif() + +find_package(Threads REQUIRED) + +if(GRPC_AS_SUBMODULE) + # One way to build a projects that uses gRPC is to just include the + # entire gRPC project tree via "add_subdirectory". + # This approach is very simple to use, but the are some potential + # disadvantages: + # * it includes gRPC's CMakeLists.txt directly into your build script + # without and that can make gRPC's internal setting interfere with your + # own build. + # * depending on what's installed on your system, the contents of submodules + # in gRPC's third_party/* might need to be available (and there might be + # additional prerequisites required to build them). Consider using + # the gRPC_*_PROVIDER options to fine-tune the expected behavior. + # + # A more robust approach to add dependency on gRPC is using + # cmake's ExternalProject_Add (see cmake_externalproject/CMakeLists.txt). + + # Include the gRPC's cmake build (normally grpc source code would live + # in a git submodule called "third_party/grpc", but this example lives in + # the same repository as gRPC sources, so we just look a few directories up) + add_subdirectory(../../.. ${CMAKE_CURRENT_BINARY_DIR}/grpc EXCLUDE_FROM_ALL) + message(STATUS "Using gRPC via add_subdirectory.") + + # After using add_subdirectory, we can now use the grpc targets directly from + # this build. + set(_PROTOBUF_LIBPROTOBUF libprotobuf) + set(_REFLECTION grpc++_reflection) + if(CMAKE_CROSSCOMPILING) + find_program(_PROTOBUF_PROTOC protoc) + else() + set(_PROTOBUF_PROTOC $) + endif() + set(_GRPC_GRPCPP grpc++) + if(CMAKE_CROSSCOMPILING) + find_program(_GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin) + else() + set(_GRPC_CPP_PLUGIN_EXECUTABLE $) + endif() +elseif(GRPC_FETCHCONTENT) + # Another way is to use CMake's FetchContent module to clone gRPC at + # configure time. This makes gRPC's source code available to your project, + # similar to a git submodule. + message(STATUS "Using gRPC via add_subdirectory (FetchContent).") + include(FetchContent) + FetchContent_Declare( + grpc + GIT_REPOSITORY https://github.com/grpc/grpc.git + # when using gRPC, you will actually set this to an existing tag, such as + # v1.25.0, v1.26.0 etc.. + # For the purpose of testing, we override the tag used to the commit + # that's currently under test. + GIT_TAG vGRPC_TAG_VERSION_OF_YOUR_CHOICE) + FetchContent_MakeAvailable(grpc) + + # Since FetchContent uses add_subdirectory under the hood, we can use + # the grpc targets directly from this build. + set(_PROTOBUF_LIBPROTOBUF libprotobuf) + set(_REFLECTION grpc++_reflection) + set(_PROTOBUF_PROTOC $) + set(_GRPC_GRPCPP grpc++) + if(CMAKE_CROSSCOMPILING) + find_program(_GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin) + else() + set(_GRPC_CPP_PLUGIN_EXECUTABLE $) + endif() +else() + # This branch assumes that gRPC and all its dependencies are already installed + # on this system, so they can be located by find_package(). + + # Find Protobuf installation + # Looks for protobuf-config.cmake file installed by Protobuf's cmake installation. + set(protobuf_MODULE_COMPATIBLE TRUE) + find_package(Protobuf CONFIG REQUIRED) + message(STATUS "Using protobuf ${Protobuf_VERSION}") + + set(_PROTOBUF_LIBPROTOBUF protobuf::libprotobuf) + set(_REFLECTION gRPC::grpc++_reflection) + if(CMAKE_CROSSCOMPILING) + find_program(_PROTOBUF_PROTOC protoc) + else() + set(_PROTOBUF_PROTOC $) + endif() + + # Find gRPC installation + # Looks for gRPCConfig.cmake file installed by gRPC's cmake installation. + find_package(gRPC CONFIG REQUIRED) + message(STATUS "Using gRPC ${gRPC_VERSION}") + + set(_GRPC_GRPCPP gRPC::grpc++) + if(CMAKE_CROSSCOMPILING) + find_program(_GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin) + else() + set(_GRPC_CPP_PLUGIN_EXECUTABLE $) + endif() +endif() diff --git a/funasr/runtime/grpc/paraformer_server.cc b/funasr/runtime/grpc/paraformer_server.cc new file mode 100644 index 000000000..e5814a56c --- /dev/null +++ b/funasr/runtime/grpc/paraformer_server.cc @@ -0,0 +1,195 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "paraformer.grpc.pb.h" +#include "paraformer_server.h" + + +using grpc::Server; +using grpc::ServerBuilder; +using grpc::ServerContext; +using grpc::ServerReader; +using grpc::ServerReaderWriter; +using grpc::ServerWriter; +using grpc::Status; + + +using paraformer::Request; +using paraformer::Response; +using paraformer::ASR; + +ASRServicer::ASRServicer(const char* model_path, int thread_num) { + AsrHanlde=RapidAsrInit(model_path, thread_num); + std::cout << "ASRServicer init" << std::endl; + init_flag = 0; +} + +void ASRServicer::clear_states(const std::string& user) { + clear_buffers(user); + clear_transcriptions(user); +} + +void ASRServicer::clear_buffers(const std::string& user) { + if (client_buffers.count(user)) { + client_buffers.erase(user); + } +} + +void ASRServicer::clear_transcriptions(const std::string& user) { + if (client_transcription.count(user)) { + client_transcription.erase(user); + } +} + +void ASRServicer::disconnect(const std::string& user) { + clear_states(user); + std::cout << "Disconnecting user: " << user << std::endl; +} + +grpc::Status ASRServicer::Recognize( + grpc::ServerContext* context, + grpc::ServerReaderWriter* stream) { + + Request req; + while (stream->Read(&req)) { + if (req.isend()) { + std::cout << "asr end" << std::endl; + disconnect(req.user()); + Response res; + res.set_sentence( + R"({"success": true, "detail": "asr end"})" + ); + res.set_user(req.user()); + res.set_action("terminate"); + res.set_language(req.language()); + stream->Write(res); + } else if (req.speaking()) { + if (req.audio_data().size() > 0) { + auto& buf = client_buffers[req.user()]; + buf.insert(buf.end(), req.audio_data().begin(), req.audio_data().end()); + } + Response res; + res.set_sentence( + R"({"success": true, "detail": "speaking"})" + ); + res.set_user(req.user()); + res.set_action("speaking"); + res.set_language(req.language()); + stream->Write(res); + } else if (!req.speaking()) { + if (client_buffers.count(req.user()) == 0) { + Response res; + res.set_sentence( + R"({"success": true, "detail": "waiting_for_voice"})" + ); + res.set_user(req.user()); + res.set_action("waiting"); + res.set_language(req.language()); + stream->Write(res); + }else { + auto begin_time = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); + std::string tmp_data = this->client_buffers[req.user()]; + this->clear_states(req.user()); + + Response res; + res.set_sentence( + R"({"success": true, "detail": "decoding data: " + std::to_string(tmp_data.length()) + " bytes"})" + ); + int data_len_int = tmp_data.length(); + std::string data_len = std::to_string(data_len_int); + std::stringstream ss; + ss << R"({"success": true, "detail": "decoding data: )" << data_len << R"( bytes")" << R"("})"; + std::string result = ss.str(); + res.set_sentence(result); + res.set_user(req.user()); + res.set_action("decoding"); + res.set_language(req.language()); + stream->Write(res); + if (tmp_data.length() < 800) { //min input_len for asr model + auto end_time = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); + std::string delay_str = std::to_string(end_time - begin_time); + std::cout << "user: " << req.user() << " , delay(ms): " << delay_str << ", error: data_is_not_long_enough" << std::endl; + Response res; + std::stringstream ss; + std::string asr_result = ""; + ss << R"({"success": true, "detail": "finish_sentence","server_delay_ms":)" << delay_str << R"(,"text":")" << asr_result << R"("})"; + std::string result = ss.str(); + res.set_sentence(result); + res.set_user(req.user()); + res.set_action("finish"); + res.set_language(req.language()); + + + + stream->Write(res); + } + else { + RPASR_RESULT Result= RapidAsrRecogPCMBuffer(AsrHanlde, tmp_data.c_str(), data_len_int, RASR_NONE, NULL); + std::string asr_result = ((RPASR_RECOG_RESULT*)Result)->msg; + + auto end_time = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); + std::string delay_str = std::to_string(end_time - begin_time); + + std::cout << "user: " << req.user() << " , delay(ms): " << delay_str << ", text: " << asr_result << std::endl; + Response res; + std::stringstream ss; + ss << R"({"success": true, "detail": "finish_sentence","server_delay_ms":)" << delay_str << R"(,"text":")" << asr_result << R"("})"; + std::string result = ss.str(); + res.set_sentence(result); + res.set_user(req.user()); + res.set_action("finish"); + res.set_language(req.language()); + + + stream->Write(res); + } + } + }else { + Response res; + res.set_sentence( + R"({"success": false, "detail": "error, no condition matched! Unknown reason."})" + ); + res.set_user(req.user()); + res.set_action("terminate"); + res.set_language(req.language()); + stream->Write(res); + } + } + return Status::OK; +} + + +void RunServer(const std::string& port, int thread_num, const char* model_path) { + std::string server_address; + server_address = "0.0.0.0:" + port; + ASRServicer service(model_path, thread_num); + + ServerBuilder builder; + builder.AddListeningPort(server_address, grpc::InsecureServerCredentials()); + builder.RegisterService(&service); + std::unique_ptr server(builder.BuildAndStart()); + std::cout << "Server listening on " << server_address << std::endl; + server->Wait(); +} + +int main(int argc, char* argv[]) { + if (argc < 3) + { + printf("Usage: %s port thread_num /path/to/model_file\n", argv[0]); + exit(-1); + } + + RunServer(argv[1], atoi(argv[2]), argv[3]); + return 0; +} diff --git a/funasr/runtime/grpc/paraformer_server.h b/funasr/runtime/grpc/paraformer_server.h new file mode 100644 index 000000000..f356d9413 --- /dev/null +++ b/funasr/runtime/grpc/paraformer_server.h @@ -0,0 +1,56 @@ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include "paraformer.grpc.pb.h" +#include "librapidasrapi.h" + + +using grpc::Server; +using grpc::ServerBuilder; +using grpc::ServerContext; +using grpc::ServerReader; +using grpc::ServerReaderWriter; +using grpc::ServerWriter; +using grpc::Status; + + +using paraformer::Request; +using paraformer::Response; +using paraformer::ASR; + +typedef struct +{ + std::string msg; + float snippet_time; +}RPASR_RECOG_RESULT; + + +class ASRServicer final : public ASR::Service { + private: + int init_flag; + std::unordered_map client_buffers; + std::unordered_map client_transcription; + + public: + ASRServicer(const char* model_path, int thread_num); + void clear_states(const std::string& user); + void clear_buffers(const std::string& user); + void clear_transcriptions(const std::string& user); + void disconnect(const std::string& user); + grpc::Status Recognize(grpc::ServerContext* context, grpc::ServerReaderWriter* stream); + RPASR_HANDLE AsrHanlde; + +}; diff --git a/funasr/runtime/grpc/rebuild.sh b/funasr/runtime/grpc/rebuild.sh new file mode 100644 index 000000000..9b41ed6d1 --- /dev/null +++ b/funasr/runtime/grpc/rebuild.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +rm cmake -rf +mkdir -p cmake/build + +cd cmake/build + +cmake -DCMAKE_BUILD_TYPE=release ../.. -DONNXRUNTIME_DIR=/data/asrmodel/onnxruntime-linux-x64-1.14.0 +make + + +echo "Build cmake/build/paraformer_server successfully!" diff --git a/funasr/runtime/onnxruntime/CMakeLists.txt b/funasr/runtime/onnxruntime/CMakeLists.txt new file mode 100644 index 000000000..8d502c4be --- /dev/null +++ b/funasr/runtime/onnxruntime/CMakeLists.txt @@ -0,0 +1,30 @@ +cmake_minimum_required(VERSION 3.10) + +#-DONNXRUNTIME_DIR=D:\thirdpart\onnxruntime +project(FastASR) + +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + +# for onnxruntime + +IF(WIN32) + + + if(CMAKE_CL_64) + link_directories(${ONNXRUNTIME_DIR}\\lib) + else() + add_definitions(-D_WIN_X86) + endif() +ELSE() + + +link_directories(${ONNXRUNTIME_DIR}/lib) + +endif() + +#option(FASTASR_BUILD_PYTHON_MODULE "build python module, using FastASR in Python" OFF) + +add_subdirectory("./third_party/webrtc") +add_subdirectory(src) +add_subdirectory(tester) diff --git a/funasr/runtime/onnxruntime/CMakeSettings.json b/funasr/runtime/onnxruntime/CMakeSettings.json new file mode 100644 index 000000000..2eb6c5a26 --- /dev/null +++ b/funasr/runtime/onnxruntime/CMakeSettings.json @@ -0,0 +1,44 @@ +{ + "configurations": [ + { + "name": "x64-Debug", + "generator": "Ninja", + "configurationType": "Debug", + "inheritEnvironments": [ "msvc_x64_x64" ], + "buildRoot": "${projectDir}\\out\\build\\${name}", + "installRoot": "${projectDir}\\out\\install\\${name}", + "buildCommandArgs": "", + "ctestCommandArgs": "" + }, + { + "name": "x64-Release", + "generator": "Ninja", + "configurationType": "RelWithDebInfo", + "buildRoot": "${projectDir}\\out\\build\\${name}", + "installRoot": "${projectDir}\\out\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "inheritEnvironments": [ "msvc_x64_x64" ] + }, + { + "name": "Linux-GCC-Debug", + "generator": "Unix Makefiles", + "configurationType": "Debug", + "cmakeExecutable": "cmake", + "remoteCopySourcesExclusionList": [ ".vs", ".git", "out" ], + "cmakeCommandArgs": "-DONNXRUNTIME_DIR=/data/linux/thirdpart/onnxruntime-linux-x64-1.14.1", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "inheritEnvironments": [ "linux_x64" ], + "remoteMachineName": "${defaultRemoteMachineName}", + "remoteCMakeListsRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/src", + "remoteBuildRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/out/build/${name}", + "remoteInstallRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/out/install/${name}", + "remoteCopySources": true, + "rsyncCommandArgs": "-t --delete", + "remoteCopyBuildOutput": false, + "remoteCopySourcesMethod": "rsync" + } + ] +} \ No newline at end of file diff --git a/funasr/runtime/onnxruntime/images/demo.png b/funasr/runtime/onnxruntime/images/demo.png new file mode 100644 index 000000000..03171b26b Binary files /dev/null and b/funasr/runtime/onnxruntime/images/demo.png differ diff --git a/funasr/runtime/onnxruntime/images/threadnum.png b/funasr/runtime/onnxruntime/images/threadnum.png new file mode 100644 index 000000000..dd70cc840 Binary files /dev/null and b/funasr/runtime/onnxruntime/images/threadnum.png differ diff --git a/funasr/runtime/onnxruntime/include/Audio.h b/funasr/runtime/onnxruntime/include/Audio.h new file mode 100644 index 000000000..da5e82cc7 --- /dev/null +++ b/funasr/runtime/onnxruntime/include/Audio.h @@ -0,0 +1,59 @@ + +#ifndef AUDIO_H +#define AUDIO_H + +#include +#include +#include + +using namespace std; + +class AudioFrame { + private: + int start; + int end; + int len; + + public: + AudioFrame(); + AudioFrame(int len); + + ~AudioFrame(); + int set_start(int val); + int set_end(int val, int max_len); + int get_start(); + int get_len(); + int disp(); +}; + +class Audio { + private: + float *speech_data; + int16_t *speech_buff; + int speech_len; + int speech_align_len; + int16_t sample_rate; + int offset; + float align_size; + int data_type; + queue frame_queue; + + public: + Audio(int data_type); + Audio(int data_type, int size); + ~Audio(); + void disp(); + bool loadwav(const char* filename); + bool loadwav(const char* buf, int nLen); + bool loadpcmwav(const char* buf, int nFileLen); + bool loadpcmwav(const char* filename); + int fetch_chunck(float *&dout, int len); + int fetch(float *&dout, int &len, int &flag); + void padding(); + void split(); + float get_time_len(); + + int get_queue_size() { return (int)frame_queue.size(); } +}; + +#endif diff --git a/funasr/runtime/onnxruntime/include/ComDefine.h b/funasr/runtime/onnxruntime/include/ComDefine.h new file mode 100644 index 000000000..f131e5ec3 --- /dev/null +++ b/funasr/runtime/onnxruntime/include/ComDefine.h @@ -0,0 +1,11 @@ + +#ifndef COMDEFINE_H +#define COMDEFINE_H + +#define S_BEGIN 0 +#define S_MIDDLE 1 +#define S_END 2 +#define S_ALL 3 +#define S_ERR 4 + +#endif diff --git a/funasr/runtime/onnxruntime/include/Model.h b/funasr/runtime/onnxruntime/include/Model.h new file mode 100644 index 000000000..06267cb30 --- /dev/null +++ b/funasr/runtime/onnxruntime/include/Model.h @@ -0,0 +1,17 @@ + +#ifndef MODEL_H +#define MODEL_H + +#include + +class Model { + public: + virtual ~Model(){}; + virtual void reset() = 0; + virtual std::string forward_chunk(float *din, int len, int flag) = 0; + virtual std::string forward(float *din, int len, int flag) = 0; + virtual std::string rescoring() = 0; +}; + +Model *create_model(const char *path,int nThread=0); +#endif diff --git a/funasr/runtime/onnxruntime/include/librapidasrapi.h b/funasr/runtime/onnxruntime/include/librapidasrapi.h new file mode 100644 index 000000000..a83098f93 --- /dev/null +++ b/funasr/runtime/onnxruntime/include/librapidasrapi.h @@ -0,0 +1,96 @@ +#pragma once + + +#ifdef WIN32 + + +#ifdef _RPASR_API_EXPORT + +#define _RAPIDASRAPI __declspec(dllexport) +#else +#define _RAPIDASRAPI __declspec(dllimport) +#endif + + +#else +#define _RAPIDASRAPI +#endif + + + + + +#ifndef _WIN32 + +#define RPASR_CALLBCK_PREFIX __attribute__((__stdcall__)) + +#else +#define RPASR_CALLBCK_PREFIX __stdcall +#endif + + +#ifdef __cplusplus + +extern "C" { +#endif + +typedef void* RPASR_HANDLE; + +typedef void* RPASR_RESULT; + +typedef unsigned char RPASR_BOOL; + +#define RPASR_TRUE 1 +#define RPASR_FALSE 0 +#define QM_DEFAULT_THREAD_NUM 4 + + +typedef enum +{ + RASR_NONE=-1, + RASRM_CTC_GREEDY_SEARCH=0, + RASRM_CTC_RPEFIX_BEAM_SEARCH = 1, + RASRM_ATTENSION_RESCORING = 2, + +}RPASR_MODE; + +typedef enum { + + RPASR_MODEL_PADDLE = 0, + RPASR_MODEL_PADDLE_2 = 1, + RPASR_MODEL_K2 = 2, + RPASR_MODEL_PARAFORMER = 3, + +}RPASR_MODEL_TYPE; + + +typedef void (* QM_CALLBACK)(int nCurStep, int nTotal); // nTotal: total steps; nCurStep: Current Step. + + // APIs for qmasr + +_RAPIDASRAPI RPASR_HANDLE RapidAsrInit(const char* szModelDir, int nThread); + + + +// if not give a fnCallback ,it should be NULL +_RAPIDASRAPI RPASR_RESULT RapidAsrRecogBuffer(RPASR_HANDLE handle, const char* szBuf, int nLen, RPASR_MODE Mode, QM_CALLBACK fnCallback); +_RAPIDASRAPI RPASR_RESULT RapidAsrRecogPCMBuffer(RPASR_HANDLE handle, const char* szBuf, int nLen, RPASR_MODE Mode, QM_CALLBACK fnCallback); + +_RAPIDASRAPI RPASR_RESULT RapidAsrRecogPCMFile(RPASR_HANDLE handle, const char* szFileName, RPASR_MODE Mode, QM_CALLBACK fnCallback); + +_RAPIDASRAPI RPASR_RESULT RapidAsrRecogFile(RPASR_HANDLE handle, const char* szWavfile, RPASR_MODE Mode, QM_CALLBACK fnCallback); + +_RAPIDASRAPI const char* RapidAsrGetResult(RPASR_RESULT Result,int nIndex); + +_RAPIDASRAPI const int RapidAsrGetRetNumber(RPASR_RESULT Result); +_RAPIDASRAPI void RapidAsrFreeResult(RPASR_RESULT Result); + + +_RAPIDASRAPI void RapidAsrUninit(RPASR_HANDLE Handle); + +_RAPIDASRAPI const float RapidAsrGetRetSnippetTime(RPASR_RESULT Result); + +#ifdef __cplusplus + +} +#endif \ No newline at end of file diff --git a/funasr/runtime/onnxruntime/include/webrtc_vad.h b/funasr/runtime/onnxruntime/include/webrtc_vad.h new file mode 100644 index 000000000..f5bbadf5b --- /dev/null +++ b/funasr/runtime/onnxruntime/include/webrtc_vad.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +/* + * This header file includes the VAD API calls. Specific function calls are + * given below. + */ + +#ifndef COMMON_AUDIO_VAD_INCLUDE_WEBRTC_VAD_H_ // NOLINT +#define COMMON_AUDIO_VAD_INCLUDE_WEBRTC_VAD_H_ + +#include +#include + +typedef struct WebRtcVadInst VadInst; + +#ifdef __cplusplus +extern "C" { +#endif + +// Creates an instance to the VAD structure. +VadInst* WebRtcVad_Create(void); + +// Frees the dynamic memory of a specified VAD instance. +// +// - handle [i] : Pointer to VAD instance that should be freed. +void WebRtcVad_Free(VadInst* handle); + +// Initializes a VAD instance. +// +// - handle [i/o] : Instance that should be initialized. +// +// returns : 0 - (OK), +// -1 - (null pointer or Default mode could not be set). +int WebRtcVad_Init(VadInst* handle); + +// Sets the VAD operating mode. A more aggressive (higher mode) VAD is more +// restrictive in reporting speech. Put in other words the probability of being +// speech when the VAD returns 1 is increased with increasing mode. As a +// consequence also the missed detection rate goes up. +// +// - handle [i/o] : VAD instance. +// - mode [i] : Aggressiveness mode (0, 1, 2, or 3). +// +// returns : 0 - (OK), +// -1 - (null pointer, mode could not be set or the VAD instance +// has not been initialized). +int WebRtcVad_set_mode(VadInst* handle, int mode); + +// Calculates a VAD decision for the |audio_frame|. For valid sampling rates +// frame lengths, see the description of WebRtcVad_ValidRatesAndFrameLengths(). +// +// - handle [i/o] : VAD Instance. Needs to be initialized by +// WebRtcVad_Init() before call. +// - fs [i] : Sampling frequency (Hz): 8000, 16000, or 32000 +// - audio_frame [i] : Audio frame buffer. +// - frame_length [i] : Length of audio frame buffer in number of samples. +// +// returns : 1 - (Active Voice), +// 0 - (Non-active Voice), +// -1 - (Error) +int WebRtcVad_Process(VadInst* handle, + int fs, + const int16_t* audio_frame, + size_t frame_length); + +// Checks for valid combinations of |rate| and |frame_length|. We support 10, +// 20 and 30 ms frames and the rates 8000, 16000 and 32000 Hz. +// +// - rate [i] : Sampling frequency (Hz). +// - frame_length [i] : Speech frame buffer length in number of samples. +// +// returns : 0 - (valid combination), -1 - (invalid combination) +int WebRtcVad_ValidRateAndFrameLength(int rate, size_t frame_length); + +#ifdef __cplusplus +} +#endif + +#endif // COMMON_AUDIO_VAD_INCLUDE_WEBRTC_VAD_H_ // NOLINT diff --git a/funasr/runtime/onnxruntime/include/win_func.h b/funasr/runtime/onnxruntime/include/win_func.h new file mode 100644 index 000000000..1baaae53f --- /dev/null +++ b/funasr/runtime/onnxruntime/include/win_func.h @@ -0,0 +1,28 @@ +#include +#ifdef WIN32 +#include +#else +#include +#endif +#ifdef WIN32 +int gettimeofday(struct timeval* tp, void* tzp) +{ + time_t clock; + struct tm tm; + SYSTEMTIME wtm; + + GetLocalTime(&wtm); + tm.tm_year = wtm.wYear - 1900; + tm.tm_mon = wtm.wMonth - 1; + tm.tm_mday = wtm.wDay; + tm.tm_hour = wtm.wHour; + tm.tm_min = wtm.wMinute; + tm.tm_sec = wtm.wSecond; + tm.tm_isdst = -1; + + clock = mktime(&tm); + tp->tv_sec = clock; + tp->tv_usec = wtm.wMilliseconds * 1000; + return (0); +} +#endif \ No newline at end of file diff --git a/funasr/runtime/onnxruntime/models/readme.md b/funasr/runtime/onnxruntime/models/readme.md new file mode 100644 index 000000000..732ef0124 --- /dev/null +++ b/funasr/runtime/onnxruntime/models/readme.md @@ -0,0 +1 @@ +Place model.onnx here! diff --git a/funasr/runtime/onnxruntime/models/vocab.txt b/funasr/runtime/onnxruntime/models/vocab.txt new file mode 100644 index 000000000..61cb04ea8 --- /dev/null +++ b/funasr/runtime/onnxruntime/models/vocab.txt @@ -0,0 +1,8404 @@ + + + +and@@ +筑 +陨 +眺 +塘 +檩 +衷 +氧 +孔 +阖 +邠 +坎 +喵 +曰 +鼠 +隐 +腊 +族 +矧 +敉 +俜 +似 +怫 +塔 +price +春 +罍 +娅 +棉 +弃 +茱 +应 +汈 +擦 +贺 +鹇 +these +迅 +诬 +do@@ +盍 +秕 +啃 +颟 +辑 +彘 +ps +斜 +瞭 +铟 +漭 +蹇 +旆 +窳 +臊 +览 +嘿 +淖 +尴 +袆 +斧 +筹 +媵 +挞 +臧 +齐 +璨 +笥 +滂 +即 +愔 +思 +gr@@ +幅 +祛 +箬 +礁 +茅 +北 +澡 +俭 +蘅 +ing +肺 +肢 +巢 +九 +蠓 +路 +藻 +沱 +ness +璐 +积 +寞 +栳 +舆 +医 +眷 +岳 +勘 +璃 +黔 +犇 +哎 +罡 +k +丝 +de +跣 +梦 +需 +毅 +峡 +竞 +砦 +研 +眙 +滋 +鹳 +肝 +阼 +per +忱 +乏 +废 +邦 +輶 +驯 +夫 +寳 +忪 +崑 +睾 +逗 +峰 +越 +狗 +蟒 +笆 +适 +洇 +缶 +ore +辎 +粤 +蹴 +黄 +浞 +comp@@ +犀 +藏 +本 +嗖 +黻 +這 +绰 +鉏 +麼 +喆 +袪 +刚 +侦 +ic@@ +骧 +瓫 +柤 +桃 +鲴 +褙 +韵 +妓 +甍 +to@@ +轱 +塑 +坯 +貌 +n@@ +蕞 +疡 +伏 +酉 +暇 +霖 +了 +萸 +嘶 +nu@@ +挼 +by +聩 +袓 +嶓 +桎 +抖 +攥 +鞬 +毳 +旗 +庸 +呋 +诲 +tting +狭 +魄 +伎 +喋 +樱 +翎 +怯 +场 +睽 +盒 +times +鲳 +爆 +绵 +皋 +尢 +嘎 +渝 +迂 +嘁 +袷 +始 +奚 +台 +禄 +挢 +座 +绀 +漱 +龃 +tu@@ +榫 +诛 +minu@@ +萼 +裛 +玠 +谵 +亳 +副 +any@@ +诊 +唑 +頫 +斿 +赁 +骇 +训 +母 +床 +微 +椰 +迢 +埃 +辏 +汩 +叟 +辔 +隙 +遵 +pp@@ +翕 +佬 +栖 +踉 +皕 +苏 +痂 +奋 +阄 +悌 +点 +碡 +茎 +睫 +闫 +few +籁 +孰 +拥 +for +曾 +疲 +辞 +赖 +姆 +与 +诰 +怨 +沙 +with@@ +睱 +谓 +晰 +嗌 +id +aga@@ +実 +魏 +鲟 +寅 +滗 +珲 +腑 +冠 +夺 +娶 +宇 +侩 +筘 +an +磺 +邛 +着 +踵 +ite +狝 +ele@@ +蓼 +猿 +豆 +蔷 +沽 +去 +铥 +癀 +站 +甪 +璧 +范 +哓 +菏 +龠 +岷 +嫉 +拧 +札 +戒 +琏 +绪 +澌 +楠 +莱 +cer@@ +here +别 +帻 +嗉 +假 +拽 +髭 +穰 +勋 +栓 +塬 +ou@@ +橫 +刻 +侣 +鎉 +bre@@ +趸 +稳 +岌 +拎 +落 +岙 +氨 +桴 +鬶 +clu@@ +蚣 +肌 +讹 +骼 +忧 +雹 +0@@ +算 +腔 +璇 +酣 +锭 +蟾 +逦 +椟 +频 +ts +矫 +拨 +珅 +侨 +蚨 +皯 +翛 +儋 +恳 +瀍 +敌 +砬 +奁 +耵 +烂 +绿 +缆 +辣 +time +蔗 +too +圾 +骞 +慥 +啶 +帔 +楢 +bi@@ +蚤 +浛 +ine +綦 +old +肩 +擎 +ling +瘆 +娲 +prob@@ +暑 +鲨 +焚 +剽 +玚 +乔 +纪 +bo@@ +熏 +毗 +鳙 +鞥 +絜 +糠 +菔 +廛 +谪 +冬 +遐 +衽 +ich +柿 +峭 +渴 +亓 +荠 +蝠 +扆 +鄞 +诎 +尙 +摸 +牙 +薤 +da@@ +w +呜 +陂 +磻 +匹 +while +迁 +良 +郤 +ct@@ +蚕 +浥 +鲋 +腱 +pres@@ +氕 +颉 +夥 +ter@@ +左 +侉 +妍 +嚒 +殖 +私 +bas@@ +锱 +篪 +吻 +鄅 +鳗 +疳 +cor@@ +毛 +歼 +邵 +圪 +inn +舛 +埗 +貉 +帐 +妮 +ged +窒 +put +诉 +堌 +气 +國 +摩 +沫 +谁 +转 +语 +琵 +羊 +檠 +慎 +踮 +啾 +瞻 +山 +播 +筌 +财 +飚 +苟 +扣 +mis@@ +桌 +侑 +jo@@ +ke@@ +冶 +滔 +蠹 +呓 +捷 +证 +崞 +阵 +掐 +劳 +皆 +巧 +肏 +肆 +葆 +檄 +画 +狨 +谧 +傑 +诱 +纭 +荥 +厥 +bri@@ +绁 +睇 +布 +江 +噎 +灞 +鄏 +煊 +蒹 +厮 +馓 +狴 +碍 +穷 +lar@@ +食 +迩 +meeting +tter +趣 +辜 +椁 +汽 +燠 +ate +礴 +骈 +will +not +煽 +嗳 +秆 +勤 +陆 +键 +墎 +官 +蘧 +酤 +唐 +颓 +仝 +iting +田 +楫 +瑁 +鄢 +our +诘 +venue +霜 +镏 +痫 +娟 +婢 +埋 +汕 +铋 +徭 +隰 +猊 +卞 +慑 +said +裘 +bus@@ +召 +粱 +返 +缨 +纻 +磋 +炴 +凊 +曝 +兀 +洼 +杓 +榆 +hotels +睹 +糯 +窘 +葩 +帮 +荷 +塌 +矍 +圯 +er@@ +蚪 +篼 +咳 +吸 +喃 +岩 +嚟 +谱 +崆 +蟭 +wal@@ +姗 +谛 +东 +菱 +ction +肫 +祥 +述 +璋 +仙 +唇 +硕 +嘉 +醒 +兔 +恒 +银 +収 +cre@@ +弭 +曌 +螯 +苡 +疾 +鸱 +权 +搔 +途 +茂 +皑 +补 +肃 +ns +market +讠 +阈 +机 +苒 +髙 +is@@ +幢 +郐 +萎 +帛 +烖 +襟 +崟 +溶 +螺 +铲 +仉 +舌 +敖 +倍 +锏 +鸦 +夌 +埌 +腰 +雠 +ol@@ +涙 +翳 +夹 +疏 +el +驭 +鹯 +瑜 +薛 +奇 +娴 +靳 +镥 +伍 +暨 +what +萧 +皴 +烦 +敷 +样 +ri@@ +睆 +伦 +後 +祺 +贾 +汹 +箸 +掂 +械 +ob@@ +赜 +黎 +潵 +鲽 +牒 +罐 +inter@@ +冰 +成 +薳 +if +堡 +搜 +漪 +赕 +症 +参 +鲫 +克 +浴 +薹 +梫 +调 +劢 +茹 +飐 +r +her +鲊 +妪 +惟 +榜 +谒 +梃 +twenty +ni@@ +猥 +兴 +氓 +肘 +饕 +陵 +within +轲 +cted +単 +嚗 +唼 +inte@@ +钋 +抒 +郓 +牖 +蔻 +邂 +懦 +邻 +茸 +辈 +种 +黹 +hard +悦 +综 +ved +oo@@ +used +溱 +藁 +士 +猝 +芹 +char@@ +we +呒 +ss@@ +岐 +桖 +迟 +荞 +哏 +仵 +抟 +淇 +il +电 +褀 +果 +bir@@ +ges +暻 +椊 +吴 +sal@@ +獐 +煲 +箥 +爰 +呣 +邶 +尻 +水 +sh@@ +fore +mat@@ +浅 +枘 +稷 +艨 +唧 +can@@ +eng +know +桠 +亵 +tou@@ +伥 +虏 +綮 +sha@@ +腌 +蔓 +莶 +戬 +鋆 +酥 +璜 +阐 +贶 +远 +验 +dre@@ +赎 +惭 +裴 +晌 +铡 +愆 +隧 +祐 +貔 +片 +al +抾 +柰 +探 +喈 +蟮 +潎 +批 +胴 +郁 +蓿 +稿 +傲 +垒 +甙 +靼 +chic@@ +效 +栗 +齁 +仲 +担 +har@@ +仟 +砂 +i +舰 +吝 +慆 +芸 +why +tic +哥 +佩 +铀 +妊 +x +刍 +殄 +躬 +莙 +客 +拚 +葬 +哼 +婵 +ance +棺 +没 +崎 +曛 +宛 +斌 +掠 +醇 +庾 +黥 +乗 +旉 +铰 +寨 +钨 +沥 +gh@@ +吇 +嬖 +厨 +箔 +ah +譞 +鲖 +蒗 +銶 +角 +脏 +夬 +who +毂 +赓 +嘢 +蹶 +駃 +avenue +呃 +that's +訾 +蒜 +就 +抿 +霫 +que@@ +牁 +叻 +绌 +捣 +埭 +蛩 +迤 +ir +最 +不 +鹚 +钧 +晃 +钍 +岍 +烯 +授 +笨 +馔 +甸 +啰 +赌 +蠼 +荆 +濉 +摹 +剔 +浪 +瓦 +涤 +阬 +eng@@ +墨 +鲢 +老 +拮 +轿 +弈 +秸 +ken +省 +穹 +跨 +芤 +剰 +湍 +吥 +喧 +借 +伯 +咋 +噢 +剩 +略 +图 +毕 +爻 +箭 +ans@@ +no +缣 +fic@@ +必 +礻 +视 +侔 +乸 +缎 +比 +殉 +禅 +蹈 +茶 +沔 +腹 +更 +倢 +骑 +俦 +一 +巉 +糌 +there +笾 +泺 +虫 +随 +室 +谙 +淞 +even +嘌 +掉 +进 +栈 +隋 +钳 +饲 +裾 +搞 +朽 +嚏 +垱 +倘 +sy@@ +蒂 +訚 +火 +葱 +踹 +only +den@@ +胰 +曦 +汨 +奴 +院 +晶 +臇 +赭 +蚵 +便 +藜 +鍪 +穆 +尿 +find +偾 +项 +嬅 +济 +area +皿 +蹽 +af@@ +曈 +ger +袭 +温 +包 +惎 +枝 +槁 +跑 +汇 +嫦 +崒 +颇 +丐 +丛 +哠 +鲲 +佯 +疱 +來 +彝 +件 +鸫 +张 +缋 +檎 +港 +尸 +comm@@ +瘘 +囍 +锅 +惫 +衔 +蔚 +龚 +酱 +ina +尚 +孪 +蔵 +帧 +弯 +迄 +訇 +恕 +紡 +吱 +觐 +印 +need +叭 +茫 +汶 +邢 +磅 +焜 +蜣 +米 +俎 +ath +蛔 +组 +壹 +诈 +ing@@ +希 +茨 +砧 +has +蝶 +矛 +拖 +乍 +浇 +another +输 +朗 +殡 +壶 +灿 +礌 +钡 +瓤 +序 +误 +毖 +静 +鸾 +墚 +璟 +咱 +惘 +化 +腾 +苍 +苼 +七 +芾 +囝 +淄 +馆 +榉 +荸 +摧 +醋 +缦 +帘 +蛋 +曙 +萩 +莉 +犸 +拜 +特 +蕊 +并 +冼 +埝 +茴 +佶 +噶 +ked +port +柠 +吶 +竿 +鞧 +糙 +栻 +褂 +杉 +陛 +shi@@ +朋 +升 +钛 +拭 +walk +钱 +岸 +衲 +若 +燕 +墩 +戛 +ations +诳 +冨 +强 +掌 +腺 +淤 +鼍 +妥 +亥 +俵 +鹩 +占 +佤 +棋 +does +tes +拒 +劼 +绩 +ren@@ +货 +g@@ +深 +钯 +棬 +墟 +疼 +骊 +摅 +祧 +兊 +坠 +int +use +泞 +赦 +甾 +葺 +辘 +炆 +旭 +鸯 +茆 +融 +艄 +晖 +钺 +勉 +嘘 +龛 +蕙 +渀 +钞 +写 +弋 +颦 +灌 +埚 +鲷 +亡 +矩 +轰 +a +单 +觚 +呯 +祏 +rec@@ +逢 +憧 +蒽 +內 +乡 +鸠 +卜 +庄 +仰 +how +铓 +踝 +隆 +避 +豌 +low@@ +ak +劣 +哺 +头 +proble@@ +es +说 +哇 +折 +祝 +偻 +揆 +的 +盎 +初 +骝 +荻 +饷 +耽 +莸 +just +簰 +现 +pl@@ +籍 +珉 +蕲 +臌 +闪 +崮 +gra@@ +琯 +圆 +瓴 +赬 +镧 +被 +共 +芯 +蚧 +stu@@ +mee@@ +沧 +伲 +觌 +筏 +庑 +still +题 +wat@@ +4 +绱 +入 +亚 +sho@@ +珫 +饴 +點 +than +good +l@@ +梁 +忿 +荐 +躺 +蹡 +呕 +圩 +唷 +陌 +ue +鲭 +碗 +怪 +飘 +country +粑 +怹 +飕 +烨 +吹 +嵇 +驺 +纰 +in@@ +间 +馈 +榑 +窜 +泗 +硪 +躏 +th +耸 +贞 +wom@@ +排 +箩 +绽 +舵 +焉 +振 +镶 +thirty +闲 +摁 +堰 +牵 +栋 +堤 +馀 +盟 +t +旄 +凇 +洣 +録 +韭 +por@@ +孑 +茄 +闺 +淀 +坡 +烟 +洺 +gre@@ +敦 +哉 +到 +ding +遑 +钒 +壳 +lo +纾 +砲 +灶 +lee +玘 +up +梵 +旖 +佗 +竽 +绋 +砩 +酒 +苯 +焕 +祚 +苁 +嗓 +ail@@ +殽 +om@@ +棨 +翼 +墼 +萄 +垭 +碱 +cts +渲 +矱 +掇 +best +锃 +谶 +喜 +雌 +辊 +啀 +嗞 +谢 +疹 +玎 +唤 +兆 +彳 +溧 +丕 +棒 +桁 +樓 +跟 +蝼 +哭 +啭 +替 +乩 +箪 +城 +朾 +ear@@ +鲌 +ship +吕 +粉 +舜 +伛 +觏 +燮 +铊 +硝 +撤 +瘝 +thanks +锵 +圣 +contin@@ +侬 +浮 +棵 +歭 +ici@@ +珞 +褔 +券 +演 +箫 +缵 +篾 +鲮 +砒 +含 +郡 +快 +栏 +瘟 +饤 +tw@@ +拃 +盹 +壕 +桯 +嗪 +鞨 +甏 +锫 +涕 +冕 +鄣 +淌 +辰 +唿 +暲 +蚀 +跋 +郸 +镀 +ku@@ +赔 +姺 +课 +础 +耷 +涪 +day +笳 +away +稞 +鹈 +珍 +毯 +酮 +汀 +梆 +嫫 +准 +ces +巷 +晋 +肉 +莆 +痢 +缗 +怜 +鄙 +搠 +fri@@ +仳 +该 +宓 +珂 +圉 +弨 +悬 +buil@@ +绸 +太 +外 +祢 +蓍 +圹 +侓 +跸 +谊 +获 +髈 +迮 +鹤 +卦 +嗻 +佐 +愠 +媲 +殍 +齉 +妹 +残 +嗄 +钾 +court +踞 +脯 +菖 +琼 +傻 +三 +虿 +唪 +逶 +鲤 +镌 +肇 +弘 +李 +履 +恩 +蒌 +夙 +环 +坒 +gar@@ +ans +嘣 +嵯 +命 +酢 +屏 +鈇 +麟 +旨 +旼 +疮 +with +解 +屈 +趴 +蠛 +密 +瞩 +屎 +显 +魁 +衯 +钇 +酩 +鳌 +戆 +芈 +十 +gu@@ +陪 +黑 +缌 +ch@@ +摇 +梨 +胼 +撷 +疤 +砟 +el@@ +唛 +芪 +速 +ol +细 +馥 +犰 +bal@@ +鲇 +韂 +焰 +胗 +粹 +枌 +嵬 +古 +she +through +筛 +翀 +协 +se +魃 +格 +mes +晥 +跱 +掺 +阕 +智 +松 +st@@ +靠 +斟 +粒 +舞 +瀣 +棅 +茭 +韫 +鐎 +灵 +龢 +卷 +lion +曹 +哒 +皝 +哲 +pe@@ +患 +逸 +涠 +蛰 +佣 +猇 +狈 +nine +囫 +风 +态 +慈 +慜 +俨 +汲 +肛 +隶 +坩 +赍 +海 +癫 +my +委 +ill +胤 +覩 +臬 +矶 +炷 +衬 +前 +馊 +伽 +艳 +妗 +肠 +檗 +soon +氙 +琅 +谏 +light +変 +seven@@ +旸 +芭 +en@@ +烧 +诃 +攘 +陧 +觅 +铑 +氐 +余 +night +hou@@ +鹀 +膜 +炙 +抨 +珊 +ses +漩 +both +桉 +笺 +鎛 +led +披 +膛 +蜻 +菽 +娼 +団 +揽 +测 +f@@ +芎 +吅 +sion +遹 +瓘 +慕 +他 +鄩 +矽 +thou@@ +沒 +唁 +匿 +设 +嵖 +髹 +ine@@ +恸 +窣 +-@@ +街 +膝 +碑 +national +it@@ +瘢 +ci@@ +侮 +l +陉 +照 +原 +厐 +悚 +答 +犷 +罔 +绘 +敞 +ys +捆 +殚 +填 +挟 +tal@@ +萌 +卑 +甃 +吉 +蜮 +帑 +笖 +new +昺 +诤 +襜 +矗 +藠 +苓 +th@@ +哝 +its +蚋 +ran@@ +澳 +eight +贱 +傕 +亦 +续 +槐 +筚 +追 +醺 +錾 +蹒 +玟 +look +圃 +颗 +旎 +圮 +绷 +op@@ +咙 +槃 +冫 +乳 +鸣 +柴 +蚴 +擞 +锴 +姣 +惯 +管 +奎 +ra@@ +瞠 +侍 +恵 +岬 +喎 +摭 +卺 +wee@@ +羧 +cep@@ +fron@@ +妁 +很 +禹 +巯 +夼 +鄫 +re@@ +动 +迓 +狐 +瑕 +棹 +屹 +皈 +陔 +殛 +仿 +蝥 +缘 +镫 +品 +ase +row +缜 +stance +予 +custom@@ +抬 +鞶 +蛘 +埏 +漂 +凝 +虻 +姒 +痒 +邝 +ss +战 +悴 +spe@@ +羝 +吮 +锗 +湘 +端 +淸 +孢 +3 +郴 +卬 +fif@@ +濯 +射 +簏 +锌 +啖 +懑 +霪 +棻 +簺 +怅 +g +毎 +犳 +ffe@@ +镉 +閦 +吲 +驹 +are@@ +埇 +心 +漴 +娃 +侯 +蔽 +值 +鲧 +fr@@ +ful +嘹 +滥 +騠 +ility +喹 +悉 +嗽 +些 +硁 +mer@@ +磊 +霆 +麝 +曲 +蜃 +police +镩 +笪 +苾 +靑 +凼 +多 +质 +缇 +嗫 +沏 +ened +花 +诹 +尉 +珥 +崩 +ld +x@@ +揎 +纷 +缂 +轹 +庙 +渚 +鸪 +乒 +惧 +peop@@ +歌 +唾 +樘 +膺 +fro@@ +哂 +腼 +霄 +坞 +霰 +掎 +娿 +镬 +巨 +碇 +藩 +活 +荤 +团 +缪 +钵 +飞 +儡 +苤 +貊 +柄 +蓠 +防 +贮 +碾 +狞 +艏 +喏 +稚 +映 +i'm +谤 +蜿 +车 +乂 +寕 +啧 +虔 +ster@@ +垣 +嗛 +讪 +ves +again +隗 +帜 +嗾 +绂 +公 +卮 +抱 +仕 +以 +栘 +拊 +萤 +him +荪 +淬 +7 +鋹 +敢 +颖 +ment +嫩 +棕 +show +跩 +out@@ +汤 +迕 +榨 +暗 +糍 +晡 +9 +稂 +曼 +蒺 +ture +鬄 +逅 +岚 +芟 +昶 +埤 +幺 +猖 +伙 +pub@@ +南 +荨 +趁 +淑 +嘲 +悔 +藉 +争 +渔 +pool +簟 +谀 +噘 +窀 +祟 +阜 +涸 +掖 +癃 +疑 +搢 +漏 +锉 +钹 +耱 +踢 +骎 +稣 +锲 +繇 +缊 +劈 +啻 +蕴 +仔 +昝 +且 +滚 +柢 +镊 +响 +凰 +噗 +瑴 +嗔 +简 +蜇 +有 +豢 +ap@@ +啓 +翅 +愤 +peri@@ +蚶 +弄 +禨 +蚡 +坝 +换 +纨 +蹑 +for@@ +草 +荛 +懈 +奉 +鳊 +疗 +搂 +串 +幸 +岽 +牍 +蝰 +絶 +秣 +缴 +at +网 +嗑 +岗 +绊 +圳 +恁 +反 +方 +癞 +煞 +雪 +尤 +鐧 +麒 +黡 +殷 +都 +则 +剃 +揄 +毐 +噱 +fi +氹 +泠 +樾 +迳 +嫚 +齿 +殳 +墒 +役 +晟 +咔 +芃 +睁 +柽 +戍 +屺 +虱 +韦 +涅 +姚 +鋈 +sure +既 +涯 +甯 +嘤 +硞 +som@@ +惴 +狻 +堑 +屉 +愿 +li@@ +行 +谲 +嶂 +峣 +碜 +暂 +h@@ +鏖 +瘊 +蜈 +浈 +萦 +职 +蚊 +汴 +people +妱 +鸰 +易 +芜 +挪 +影 +竹 +洸 +烀 +鹘 +胜 +兵 +咧 +楷 +币 +妖 +ant +臣 +桩 +创 +囹 +na@@ +鞑 +楂 +逡 +惆 +卿 +闱 +耀 +那 +童 +钰 +玮 +郄 +昏 +乘 +钩 +晳 +笼 +核 +芙 +小 +忋 +区 +as@@ +颢 +our@@ +that +稻 +销 +韶 +刑 +延 +k@@ +teen +幄 +pic@@ +叱 +骷 +棰 +羁 +垝 +犴 +媱 +兄 +尓 +乞 +鲦 +划 +壬 +芡 +hotel +佃 +氯 +您 +颌 +汝 +缫 +幂 +竣 +喾 +疥 +long +广 +镂 +酫 +ings +ood +柊 +唣 +辽 +稀 +襞 +讼 +篱 +坻 +袂 +华 +自 +歧 +昂 +摺 +gh +聿 +犟 +敛 +牺 +旳 +锥 +玛 +低 +鄮 +漳 +叠 +川 +呼 +where +戳 +嗮 +琦 +厓 +窠 +cas@@ +舷 +甦 +凛 +谖 +旷 +沌 +狒 +溉 +绍 +劲 +滟 +in +褊 +fam@@ +楽 +金 +磕 +see +斩 +佛 +壅 +境 +诂 +around +羑 +浆 +矜 +铈 +provi@@ +藐 +伉 +阶 +哀 +潼 +精 +像 +凶 +琇 +秧 +涂 +豫 +镒 +蒟 +叹 +颜 +莫 +阀 +痕 +爬 +嬲 +滓 +牮 +沐 +璈 +窸 +湮 +喊 +徘 +而 +仞 +蛆 +吵 +栟 +郯 +谄 +膑 +垯 +恰 +筠 +淝 +剌 +vie@@ +估 +first +渊 +鶗 +缬 +踺 +呦 +宄 +颎 +蔼 +挒 +亹 +墉 +倧 +梪 +猱 +顼 +泫 +鸳 +赠 +聋 +鬲 +隽 +胚 +驱 +丶 +邪 +鲚 +韩 +婆 +sed +it +审 +屠 +众 +翩 +铺 +磨 +醲 +瘼 +佑 +霹 +臀 +坮 +俯 +舸 +辍 +谗 +甥 +祭 +tell +商 +ace +宾 +骡 +浍 +冉 +肾 +im@@ +win@@ +甬 +蹚 +粕 +脖 +遽 +next +expe@@ +榕 +蹂 +邹 +stru@@ +沁 +宸 +旮 +锁 +侂 +拢 +辫 +仁 +be +洱 +摘 +律 +预 +徕 +鬣 +挠 +戟 +嘴 +杖 +骍 +劵 +哮 +雁 +擀 +鴐 +衎 +芮 +据 +霭 +com@@ +俗 +伝 +ory +轭 +博 +谐 +孺 +te@@ +锹 +瞥 +导 +糜 +堙 +乾 +搌 +鏐 +你 +con@@ +琍 +art +徇 +塞 +讽 +瞄 +rence +溢 +卉 +逞 +阮 +阊 +婊 +mil@@ +专 +姜 +浉 +府 +sing@@ +嗵 +哨 +砺 +吋 +闹 +败 +居 +娓 +ce +囟 +楼 +元 +鲥 +嗙 +tely +帷 +還 +懋 +欷 +ong +郝 +丨 +breakfast +崴 +橼 +停 +沾 +under@@ +tion@@ +非 +堵 +仆 +铗 +难 +蛑 +狙 +找 +熠 +over@@ +檀 +鸩 +檐 +彀 +蟋 +腚 +槟 +泄 +舅 +痼 +秤 +氆 +罄 +啼 +啡 +冽 +疎 +嵨 +吿 +航 +采 +mb@@ +裟 +檿 +辆 +眍 +溃 +can +唻 +媖 +佺 +狰 +仪 +rent +沓 +话 +霾 +婷 +雨 +eigh@@ +白 +瞧 +澎 +洞 +阔 +ta@@ +侧 +躇 +莘 +骏 +宰 +縠 +birth +萃 +men@@ +秉 +轮 +刹 +fl@@ +鸮 +忾 +胖 +攫 +磁 +飧 +鲈 +邙 +阌 +皂 +危 +搹 +靺 +唔 +撴 +柝 +垮 +膈 +辋 +榷 +邘 +锂 +戚 +蔹 +粝 +翊 +攵 +悯 +涝 +媞 +俤 +镲 +梳 +蓥 +艾 +guest +顿 +譬 +兹 +囚 +倌 +遣 +朔 +such +篷 +囷 +宫 +戊 +嵎 +娉 +箅 +檫 +玷 +please +彰 +蜓 +怃 +癯 +怛 +镇 +还 +诿 +庞 +开 +节 +卒 +逵 +颔 +杰 +蘸 +楚 +颍 +吐 +堃 +澜 +弧 +流 +堍 +严 +焱 +on +纬 +巽 +确 +子 +紙 +沭 +戞 +屙 +胭 +劫 +珧 +信 +樵 +讴 +豺 +叽 +钎 +霁 +瀛 +糟 +噌 +豝 +湜 +洎 +菌 +悆 +ree +凯 +徜 +郏 +today +勾 +嬉 +螵 +戕 +璞 +忝 +俞 +言 +庵 +贼 +费 +kind +扁 +骁 +咪 +凿 +讳 +掊 +ated +苄 +鳝 +噍 +茧 +govern@@ +筼 +颋 +愛 +渭 +踟 +罪 +汔 +踩 +陽 +疽 +闵 +我 +蒡 +缠 +曺 +婪 +农 +露 +染 +sent +氽 +et +咷 +圧 +咀 +site +sti@@ +梗 +water +舔 +嚣 +蜉 +逖 +湄 +栅 +刳 +薢 +ally +诸 +藕 +钔 +伋 +莜 +硬 +窟 +sa@@ +愚 +蟪 +秩 +雯 +褚 +鹎 +泃 +ner +ast +菜 +晦 +枨 +偲 +嚩 +遴 +su@@ +掸 +千 +馄 +功 +胺 +rep@@ +涡 +ther +孩 +液 +狲 +业 +巡 +脍 +甚 +珜 +郜 +蔑 +疔 +庚 +硌 +裉 +骘 +sequ@@ +迎 +盖 +噪 +尺 +咒 +蜕 +店 +镐 +蝉 +宝 +卍 +弩 +学 +猁 +犊 +妄 +葭 +every@@ +螋 +馃 +ating +壮 +熟 +rela@@ +嗬 +约 +锞 +呫 +护 +磒 +疙 +羞 +绦 +铳 +掕 +宗 +荀 +玢 +ser@@ +啦 +氪 +盯 +疸 +鬐 +绚 +锡 +鬻 +瓮 +麸 +旱 +娱 +敕 +跄 +烘 +蠕 +te +诽 +重 +翠 +珑 +慰 +鲍 +勣 +袱 +瑙 +tly +庆 +government +荦 +阗 +烫 +倓 +俏 +鸹 +倦 +ound +co@@ +竟 +腋 +昙 +濂 +啋 +揶 +泣 +郾 +垍 +轳 +某 +酎 +板 +晤 +廑 +奶 +醴 +镑 +讣 +缤 +龅 +畿 +脁 +ma@@ +醢 +嗟 +丗 +殿 +魅 +熨 +wr@@ +嚷 +彤 +栎 +americ@@ +谡 +泽 +柬 +髎 +盆 +诅 +瘁 +萘 +喁 +媒 +忸 +阍 +曡 +裰 +锦 +something +犋 +爱 +煺 +揉 +苇 +嘈 +胪 +铁 +屁 +颂 +锩 +骅 +渌 +邱 +脬 +滏 +罹 +散 +鼹 +父 +摔 +边 +申 +苛 +敝 +冈 +蕈 +郕 +耨 +闳 +逄 +拔 +将 +fe +鲂 +颙 +0 +room +胙 +澍 +媚 +廪 +量 +贩 +镕 +nine@@ +恚 +鹾 +旃 +铵 +堺 +剑 +ket +支 +墙 +洒 +俳 +ors +诐 +黟 +珩 +跻 +浸 +孟 +mp@@ +狷 +踌 +渎 +逝 +颁 +务 +羹 +羖 +阽 +跪 +褒 +乜 +择 +盩 +鸭 +抗 +递 +褪 +怂 +cou@@ +蟠 +cen@@ +傜 +砍 +鲔 +蹙 +restaurant +杆 +茵 +尊 +耻 +淮 +躜 +蜡 +嘱 +谩 +蝗 +堞 +姨 +happ@@ +铿 +楝 +park +力 +殊 +畹 +say +练 +纱 +溪 +虮 +篑 +蜱 +惜 +跌 +啁 +溜 +饼 +裥 +勇 +柱 +惨 +陟 +殪 +安 +徼 +纛 +痍 +谨 +取 +犒 +鄄 +粟 +眨 +坤 +妤 +剟 +雉 +傩 +嫄 +嘧 +咽 +愀 +簸 +赏 +箾 +龈 +放 +菅 +坚 +奠 +黢 +琴 +潞 +朝 +tually +铞 +乇 +醪 +潍 +槊 +纯 +瀹 +诋 +慢 +奸 +嘭 +揠 +昃 +革 +司 +ce@@ +趵 +醮 +碘 +器 +澶 +知 +& +厢 +啷 +晔 +炜 +ook +斐 +盏 +妻 +娣 +燋 +窈 +法 +also +菸 +炽 +选 +埕 +击 +滤 +铖 +觎 +莩 +le@@ +匏 +踅 +酸 +鹑 +enjoy +闰 +毡 +祆 +身 +郊 +笄 +乖 +甩 +like +否 +厖 +爹 +牦 +起 +僔 +钓 +浚 +忙 +get +冯 +樊 +识 +蹉 +鑫 +畚 +滕 +掮 +尾 +war@@ +桶 +瓢 +毫 +膊 +髌 +钗 +桼 +碲 +辨 +唉 +竲 +痰 +膻 +锖 +嘡 +雩 +版 +昧 +敬 +蕨 +伴 +徍 +襀 +盘 +憷 +涑 +different +after +虽 +何 +煎 +宽 +ori@@ +攀 +冢 +零 +樯 +哌 +瓣 +馍 +唰 +炪 +旰 +厔 +葵 +痞 +己 +靓 +凄 +服 +烤 +仮 +恨 +喳 +贯 +郞 +饪 +铄 +滠 +蠢 +薅 +齑 +褓 +黼 +涿 +n't +磬 +匾 +沂 +镳 +nice +浯 +悝 +淫 +捅 +箨 +瞀 +勠 +屐 +蹁 +蹦 +槿 +类 +栉 +脘 +页 +桕 +脊 +欲 +蝽 +勃 +坷 +酶 +售 +縻 +欺 +膏 +词 +兢 +楸 +娡 +娩 +陡 +ple +尧 +幷 +豉 +桫 +滁 +麋 +罘 +朕 +耗 +汉 +登 +较 +逾 +蔫 +赳 +秭 +咫 +斑 +跚 +舒 +莞 +闾 +氤 +骸 +槩 +瓶 +餐 +瞪 +沉 +朱 +had +鲣 +嵪 +nothing +嫡 +恍 +衢 +轴 +杈 +赂 +津 +red +拤 +狠 +卣 +蚱 +疆 +捞 +婉 +固 +梶 +垸 +逋 +髡 +晓 +骶 +季 +炀 +喷 +垛 +蜂 +sts +阝 +未 +熬 +绲 +坟 +苈 +are +寮 +吧 +皖 +捌 +炤 +b +the +哈 +鞍 +ir@@ +掘 +tation +噙 +酊 +忄 +硼 +耕 +偎 +雎 +磴 +锺 +over +侃 +婚 +吗 +竺 +man +也 +苣 +绛 +冤 +呈 +孱 +缭 +埼 +犬 +麦 +蓐 +技 +夜 +tri@@ +杭 +佝 +莨 +di@@ +毙 +贿 +猎 +桡 +so +氖 +叼 +哚 +濠 +湾 +全 +读 +盐 +钚 +鬘 +万 +鲠 +貂 +鋐 +堼 +茺 +拟 +牡 +蝮 +镢 +嚯 +束 +喱 +彿 +col@@ +仃 +涌 +蚯 +妩 +箢 +隹 +亰 +疃 +嬗 +喇 +攒 +am +听 +fe@@ +zero +痛 +诗 +干 +疫 +嬴 +降 +签 +丈 +sm@@ +髑 +劬 +萏 +诀 +镵 +坭 +咤 +池 +榼 +岕 +崃 +ined +chu@@ +糸 +祸 +猜 +婿 +搋 +咛 +箴 +辚 +悄 +荒 +挑 +托 +drive +撇 +莒 +鄜 +冒 +稹 +户 +ould +铤 +翃 +try +圊 +艿 +桐 +兒 +揿 +堋 +档 +ink +email +犍 +铍 +招 +鳇 +敲 +雳 +奌 +裝 +戏 +哗 +栱 +哆 +ds +浙 +岂 +挝 +莲 +腩 +杬 +促 +斥 +蛱 +诓 +炖 +璘 +怵 +礽 +咬 +珐 +韡 +邺 +祀 +皇 +渑 +困 +潜 +添 +ter +che@@ +如 +萹 +熙 +扇 +亭 +亍 +瘗 +舍 +皌 +诌 +虢 +欣 +掰 +棘 +岞 +毽 +卵 +罴 +疋 +ali@@ +整 +i@@ +紫 +mu@@ +涘 +携 +奏 +cri@@ +馘 +翘 +抚 +筝 +玄 +霎 +铮 +澹 +嫰 +夏 +咿 +围 +従 +猾 +pre@@ +逊 +糖 +漫 +聍 +及 +瘵 +绢 +棱 +笈 +铯 +釭 +恼 +癎 +苢 +斁 +醣 +植 +鱼 +涓 +z +目 +par@@ +撬 +戎 +偓 +已 +打 +busine@@ +桦 +庇 +坪 +problem +舾 +centr@@ +fifty +梧 +𫖯 +restaurants +beau@@ +fac@@ +谈 +腙 +阉 +孛 +秘 +庶 +畴 +例 +ang +幛 +下 +溅 +彗 +魟 +诏 +鸢 +邽 +瘪 +ay +胱 +勒 +槲 +橹 +男 +ide@@ +治 +锒 +祯 +慌 +佥 +苔 +暴 +时 +撩 +俶 +屋 +抠 +嫘 +浔 +鲻 +暌 +窿 +炒 +溇 +髯 +簿 +嶖 +峒 +si@@ +觥 +午 +联 +ty +猫 +腭 +晻 +袝 +戾 +波 +啐 +戈 +蒎 +麓 +汾 +茉 +埔 +蛳 +徳 +鸶 +艇 +顶 +髻 +徒 +豨 +碳 +欻 +薰 +hi +呲 +舳 +劾 +形 +' +渥 +羔 +枇 +模 +弁 +坏 +徊 +馗 +刨 +璀 +锤 +钤 +囔 +拦 +剐 +揸 +滈 +缚 +ach@@ +斯 +诒 +寂 +裒 +同 +should +蒴 +窑 +示 +戗 +录 +恶 +培 +迦 +邮 +熜 +泊 +乌 +篌 +center +癸 +昔 +牠 +濛 +噻 +苋 +ang@@ +give +姥 +祖 +搬 +悠 +瓒 +嫱 +wit@@ +畏 +神 +湟 +扃 +桀 +醭 +谘 +虾 +玳 +斡 +寥 +攻 +忑 +man@@ +僻 +money +飊 +国 +吠 +扦 +j@@ +幹 +泛 +摈 +匼 +廉 +通 +袍 +楹 +搦 +缮 +ft +岱 +scho@@ +丹 +蜗 +蓓 +卟 +倥 +喽 +蛾 +殭 +绣 +chan@@ +震 +棍 +潋 +葫 +嚎 +ed +漉 +阻 +俐 +德 +様 +酝 +倒 +橱 +send +谯 +嗐 +署 +贴 +搭 +坦 +蹯 +緛 +队 +死 +閟 +岭 +倪 +诜 +偱 +醐 +痊 +社 +凡 +畯 +摒 +迭 +措 +挌 +媛 +same +蚓 +擤 +澈 +眈 +剪 +嫣 +鹱 +娆 +凸 +厅 +臼 +枭 +炎 +烊 +掀 +洄 +僳 +velo@@ +觉 +逼 +have +皎 +酯 +怦 +叶 +统 +thir@@ +从 +纡 +les +术 +径 +征 +come +躅 +此 +甜 +践 +br@@ +鎸 +讲 +玲 +衣 +麾 +枥 +拈 +腮 +reas@@ +芩 +鹖 +more +儆 +愕 +淏 +躄 +玕 +届 +永 +哟 +虓 +sit@@ +宴 +夷 +梭 +紧 +瘰 +recei@@ +匐 +号 +from +况 +畋 +谜 +莽 +锣 +pas@@ +驽 +昱 +喟 +v@@ +呀 +'re +阒 +踬 +认 +订 +黝 +筻 +seven +们 +舱 +揭 +妾 +礼 +高 +传 +香 +谬 +篆 +逮 +玑 +眄 +驿 +all@@ +嗅 +五 +淹 +裨 +咕 +焖 +氚 +ari@@ +崤 +接 +沈 +寰 +轻 +旒 +维 +test +麴 +枱 +挚 +句 +驾 +筷 +坂 +须 +鼩 +炳 +推 +姿 +溴 +庠 +箻 +燹 +拂 +呱 +愫 +袤 +睑 +眩 +冷 +葸 +but +睢 +掣 +唠 +陈 +喉 +晬 +溯 +艺 +苦 +腐 +蟹 +燃 +候 +伸 +萝 +汭 +6@@ +僭 +蘖 +瘫 +书 +控 +乪 +溘 +痦 +lo@@ +蝣 +啂 +缩 +part@@ +只 +施 +鸨 +鎏 +悕 +诵 +孬 +獾 +玩 +汪 +ary +吁 +拄 +诟 +扰 +鼎 +珪 +橇 +隍 +close +姑 +ty@@ +迹 +骆 +崐 +go@@ +勺 +倜 +ble +盥 +剂 +qu@@ +圻 +荧 +荣 +疵 +酪 +稗 +幔 +井 +蛭 +泔 +定 +q +楱 +刈 +使 +潟 +螅 +铒 +巇 +呖 +垂 +啉 +戮 +佉 +寓 +翚 +啪 +fa@@ +w@@ +绐 +抛 +謷 +忐 +趿 +位 +螨 +last +迫 +爷 +碎 +廊 +啮 +柯 +酰 +烜 +煳 +粲 +求 +楞 +考 +挲 +触 +荽 +荫 +疴 +遨 +仫 +瑭 +扩 +恭 +藦 +羣 +味 +缀 +享 +枣 +宠 +浊 +back +扪 +篥 +sou@@ +涉 +son +翔 +讫 +理 +玙 +栩 +闩 +龄 +亢 +桄 +sil +幡 +婀 +脚 +疠 +歔 +兰 +査 +镗 +涎 +霏 +待 +忻 +警 +科 +脐 +琚 +真 +own +醚 +绡 +ices +嶷 +胶 +u@@ +峦 +箜 +丰 +痨 +衡 +锋 +宦 +皦 +感 +矮 +爨 +亟 +装 +鹁 +房 +捡 +乐 +胫 +彧 +kil@@ +葛 +氏 +捋 +戢 +牢 +5 +dis@@ +园 +孓 +柃 +榄 +喺 +悛 +俢 +c +缢 +富 +je@@ +竭 +way +拙 +牧 +阋 +究 +钘 +濮 +皙 +问 +告 +鞅 +燚 +肴 +螭 +篁 +当 +洮 +渠 +码 +辗 +慨 +崇 +诫 +意 +姤 +飓 +噬 +铐 +寡 +咨 +伺 +殓 +容 +蚁 +柏 +枧 +瑗 +挛 +绔 +月 +绾 +隘 +僖 +纇 +握 +耜 +舐 +tom@@ +旅 +翮 +products +缑 +肄 +闿 +硫 +砚 +蜚 +bu@@ +鍉 +晗 +阃 +衾 +蝴 +丽 +髅 +煜 +习 +窃 +芑 +櫈 +ru@@ +deta@@ +谌 +俄 +桨 +芦 +泵 +企 +粽 +揣 +领 +qui@@ +鄚 +肱 +尼 +滦 +椽 +癜 +甄 +local +fol@@ +偿 +丸 +涞 +铜 +du@@ +噜 +倬 +珣 +圜 +墅 +car@@ +撂 +栀 +评 +螽 +蘑 +扬 +挨 +轵 +殇 +酺 +high +ach +鲛 +啥 +think +don't +表 +cho@@ +盈 +啊 +怔 +滉 +艮 +徽 +撸 +淯 +茈 +硚 +桢 +魍 +潸 +at@@ +仄 +鹭 +沅 +操 +炭 +砝 +之 +讷 +吔 +疰 +葚 +夭 +跶 +蘼 +鲩 +滴 +菘 +滨 +加 +倾 +体 +茕 +髀 +雅 +ile +欠 +崧 +囤 +僦 +守 +辂 +棂 +se@@ +捶 +扛 +铠 +铩 +京 +熘 +洛 +娄 +the@@ +痿 +箱 +驮 +礅 +郃 +谣 +ack@@ +晴 +res +lot +纲 +诖 +ways +谋 +煌 +绗 +炼 +卤 +屄 +界 +拶 +ar +遠 +周 +驩 +肖 +跖 +莳 +级 +咣 +hu@@ +啕 +歀 +忤 +临 +many +募 +ned +their +睿 +冥 +久 +巍 +堇 +洽 +郎 +董 +this +毒 +醉 +ton +诶 +旺 +蛉 +规 +琶 +騑 +捉 +imp@@ +尥 +拗 +e@@ +歆 +刀 +跆 +three +锢 +侏 +拳 +扤 +饨 +剥 +潡 +俊 +嗤 +穑 +地 +情 +憔 +惹 +奢 +inclu@@ +mo@@ +铭 +至 +浐 +祎 +really +帆 +dri@@ +楮 +邬 +弛 +篮 +兮 +up@@ +慧 +腆 +碴 +挂 +计 +豚 +滑 +indi@@ +into +褭 +酞 +t@@ +符 +彼 +涔 +body +ins +漶 +峪 +down +缓 +剀 +福 +叮 +wa@@ +失 +隅 +怄 +扳 +great +泰 +娌 +孙 +彬 +毁 +蛲 +萱 +泻 +舀 +dge +瞅 +vo@@ +咆 +祜 +枋 +憩 +文 +gro@@ +倮 +鹄 +all +槎 +忆 +絯 +裢 +two +兑 +明 +遥 +窍 +吃 +it's +启 +妽 +郅 +ies +centre +吒 +亿 +雲 +ask +叩 +媜 +蚰 +奄 +垡 +椿 +篡 +聘 +窖 +垩 +diffe@@ +购 +褥 +豸 +腠 +咦 +眦 +敏 +鼐 +昉 +顽 +琊 +砌 +僮 +乱 +瞒 +撑 +羲 +纳 +赞 +焐 +橛 +嵩 +陀 +楔 +牛 +鹊 +帽 +may +偬 +丫 +兜 +砰 +濡 +獬 +好 +腿 +靶 +木 +唸 +纹 +裹 +cl@@ +hund@@ +优 +猲 +焯 +岘 +辱 +丞 +查 +秽 +胀 +鳖 +岈 +喒 +默 +见 +forty +纥 +泚 +驳 +铃 +萋 +筱 +蛏 +琲 +鸵 +这 +链 +read@@ +垵 +踦 +奭 +別 +软 +盲 +黛 +纤 +chil@@ +扱 +狡 +贽 +贻 +鳏 +篓 +der@@ +滢 +嵌 +妺 +臭 +谥 +夯 +韬 +惺 +检 +峨 +ms +胛 +恫 +构 +鹂 +刺 +讦 +唬 +梈 +捯 +由 +志 +达 +梢 +歉 +al@@ +淳 +般 +恐 +獗 +央 +喔 +蟀 +伞 +sh +'s +姮 +痈 +ck +俾 +髫 +蜒 +愧 +呆 +mer +桤 +鬏 +型 +四 +哖 +龋 +鳔 +骗 +砷 +泷 +猷 +茯 +茁 +cha@@ +small +倨 +乎 +奕 +鹅 +痉 +奥 +辙 +sting +冲 +赅 +泅 +羰 +悲 +焘 +瞵 +紊 +卖 +take +鳐 +菊 +姸 +辐 +嘻 +fast +囿 +凫 +纵 +咝 +箧 +well +钬 +he@@ +辕 +鹜 +unk@@ +诔 +泐 +世 +镖 +骄 +ve +寸 +pay +鴂 +睐 +氲 +牟 +洏 +尔 +quo@@ +椭 +芨 +险 +耳 +柁 +牾 +蚂 +much +most +now +singapore +丙 +洋 +燊 +啵 +胬 +媾 +碟 +濆 +陇 +扥 +势 +慷 +笋 +泥 +鄘 +hote@@ +罕 +沤 +葡 +蠡 +产 +鲵 +凉 +萆 +籽 +胞 +哦 +侠 +晚 +咵 +杯 +邗 +甑 +胁 +历 +嘏 +喘 +is +霉 +仇 +鳀 +鉴 +猛 +纂 +决 +阏 +饯 +宣 +象 +儿 +猗 +瀑 +荚 +满 +茳 +酷 +鼬 +旁 +屡 +榇 +s@@ +呷 +驻 +薮 +鹏 +馋 +鹪 +纠 +thank +轶 +渺 +镁 +cost +汐 +谅 +甫 +publi@@ +储 +抹 +杨 +裳 +歙 +鏊 +犼 +蹐 +愦 +断 +able +ind +狂 +雒 +妧 +巴 +嘟 +筵 +喤 +舫 +刃 +fi@@ +company +郿 +瞢 +褰 +清 +巿 +苕 +内 +暾 +垠 +戌 +溟 +剋 +葶 +猡 +蔺 +岖 +邕 +any +pri@@ +卸 +基 +馒 +出 +柞 +溍 +吨 +蜥 +炟 +徂 +inve@@ +桂 +frien@@ +铪 +庖 +廋 +誉 +嗡 +忘 +i'@@ +螃 +胯 +un@@ +铨 +酹 +鷃 +wi +眚 +跤 +汁 +针 +钏 +雀 +限 +面 +蛐 +黃 +脩 +叛 +枷 +故 +sk@@ +编 +菥 +勐 +汗 +胃 +洗 +洹 +ers +髦 +宏 +聊 +嵫 +囎 +淠 +垧 +欧 +oms +揵 +before +畈 +饬 +秦 +莓 +努 +炔 +匠 +际 +蕉 +蝇 +po@@ +匽 +year +橥 +pping +注 +承 +琨 +又 +玉 +彖 +缸 +怒 +遏 +坍 +sta@@ +痹 +埆 +叵 +氟 +脂 +昭 +ments +宕 +盅 +惩 +馁 +绕 +遢 +扫 +蔡 +崾 +阎 +葳 +殂 +潢 +每 +ro@@ +靖 +主 +tional +闸 +涖 +第 +n +镅 +蜜 +能 +衄 +猹 +鹰 +俘 +豪 +人 +痱 +蓑 +骒 +所 +绨 +粦 +望 +减 +魔 +释 +ars +逑 +clo@@ +帏 +遘 +许 +誓 +牤 +刷 +扒 +峻 +9@@ +昕 +轩 +嬷 +them +窗 +蹄 +骰 +湓 +堨 +巂 +婧 +骖 +螬 +酋 +ag@@ +闷 +滞 +郧 +朴 +supp@@ +倡 +腴 +褴 +极 +漷 +佾 +煨 +沚 +肓 +experi@@ +亮 +堕 +对 +秋 +every +铅 +蛴 +擅 +a@@ +鳃 +保 +ze +弓 +趄 +翦 +涛 +盗 +道 +遮 +屿 +绥 +cont@@ +部 +den +付 +诮 +粘 +镔 +溏 +啬 +贫 +轼 +猩 +薯 +胳 +抻 +than@@ +king +燎 +笫 +鸂 +蓊 +峋 +ent +搡 +磡 +昌 +妈 +玺 +叫 +済 +彩 +lim +孀 +囧 +we@@ +绒 +驸 +架 +斛 +资 +碣 +濞 +冿 +吡 +作 +because +晏 +餍 +瞾 +栊 +蹿 +荩 +尖 +依 +氍 +炝 +抡 +中 +潏 +潦 +mon@@ +域 +杩 +兼 +捎 +怩 +正 +f +near +刮 +搪 +鸿 +俺 +耪 +牯 +瞎 +鬼 +惠 +bro@@ +沛 +浃 +pe +釜 +vi@@ +jal@@ +拴 +冇 +暎 +魉 +痘 +盔 +枚 +秾 +杲 +郛 +僚 +昞 +足 +sen@@ +family +岿 +榖 +蛊 +绯 +村 +鹃 +钼 +拓 +dly +苫 +锄 +跎 +碰 +钝 +淆 +鳟 +浓 +柇 +桷 +愬 +裔 +邃 +恂 +楙 +沨 +ban@@ +ssi@@ +鳞 +褛 +钌 +y +搀 +骺 +坊 +娘 +鄯 +袈 +匡 +厦 +艘 +障 +舂 +蹼 +材 +胡 +痄 +凖 +憋 +ll +睥 +窦 +砕 +雇 +個 +籀 +饥 +价 +笞 +鞴 +筊 +树 +揖 +派 +垄 +檬 +眠 +偌 +闯 +姘 +少 +破 +怿 +扼 +恽 +岔 +亲 +垕 +踱 +泳 +截 +轫 +烽 +够 +武 +差 +声 +可 +绫 +巅 +邯 +椎 +硭 +畀 +常 +沸 +榧 +忡 +妫 +皮 +讯 +铣 +轾 +衙 +蒙 +蕃 +things +腓 +坐 +鞘 +榻 +霈 +垆 +ous +粳 +枹 +薨 +胆 +龙 +绺 +ning +med +挹 +诨 +译 +但 +半 +辩 +芊 +变 +翻 +尹 +靸 +酬 +咶 +暧 +姝 +貘 +墓 +匙 +been +墀 +芗 +sc@@ +妲 +狮 +岫 +ants +谔 +鞭 +婶 +one +踏 +讵 +land +幼 +軎 +晕 +wi@@ +瑞 +供 +啯 +朵 +枓 +奘 +咩 +訢 +臆 +硗 +帖 +dent +戽 +瘿 +段 +傅 +oun@@ +枞 +属 +野 +芫 +诣 +钐 +堀 +uring +试 +衍 +馏 +龇 +讧 +stre@@ +妒 +驴 +著 +槭 +洧 +side +氾 +孵 +狎 +歩 +囯 +愎 +过 +pu@@ +right +赋 +阳 +mber +谕 +town +盾 +救 +饱 +loc@@ +spa +橡 +剅 +蒲 +姐 +厕 +铚 +套 +弗 +栴 +鹨 +糨 +騕 +雷 +裁 +拌 +鼻 +some +搐 +均 +蓣 +ice +卢 +ad@@ +瘌 +湶 +氩 +谰 +缙 +ard +栾 +迨 +浣 +秏 +萨 +always +污 +踔 +杏 +ded +髽 +秀 +湉 +粪 +展 +槻 +垓 +赫 +惮 +lar +薷 +迈 +p +塾 +ga@@ +ey +ho@@ +恺 +晩 +泸 +茚 +嗰 +绳 +lit@@ +渍 +遇 +洑 +晞 +溽 +ying +枸 +无 +逍 +珰 +纣 +罩 +ons +嶃 +瑚 +裙 +搛 +6 +咾 +唱 +瑠 +睃 +於 +din@@ +伟 +骓 +函 +瘤 +僆 +鞣 +兕 +伄 +柚 +席 +峄 +鄱 +抔 +an@@ +物 +loca@@ +穸 +懊 +2 +amer@@ +稼 +叉 +bra@@ +拇 +str@@ +res@@ +沆 +饰 +pen@@ +厘 +傈 +ality +廷 +式 +夔 +督 +雍 +晨 +剿 +赶 +疖 +砜 +归 +min@@ +徙 +阚 +tions +女 +营 +邅 +做 +伊 +er +筜 +蛎 +business +顾 +瘸 +洪 +钕 +觯 +政 +劝 +撮 +break@@ +氛 +漾 +sor@@ +址 +帼 +增 +ation +瞋 +稊 +慊 +肯 +躁 +糗 +美 +豕 +us +炸 +饽 +挎 +挫 +枢 +dr@@ +铉 +奖 +槌 +绮 +擂 +虬 +钽 +胍 +凌 +辟 +虹 +铂 +杂 +砗 +赪 +潇 +合 +鰕 +吭 +迷 +滘 +弹 +ff +痤 +蛄 +觱 +杳 +嘬 +偕 +赘 +烩 +孖 +钉 +龉 +钪 +睬 +撵 +big +笠 +俅 +锯 +呛 +欹 +cle@@ +珈 +浑 +墕 +hel@@ +彪 +姊 +拆 +雄 +hi@@ +钴 +壑 +幇 +卧 +痧 +澴 +长 +船 +六 +继 +棷 +尞 +窨 +燥 +膦 +镝 +裸 +办 +resta@@ +廆 +宅 +蓉 +娑 +猪 +阁 +蟆 +恢 +讥 +蜾 +of@@ +怏 +笕 +瞽 +赤 +岁 +禺 +昀 +她 +钫 +慝 +滩 +ack +跃 +贰 +巳 +寿 +铙 +pro@@ +朊 +mor@@ +箦 +丧 +ready +止 +跺 +缉 +桅 +论 +摽 +状 +驷 +咂 +铢 +绎 +叨 +遁 +锨 +里 +笊 +缰 +嵊 +膘 +帕 +泱 +鳜 +嫒 +仅 +捕 +徵 +each +vil@@ +媪 +袁 +裕 +佻 +赙 +末 +笔 +啲 +轺 +掞 +彭 +氢 +got +缁 +蠊 +攉 +寻 +骋 +噤 +ar@@ +棣 +疣 +豳 +祠 +衩 +匀 +王 +觫 +庭 +亶 +篇 +铎 +咖 +禛 +艹 +哐 +hope +系 +娇 +窄 +髓 +阱 +懿 +右 +离 +穴 +渣 +邨 +肸 +杞 +肚 +垗 +幕 +ct +苊 +隼 +wh@@ +宋 +煤 +柸 +镋 +耘 +kes +激 +痣 +work +吽 +彟 +株 +筐 +贸 +尕 +ere +潬 +矣 +縢 +瑄 +油 +満 +漆 +rooms +霞 +咏 +e +珮 +仡 +眶 +醛 +票 +鼓 +突 +ia +hundred +瓯 +尬 +no@@ +西 +潴 +楪 +傍 +蜘 +yes +蛀 +sig@@ +gs +筮 +因 +谳 +bur@@ +跹 +鲑 +惑 +肋 +dy +螟 +霓 +眼 +郇 +宙 +畲 +刬 +翟 +诧 +跫 +or +颅 +跷 +淅 +臑 +楦 +屯 +走 +羸 +you +咘 +als +斤 +畔 +晧 +忠 +肥 +实 +凋 +褶 +ba@@ +摆 +熊 +篝 +乃 +绑 +沟 +瞿 +哜 +舶 +甘 +事 +瑛 +踧 +黯 +鲞 +cal@@ +璩 +enty +剧 +洿 +孳 +祓 +天 +岑 +拾 +nineteen +cause +愇 +翁 +瞟 +昆 +弢 +摛 +义 +咸 +勮 +伪 +瑱 +橄 +丘 +铧 +怖 +终 +膨 +5@@ +扮 +to +猕 +琬 +群 +叁 +狄 +眵 +烹 +蚝 +儒 +援 +ber@@ +1 +掾 +裂 +藓 +r@@ +squ@@ +鲁 +潺 +晷 +消 +鸸 +觊 +诡 +却 +as +弼 +脰 +铷 +册 +懵 +啜 +涣 +扈 +垚 +森 +赵 +垫 +镪 +怼 +峁 +惚 +缄 +ass +诼 +tive +never +昇 +ence +耍 +异 +朐 +枕 +襻 +契 +祈 +骜 +羯 +豁 +瘕 +贲 +禥 +哔 +祁 +螫 +锆 +孕 +st +忏 +掏 +昵 +哪 +鹞 +疍 +遄 +蠲 +恹 +狩 +憾 +悫 +弦 +脾 +soci@@ +爸 +home +奔 +懂 +爿 +帙 +襦 +除 +ters +ted +景 +昚 +eas@@ +ven@@ +蹩 +ac@@ +歇 +fas@@ +抄 +牌 +浦 +榭 +lan@@ +巺 +刁 +secon@@ +顒 +个 +鲒 +嗨 +out +凤 +褫 +瑮 +珏 +惦 +斝 +监 +土 +did +date +陋 +眉 +湴 +谎 +撖 +礞 +抑 +旻 +倩 +蟑 +produ@@ +忍 +free +瓜 +康 +晾 +偏 +麇 +缱 +唏 +杪 +戥 +坳 +皲 +拘 +簋 +怆 +负 +陬 +埽 +皞 +素 +锐 +苘 +菀 +嚜 +免 +嫌 +靡 +d +尪 +颧 +苷 +de@@ +inc@@ +策 +浠 +窾 +么 +壁 +pi@@ +荟 +愣 +砫 +巻 +ke +旌 +咉 +矢 +婺 +绝 +线 +奂 +袋 +喻 +贡 +鍒 +逛 +days +疟 +筇 +髃 +锛 +俱 +缅 +锊 +骟 +belie@@ +跏 +岜 +睚 +蜊 +铝 +闭 +麈 +趺 +锜 +彻 +缟 +甭 +苞 +钥 +ph@@ +ef@@ +灼 +銮 +塍 +淙 +鸷 +撼 +浒 +though +或 +av@@ +荇 +要 +road +wn +纺 +师 +裇 +颚 +end +汜 +驰 +8 +椹 +牂 +ties +侪 +樉 +扎 +吞 +蕤 +垦 +茜 +泌 +wor@@ +艋 +次 +珙 +建 +切 +盱 +簌 +bus +ten@@ +check +硅 +概 +袒 +厚 +馐 +橐 +涵 +抢 +兖 +颠 +扑 +渐 +底 +獒 +瘴 +喝 +期 +踪 +镭 +糕 +翡 +养 +苺 +gi@@ +顷 +蚜 +琛 +县 +槽 +滹 +钙 +ple@@ +叙 +囵 +煮 +杵 +铛 +丢 +任 +咹 +莎 +请 +喂 +旬 +枫 +颊 +圄 +霍 +耆 +阅 +嵴 +鱿 +倭 +me +咎 +sing +眸 +羽 +二 +橦 +菉 +巩 +柑 +赧 +暮 +d@@ +损 +world +隻 +鑹 +捧 +轨 +按 +啄 +聒 +炅 +湣 +詹 +饧 +柒 +恃 +掬 +爽 +料 +窎 +歹 +刿 +完 +餮 +鵀 +是 +榈 +透 +粗 +俛 +音 +份 +置 +砊 +蓬 +蘘 +缛 +going +遯 +your +ever@@ +制 +淼 +冏 +妆 +钣 +怡 +vern@@ +z@@ +弇 +砥 +蜴 +饸 +冮 +衫 +韘 +寖 +虐 +玹 +3@@ +tho@@ +闼 +旋 +煿 +嶝 +涟 +龌 +ko@@ +ge@@ +遛 +郢 +褡 +薪 +邓 +嫁 +叔 +嫤 +漠 +gue@@ +藿 +臾 +屣 +ily +早 +痴 +埴 +囊 +俩 +ours +蓦 +渗 +锟 +朦 +附 +赴 +make +灾 +汛 +埸 +吾 +栲 +翰 +磔 +汰 +椋 +锸 +搴 +蒐 +韧 +撒 +纽 +笙 +order +坼 +伷 +val@@ +烬 +梡 +瑶 +陷 +go +绤 +琉 +湖 +硷 +熹 +觇 +侥 +往 +牲 +租 +矾 +祉 +跂 +age +刘 +缃 +复 +阂 +刊 +am@@ +苻 +步 +cess +蓖 +he +喙 +畜 +鄠 +让 +雱 +噫 +sel@@ +钜 +胥 +蹬 +help +捻 +芽 +肷 +掳 +旧 +謦 +甲 +ort +搽 +哧 +骢 +吼 +口 +倚 +肽 +憨 +竦 +product +棚 +黍 +砾 +愈 +昊 +阑 +魂 +持 +献 +pa@@ +凳 +厩 +佚 +鲱 +粮 +鹋 +姬 +抉 +籇 +part +found +嗍 +提 +蛇 +籓 +盼 +裱 +暄 +妞 +喑 +惶 +wha@@ +窥 +ks +橘 +绞 +菁 +饭 +ste@@ +猞 +芘 +搧 +tain +street +呔 +懆 +袼 +肼 +on@@ +亨 +谑 +椅 +莹 +校 +躔 +颈 +圬 +匕 +mail +税 +年 +脆 +郦 +拿 +fo@@ +鑱 +改 +la +轸 +掩 +芒 +can't +彺 +觑 +邴 +埵 +莴 +伢 +腕 +阴 +tre@@ +眇 +责 +青 +钠 +point +僵 +庹 +具 +迠 +穗 +逃 +源 +咻 +今 +绻 +发 +嗝 +逆 +侈 +抓 +羌 +款 +耧 +锰 +罢 +跗 +汞 +赚 +累 +掷 +啫 +膳 +捭 +禀 +崂 +栝 +掴 +讶 +y@@ +瑾 +账 +挈 +鹬 +儁 +鳎 +骛 +釉 +矬 +潮 +ort@@ +病 +日 +o +憍 +镍 +蜛 +壤 +葑 +聚 +灭 +立 +怙 +m@@ +诙 +躲 +泡 +would +缺 +横 +违 +蛛 +ls +鹮 +鲐 +茌 +罚 +ques@@ +畦 +厍 +缳 +劭 +拐 +萍 +债 +偈 +镛 +踽 +趋 +扭 +椒 +痔 +史 +称 +thing +q@@ +fre@@ +剁 +beach +舢 +黠 +执 +饵 +欤 +骥 +蓄 +邈 +疚 +'@@ +吓 +撄 +苌 +蜢 +mar@@ +桓 +made +煦 +襁 +垃 +姓 +送 +柜 +埪 +怠 +蚍 +little +殴 +炕 +蛙 +伱 +禁 +睺 +捍 +颀 +猬 +蟊 +岢 +o@@ +纩 +妨 +阡 +率 +蒋 +寐 +孚 +想 +洁 +沮 +铦 +镟 +潲 +杮 +tal +镯 +虞 +鶒 +椐 +簦 +锈 +顗 +仑 +额 +掼 +耿 +荑 +撙 +谍 +沃 +惊 +碉 +皓 +峯 +炮 +厶 +拼 +得 +帅 +蜎 +莠 +近 +诩 +喓 +sequence +愉 +ure +枯 +thous@@ +槅 +移 +菡 +菪 +ten +癍 +珀 +湎 +瓿 +名 +妇 +再 +傺 +蚬 +荡 +孽 +匜 +堠 +荜 +绉 +刽 +des +1@@ +留 +裎 +赐 +ving +光 +ly +睟 +遂 +琮 +俟 +岛 +蛹 +蒿 +nor@@ +钦 +麻 +纫 +coun@@ +杷 +宿 +吣 +蝎 +湃 +惬 +enjo@@ +卯 +牸 +诠 +谷 +摞 +螈 +然 +盂 +mple +萁 +灰 +畊 +when +烈 +俸 +衿 +龟 +谭 +唳 +楀 +痪 +曳 +羿 +罂 +脱 +廿 +sur@@ +拝 +洵 +湿 +鸽 +冂 +跛 +school +尡 +挡 +疭 +议 +self +拍 +溺 +垅 +瞳 +笑 +thousand +乓 +噼 +lie@@ +沿 +俣 +灏 +赈 +砭 +造 +标 +loo@@ +罅 +鳣 +翥 +铬 +诞 +酌 +佟 +歘 +瑀 +眬 +璁 +拣 +u +颤 +笏 +ur@@ +蝌 +蛟 +number +馕 +place +伐 +热 +ver@@ +淜 +嚼 +鼢 +謩 +趟 +恬 +搅 +伫 +杌 +琐 +崽 +苗 +其 +熄 +在 +泾 +毓 +very +琥 +孤 +扞 +恪 +t's +埙 +do +攮 +昴 +靥 +feel +酗 +蕫 +der +焙 +gen@@ +辛 +觞 +平 +椤 +耦 +黜 +寇 +醍 +耶 +撰 +蔌 +曜 +谂 +烛 +旦 +kno@@ +爪 +絺 +欢 +圈 +臂 +ch +谆 +荏 +巫 +擐 +嵋 +霸 +ames +wel@@ +叆 +傧 +tra@@ +隳 +唆 +澧 +焦 +窭 +剜 +菇 +锇 +锑 +枳 +娈 +侗 +橙 +愊 +泯 +茼 +荙 +遭 +蟥 +捱 +挤 +蹊 +暹 +ity +珠 +驼 +嗷 +贪 +扔 +硒 +沣 +鸡 +蕖 +仓 +looking +冦 +邳 +赝 +嵛 +chi@@ +典 +桧 +about +茏 +es@@ +缒 +蕻 +闽 +独 +骨 +尰 +鲼 +und@@ +详 +姩 +脉 +腥 +拯 +婕 +杜 +俑 +经 +they +距 +僧 +辅 +骂 +睛 +夤 +door +捊 +靴 +庅 +劓 +舣 +饿 +幻 +ry +悱 +畎 +先 +畠 +ye@@ +those +菲 +榔 +邑 +city +泖 +夕 +better +吏 +酡 +蕾 +犯 +磲 +锝 +鹌 +鹫 +you@@ +耐 +梯 +鸬 +榛 +笛 +睡 +歪 +遍 +飒 +笃 +蓝 +于 +欸 +为 +琎 +宁 +ki@@ +tle +直 +漕 +years +烙 +捏 +馅 +re +诺 +tur@@ +deci@@ +励 +佘 +bl@@ +of +噩 +阪 +梿 +孃 +杻 +覃 +瞆 +瑷 +观 +循 +泪 +six@@ +集 +cust@@ +瘠 +尽 +鱀 +虎 +来 +other +衮 +芷 +卓 +擒 +锶 +玻 +lu@@ +缝 +瀬 +缯 +嫖 +偭 +运 +厣 +顺 +璝 +锬 +悼 +off +苑 +恤 +囡 +锻 +舁 +粼 +丑 +字 +酽 +鲜 +豹 +厝 +琤 +谞 +簖 +癣 +蚌 +退 +戡 +云 +颞 +cur@@ +腻 +呗 +沼 +骤 +崭 +扯 +怍 +app@@ +存 +害 +色 +踣 +淘 +嗦 +獠 +怗 +砸 +镜 +毹 +table +@ +鲀 +寤 +桥 +嘞 +髁 +哙 +织 +嗒 +麂 +let +偁 +苎 +燧 +rou@@ +哃 +鄂 +翌 +酚 +咄 +嗥 +蒸 +虚 +囗 +条 +鹕 +挖 +per@@ +矿 +珦 +囨 +冻 +佰 +洲 +漓 +菹 +镱 +尝 +low +苜 +剞 +could +埒 +铼 +结 +侵 +星 +then +埠 +峤 +晒 +睦 +搓 +時 +铫 +偃 +might +氦 +呻 +淦 +ge +缧 +脑 +膴 +英 +pla@@ +案 +生 +顔 +记 +艰 +tic@@ +砖 +药 +宪 +涩 +鞠 +潆 +郭 +宵 +砀 +蟛 +岀 +赃 +蛤 +粢 +驶 +膂 +垤 +nee@@ +逐 +芳 +螂 +超 +change +j +锔 +箓 +笤 +弱 +畸 +分 +攸 +蛸 +烷 +脒 +昨 +咴 +羚 +芍 +卲 +噔 +飖 +蜍 +some@@ +崦 +嬛 +仍 +柳 +鹗 +増 +乙 +嫂 +骚 +巾 +憬 +刭 +顸 +磙 +伃 +孜 +碌 +堐 +祗 +鳉 +汊 +ab@@ +袄 +诚 +剡 +锷 +锕 +益 +箕 +瘾 +restaur@@ +鹣 +瘩 +矸 +his +灸 +勖 +括 +呢 +漯 +罟 +嚓 +焗 +tru@@ +赛 +伶 +垢 +擘 +镠 +惰 +贬 +惙 +捺 +sto@@ +犁 +were +艉 +佞 +配 +耙 +猢 +遗 +豊 +急 +蓟 +泓 +屑 +焊 +筲 +缈 +柔 +蜀 +珺 +怕 +淡 +. +靛 +载 +堎 +潥 +懒 +邸 +惇 +粥 +斫 +漼 +re's +簇 +修 +梏 +tr@@ +肟 +葙 +鲸 +呐 +游 +廖 +收 +鳅 +覆 +琳 +熵 +翱 +民 +飨 +螳 +媳 +辖 +旯 +榴 +瑰 +嗯 +渤 +ic +熔 +暝 +柘 +鬟 +斋 +夸 +晢 +氰 +炫 +dn't +押 +撺 +烁 +偶 +貅 +冀 +胎 +糊 +润 +咭 +各 +摐 +錞 +垌 +插 +舯 +嶙 +筋 +住 +酆 +镰 +工 +嗲 +铱 +暖 +off@@ +茔 +髂 +挺 +瞑 +伤 +忌 +僬 +萜 +普 +that@@ +爵 +稍 +瓠 +崛 +um +磐 +投 +畅 +缕 +楯 +悒 +判 +筢 +馇 +芰 +遒 +黩 +迪 +蝾 +腈 +才 +峙 +悟 +禩 +惋 +five +局 +砘 +ver +恋 +斓 +蹀 +犹 +绶 +ep +喛 +亩 +嵘 +汆 +狸 +迸 +盉 +line +妣 +躐 +琢 +赣 +le +疬 +穿 +焓 +跳 +匪 +feat@@ +鹦 +璠 +蔸 +百 +愁 +芋 +吙 +谚 +熳 +哩 +ad +轧 +祇 +泬 +瘳 +列 +簃 +谦 +lea@@ +垴 +啤 +滇 +饮 +瞰 +獭 +倏 +肿 +宜 +涮 +礓 +数 +屌 +濒 +蟜 +上 +詝 +褐 +眭 +菟 +瘅 +蝙 +眜 +羡 +硖 +背 +芣 +歃 +红 +血 +混 +橞 +樽 +纶 +圭 +stay +冗 +竑 +玥 +它 +怎 +薜 +殆 +看 +剖 +棠 +瘙 +be@@ +裤 +篙 +带 +助 +骀 +锍 +廓 +库 +绅 +劂 +蝻 +锘 +濩 +等 +魑 +酿 +阆 +弑 +悖 +姹 +傀 +which +股 +湲 +贝 +相 +茑 +荔 +钲 +致 +沦 +另 +桑 +佳 +班 +昼 +埂 +剕 +箐 +岵 +涨 +柩 +两 +勰 +氮 +稽 +匝 +ting +瘀 +缔 +鹉 +雕 +蛮 +镞 +魈 +謇 +me@@ +set +豇 +h +秫 +荬 +赢 +沩 +向 +石 +踖 +迥 +受 +抅 +镘 +嚭 +双 +锚 +ex@@ +辉 +谠 +綉 +ws +吟 +湔 +ll@@ +市 +娥 +堢 +跽 +处 +厂 +朓 +笸 +悭 +孥 +嘀 +恻 +皱 +塄 +who@@ +妙 +栽 +瓷 +稔 +碧 +哽 +pol@@ +徨 +s +邋 +息 +樨 +鼾 +拱 +谟 +墡 +匆 +speci@@ +ha@@ +庐 +鹿 +ak@@ +镣 +m +唯 +州 +筒 +性 +髋 +哄 +镡 +贇 +and +菩 +姻 +聪 +tion +催 +醌 +唢 +雾 +堂 +芝 +擢 +匈 +悸 +钢 +gy +徉 +渡 +誊 +ti@@ +军 +铸 +和 +沄 +兽 +短 +育 +韪 +邀 +谴 +耋 +浩 +public +胝 +猴 +six +黧 +being +弊 +捂 +ical +癖 +堆 +伧 +割 +引 +la@@ +鼙 +逻 +堪 +cap@@ +首 +谝 +瘦 +硐 +郑 +凑 +fu@@ +b@@ +睨 +骠 +佼 +篦 +贵 +铌 +act +呑 +竖 +莅 +陕 +飙 +黏 +镆 +屦 +仨 +敫 +马 +埜 +垇 +阇 +耒 +笩 +蓂 +妃 +讨 +see@@ +吊 +踊 +弥 +梅 +坑 +渫 +au@@ +赡 +坛 +苹 +don@@ +察 +俚 +fir@@ +濑 +块 +浏 +唵 +婴 +恙 +隈 +麽 +ca@@ +莼 +御 +鞋 +禧 +衰 +潩 +茬 +ven +瞌 +鸥 +凭 +咯 +饺 +耄 +uni@@ +瑟 +煟 +舟 +尅 +帚 +鼋 +嫔 +婄 +赟 +棼 +沪 +秃 +粧 +roo@@ +蚳 +亏 +备 +压 +悍 +嚅 +fin@@ +交 +癔 +跞 +莪 +闻 +罾 +炁 +钻 +鹆 +友 +傣 +糁 +service +邾 +窝 +扉 +鲡 +盛 +玖 +卫 +ne@@ +眛 +鸟 +党 +杼 +碓 +篚 +裆 +钟 +大 +介 +揩 +砻 +卅 +弟 +颛 +嫪 +代 +会 +悻 +者 +箍 +番 +疯 +sp@@ +聃 +瀚 +挥 +拷 +氡 +璎 +肪 +tan +ul@@ +蠃 +龊 +家 +挽 +must +蹭 +樟 +令 +饶 +buy +忖 +娠 +手 +house +贷 +嘚 +莺 +茛 +宥 +刼 +傥 +rest +厄 +洙 +牝 +林 +铆 +觳 +嬢 +芥 +充 +絮 +陲 +zer@@ +藤 +air@@ +贤 +趾 +孝 +袖 +氇 +章 +柷 +恓 +麹 +胧 +came +休 +舲 +籼 +惕 +泼 +馨 +町 +wer +鹧 +咚 +崔 +嵂 +蝈 +ils +湛 +报 +蜷 +削 +根 +恣 +呙 +郫 +把 +窕 +癌 +xt +榘 +傫 +用 +撕 +蚩 +菰 +崖 +酐 +襄 +cu@@ +呤 +帯 +炊 +揲 +啸 +鲶 +ve@@ +艟 +嗜 +ili@@ +凹 +球 +鬓 +荼 +给 +亘 +醯 +燔 +鳕 +侄 +簪 +洳 +嘛 +稠 +'t +氘 +暍 +指 +泆 +总 +offer +糅 +膀 +毋 +蹲 +煅 +桔 +什 +浜 +八 +涧 +跬 +祷 +湫 +脸 +描 +pr@@ +狱 +赉 +砼 +袜 +馑 +枪 +碁 +娜 +辇 +颐 +捩 +峥 +聆 +善 +询 +疝 +坜 +碚 +缥 +鼯 +钮 +腘 +溥 +脔 +殁 +肮 +泮 +捐 +槛 +吆 +河 +溆 +度 +殒 +骕 +饹 +cour@@ +臜 +空 +2@@ +允 +枉 +蒯 +or@@ +趔 +菠 +栌 +view +possi@@ +仗 +鳄 +摊 +寝 +躯 +湝 +后 +删 +揪 +徐 +寒 +坨 +挣 +举 +氅 +臻 +饔 +丁 +彦 +泉 +曷 +衅 +ei@@ +呸 +狍 +甓 +禽 +薄 +shipping +ght +慵 +幽 +匣 +炬 +访 +four +秒 +樗 +陶 +脓 +枰 +磷 +哕 +君 +脲 +灯 +回 +索 +璺 +邡 +愍 +薏 +辄 +珽 +離 +鬃 +赊 +枲 +邰 +佷 +颏 +寺 +抵 +鲅 +刎 +給 +戴 +溲 +袢 +less +逯 +封 +food +匮 +关 +尘 +皤 +鳍 +搏 +幌 +连 +杠 +蹋 +彷 +虺 +怀 +雏 +钿 +澄 +扶 +错 +樋 +黉 +胄 +薇 +阿 +墁 +觜 +利 +汵 +羟 +杀 +淋 +蓁 +腧 +哞 +was +钊 +胸 +艽 +撞 +虑 +煋 +飗 +throu@@ +门 +玦 +琪 +煸 +酵 +婌 +serv@@ +硿 +净 +夐 +撅 +頠 +want +犄 +厉 +p@@ +en +斗 +层 +玫 +life +潘 +骐 +臃 +谮 +殃 +厌 +摄 +磾 +v +dress +络 +囱 +眯 +忽 +壸 +咐 +搁 +肤 +魇 +芬 +窡 +拉 +纮 +楣 +蔬 +寄 +妯 +教 +俪 +颡 +碛 +互 +奈 +憎 +炉 +蹰 +聂 +员 +呶 +瞬 +il@@ +恿 +阙 +卡 +mi@@ +禾 +椴 +yo@@ +帀 +醵 +帝 +隔 +忒 +哑 +効 +楗 +鼱 +塽 +苴 +蜞 +健 +醅 +ju@@ +新 +程 +茗 +琰 +几 +揍 +匍 +砣 +禳 +罗 +勿 +擗 +畛 +框 +泒 +析 +沢 +偷 +繁 +嗣 +呵 +念 +so@@ +溷 +曩 +spon@@ +狼 +倔 +威 +潭 +踯 +晁 +吩 +袅 +喀 +洌 +炯 +纸 +抽 +簧 +c@@ +买 +吖 +俬 +梓 +叡 +祼 +烃 +荃 +眀 + diff --git a/funasr/runtime/onnxruntime/readme.md b/funasr/runtime/onnxruntime/readme.md new file mode 100644 index 000000000..fa2f276cb --- /dev/null +++ b/funasr/runtime/onnxruntime/readme.md @@ -0,0 +1,114 @@ + + + +## 快速使用 + +### Windows + + 安装Vs2022 打开cpp_onnx目录下的cmake工程,直接 build即可。 本仓库已经准备好所有相关依赖库。 + + Windows下已经预置fftw3及onnxruntime库 + + +### Linux +See the bottom of this page: Building Guidance + + +### 运行程序 + +tester /path/to/models/dir /path/to/wave/file + + 例如: tester /data/models /data/test.wav + +/data/models 需要包括如下两个文件: model.onnx 和vocab.txt + + +## 支持平台 +- Windows +- Linux/Unix + +## 依赖 +- fftw3 +- openblas +- onnxruntime + +## 导出onnx格式模型文件 +安装 modelscope与FunASR,依赖:torch,torchaudio,安装过程[详细参考文档](https://github.com/alibaba-damo-academy/FunASR/wiki) +```shell +pip install "modelscope[audio_asr]" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html +git clone https://github.com/alibaba/FunASR.git && cd FunASR +pip install --editable ./ +``` +导出onnx模型,[详见](https://github.com/alibaba-damo-academy/FunASR/tree/main/funasr/export),参考示例,从modelscope中模型导出: + +``` +python -m funasr.export.export_model 'damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch' "./export" true +``` + +## Building Guidance for Linux/Unix + +``` +git clone https://github.com/alibaba-damo-academy/FunASR.git && cd funasr/runtime/onnxruntime +mkdir build +cd build +# download an appropriate onnxruntime from https://github.com/microsoft/onnxruntime/releases/tag/v1.14.0 +# here we get a copy of onnxruntime for linux 64 +wget https://github.com/microsoft/onnxruntime/releases/download/v1.14.0/onnxruntime-linux-x64-1.14.0.tgz +tar -zxvf onnxruntime-linux-x64-1.14.0.tgz +# ls +# onnxruntime-linux-x64-1.14.0 onnxruntime-linux-x64-1.14.0.tgz + +#install fftw3-dev +ubuntu: apt install libfftw3-dev +centos: yum install fftw fftw-devel + +#install openblas +bash ./third_party/install_openblas.sh + +# build + cmake -DCMAKE_BUILD_TYPE=release .. -DONNXRUNTIME_DIR=/mnt/c/Users/ma139/RapidASR/cpp_onnx/build/onnxruntime-linux-x64-1.14.0 + make + + # then in the subfolder tester of current direcotry, you will see a program, tester + +```` + +### The structure of a qualified onnxruntime package. +``` +onnxruntime_xxx +├───include +└───lib +``` + +## 线程数与性能关系 + +测试环境Rocky Linux 8,仅测试cpp版本结果(未测python版本),@acely + +简述: +在3台配置不同的机器上分别编译并测试,在fftw和onnxruntime版本都相同的前提下,识别同一个30分钟的音频文件,分别测试不同onnx线程数量的表现。 + +![线程数关系](images/threadnum.png "Windows ASR") + +目前可以总结出大致规律: + +并非onnx线程数越多越好 +2线程比1线程提升显著,线程再多则提升较小 +线程数等于CPU物理核心数时效率最好 +实操建议: + +大部分场景用3-4线程性价比最高 +低配机器用2线程合适 + + + +## 演示 + +![Windows演示](images/demo.png "Windows ASR") + +## 注意 +本程序只支持 采样率16000hz, 位深16bit的 **单声道** 音频。 + + +## Acknowledge +1. We acknowledge [mayong](https://github.com/RapidAI/RapidASR/tree/main/cpp_onnx) for contributing the onnxruntime(cpp api). +2. We borrowed a lot of code from [FastASR](https://github.com/chenkui164/FastASR) for audio frontend and text-postprocess. diff --git a/funasr/runtime/onnxruntime/src/Audio.cpp b/funasr/runtime/onnxruntime/src/Audio.cpp new file mode 100644 index 000000000..53bf9d02a --- /dev/null +++ b/funasr/runtime/onnxruntime/src/Audio.cpp @@ -0,0 +1,474 @@ +#include +#include +#include +#include +#include +#include + +#include "Audio.h" + +using namespace std; + +class AudioWindow { + private: + int *window; + int in_idx; + int out_idx; + int sum; + int window_size = 0; + + public: + AudioWindow(int window_size) : window_size(window_size) + { + window = (int *)calloc(sizeof(int), window_size + 1); + in_idx = 0; + out_idx = 1; + sum = 0; + }; + ~AudioWindow(){ + free(window); + }; + int put(int val) + { + sum = sum + val - window[out_idx]; + window[in_idx] = val; + in_idx = in_idx == window_size ? 0 : in_idx + 1; + out_idx = out_idx == window_size ? 0 : out_idx + 1; + return sum; + }; +}; + +AudioFrame::AudioFrame(){}; +AudioFrame::AudioFrame(int len) : len(len) +{ + start = 0; +}; +AudioFrame::~AudioFrame(){}; +int AudioFrame::set_start(int val) +{ + start = val < 0 ? 0 : val; + return start; +}; + +int AudioFrame::set_end(int val, int max_len) +{ + + float num_samples = val - start; + float frame_length = 400; + float frame_shift = 160; + float num_new_samples = + ceil((num_samples - 400) / frame_shift) * frame_shift + frame_length; + + end = start + num_new_samples; + len = (int)num_new_samples; + if (end > max_len) + printf("frame end > max_len!!!!!!!\n"); + return end; +}; + +int AudioFrame::get_start() +{ + return start; +}; + +int AudioFrame::get_len() +{ + return len; +}; + +int AudioFrame::disp() +{ + printf("not imp!!!!\n"); + + return 0; +}; + +Audio::Audio(int data_type) : data_type(data_type) +{ + speech_buff = NULL; + speech_data = NULL; + align_size = 1360; +} + +Audio::Audio(int data_type, int size) : data_type(data_type) +{ + speech_buff = NULL; + speech_data = NULL; + align_size = (float)size; +} + +Audio::~Audio() +{ + if (speech_buff != NULL) { + free(speech_buff); + + } + + if (speech_data != NULL) { + + free(speech_data); + } +} + +void Audio::disp() +{ + printf("Audio time is %f s. len is %d\n", (float)speech_len / 16000, + speech_len); +} + +float Audio::get_time_len() +{ + return (float)speech_len / 16000; + //speech_len); +} + +bool Audio::loadwav(const char *filename) +{ + + if (speech_data != NULL) { + free(speech_data); + } + if (speech_buff != NULL) { + free(speech_buff); + } + + offset = 0; + + FILE *fp; + fp = fopen(filename, "rb"); + if (fp == nullptr) + return false; + fseek(fp, 0, SEEK_END); + uint32_t nFileLen = ftell(fp); + fseek(fp, 44, SEEK_SET); + + speech_len = (nFileLen - 44) / 2; + speech_align_len = (int)(ceil((float)speech_len / align_size) * align_size); + speech_buff = (int16_t *)malloc(sizeof(int16_t) * speech_align_len); + + if (speech_buff) + { + memset(speech_buff, 0, sizeof(int16_t) * speech_align_len); + int ret = fread(speech_buff, sizeof(int16_t), speech_len, fp); + fclose(fp); + + speech_data = (float*)malloc(sizeof(float) * speech_align_len); + memset(speech_data, 0, sizeof(float) * speech_align_len); + int i; + float scale = 1; + + if (data_type == 1) { + scale = 32768; + } + + for (i = 0; i < speech_len; i++) { + speech_data[i] = (float)speech_buff[i] / scale; + } + + AudioFrame* frame = new AudioFrame(speech_len); + frame_queue.push(frame); + + + return true; + } + else + return false; +} + + +bool Audio::loadwav(const char* buf, int nFileLen) +{ + + + + if (speech_data != NULL) { + free(speech_data); + } + if (speech_buff != NULL) { + free(speech_buff); + } + + offset = 0; + + size_t nOffset = 0; + +#define WAV_HEADER_SIZE 44 + + speech_len = (nFileLen - WAV_HEADER_SIZE) / 2; + speech_align_len = (int)(ceil((float)speech_len / align_size) * align_size); + speech_buff = (int16_t*)malloc(sizeof(int16_t) * speech_align_len); + if (speech_buff) + { + memset(speech_buff, 0, sizeof(int16_t) * speech_align_len); + memcpy((void*)speech_buff, (const void*)(buf + WAV_HEADER_SIZE), speech_len * sizeof(int16_t)); + + + speech_data = (float*)malloc(sizeof(float) * speech_align_len); + memset(speech_data, 0, sizeof(float) * speech_align_len); + int i; + float scale = 1; + + if (data_type == 1) { + scale = 32768; + } + + for (i = 0; i < speech_len; i++) { + speech_data[i] = (float)speech_buff[i] / scale; + } + + + return true; + } + else + return false; + +} + + +bool Audio::loadpcmwav(const char* buf, int nBufLen) +{ + if (speech_data != NULL) { + free(speech_data); + } + if (speech_buff != NULL) { + free(speech_buff); + } + offset = 0; + + size_t nOffset = 0; + + + + speech_len = nBufLen / 2; + speech_align_len = (int)(ceil((float)speech_len / align_size) * align_size); + speech_buff = (int16_t*)malloc(sizeof(int16_t) * speech_align_len); + if (speech_buff) + { + memset(speech_buff, 0, sizeof(int16_t) * speech_align_len); + memcpy((void*)speech_buff, (const void*)buf, speech_len * sizeof(int16_t)); + + + speech_data = (float*)malloc(sizeof(float) * speech_align_len); + memset(speech_data, 0, sizeof(float) * speech_align_len); + + + int i; + float scale = 1; + + if (data_type == 1) { + scale = 32768; + } + + for (i = 0; i < speech_len; i++) { + speech_data[i] = (float)speech_buff[i] / scale; + } + + AudioFrame* frame = new AudioFrame(speech_len); + frame_queue.push(frame); + return true; + + } + else + return false; + + +} + +bool Audio::loadpcmwav(const char* filename) +{ + + if (speech_data != NULL) { + free(speech_data); + } + if (speech_buff != NULL) { + free(speech_buff); + } + offset = 0; + + FILE* fp; + fp = fopen(filename, "rb"); + if (fp == nullptr) + return false; + fseek(fp, 0, SEEK_END); + uint32_t nFileLen = ftell(fp); + fseek(fp, 0, SEEK_SET); + + speech_len = (nFileLen) / 2; + speech_align_len = (int)(ceil((float)speech_len / align_size) * align_size); + speech_buff = (int16_t*)malloc(sizeof(int16_t) * speech_align_len); + if (speech_buff) + { + memset(speech_buff, 0, sizeof(int16_t) * speech_align_len); + int ret = fread(speech_buff, sizeof(int16_t), speech_len, fp); + fclose(fp); + + speech_data = (float*)malloc(sizeof(float) * speech_align_len); + memset(speech_data, 0, sizeof(float) * speech_align_len); + + + + int i; + float scale = 1; + + if (data_type == 1) { + scale = 32768; + } + + for (i = 0; i < speech_len; i++) { + speech_data[i] = (float)speech_buff[i] / scale; + } + + + AudioFrame* frame = new AudioFrame(speech_len); + frame_queue.push(frame); + + + return true; + } + else + return false; + +} + + +int Audio::fetch_chunck(float *&dout, int len) +{ + if (offset >= speech_align_len) { + dout = NULL; + return S_ERR; + } else if (offset == speech_align_len - len) { + dout = speech_data + offset; + offset = speech_align_len; + // 临时解决 + AudioFrame *frame = frame_queue.front(); + frame_queue.pop(); + delete frame; + + return S_END; + } else { + dout = speech_data + offset; + offset += len; + return S_MIDDLE; + } +} + +int Audio::fetch(float *&dout, int &len, int &flag) +{ + if (frame_queue.size() > 0) { + AudioFrame *frame = frame_queue.front(); + frame_queue.pop(); + + dout = speech_data + frame->get_start(); + len = frame->get_len(); + delete frame; + flag = S_END; + return 1; + } else { + return 0; + } +} + +void Audio::padding() +{ + + float num_samples = speech_len; + float frame_length = 400; + float frame_shift = 160; + float num_frames = floor((num_samples + (frame_shift / 2)) / frame_shift); + float num_new_samples = (num_frames - 1) * frame_shift + frame_length; + float num_padding = num_new_samples - num_samples; + float num_left_padding = (frame_length - frame_shift) / 2; + float num_right_padding = num_padding - num_left_padding; + + float *new_data = (float *)malloc(num_new_samples * sizeof(float)); + int i; + int tmp_off = 0; + for (i = 0; i < num_left_padding; i++) { + int ii = num_left_padding - i - 1; + new_data[i] = speech_data[ii]; + } + tmp_off = num_left_padding; + memcpy(new_data + tmp_off, speech_data, speech_len * sizeof(float)); + tmp_off += speech_len; + + for (i = 0; i < num_right_padding; i++) { + int ii = speech_len - i - 1; + new_data[tmp_off + i] = speech_data[ii]; + } + free(speech_data); + speech_data = new_data; + speech_len = num_new_samples; + + AudioFrame *frame = new AudioFrame(num_new_samples); + frame_queue.push(frame); + frame = frame_queue.front(); + frame_queue.pop(); + delete frame; +} + +#define UNTRIGGERED 0 +#define TRIGGERED 1 + +#define SPEECH_LEN_5S (16000 * 5) +#define SPEECH_LEN_10S (16000 * 10) +#define SPEECH_LEN_20S (16000 * 20) +#define SPEECH_LEN_30S (16000 * 30) + +void Audio::split() +{ + VadInst *handle = WebRtcVad_Create(); + WebRtcVad_Init(handle); + WebRtcVad_set_mode(handle, 2); + int window_size = 10; + AudioWindow audiowindow(window_size); + int status = UNTRIGGERED; + int offset = 0; + int fs = 16000; + int step = 480; + + AudioFrame *frame; + + frame = frame_queue.front(); + frame_queue.pop(); + delete frame; + frame = NULL; + + while (offset < speech_len - step) { + int n = WebRtcVad_Process(handle, fs, speech_buff + offset, step); + if (status == UNTRIGGERED && audiowindow.put(n) >= window_size - 1) { + frame = new AudioFrame(); + int start = offset - step * (window_size - 1); + frame->set_start(start); + status = TRIGGERED; + } else if (status == TRIGGERED) { + int win_weight = audiowindow.put(n); + int voice_len = (offset - frame->get_start()); + int gap = 0; + if (voice_len < SPEECH_LEN_5S) { + offset += step; + continue; + } else if (voice_len < SPEECH_LEN_10S) { + gap = 1; + } else if (voice_len < SPEECH_LEN_20S) { + gap = window_size / 5; + } else { + gap = window_size / 2; + } + + if (win_weight < gap) { + status = UNTRIGGERED; + offset = frame->set_end(offset, speech_align_len); + frame_queue.push(frame); + frame = NULL; + } + } + offset += step; + } + + if (frame != NULL) { + frame->set_end(speech_len, speech_align_len); + frame_queue.push(frame); + frame = NULL; + } + WebRtcVad_Free(handle); +} diff --git a/funasr/runtime/onnxruntime/src/CMakeLists.txt b/funasr/runtime/onnxruntime/src/CMakeLists.txt new file mode 100644 index 000000000..aea222b92 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/CMakeLists.txt @@ -0,0 +1,43 @@ + +file(GLOB files1 "*.cpp") +file(GLOB files4 "paraformer/*.cpp") + +set(files ${files1} ${files2} ${files3} ${files4}) + +# message("${files}") + +add_library(rapidasr ${files}) + +if(WIN32) + + set(EXTRA_LIBS libfftw3f-3 webrtcvad) + if(CMAKE_CL_64) + target_link_directories(rapidasr PUBLIC ${CMAKE_SOURCE_DIR}/win/lib/x64) + else() + target_link_directories(rapidasr PUBLIC ${CMAKE_SOURCE_DIR}/win/lib/x86) + endif() + target_include_directories(rapidasr PUBLIC ${CMAKE_SOURCE_DIR}/win/include ) + + target_compile_definitions(rapidasr PUBLIC -D_RPASR_API_EXPORT) +else() + + set(EXTRA_LIBS fftw3f webrtcvad pthread) + target_include_directories(rapidasr PUBLIC "/usr/local/opt/fftw/include") + target_link_directories(rapidasr PUBLIC "/usr/local/opt/fftw/lib") + + target_include_directories(rapidasr PUBLIC "/usr/local/opt/openblas/include") + target_link_directories(rapidasr PUBLIC "/usr/local/opt/openblas/lib") + + target_include_directories(rapidasr PUBLIC "/usr/include") + target_link_directories(rapidasr PUBLIC "/usr/lib64") + + target_include_directories(rapidasr PUBLIC ${FFTW3F_INCLUDE_DIR}) + target_link_directories(rapidasr PUBLIC ${FFTW3F_LIBRARY_DIR}) + include_directories(${ONNXRUNTIME_DIR}/include) +endif() + +include_directories(${CMAKE_SOURCE_DIR}/include) +target_link_libraries(rapidasr PUBLIC onnxruntime ${EXTRA_LIBS}) + + + diff --git a/funasr/runtime/onnxruntime/src/CommonStruct.h b/funasr/runtime/onnxruntime/src/CommonStruct.h new file mode 100644 index 000000000..538d38b66 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/CommonStruct.h @@ -0,0 +1,6 @@ + +#ifndef COMMONSTRUCT_H +#define COMMONSTRUCT_H + + +#endif diff --git a/funasr/runtime/onnxruntime/src/FeatureExtract.cpp b/funasr/runtime/onnxruntime/src/FeatureExtract.cpp new file mode 100644 index 000000000..1b0c3c4a8 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/FeatureExtract.cpp @@ -0,0 +1,408 @@ + +#include "precomp.h" + +using namespace std; + +FeatureExtract::FeatureExtract(int mode) : mode(mode) +{ + fftw_init(); +} + +FeatureExtract::~FeatureExtract() +{ + fftwf_free(fft_input); + fftwf_free(fft_out); + fftwf_destroy_plan(p); +} + +void FeatureExtract::reset() +{ + speech.reset(); + fqueue.reset(); +} + +int FeatureExtract::size() +{ + return fqueue.size(); +} + +void FeatureExtract::fftw_init() +{ + int fft_size = 512; + fft_input = (float *)fftwf_malloc(sizeof(float) * fft_size); + fft_out = (fftwf_complex *)fftwf_malloc(sizeof(fftwf_complex) * fft_size); + memset(fft_input, 0, sizeof(float) * fft_size); + p = fftwf_plan_dft_r2c_1d(fft_size, fft_input, fft_out, FFTW_ESTIMATE); +} + +void FeatureExtract::insert(float *din, int len, int flag) +{ + const float *window = (const float *)&window_hex; + if (mode == 3) + window = (const float *)&window_hamm_hex; + + int window_size = 400; + int fft_size = 512; + int window_shift = 160; + + speech.load(din, len); + int i, j; + float tmp_feature[80]; + if (mode == 0 || mode == 2 || mode == 3) { + int ll = (speech.size() - 400) / 160 + 1; + fqueue.reinit(ll); + } + + for (i = 0; i <= speech.size() - 400; i = i + window_shift) { + float tmp_mean = 0; + for (j = 0; j < window_size; j++) { + tmp_mean += speech[i + j]; + } + + tmp_mean = tmp_mean / window_size; + + float pre_val = (float)speech[i] - tmp_mean; + + for (j = 0; j < window_size; j++) { + float win = window[j]; + float cur_val = (float)speech[i + j] - tmp_mean; + fft_input[j] = win * (cur_val - 0.97 * pre_val); + pre_val = cur_val; + } + + fftwf_execute(p); + + melspect((float *)fft_out, tmp_feature); + int tmp_flag = S_MIDDLE; + if (flag == S_END && i > speech.size() - 560) + tmp_flag = S_END; + + fqueue.push(tmp_feature, tmp_flag); + } + speech.update(i); +} + +bool FeatureExtract::fetch(Tensor *&dout) +{ + if (fqueue.size() < 1) { + return false; + } else { + dout = fqueue.pop(); + return true; + } +} + +void FeatureExtract::global_cmvn(float *din) +{ + const float *std; + const float *mean; + + if (mode < 2) { + if (mode == 0) { + std = (const float *)global_cmvn_std_hex; + mean = (const float *)global_cmvn_mean_hex; + } else { + std = (const float *)global_cmvn_std_online_hex; + mean = (const float *)global_cmvn_mean_online_hex; + } + + int i; + for (i = 0; i < 80; i++) { + float tmp = din[i] < 1e-7 ? 1e-7 : din[i]; + tmp = log(tmp); + din[i] = (tmp - mean[i]) / std[i]; + } + } else { + int i; + + int val = 0x34000000; + float min_resol = *((float *)&val); + + for (i = 0; i < 80; i++) { + float tmp = din[i] < min_resol ? min_resol : din[i]; + din[i] = log(tmp); + } + } +} + +void FeatureExtract::melspect(float *din, float *dout) +{ + float fftmag[256]; +// float tmp; + const float *melcoe = (const float *)melcoe_hex; + int i; + for (i = 0; i < 256; i++) { + float real = din[2 * i]; + float imag = din[2 * i + 1]; + fftmag[i] = real * real + imag * imag; + } + dout[0] = melcoe[0] * fftmag[1] + melcoe[1] * fftmag[2]; + dout[1] = melcoe[2] * fftmag[2]; + dout[2] = melcoe[3] * fftmag[3]; + dout[3] = melcoe[4] * fftmag[3] + melcoe[5] * fftmag[4]; + dout[4] = melcoe[6] * fftmag[4] + melcoe[7] * fftmag[5]; + dout[5] = melcoe[8] * fftmag[5] + melcoe[9] * fftmag[6]; + dout[6] = melcoe[10] * fftmag[6] + melcoe[11] * fftmag[7]; + dout[7] = melcoe[12] * fftmag[7]; + dout[8] = melcoe[13] * fftmag[8]; + dout[9] = melcoe[14] * fftmag[8] + melcoe[15] * fftmag[9]; + dout[10] = melcoe[16] * fftmag[9] + melcoe[17] * fftmag[10]; + dout[11] = melcoe[18] * fftmag[10] + melcoe[19] * fftmag[11]; + dout[12] = melcoe[20] * fftmag[11] + melcoe[21] * fftmag[12] + + melcoe[22] * fftmag[13]; + dout[13] = melcoe[23] * fftmag[12] + melcoe[24] * fftmag[13] + + melcoe[25] * fftmag[14]; + dout[14] = melcoe[26] * fftmag[14] + melcoe[27] * fftmag[15]; + dout[15] = melcoe[28] * fftmag[15] + melcoe[29] * fftmag[16]; + dout[16] = melcoe[30] * fftmag[16] + melcoe[31] * fftmag[17]; + dout[17] = melcoe[32] * fftmag[17] + melcoe[33] * fftmag[18]; + dout[18] = melcoe[34] * fftmag[18] + melcoe[35] * fftmag[19] + + melcoe[36] * fftmag[20]; + dout[19] = melcoe[37] * fftmag[19] + melcoe[38] * fftmag[20] + + melcoe[39] * fftmag[21]; + dout[20] = melcoe[40] * fftmag[21] + melcoe[41] * fftmag[22]; + dout[21] = melcoe[42] * fftmag[22] + melcoe[43] * fftmag[23] + + melcoe[44] * fftmag[24]; + dout[22] = melcoe[45] * fftmag[23] + melcoe[46] * fftmag[24] + + melcoe[47] * fftmag[25]; + dout[23] = melcoe[48] * fftmag[25] + melcoe[49] * fftmag[26] + + melcoe[50] * fftmag[27]; + dout[24] = melcoe[51] * fftmag[26] + melcoe[52] * fftmag[27] + + melcoe[53] * fftmag[28]; + dout[25] = melcoe[54] * fftmag[28] + melcoe[55] * fftmag[29] + + melcoe[56] * fftmag[30]; + dout[26] = melcoe[57] * fftmag[29] + melcoe[58] * fftmag[30] + + melcoe[59] * fftmag[31] + melcoe[60] * fftmag[32]; + dout[27] = melcoe[61] * fftmag[31] + melcoe[62] * fftmag[32] + + melcoe[63] * fftmag[33]; + dout[28] = melcoe[64] * fftmag[33] + melcoe[65] * fftmag[34] + + melcoe[66] * fftmag[35]; + dout[29] = melcoe[67] * fftmag[34] + melcoe[68] * fftmag[35] + + melcoe[69] * fftmag[36] + melcoe[70] * fftmag[37]; + dout[30] = melcoe[71] * fftmag[36] + melcoe[72] * fftmag[37] + + melcoe[73] * fftmag[38] + melcoe[74] * fftmag[39]; + dout[31] = melcoe[75] * fftmag[38] + melcoe[76] * fftmag[39] + + melcoe[77] * fftmag[40] + melcoe[78] * fftmag[41]; + dout[32] = melcoe[79] * fftmag[40] + melcoe[80] * fftmag[41] + + melcoe[81] * fftmag[42] + melcoe[82] * fftmag[43]; + dout[33] = melcoe[83] * fftmag[42] + melcoe[84] * fftmag[43] + + melcoe[85] * fftmag[44] + melcoe[86] * fftmag[45]; + dout[34] = melcoe[87] * fftmag[44] + melcoe[88] * fftmag[45] + + melcoe[89] * fftmag[46] + melcoe[90] * fftmag[47]; + dout[35] = melcoe[91] * fftmag[46] + melcoe[92] * fftmag[47] + + melcoe[93] * fftmag[48] + melcoe[94] * fftmag[49]; + dout[36] = melcoe[95] * fftmag[48] + melcoe[96] * fftmag[49] + + melcoe[97] * fftmag[50] + melcoe[98] * fftmag[51]; + dout[37] = melcoe[99] * fftmag[50] + melcoe[100] * fftmag[51] + + melcoe[101] * fftmag[52] + melcoe[102] * fftmag[53] + + melcoe[103] * fftmag[54]; + dout[38] = melcoe[104] * fftmag[52] + melcoe[105] * fftmag[53] + + melcoe[106] * fftmag[54] + melcoe[107] * fftmag[55] + + melcoe[108] * fftmag[56]; + dout[39] = melcoe[109] * fftmag[55] + melcoe[110] * fftmag[56] + + melcoe[111] * fftmag[57] + melcoe[112] * fftmag[58]; + dout[40] = melcoe[113] * fftmag[57] + melcoe[114] * fftmag[58] + + melcoe[115] * fftmag[59] + melcoe[116] * fftmag[60] + + melcoe[117] * fftmag[61]; + dout[41] = melcoe[118] * fftmag[59] + melcoe[119] * fftmag[60] + + melcoe[120] * fftmag[61] + melcoe[121] * fftmag[62] + + melcoe[122] * fftmag[63] + melcoe[123] * fftmag[64]; + dout[42] = melcoe[124] * fftmag[62] + melcoe[125] * fftmag[63] + + melcoe[126] * fftmag[64] + melcoe[127] * fftmag[65] + + melcoe[128] * fftmag[66]; + dout[43] = melcoe[129] * fftmag[65] + melcoe[130] * fftmag[66] + + melcoe[131] * fftmag[67] + melcoe[132] * fftmag[68] + + melcoe[133] * fftmag[69]; + dout[44] = melcoe[134] * fftmag[67] + melcoe[135] * fftmag[68] + + melcoe[136] * fftmag[69] + melcoe[137] * fftmag[70] + + melcoe[138] * fftmag[71] + melcoe[139] * fftmag[72]; + dout[45] = melcoe[140] * fftmag[70] + melcoe[141] * fftmag[71] + + melcoe[142] * fftmag[72] + melcoe[143] * fftmag[73] + + melcoe[144] * fftmag[74] + melcoe[145] * fftmag[75]; + dout[46] = melcoe[146] * fftmag[73] + melcoe[147] * fftmag[74] + + melcoe[148] * fftmag[75] + melcoe[149] * fftmag[76] + + melcoe[150] * fftmag[77] + melcoe[151] * fftmag[78]; + dout[47] = melcoe[152] * fftmag[76] + melcoe[153] * fftmag[77] + + melcoe[154] * fftmag[78] + melcoe[155] * fftmag[79] + + melcoe[156] * fftmag[80] + melcoe[157] * fftmag[81]; + dout[48] = melcoe[158] * fftmag[79] + melcoe[159] * fftmag[80] + + melcoe[160] * fftmag[81] + melcoe[161] * fftmag[82] + + melcoe[162] * fftmag[83] + melcoe[163] * fftmag[84]; + dout[49] = melcoe[164] * fftmag[82] + melcoe[165] * fftmag[83] + + melcoe[166] * fftmag[84] + melcoe[167] * fftmag[85] + + melcoe[168] * fftmag[86] + melcoe[169] * fftmag[87] + + melcoe[170] * fftmag[88]; + dout[50] = melcoe[171] * fftmag[85] + melcoe[172] * fftmag[86] + + melcoe[173] * fftmag[87] + melcoe[174] * fftmag[88] + + melcoe[175] * fftmag[89] + melcoe[176] * fftmag[90] + + melcoe[177] * fftmag[91]; + dout[51] = melcoe[178] * fftmag[89] + melcoe[179] * fftmag[90] + + melcoe[180] * fftmag[91] + melcoe[181] * fftmag[92] + + melcoe[182] * fftmag[93] + melcoe[183] * fftmag[94] + + melcoe[184] * fftmag[95]; + dout[52] = melcoe[185] * fftmag[92] + melcoe[186] * fftmag[93] + + melcoe[187] * fftmag[94] + melcoe[188] * fftmag[95] + + melcoe[189] * fftmag[96] + melcoe[190] * fftmag[97] + + melcoe[191] * fftmag[98]; + dout[53] = melcoe[192] * fftmag[96] + melcoe[193] * fftmag[97] + + melcoe[194] * fftmag[98] + melcoe[195] * fftmag[99] + + melcoe[196] * fftmag[100] + melcoe[197] * fftmag[101] + + melcoe[198] * fftmag[102]; + dout[54] = melcoe[199] * fftmag[99] + melcoe[200] * fftmag[100] + + melcoe[201] * fftmag[101] + melcoe[202] * fftmag[102] + + melcoe[203] * fftmag[103] + melcoe[204] * fftmag[104] + + melcoe[205] * fftmag[105] + melcoe[206] * fftmag[106]; + dout[55] = melcoe[207] * fftmag[103] + melcoe[208] * fftmag[104] + + melcoe[209] * fftmag[105] + melcoe[210] * fftmag[106] + + melcoe[211] * fftmag[107] + melcoe[212] * fftmag[108] + + melcoe[213] * fftmag[109] + melcoe[214] * fftmag[110]; + dout[56] = melcoe[215] * fftmag[107] + melcoe[216] * fftmag[108] + + melcoe[217] * fftmag[109] + melcoe[218] * fftmag[110] + + melcoe[219] * fftmag[111] + melcoe[220] * fftmag[112] + + melcoe[221] * fftmag[113] + melcoe[222] * fftmag[114]; + dout[57] = melcoe[223] * fftmag[111] + melcoe[224] * fftmag[112] + + melcoe[225] * fftmag[113] + melcoe[226] * fftmag[114] + + melcoe[227] * fftmag[115] + melcoe[228] * fftmag[116] + + melcoe[229] * fftmag[117] + melcoe[230] * fftmag[118] + + melcoe[231] * fftmag[119]; + dout[58] = melcoe[232] * fftmag[115] + melcoe[233] * fftmag[116] + + melcoe[234] * fftmag[117] + melcoe[235] * fftmag[118] + + melcoe[236] * fftmag[119] + melcoe[237] * fftmag[120] + + melcoe[238] * fftmag[121] + melcoe[239] * fftmag[122] + + melcoe[240] * fftmag[123]; + dout[59] = melcoe[241] * fftmag[120] + melcoe[242] * fftmag[121] + + melcoe[243] * fftmag[122] + melcoe[244] * fftmag[123] + + melcoe[245] * fftmag[124] + melcoe[246] * fftmag[125] + + melcoe[247] * fftmag[126] + melcoe[248] * fftmag[127] + + melcoe[249] * fftmag[128]; + dout[60] = melcoe[250] * fftmag[124] + melcoe[251] * fftmag[125] + + melcoe[252] * fftmag[126] + melcoe[253] * fftmag[127] + + melcoe[254] * fftmag[128] + melcoe[255] * fftmag[129] + + melcoe[256] * fftmag[130] + melcoe[257] * fftmag[131] + + melcoe[258] * fftmag[132]; + dout[61] = melcoe[259] * fftmag[129] + melcoe[260] * fftmag[130] + + melcoe[261] * fftmag[131] + melcoe[262] * fftmag[132] + + melcoe[263] * fftmag[133] + melcoe[264] * fftmag[134] + + melcoe[265] * fftmag[135] + melcoe[266] * fftmag[136] + + melcoe[267] * fftmag[137]; + dout[62] = melcoe[268] * fftmag[133] + melcoe[269] * fftmag[134] + + melcoe[270] * fftmag[135] + melcoe[271] * fftmag[136] + + melcoe[272] * fftmag[137] + melcoe[273] * fftmag[138] + + melcoe[274] * fftmag[139] + melcoe[275] * fftmag[140] + + melcoe[276] * fftmag[141] + melcoe[277] * fftmag[142]; + dout[63] = melcoe[278] * fftmag[138] + melcoe[279] * fftmag[139] + + melcoe[280] * fftmag[140] + melcoe[281] * fftmag[141] + + melcoe[282] * fftmag[142] + melcoe[283] * fftmag[143] + + melcoe[284] * fftmag[144] + melcoe[285] * fftmag[145] + + melcoe[286] * fftmag[146] + melcoe[287] * fftmag[147]; + dout[64] = melcoe[288] * fftmag[143] + melcoe[289] * fftmag[144] + + melcoe[290] * fftmag[145] + melcoe[291] * fftmag[146] + + melcoe[292] * fftmag[147] + melcoe[293] * fftmag[148] + + melcoe[294] * fftmag[149] + melcoe[295] * fftmag[150] + + melcoe[296] * fftmag[151] + melcoe[297] * fftmag[152] + + melcoe[298] * fftmag[153]; + dout[65] = melcoe[299] * fftmag[148] + melcoe[300] * fftmag[149] + + melcoe[301] * fftmag[150] + melcoe[302] * fftmag[151] + + melcoe[303] * fftmag[152] + melcoe[304] * fftmag[153] + + melcoe[305] * fftmag[154] + melcoe[306] * fftmag[155] + + melcoe[307] * fftmag[156] + melcoe[308] * fftmag[157] + + melcoe[309] * fftmag[158]; + dout[66] = melcoe[310] * fftmag[154] + melcoe[311] * fftmag[155] + + melcoe[312] * fftmag[156] + melcoe[313] * fftmag[157] + + melcoe[314] * fftmag[158] + melcoe[315] * fftmag[159] + + melcoe[316] * fftmag[160] + melcoe[317] * fftmag[161] + + melcoe[318] * fftmag[162] + melcoe[319] * fftmag[163] + + melcoe[320] * fftmag[164]; + dout[67] = melcoe[321] * fftmag[159] + melcoe[322] * fftmag[160] + + melcoe[323] * fftmag[161] + melcoe[324] * fftmag[162] + + melcoe[325] * fftmag[163] + melcoe[326] * fftmag[164] + + melcoe[327] * fftmag[165] + melcoe[328] * fftmag[166] + + melcoe[329] * fftmag[167] + melcoe[330] * fftmag[168] + + melcoe[331] * fftmag[169] + melcoe[332] * fftmag[170]; + dout[68] = melcoe[333] * fftmag[165] + melcoe[334] * fftmag[166] + + melcoe[335] * fftmag[167] + melcoe[336] * fftmag[168] + + melcoe[337] * fftmag[169] + melcoe[338] * fftmag[170] + + melcoe[339] * fftmag[171] + melcoe[340] * fftmag[172] + + melcoe[341] * fftmag[173] + melcoe[342] * fftmag[174] + + melcoe[343] * fftmag[175] + melcoe[344] * fftmag[176]; + dout[69] = melcoe[345] * fftmag[171] + melcoe[346] * fftmag[172] + + melcoe[347] * fftmag[173] + melcoe[348] * fftmag[174] + + melcoe[349] * fftmag[175] + melcoe[350] * fftmag[176] + + melcoe[351] * fftmag[177] + melcoe[352] * fftmag[178] + + melcoe[353] * fftmag[179] + melcoe[354] * fftmag[180] + + melcoe[355] * fftmag[181] + melcoe[356] * fftmag[182]; + dout[70] = melcoe[357] * fftmag[177] + melcoe[358] * fftmag[178] + + melcoe[359] * fftmag[179] + melcoe[360] * fftmag[180] + + melcoe[361] * fftmag[181] + melcoe[362] * fftmag[182] + + melcoe[363] * fftmag[183] + melcoe[364] * fftmag[184] + + melcoe[365] * fftmag[185] + melcoe[366] * fftmag[186] + + melcoe[367] * fftmag[187] + melcoe[368] * fftmag[188]; + dout[71] = melcoe[369] * fftmag[183] + melcoe[370] * fftmag[184] + + melcoe[371] * fftmag[185] + melcoe[372] * fftmag[186] + + melcoe[373] * fftmag[187] + melcoe[374] * fftmag[188] + + melcoe[375] * fftmag[189] + melcoe[376] * fftmag[190] + + melcoe[377] * fftmag[191] + melcoe[378] * fftmag[192] + + melcoe[379] * fftmag[193] + melcoe[380] * fftmag[194] + + melcoe[381] * fftmag[195]; + dout[72] = melcoe[382] * fftmag[189] + melcoe[383] * fftmag[190] + + melcoe[384] * fftmag[191] + melcoe[385] * fftmag[192] + + melcoe[386] * fftmag[193] + melcoe[387] * fftmag[194] + + melcoe[388] * fftmag[195] + melcoe[389] * fftmag[196] + + melcoe[390] * fftmag[197] + melcoe[391] * fftmag[198] + + melcoe[392] * fftmag[199] + melcoe[393] * fftmag[200] + + melcoe[394] * fftmag[201] + melcoe[395] * fftmag[202]; + dout[73] = melcoe[396] * fftmag[196] + melcoe[397] * fftmag[197] + + melcoe[398] * fftmag[198] + melcoe[399] * fftmag[199] + + melcoe[400] * fftmag[200] + melcoe[401] * fftmag[201] + + melcoe[402] * fftmag[202] + melcoe[403] * fftmag[203] + + melcoe[404] * fftmag[204] + melcoe[405] * fftmag[205] + + melcoe[406] * fftmag[206] + melcoe[407] * fftmag[207] + + melcoe[408] * fftmag[208] + melcoe[409] * fftmag[209]; + dout[74] = melcoe[410] * fftmag[203] + melcoe[411] * fftmag[204] + + melcoe[412] * fftmag[205] + melcoe[413] * fftmag[206] + + melcoe[414] * fftmag[207] + melcoe[415] * fftmag[208] + + melcoe[416] * fftmag[209] + melcoe[417] * fftmag[210] + + melcoe[418] * fftmag[211] + melcoe[419] * fftmag[212] + + melcoe[420] * fftmag[213] + melcoe[421] * fftmag[214] + + melcoe[422] * fftmag[215] + melcoe[423] * fftmag[216]; + dout[75] = melcoe[424] * fftmag[210] + melcoe[425] * fftmag[211] + + melcoe[426] * fftmag[212] + melcoe[427] * fftmag[213] + + melcoe[428] * fftmag[214] + melcoe[429] * fftmag[215] + + melcoe[430] * fftmag[216] + melcoe[431] * fftmag[217] + + melcoe[432] * fftmag[218] + melcoe[433] * fftmag[219] + + melcoe[434] * fftmag[220] + melcoe[435] * fftmag[221] + + melcoe[436] * fftmag[222] + melcoe[437] * fftmag[223]; + dout[76] = melcoe[438] * fftmag[217] + melcoe[439] * fftmag[218] + + melcoe[440] * fftmag[219] + melcoe[441] * fftmag[220] + + melcoe[442] * fftmag[221] + melcoe[443] * fftmag[222] + + melcoe[444] * fftmag[223] + melcoe[445] * fftmag[224] + + melcoe[446] * fftmag[225] + melcoe[447] * fftmag[226] + + melcoe[448] * fftmag[227] + melcoe[449] * fftmag[228] + + melcoe[450] * fftmag[229] + melcoe[451] * fftmag[230] + + melcoe[452] * fftmag[231]; + dout[77] = melcoe[453] * fftmag[224] + melcoe[454] * fftmag[225] + + melcoe[455] * fftmag[226] + melcoe[456] * fftmag[227] + + melcoe[457] * fftmag[228] + melcoe[458] * fftmag[229] + + melcoe[459] * fftmag[230] + melcoe[460] * fftmag[231] + + melcoe[461] * fftmag[232] + melcoe[462] * fftmag[233] + + melcoe[463] * fftmag[234] + melcoe[464] * fftmag[235] + + melcoe[465] * fftmag[236] + melcoe[466] * fftmag[237] + + melcoe[467] * fftmag[238] + melcoe[468] * fftmag[239]; + dout[78] = melcoe[469] * fftmag[232] + melcoe[470] * fftmag[233] + + melcoe[471] * fftmag[234] + melcoe[472] * fftmag[235] + + melcoe[473] * fftmag[236] + melcoe[474] * fftmag[237] + + melcoe[475] * fftmag[238] + melcoe[476] * fftmag[239] + + melcoe[477] * fftmag[240] + melcoe[478] * fftmag[241] + + melcoe[479] * fftmag[242] + melcoe[480] * fftmag[243] + + melcoe[481] * fftmag[244] + melcoe[482] * fftmag[245] + + melcoe[483] * fftmag[246] + melcoe[484] * fftmag[247]; + dout[79] = melcoe[485] * fftmag[240] + melcoe[486] * fftmag[241] + + melcoe[487] * fftmag[242] + melcoe[488] * fftmag[243] + + melcoe[489] * fftmag[244] + melcoe[490] * fftmag[245] + + melcoe[491] * fftmag[246] + melcoe[492] * fftmag[247] + + melcoe[493] * fftmag[248] + melcoe[494] * fftmag[249] + + melcoe[495] * fftmag[250] + melcoe[496] * fftmag[251] + + melcoe[497] * fftmag[252] + melcoe[498] * fftmag[253] + + melcoe[499] * fftmag[254] + melcoe[500] * fftmag[255]; + global_cmvn(dout); +} diff --git a/funasr/runtime/onnxruntime/src/FeatureExtract.h b/funasr/runtime/onnxruntime/src/FeatureExtract.h new file mode 100644 index 000000000..f16ea3a97 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/FeatureExtract.h @@ -0,0 +1,36 @@ + +#ifndef FEATUREEXTRACT_H +#define FEATUREEXTRACT_H + +#include +#include + +#include "FeatureQueue.h" +#include "SpeechWrap.h" +#include "Tensor.h" + +class FeatureExtract { + private: + SpeechWrap speech; + FeatureQueue fqueue; + int mode; + + float *fft_input; + fftwf_complex *fft_out; + fftwf_plan p; + + void fftw_init(); + void melspect(float *din, float *dout); + void global_cmvn(float *din); + + public: + FeatureExtract(int mode); + ~FeatureExtract(); + int size(); + int status(); + void reset(); + void insert(float *din, int len, int flag); + bool fetch(Tensor *&dout); +}; + +#endif diff --git a/funasr/runtime/onnxruntime/src/FeatureQueue.cpp b/funasr/runtime/onnxruntime/src/FeatureQueue.cpp new file mode 100644 index 000000000..f07633b42 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/FeatureQueue.cpp @@ -0,0 +1,59 @@ +#include "precomp.h" +FeatureQueue::FeatureQueue() +{ + buff = new Tensor(67, 80); + window_size = 67; + buff_idx = 0; +} + +FeatureQueue::~FeatureQueue() +{ + delete buff; +} + +void FeatureQueue::reinit(int size) +{ + delete buff; + buff = new Tensor(size, 80); + buff_idx = 0; + window_size = size; +} + +void FeatureQueue::reset() +{ + buff_idx = 0; +} + +void FeatureQueue::push(float *din, int flag) +{ + int offset = buff_idx * 80; + memcpy(buff->buff + offset, din, 80 * sizeof(float)); + buff_idx++; + + if (flag == S_END) { + Tensor *tmp = new Tensor(buff_idx, 80); + memcpy(tmp->buff, buff->buff, buff_idx * 80 * sizeof(float)); + feature_queue.push(tmp); + buff_idx = 0; + } else if (buff_idx == window_size) { + feature_queue.push(buff); + Tensor *tmp = new Tensor(window_size, 80); + memcpy(tmp->buff, buff->buff + (window_size - 3) * 80, + 3 * 80 * sizeof(float)); + buff_idx = 3; + buff = tmp; + } +} + +Tensor *FeatureQueue::pop() +{ + + Tensor *tmp = feature_queue.front(); + feature_queue.pop(); + return tmp; +} + +int FeatureQueue::size() +{ + return feature_queue.size(); +} diff --git a/funasr/runtime/onnxruntime/src/FeatureQueue.h b/funasr/runtime/onnxruntime/src/FeatureQueue.h new file mode 100644 index 000000000..be3360b49 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/FeatureQueue.h @@ -0,0 +1,28 @@ + +#ifndef FEATUREQUEUE_H +#define FEATUREQUEUE_H + +#include "Tensor.h" +#include +#include +using namespace std; + + +class FeatureQueue { + private: + queue *> feature_queue; + Tensor *buff; + int buff_idx; + int window_size; + + public: + FeatureQueue(); + ~FeatureQueue(); + void reinit(int size); + void reset(); + void push(float *din, int flag); + Tensor *pop(); + int size(); +}; + +#endif diff --git a/funasr/runtime/onnxruntime/src/Model.cpp b/funasr/runtime/onnxruntime/src/Model.cpp new file mode 100644 index 000000000..ddd4fd0b4 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/Model.cpp @@ -0,0 +1,11 @@ +#include "precomp.h" + +Model *create_model(const char *path,int nThread) +{ + Model *mm; + + + mm = new paraformer::ModelImp(path, nThread); + + return mm; +} diff --git a/funasr/runtime/onnxruntime/src/SpeechWrap.cpp b/funasr/runtime/onnxruntime/src/SpeechWrap.cpp new file mode 100644 index 000000000..60d0a2b70 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/SpeechWrap.cpp @@ -0,0 +1,39 @@ +#include "precomp.h" + +SpeechWrap::SpeechWrap() +{ + cache_size = 0; +} + +SpeechWrap::~SpeechWrap() +{ +} + +void SpeechWrap::reset() +{ + cache_size = 0; +} + +void SpeechWrap::load(float *din, int len) +{ + in = din; + in_size = len; + total_size = cache_size + in_size; +} + +int SpeechWrap::size() +{ + return total_size; +} + +void SpeechWrap::update(int offset) +{ + int in_offset = offset - cache_size; + cache_size = (total_size - offset); + memcpy(cache, in + in_offset, cache_size * sizeof(float)); +} + +float &SpeechWrap::operator[](int i) +{ + return i < cache_size ? cache[i] : in[i - cache_size]; +} diff --git a/funasr/runtime/onnxruntime/src/SpeechWrap.h b/funasr/runtime/onnxruntime/src/SpeechWrap.h new file mode 100644 index 000000000..5d3ee4087 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/SpeechWrap.h @@ -0,0 +1,26 @@ + +#ifndef SPEECHWRAP_H +#define SPEECHWRAP_H + +#include + +class SpeechWrap { + private: + float cache[400]; + int cache_size; + float *in; + int in_size; + int total_size; + int next_cache_size; + + public: + SpeechWrap(); + ~SpeechWrap(); + void load(float *din, int len); + void update(int offset); + void reset(); + int size(); + float &operator[](int i); +}; + +#endif diff --git a/funasr/runtime/onnxruntime/src/Tensor.h b/funasr/runtime/onnxruntime/src/Tensor.h new file mode 100644 index 000000000..68ac9aa68 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/Tensor.h @@ -0,0 +1,155 @@ +#ifndef TENSOR_H +#define TENSOR_H + +#include "alignedmem.h" + +using namespace std; + +template class Tensor { + private: + void alloc_buff(); + void free_buff(); + int mem_size; + + public: + T *buff; + int size[4]; + int buff_size; + Tensor(Tensor *in); + Tensor(int a); + Tensor(int a, int b); + Tensor(int a, int b, int c); + Tensor(int a, int b, int c, int d); + ~Tensor(); + void zeros(); + void shape(); + void disp(); + void dump(const char *mode); + void concat(Tensor *din, int dim); + void resize(int a, int b, int c, int d); + void add(float coe, Tensor *in); + void add(Tensor *in); + void add(Tensor *in1, Tensor *in2); + void reload(Tensor *in); +}; + +template Tensor::Tensor(int a) : size{1, 1, 1, a} +{ + alloc_buff(); +} + +template Tensor::Tensor(int a, int b) : size{1, 1, a, b} +{ + alloc_buff(); +} + +template Tensor::Tensor(int a, int b, int c) : size{1, a, b, c} +{ + + alloc_buff(); +} + +template +Tensor::Tensor(int a, int b, int c, int d) : size{a, b, c, d} +{ + alloc_buff(); +} + +template Tensor::Tensor(Tensor *in) +{ + memcpy(size, in->size, 4 * sizeof(int)); + alloc_buff(); + memcpy(buff, in->buff, in->buff_size * sizeof(T)); +} + +template Tensor::~Tensor() +{ + free_buff(); +} + +template void Tensor::alloc_buff() +{ + buff_size = size[0] * size[1] * size[2] * size[3]; + mem_size = buff_size; + buff = (T *)aligned_malloc(32, buff_size * sizeof(T)); +} + +template void Tensor::free_buff() +{ + aligned_free(buff); +} + +template void Tensor::zeros() +{ + memset(buff, 0, buff_size * sizeof(T)); +} + +template void Tensor::shape() +{ + printf("(%d,%d,%d,%d)\n", size[0], size[1], size[2], size[3]); +} + +// TODO:: fix it!!!! +template void Tensor::concat(Tensor *din, int dim) +{ + memcpy(buff + buff_size, din->buff, din->buff_size * sizeof(T)); + buff_size += din->buff_size; + size[dim] += din->size[dim]; +} + +// TODO:: fix it!!!! +template void Tensor::resize(int a, int b, int c, int d) +{ + size[0] = a; + size[1] = b; + size[2] = c; + size[3] = d; + buff_size = size[0] * size[1] * size[2] * size[3]; +} + +template void Tensor::add(float coe, Tensor *in) +{ + int i; + for (i = 0; i < buff_size; i++) { + buff[i] = buff[i] + coe * in->buff[i]; + } +} + +template void Tensor::add(Tensor *in) +{ + int i; + for (i = 0; i < buff_size; i++) { + buff[i] = buff[i] + in->buff[i]; + } +} + +template void Tensor::add(Tensor *in1, Tensor *in2) +{ + int i; + for (i = 0; i < buff_size; i++) { + buff[i] = buff[i] + in1->buff[i] + in2->buff[i]; + } +} + +template void Tensor::reload(Tensor *in) +{ + memcpy(buff, in->buff, in->buff_size * sizeof(T)); +} + +template void Tensor::disp() +{ + int i; + for (i = 0; i < buff_size; i++) { + cout << buff[i] << " "; + } + cout << endl; +} + +template void Tensor::dump(const char *mode) +{ + FILE *fp; + fp = fopen("tmp.bin", mode); + fwrite(buff, 1, buff_size * sizeof(T), fp); + fclose(fp); +} +#endif diff --git a/funasr/runtime/onnxruntime/src/Vocab.cpp b/funasr/runtime/onnxruntime/src/Vocab.cpp new file mode 100644 index 000000000..d2d034181 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/Vocab.cpp @@ -0,0 +1,170 @@ +#include "Vocab.h" + +#include +#include +#include +#include +#include + +using namespace std; + +Vocab::Vocab(const char *filename) +{ + ifstream in(filename); + string line; + + if (in) // 有该文件 + { + while (getline(in, line)) // line中不包括每行的换行符 + { + vocab.push_back(line); + } + // cout << vocab[1719] << endl; + } + // else // 没有该文件 + //{ + // cout << "no such file" << endl; + // } +} +Vocab::~Vocab() +{ +} + +string Vocab::vector2string(vector in) +{ + int i; + stringstream ss; + for (auto it = in.begin(); it != in.end(); it++) { + ss << vocab[*it]; + } + + return ss.str(); +} + +int str2int(string str) +{ + const char *ch_array = str.c_str(); + if (((ch_array[0] & 0xf0) != 0xe0) || ((ch_array[1] & 0xc0) != 0x80) || + ((ch_array[2] & 0xc0) != 0x80)) + return 0; + + int val = ((ch_array[0] & 0x0f) << 12) | ((ch_array[1] & 0x3f) << 6) | + (ch_array[2] & 0x3f); + return val; +} + +bool Vocab::isChinese(string ch) +{ + if (ch.size() != 3) { + return false; + } + + int unicode = str2int(ch); + if (unicode >= 19968 && unicode <= 40959) { + return true; + } + + return false; +} + + +string Vocab::vector2stringV2(vector in) +{ + int i; + list words; + + int is_pre_english = false; + int pre_english_len = 0; + + int is_combining = false; + string combine = ""; + + for (auto it = in.begin(); it != in.end(); it++) { + string word = vocab[*it]; + + // step1 space character skips + if (word == "" || word == "" || word == "") + continue; + + // step2 combie phoneme to full word + { + int sub_word = !(word.find("@@") == string::npos); + + // process word start and middle part + if (sub_word) { + combine += word.erase(word.length() - 2); + is_combining = true; + continue; + } + // process word end part + else if (is_combining) { + combine += word; + is_combining = false; + word = combine; + combine = ""; + } + } + + // step3 process english word deal with space , turn abbreviation to upper case + { + + // input word is chinese, not need process + if (isChinese(word)) { + words.push_back(word); + is_pre_english = false; + } + // input word is english word + else { + + // pre word is chinese + if (!is_pre_english) { + word[0] = word[0] - 32; + words.push_back(word); + pre_english_len = word.size(); + + } + + // pre word is english word + else { + + // single letter turn to upper case + if (word.size() == 1) { + word[0] = word[0] - 32; + } + + if (pre_english_len > 1) { + words.push_back(" "); + words.push_back(word); + pre_english_len = word.size(); + } + else { + if (word.size() > 1) { + words.push_back(" "); + } + words.push_back(word); + pre_english_len = word.size(); + } + } + + is_pre_english = true; + + } + } + } + + // for (auto it = words.begin(); it != words.end(); it++) { + // cout << *it << endl; + // } + + stringstream ss; + for (auto it = words.begin(); it != words.end(); it++) { + ss << *it; + } + + return ss.str(); +} + +int Vocab::size() +{ + return vocab.size(); +} diff --git a/funasr/runtime/onnxruntime/src/Vocab.h b/funasr/runtime/onnxruntime/src/Vocab.h new file mode 100644 index 000000000..328a2a18f --- /dev/null +++ b/funasr/runtime/onnxruntime/src/Vocab.h @@ -0,0 +1,24 @@ + +#ifndef VOCAB_H +#define VOCAB_H + +#include +#include +#include +using namespace std; + +class Vocab { + private: + vector vocab; + bool isChinese(string ch); + bool isEnglish(string ch); + + public: + Vocab(const char *filename); + ~Vocab(); + int size(); + string vector2string(vector in); + string vector2stringV2(vector in); +}; + +#endif diff --git a/funasr/runtime/onnxruntime/src/alignedmem.cpp b/funasr/runtime/onnxruntime/src/alignedmem.cpp new file mode 100644 index 000000000..e174afe03 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/alignedmem.cpp @@ -0,0 +1,18 @@ +#include "precomp.h" +void *aligned_malloc(size_t alignment, size_t required_bytes) +{ + void *p1; // original block + void **p2; // aligned block + int offset = alignment - 1 + sizeof(void *); + if ((p1 = (void *)malloc(required_bytes + offset)) == NULL) { + return NULL; + } + p2 = (void **)(((size_t)(p1) + offset) & ~(alignment - 1)); + p2[-1] = p1; + return p2; +} + +void aligned_free(void *p) +{ + free(((void **)p)[-1]); +} diff --git a/funasr/runtime/onnxruntime/src/alignedmem.h b/funasr/runtime/onnxruntime/src/alignedmem.h new file mode 100644 index 000000000..dca68f4c5 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/alignedmem.h @@ -0,0 +1,10 @@ + +#ifndef ALIGNEDMEM_H +#define ALIGNEDMEM_H + + + +extern void *aligned_malloc(size_t alignment, size_t required_bytes); +extern void aligned_free(void *p); + +#endif diff --git a/funasr/runtime/onnxruntime/src/commonfunc.h b/funasr/runtime/onnxruntime/src/commonfunc.h new file mode 100644 index 000000000..11c234e77 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/commonfunc.h @@ -0,0 +1,56 @@ +#pragma once + + +typedef struct +{ + std::string msg; + float snippet_time; +}RPASR_RECOG_RESULT; + + +#ifdef _WIN32 +#include + + + +inline std::wstring string2wstring(const std::string& str, const std::string& locale) +{ + typedef std::codecvt_byname F; + std::wstring_convert strCnv(new F(locale)); + return strCnv.from_bytes(str); +} + +inline std::wstring strToWstr(std::string str) { + if (str.length() == 0) + return L""; + return string2wstring(str, "zh-CN"); + +} + +#endif + + + +inline void getInputName(Ort::Session* session, string& inputName,int nIndex=0) { + size_t numInputNodes = session->GetInputCount(); + if (numInputNodes > 0) { + Ort::AllocatorWithDefaultOptions allocator; + { + auto t = session->GetInputNameAllocated(nIndex, allocator); + inputName = t.get(); + + } + } +} + +inline void getOutputName(Ort::Session* session, string& outputName, int nIndex = 0) { + size_t numOutputNodes = session->GetOutputCount(); + if (numOutputNodes > 0) { + Ort::AllocatorWithDefaultOptions allocator; + { + auto t = session->GetOutputNameAllocated(nIndex, allocator); + outputName = t.get(); + + } + } +} \ No newline at end of file diff --git a/funasr/runtime/onnxruntime/src/librapidasrapi.cpp b/funasr/runtime/onnxruntime/src/librapidasrapi.cpp new file mode 100644 index 000000000..f5f9d66be --- /dev/null +++ b/funasr/runtime/onnxruntime/src/librapidasrapi.cpp @@ -0,0 +1,213 @@ +#include "precomp.h" +#ifdef __cplusplus + +extern "C" { +#endif + + + // APIs for qmasr + _RAPIDASRAPI RPASR_HANDLE RapidAsrInit(const char* szModelDir, int nThreadNum) + { + + + Model* mm = create_model(szModelDir, nThreadNum); + + return mm; + } + + + _RAPIDASRAPI RPASR_RESULT RapidAsrRecogBuffer(RPASR_HANDLE handle, const char* szBuf, int nLen, RPASR_MODE Mode, QM_CALLBACK fnCallback) + { + + + Model* pRecogObj = (Model*)handle; + + if (!pRecogObj) + return nullptr; + + Audio audio(1); + if (!audio.loadwav(szBuf, nLen)) + return nullptr; + //audio.split(); + + float* buff; + int len; + int flag=0; + RPASR_RECOG_RESULT* pResult = new RPASR_RECOG_RESULT; + pResult->snippet_time = audio.get_time_len(); + int nStep = 0; + int nTotal = audio.get_queue_size(); + while (audio.fetch(buff, len, flag) > 0) { + pRecogObj->reset(); + string msg = pRecogObj->forward(buff, len, flag); + pResult->msg += msg; + nStep++; + if (fnCallback) + fnCallback(nStep, nTotal); + } + + + return pResult; + } + + _RAPIDASRAPI RPASR_RESULT RapidAsrRecogPCMBuffer(RPASR_HANDLE handle, const char* szBuf, int nLen, RPASR_MODE Mode, QM_CALLBACK fnCallback) + { + + Model* pRecogObj = (Model*)handle; + + if (!pRecogObj) + return nullptr; + + Audio audio(1); + if (!audio.loadpcmwav(szBuf, nLen)) + return nullptr; + //audio.split(); + + float* buff; + int len; + int flag = 0; + RPASR_RECOG_RESULT* pResult = new RPASR_RECOG_RESULT; + pResult->snippet_time = audio.get_time_len(); + int nStep = 0; + int nTotal = audio.get_queue_size(); + while (audio.fetch(buff, len, flag) > 0) { + pRecogObj->reset(); + string msg = pRecogObj->forward(buff, len, flag); + pResult->msg += msg; + nStep++; + if (fnCallback) + fnCallback(nStep, nTotal); + } + + + return pResult; + + } + + _RAPIDASRAPI RPASR_RESULT RapidAsrRecogPCMFile(RPASR_HANDLE handle, const char* szFileName, RPASR_MODE Mode, QM_CALLBACK fnCallback) + { + + Model* pRecogObj = (Model*)handle; + + if (!pRecogObj) + return nullptr; + + Audio audio(1); + if (!audio.loadpcmwav(szFileName)) + return nullptr; + //audio.split(); + + float* buff; + int len; + int flag = 0; + RPASR_RECOG_RESULT* pResult = new RPASR_RECOG_RESULT; + pResult->snippet_time = audio.get_time_len(); + int nStep = 0; + int nTotal = audio.get_queue_size(); + while (audio.fetch(buff, len, flag) > 0) { + pRecogObj->reset(); + string msg = pRecogObj->forward(buff, len, flag); + pResult->msg += msg; + nStep++; + if (fnCallback) + fnCallback(nStep, nTotal); + } + + + return pResult; + + } + + _RAPIDASRAPI RPASR_RESULT RapidAsrRecogFile(RPASR_HANDLE handle, const char* szWavfile, RPASR_MODE Mode, QM_CALLBACK fnCallback) + { + Model* pRecogObj = (Model*)handle; + + if (!pRecogObj) + return nullptr; + + Audio audio(1); + if(!audio.loadwav(szWavfile)) + return nullptr; + //audio.split(); + + float* buff; + int len; + int flag = 0; + int nStep = 0; + int nTotal = audio.get_queue_size(); + RPASR_RECOG_RESULT* pResult = new RPASR_RECOG_RESULT; + pResult->snippet_time = audio.get_time_len(); + while (audio.fetch(buff, len, flag) > 0) { + pRecogObj->reset(); + string msg = pRecogObj->forward(buff, len, flag); + pResult->msg+= msg; + nStep++; + if (fnCallback) + fnCallback(nStep, nTotal); + } + + + + + return pResult; + } + + _RAPIDASRAPI const int RapidAsrGetRetNumber(RPASR_RESULT Result) + { + if (!Result) + return 0; + + return 1; + + } + + + _RAPIDASRAPI const float RapidAsrGetRetSnippetTime(RPASR_RESULT Result) + { + if (!Result) + return 0.0f; + + return ((RPASR_RECOG_RESULT*)Result)->snippet_time; + + } + + _RAPIDASRAPI const char* RapidAsrGetResult(RPASR_RESULT Result,int nIndex) + { + RPASR_RECOG_RESULT * pResult = (RPASR_RECOG_RESULT*)Result; + if(!pResult) + return nullptr; + + return pResult->msg.c_str(); + + } + + _RAPIDASRAPI void RapidAsrFreeResult(RPASR_RESULT Result) + { + + if (Result) + { + delete (RPASR_RECOG_RESULT*)Result; + + } + } + + _RAPIDASRAPI void RapidAsrUninit(RPASR_HANDLE handle) + { + + Model* pRecogObj = (Model*)handle; + + + if (!pRecogObj) + return; + + delete pRecogObj; + + } + + + +#ifdef __cplusplus + +} +#endif + diff --git a/funasr/runtime/onnxruntime/src/paraformer_onnx.cpp b/funasr/runtime/onnxruntime/src/paraformer_onnx.cpp new file mode 100644 index 000000000..46b521153 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/paraformer_onnx.cpp @@ -0,0 +1,179 @@ +#include "precomp.h" + +using namespace std; +using namespace paraformer; + +ModelImp::ModelImp(const char* path,int nNumThread) +{ + string model_path = pathAppend(path, "model.onnx"); + string vocab_path = pathAppend(path, "vocab.txt"); + + fe = new FeatureExtract(3); + + sessionOptions.SetInterOpNumThreads(nNumThread); + sessionOptions.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_EXTENDED); + +#ifdef _WIN32 + wstring wstrPath = strToWstr(model_path); + m_session = new Ort::Session(env, wstrPath.c_str(), sessionOptions); +#else + m_session = new Ort::Session(env, model_path.c_str(), sessionOptions); +#endif + + string strName; + getInputName(m_session, strName); + m_strInputNames.push_back(strName.c_str()); + getInputName(m_session, strName,1); + m_strInputNames.push_back(strName); + + getOutputName(m_session, strName); + m_strOutputNames.push_back(strName); + getOutputName(m_session, strName,1); + m_strOutputNames.push_back(strName); + + for (auto& item : m_strInputNames) + m_szInputNames.push_back(item.c_str()); + for (auto& item : m_strOutputNames) + m_szOutputNames.push_back(item.c_str()); + vocab = new Vocab(vocab_path.c_str()); +} + +ModelImp::~ModelImp() +{ + if(fe) + delete fe; + if (m_session) + { + delete m_session; + m_session = nullptr; + } + if(vocab) + delete vocab; +} + +void ModelImp::reset() +{ + fe->reset(); +} + +void ModelImp::apply_lfr(Tensor*& din) +{ + int mm = din->size[2]; + int ll = ceil(mm / 6.0); + Tensor* tmp = new Tensor(ll, 560); + int out_offset = 0; + for (int i = 0; i < ll; i++) { + for (int j = 0; j < 7; j++) { + int idx = i * 6 + j - 3; + if (idx < 0) { + idx = 0; + } + if (idx >= mm) { + idx = mm - 1; + } + memcpy(tmp->buff + out_offset, din->buff + idx * 80, + sizeof(float) * 80); + out_offset += 80; + } + } + delete din; + din = tmp; +} + +void ModelImp::apply_cmvn(Tensor* din) +{ + const float* var; + const float* mean; + float scale = 22.6274169979695; + int m = din->size[2]; + int n = din->size[3]; + + var = (const float*)paraformer_cmvn_var_hex; + mean = (const float*)paraformer_cmvn_mean_hex; + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + int idx = i * n + j; + din->buff[idx] = (din->buff[idx] + mean[j]) * var[j]; + } + } +} + +string ModelImp::greedy_search(float * in, int nLen ) +{ + vector hyps; + int Tmax = nLen; + for (int i = 0; i < Tmax; i++) { + int max_idx; + float max_val; + findmax(in + i * 8404, 8404, max_val, max_idx); + hyps.push_back(max_idx); + } + + return vocab->vector2stringV2(hyps); +} + +string ModelImp::forward(float* din, int len, int flag) +{ + + Tensor* in; + fe->insert(din, len, flag); + fe->fetch(in); + apply_lfr(in); + apply_cmvn(in); + Ort::RunOptions run_option; + + std::array input_shape_{ in->size[0],in->size[2],in->size[3] }; + Ort::Value onnx_feats = Ort::Value::CreateTensor(m_memoryInfo, + in->buff, + in->buff_size, + input_shape_.data(), + input_shape_.size()); + + std::vector feats_len{ in->size[2] }; + std::vector feats_len_dim{ 1 }; + Ort::Value onnx_feats_len = Ort::Value::CreateTensor( + m_memoryInfo, + feats_len.data(), + feats_len.size() * sizeof(int32_t), + feats_len_dim.data(), + feats_len_dim.size(), ONNX_TENSOR_ELEMENT_DATA_TYPE_INT32); + std::vector input_onnx; + input_onnx.emplace_back(std::move(onnx_feats)); + input_onnx.emplace_back(std::move(onnx_feats_len)); + + string result; + try { + + auto outputTensor = m_session->Run(run_option, m_szInputNames.data(), input_onnx.data(), m_szInputNames.size(), m_szOutputNames.data(), m_szOutputNames.size()); + std::vector outputShape = outputTensor[0].GetTensorTypeAndShapeInfo().GetShape(); + + + int64_t outputCount = std::accumulate(outputShape.begin(), outputShape.end(), 1, std::multiplies()); + float* floatData = outputTensor[0].GetTensorMutableData(); + auto encoder_out_lens = outputTensor[1].GetTensorMutableData(); + result = greedy_search(floatData, *encoder_out_lens); + } + catch (...) + { + result = ""; + } + + + if(in) + delete in; + + return result; +} + +string ModelImp::forward_chunk(float* din, int len, int flag) +{ + + printf("Not Imp!!!!!!\n"); + return "Hello"; +} + +string ModelImp::rescoring() +{ + printf("Not Imp!!!!!!\n"); + return "Hello"; +} diff --git a/funasr/runtime/onnxruntime/src/paraformer_onnx.h b/funasr/runtime/onnxruntime/src/paraformer_onnx.h new file mode 100644 index 000000000..ebbbb5152 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/paraformer_onnx.h @@ -0,0 +1,52 @@ +#pragma once + + +#ifndef PARAFORMER_MODELIMP_H +#define PARAFORMER_MODELIMP_H + + + + + +namespace paraformer { + + class ModelImp : public Model { + private: + FeatureExtract* fe; + + Vocab* vocab; + + void apply_lfr(Tensor*& din); + void apply_cmvn(Tensor* din); + + + string greedy_search( float* in, int nLen); + +#ifdef _WIN_X86 + Ort::MemoryInfo m_memoryInfo = Ort::MemoryInfo::CreateCpu(OrtDeviceAllocator, OrtMemTypeCPU); +#else + Ort::MemoryInfo m_memoryInfo = Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault); +#endif + + Ort::Session* m_session = nullptr; + Ort::Env env = Ort::Env(ORT_LOGGING_LEVEL_ERROR, "paraformer"); + Ort::SessionOptions sessionOptions = Ort::SessionOptions(); + + vector m_strInputNames, m_strOutputNames; + vector m_szInputNames; + vector m_szOutputNames; + //string m_strInputName, m_strInputNameLen; + //string m_strOutputName, m_strOutputNameLen; + + public: + ModelImp(const char* path, int nNumThread=0); + ~ModelImp(); + void reset(); + string forward_chunk(float* din, int len, int flag); + string forward(float* din, int len, int flag); + string rescoring(); + + }; + +} // namespace paraformer +#endif diff --git a/funasr/runtime/onnxruntime/src/precomp.h b/funasr/runtime/onnxruntime/src/precomp.h new file mode 100644 index 000000000..358844baf --- /dev/null +++ b/funasr/runtime/onnxruntime/src/precomp.h @@ -0,0 +1,50 @@ +#pragma once +// system + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include + +using namespace std; +// third part + +#include +#include "onnxruntime_run_options_config_keys.h" +#include "onnxruntime_cxx_api.h" + + +// mine + +#include "commonfunc.h" +#include +#include "predefine_coe.h" + +#include +//#include "alignedmem.h" +#include "Vocab.h" +#include "Tensor.h" +#include "util.h" +#include "CommonStruct.h" +#include "FeatureExtract.h" +#include "FeatureQueue.h" +#include "SpeechWrap.h" +#include +#include "Model.h" +#include "paraformer_onnx.h" +#include "librapidasrapi.h" + + +using namespace paraformer; diff --git a/funasr/runtime/onnxruntime/src/predefine_coe.h b/funasr/runtime/onnxruntime/src/predefine_coe.h new file mode 100644 index 000000000..93012d857 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/predefine_coe.h @@ -0,0 +1,592 @@ +#ifndef PREDEFINE_COE_H +#define PREDEFINE_COE_H + +#include + +const int32_t melcoe_hex[] = { + + 0x3f01050c, 0x3e0afb11, 0x3f5d413c, 0x3f547fd0, 0x3e2e00c1, 0x3f132970, + 0x3ed9ad21, 0x3ebb8bb9, 0x3f223a24, 0x3e4de6f8, 0x3f4c8642, 0x3d9c0424, + 0x3f6c7f7c, 0x3f7d295a, 0x3c35a961, 0x3f6fd497, 0x3d815b45, 0x3f6af197, + 0x3da87344, 0x3f6dfce9, 0x3d9018b9, 0x3f787ebc, 0x3d2098fe, 0x3cf02873, + 0x3f75f670, 0x3e08e423, 0x3f5dc6f7, 0x3e8161eb, 0x3f3f4f0b, 0x3eca38e2, + 0x3f1ae38f, 0x3f0f2d23, 0x3ee1a5ba, 0x3f3e9a98, 0x3e82cad1, 0x3f7321ac, + 0x3e321028, 0x3d4de548, 0x3f537bf6, 0x3ed50f76, 0x3f157845, 0x3f2cf6bc, + 0x3ea61288, 0x3f739ea7, 0x3e794186, 0x3d461590, 0x3f41af9f, 0x3f0cdfd4, + 0x3ee64058, 0x3f5f23aa, 0x3e53d467, 0x3e037156, 0x3f4b0ae6, 0x3f0e2fac, + 0x3ee3a0a8, 0x3f6ab111, 0x3e94b1ed, 0x3daa7774, 0x3f35a70a, 0x3f2d08dc, + 0x3d951fb4, 0x3ea5ee48, 0x3f6d5c09, 0x3ef61e1a, 0x3f04f0f3, 0x3f66305c, + 0x3ea7def9, 0x3dce7d20, 0x3f2c1083, 0x3f44354b, 0x3e5baf49, 0x3e6f2ad2, + 0x3f49142e, 0x3f2bfe35, 0x3e0d627b, 0x3ea80396, 0x3f5ca761, 0x3f1ce830, + 0x3dc4d786, 0x3ec62fa0, 0x3f67650f, 0x3f165fc0, 0x3db1323f, 0x3ed34080, + 0x3f69d9b8, 0x3f17def1, 0x3ddbd6b6, 0x3ed0421e, 0x3f648529, 0x3f20ebbd, + 0x3e20901a, 0x3ebe2886, 0x3f57dbf9, 0x3f3116ac, 0x3e6edcc6, 0x3e9dd2a9, + 0x3f4448ce, 0x3f47f9a3, 0x3eaba511, 0x3e601974, 0x3f2a2d77, 0x3f6536e2, + 0x3eec3842, 0x3d0781f6, 0x3dd648ed, 0x3f09e3df, 0x3f7787e1, 0x3f1c411f, + 0x3e45b702, 0x3ec77dc2, 0x3f4e9240, 0x3f47f500, 0x3ebf9c61, 0x3e602c00, + 0x3f2031d0, 0x3f78f0f7, 0x3f135547, 0x3e3bcd78, 0x3ce1e12a, 0x3ed95573, + 0x3f510ca2, 0x3f4bc3c2, 0x3ed37e77, 0x3d0ded37, 0x3e50f0f8, 0x3f1640c5, + 0x3f77212d, 0x3f291bd1, 0x3e94df6c, 0x3eadc85e, 0x3f35904a, 0x3f6cd43b, + 0x3f104351, 0x3e52dc63, 0x3d995e26, 0x3edf795f, 0x3f4b48e7, 0x3f5a29e7, + 0x3f00963d, 0x3e1fdb2f, 0x3e175865, 0x3efed385, 0x3f580934, 0x3f50466d, + 0x3ef30046, 0x3e0e7c6b, 0x3e3ee64e, 0x3f067fdd, 0x3f5c60e5, 0x3f4e9ea4, + 0x3ef4f46a, 0x3e1cb596, 0x3e45856f, 0x3f0585cb, 0x3f58d29b, 0x3f54b3ef, + 0x3f0309ad, 0x3e48aa5b, 0x3e2d3042, 0x3ef9eca6, 0x3f4dd569, 0x3f6212c4, + 0x3f12be68, 0x3e8853a3, 0x3def69e0, 0x3eda8330, 0x3f3bd62e, 0x3f76516a, + 0x3f2931b5, 0x3eb98e9b, 0x3d88773c, 0x3d1ae95c, 0x3ead9c96, 0x3f2338b2, + 0x3f6ef119, 0x3f46054d, 0x3ef74eba, 0x3e47c83a, 0x3e67eace, 0x3f0458a3, + 0x3f4e0df1, 0x3f68e26b, 0x3f207590, 0x3eb1515d, 0x3d8bc852, 0x3db8eca9, + 0x3ebf14e0, 0x3f275751, 0x3f6e86f6, 0x3f4ae3f8, 0x3f04e6de, 0x3e7dfcce, + 0x3e547020, 0x3ef63244, 0x3f4080cd, 0x3f7aaa80, 0x3f366659, 0x3ee560cb, + 0x3e3e1967, 0x3caab00e, 0x3e93334e, 0x3f0d4f9a, 0x3f5079a6, 0x3f6ce5f8, + 0x3f2acd10, 0x3ed272ff, 0x3e20a4c5, 0x3d98d042, 0x3eaa65e0, 0x3f16c680, + 0x3f57d6cf, 0x3f679a1b, 0x3f278a40, 0x3ecfef5c, 0x3e2381fd, 0x3dc32f28, + 0x3eb0eb80, 0x3f180852, 0x3f571f81, 0x3f6a42d8, 0x3f2c1ce8, 0x3edcd9d1, + 0x3e44c475, 0x3dade93f, 0x3ea7c630, 0x3f119318, 0x3f4ecee3, 0x3f7467d4, + 0x3f380f62, 0x3ef84c54, 0x3e815525, 0x3cb361d7, 0x3d3982c8, 0x3e8fe13b, + 0x3f03d9d6, 0x3f3f556d, 0x3f7a64f1, 0x3f4af618, 0x3f10ba30, 0x3eadcbc5, + 0x3debbe02, 0x3e5427a0, 0x3ede8b9f, 0x3f291a1d, 0x3f628840, 0x3f646e63, + 0x3f2bc86b, 0x3ee70902, 0x3e6e854e, 0x3c83b300, 0x3ddc8cea, 0x3ea86f2a, + 0x3f0c7b7f, 0x3f445eac, 0x3f7be268, 0x3f4cf80b, 0x3f162f6e, 0x3ebf8516, + 0x3e26c0c2, 0x3e4c1fd5, 0x3ed3a124, 0x3f203d75, 0x3f564fd0, 0x3f73f733, + 0x3f3e966d, 0x3f098cbf, 0x3ea9b21c, 0x3e01e917, 0x3d408cd1, 0x3e82d326, + 0x3eece682, 0x3f2b26f2, 0x3f5f85ba, 0x3f6c6f56, 0x3f38b733, 0x3f0550d9, + 0x3ea47689, 0x3dfbabd7, 0x3d9c8552, 0x3e8e919a, 0x3ef55e4f, 0x3f2dc4bb, + 0x3f608a85, 0x3f6cfe84, 0x3f3ad56c, 0x3f08f945, 0x3eaed247, 0x3e189086, + 0x3d980be2, 0x3e8a5528, 0x3eee0d76, 0x3f2896dc, 0x3f59dbde, 0x3f75295d, + 0x3f4477f6, 0x3f140f14, 0x3ec7dbbd, 0x3e504e0f, 0x3c8fe67e, 0x3d2d6a38, + 0x3e6e2028, 0x3ed7e1d9, 0x3f1c1221, 0x3f4bec7c, 0x3f7b80cc, 0x3f553023, + 0x3f262589, 0x3eeebd40, 0x3e91b54d, 0x3dd4c6f8, 0x3e2b3f74, 0x3eb3b4ef, + 0x3f08a160, 0x3f372559, 0x3f656721, 0x3f6c988d, 0x3f3ed8f9, 0x3f11596d, + 0x3ec83270, 0x3e5c5ea4, 0x3d254149, 0x3d9b3b97, 0x3e824e0e, 0x3edd4d25, + 0x3f1be6c8, 0x3f48e857, 0x3f75abeb, 0x3f5dcdd1, 0x3f318436, 0x3f0576a0, + 0x3eb348db, 0x3e3833fb, 0x3c2bedc9, 0x3e08c8be, 0x3e9cf794, 0x3ef512c0, + 0x3f265b92, 0x3f51f301, 0x3f7d5049, 0x3f578bfc, 0x3f2ca136, 0x3f01eecf, + 0x3eaee867, 0x3e34c34c, 0x3c490794, 0x3e21d00f, 0x3ea6bd94, 0x3efc2262, + 0x3f288bcc, 0x3f52cf2d, 0x3f7cdbe2, 0x3f594d89, 0x3f2fac87, 0x3f064092, + 0x3eba1245, 0x3e5016cd, 0x3d335c27, 0x3e1ac9dd, 0x3ea0a6f1, 0x3ef37edc, + 0x3f22f6de, 0x3f4bfa4d, 0x3f74ca3e, 0x3f6298cf, 0x3f3a2e5b, 0x3f11f5e8, + 0x3ed3ddf9, 0x3e84323c, 0x3dd39eaa, 0x3deb3986, 0x3e8ba34a, 0x3edc142f, + 0x3f161103, 0x3f3de6e2, 0x3f658c2b, 0x3f72feac, 0x3f4bb92e, 0x3f24a2e9, + 0x3efb76d9, 0x3eae048f, 0x3e41dc34, 0x3d219509, 0x3d50153e, 0x3e511b46, + 0x3eb6ba2d, 0x3f024494, 0x3f28fdb9, 0x3f4f88f3, 0x3f75e6af, 0x3f63e8a7, + 0x3f3de4a8, 0x3f180cea, 0x3ee4c20e, 0x3e99c134, 0x3e1e2cfc, 0x3c1824f4, + 0x3de0bac6, 0x3e8436b1, 0x3ecfe62d, 0x3f0d9ef9, 0x3f331f66, 0x3f5874c1, + 0x3f7d9f6c, 0x3f5d6037, 0x3f3889c9, 0x3f13dcea, 0x3edeb27d, 0x3e95fcd3, + 0x3e1b303e, 0x3c3075cb, 0x3e0a7f24, 0x3e8eec6e, 0x3ed8462b, 0x3f10a6c1, + 0x3f350197, 0x3f5933f1, 0x3f7d3e29, 0x3f5edf68, 0x3f3b246a, 0x3f179088, + 0x3ee846d8, 0x3ea1b983, 0x3e36f0d8, 0x3d2c1773, 0x3e048260, 0x3e89b72b, + 0x3ed0def0, 0x3f0bdc94, 0x3f2f233e, 0x3f5243ca, 0x3f753e89, 0x3f67ec34, + 0x3f453c1d, 0x3f22b0e2, 0x3f004a36, 0x3ebc0f98, 0x3e6fa55d, 0x3dcf7467, + 0x3dc09e5f, 0x3e6b0f8d, 0x3eba9e3c, 0x3eff6b94, 0x3f21f834, 0x3f4416a9, + 0x3f661173, 0x3f781723, 0x3f5662cf, 0x3f34d14a, 0x3f13624c, 0x3ee42b1a, + 0x3ea1d591, 0x3e3f86e3, 0x3d6fa1a1, 0x3cfd1ba9, 0x3e2674c3, 0x3e965d6c, + 0x3ed93b69, 0x3f0dea73, 0x3f2f1538, 0x3f501e47, 0x3f7105e6, 0x3f6e33a9, + 0x3f4d8e22, 0x3f2d0944, 0x3f0ca4cd, 0x3ed8c0fd, 0x3e98782f, 0x3e30dd66, + 0x3d452061, 0x3d8e62bc, 0x3e49c779, 0x3ea5ed78, 0x3ee6b665, 0x3f139f81, + 0x3f33c3e8, 0x3f53c8a7, 0x3f73adfa, 0x3f6c8be0, 0x3f4ce4ab, 0x3f2d5c2a, + 0x3f0df223, 0x3edd4cb5, 0x3e9ef12d, 0x3e41a276, 0x3d8bb1ba, 0x3d9ba0ff, + 0x3e4c6d54, 0x3ea547ab, 0x3ee41bba, 0x3f1159a6, 0x3f30876a, 0x3f4f9762, + 0x3f6e89c9, 0x3f72a12b, 0x3f53e942, 0x3f354e46, 0x3f16cffe, 0x3ef0dc6f, + 0x3eb45177, 0x3e6ffd59, 0x3def8e9c + +}; + +const int32_t window_hex[] = { + 0x00000000, 0x398b03f6, 0x3a61d1c5, 0x3ae0ee32, 0x3b37623a, 0x3b85f871, + 0x3bb69d19, 0x3bed453b, 0x3c14d40b, 0x3c35c45b, 0x3c59595d, 0x3c7f7c1d, + 0x3c940c13, 0x3ca98d81, 0x3cc039eb, 0x3cd8098d, 0x3cf0f52e, 0x3d057b06, + 0x3d1302e6, 0x3d210f33, 0x3d2f9d0e, 0x3d3ea9ba, 0x3d4e3293, 0x3d5e3510, + 0x3d6eaebd, 0x3d7f9d38, 0x3d887f19, 0x3d9167b5, 0x3d9a8756, 0x3da3dce9, + 0x3dad675d, 0x3db725ab, 0x3dc116cc, 0x3dcb39bf, 0x3dd58d86, 0x3de01126, + 0x3deac3a7, 0x3df5a413, 0x3e0058bb, 0x3e05f571, 0x3e0ba7b2, 0x3e116f08, + 0x3e174afe, 0x3e1d3b1c, 0x3e233ef0, 0x3e295605, 0x3e2f7fe7, 0x3e35bc23, + 0x3e3c0a46, 0x3e4269de, 0x3e48da79, 0x3e4f5ba5, 0x3e55ecf2, 0x3e5c8ded, + 0x3e633e26, 0x3e69fd2c, 0x3e70ca8f, 0x3e77a5de, 0x3e7e8eaa, 0x3e82c241, + 0x3e86437c, 0x3e89cacd, 0x3e8d57fc, 0x3e90ead3, 0x3e948319, 0x3e982097, + 0x3e9bc316, 0x3e9f6a5d, 0x3ea31636, 0x3ea6c66a, 0x3eaa7ac0, 0x3eae3303, + 0x3eb1eefa, 0x3eb5ae6f, 0x3eb9712a, 0x3ebd36f6, 0x3ec0ff9b, 0x3ec4cae2, + 0x3ec89895, 0x3ecc687d, 0x3ed03a64, 0x3ed40e13, 0x3ed7e354, 0x3edbb9f2, + 0x3edf91b5, 0x3ee36a69, 0x3ee743d7, 0x3eeb1dca, 0x3eeef80c, 0x3ef2d267, + 0x3ef6aca8, 0x3efa8698, 0x3efe6002, 0x3f011c59, 0x3f03083a, 0x3f04f389, + 0x3f06de2d, 0x3f08c80b, 0x3f0ab10a, 0x3f0c990f, 0x3f0e8001, 0x3f1065c6, + 0x3f124a45, 0x3f142d65, 0x3f160f0c, 0x3f17ef21, 0x3f19cd8b, 0x3f1baa32, + 0x3f1d84fb, 0x3f1f5dd0, 0x3f213498, 0x3f230939, 0x3f24db9d, 0x3f26abaa, + 0x3f28794a, 0x3f2a4464, 0x3f2c0ce1, 0x3f2dd2a9, 0x3f2f95a6, 0x3f3155bf, + 0x3f3312e0, 0x3f34ccef, 0x3f3683d8, 0x3f383784, 0x3f39e7dd, 0x3f3b94cc, + 0x3f3d3e3c, 0x3f3ee418, 0x3f40864a, 0x3f4224bd, 0x3f43bf5c, 0x3f455613, + 0x3f46e8cc, 0x3f487774, 0x3f4a01f6, 0x3f4b883f, 0x3f4d0a3b, 0x3f4e87d6, + 0x3f5000fe, 0x3f5175a0, 0x3f52e5a9, 0x3f545106, 0x3f55b7a5, 0x3f571975, + 0x3f587664, 0x3f59ce60, 0x3f5b2158, 0x3f5c6f3b, 0x3f5db7f9, 0x3f5efb80, + 0x3f6039c2, 0x3f6172af, 0x3f62a636, 0x3f63d448, 0x3f64fcd6, 0x3f661fd3, + 0x3f673d2e, 0x3f6854db, 0x3f6966ca, 0x3f6a72ef, 0x3f6b793d, 0x3f6c79a5, + 0x3f6d741d, 0x3f6e6896, 0x3f6f5706, 0x3f703f5f, 0x3f712198, 0x3f71fda4, + 0x3f72d379, 0x3f73a30c, 0x3f746c52, 0x3f752f43, 0x3f75ebd4, 0x3f76a1fc, + 0x3f7751b2, 0x3f77faee, 0x3f789da6, 0x3f7939d4, 0x3f79cf6e, 0x3f7a5e6f, + 0x3f7ae6cf, 0x3f7b6886, 0x3f7be38f, 0x3f7c57e4, 0x3f7cc57f, 0x3f7d2c5b, + 0x3f7d8c72, 0x3f7de5bf, 0x3f7e3840, 0x3f7e83ee, 0x3f7ec8c7, 0x3f7f06c7, + 0x3f7f3deb, 0x3f7f6e31, 0x3f7f9795, 0x3f7fba17, 0x3f7fd5b4, 0x3f7fea6b, + 0x3f7ff83b, 0x3f7fff23, 0x3f7fff23, 0x3f7ff83b, 0x3f7fea6b, 0x3f7fd5b4, + 0x3f7fba17, 0x3f7f9795, 0x3f7f6e31, 0x3f7f3deb, 0x3f7f06c7, 0x3f7ec8c7, + 0x3f7e83ee, 0x3f7e3840, 0x3f7de5bf, 0x3f7d8c72, 0x3f7d2c5b, 0x3f7cc57f, + 0x3f7c57e4, 0x3f7be38f, 0x3f7b6886, 0x3f7ae6cf, 0x3f7a5e6f, 0x3f79cf6e, + 0x3f7939d4, 0x3f789da6, 0x3f77faee, 0x3f7751b2, 0x3f76a1fc, 0x3f75ebd4, + 0x3f752f43, 0x3f746c52, 0x3f73a30c, 0x3f72d379, 0x3f71fda4, 0x3f712198, + 0x3f703f5f, 0x3f6f5706, 0x3f6e6896, 0x3f6d741d, 0x3f6c79a5, 0x3f6b793d, + 0x3f6a72ef, 0x3f6966ca, 0x3f6854db, 0x3f673d2e, 0x3f661fd3, 0x3f64fcd6, + 0x3f63d448, 0x3f62a636, 0x3f6172af, 0x3f6039c2, 0x3f5efb80, 0x3f5db7f9, + 0x3f5c6f3b, 0x3f5b2158, 0x3f59ce60, 0x3f587664, 0x3f571975, 0x3f55b7a5, + 0x3f545106, 0x3f52e5a9, 0x3f5175a0, 0x3f5000fe, 0x3f4e87d6, 0x3f4d0a3b, + 0x3f4b883f, 0x3f4a01f6, 0x3f487774, 0x3f46e8cc, 0x3f455613, 0x3f43bf5c, + 0x3f4224bd, 0x3f40864a, 0x3f3ee418, 0x3f3d3e3c, 0x3f3b94cc, 0x3f39e7dd, + 0x3f383784, 0x3f3683d8, 0x3f34ccef, 0x3f3312e0, 0x3f3155bf, 0x3f2f95a6, + 0x3f2dd2a9, 0x3f2c0ce1, 0x3f2a4464, 0x3f28794a, 0x3f26abaa, 0x3f24db9d, + 0x3f230939, 0x3f213498, 0x3f1f5dd0, 0x3f1d84fb, 0x3f1baa32, 0x3f19cd8b, + 0x3f17ef21, 0x3f160f0c, 0x3f142d65, 0x3f124a45, 0x3f1065c6, 0x3f0e8001, + 0x3f0c990f, 0x3f0ab10a, 0x3f08c80b, 0x3f06de2d, 0x3f04f389, 0x3f03083a, + 0x3f011c59, 0x3efe6002, 0x3efa8698, 0x3ef6aca8, 0x3ef2d267, 0x3eeef80c, + 0x3eeb1dca, 0x3ee743d7, 0x3ee36a69, 0x3edf91b5, 0x3edbb9f2, 0x3ed7e354, + 0x3ed40e13, 0x3ed03a64, 0x3ecc687d, 0x3ec89895, 0x3ec4cae2, 0x3ec0ff9b, + 0x3ebd36f6, 0x3eb9712a, 0x3eb5ae6f, 0x3eb1eefa, 0x3eae3303, 0x3eaa7ac0, + 0x3ea6c66a, 0x3ea31636, 0x3e9f6a5d, 0x3e9bc316, 0x3e982097, 0x3e948319, + 0x3e90ead3, 0x3e8d57fc, 0x3e89cacd, 0x3e86437c, 0x3e82c241, 0x3e7e8eaa, + 0x3e77a5de, 0x3e70ca8f, 0x3e69fd2c, 0x3e633e26, 0x3e5c8ded, 0x3e55ecf2, + 0x3e4f5ba5, 0x3e48da79, 0x3e4269de, 0x3e3c0a46, 0x3e35bc23, 0x3e2f7fe7, + 0x3e295605, 0x3e233ef0, 0x3e1d3b1c, 0x3e174afe, 0x3e116f08, 0x3e0ba7b2, + 0x3e05f571, 0x3e0058bb, 0x3df5a413, 0x3deac3a7, 0x3de01126, 0x3dd58d86, + 0x3dcb39bf, 0x3dc116cc, 0x3db725ab, 0x3dad675d, 0x3da3dce9, 0x3d9a8756, + 0x3d9167b5, 0x3d887f19, 0x3d7f9d38, 0x3d6eaebd, 0x3d5e3510, 0x3d4e3293, + 0x3d3ea9ba, 0x3d2f9d0e, 0x3d210f33, 0x3d1302e6, 0x3d057b06, 0x3cf0f52e, + 0x3cd8098d, 0x3cc039eb, 0x3ca98d81, 0x3c940c13, 0x3c7f7c1d, 0x3c59595d, + 0x3c35c45b, 0x3c14d40b, 0x3bed453b, 0x3bb69d19, 0x3b85f871, 0x3b37623a, + 0x3ae0ee32, 0x3a61d1c5, 0x398b03f6, 0x00000000 + +}; + +const int32_t window_hamm_hex[] = { + 0x3da3d70a, 0x3da3f4f1, 0x3da44ea4, 0x3da4e41d, 0x3da5b554, 0x3da6c239, + 0x3da80abd, 0x3da98ecb, 0x3dab4e4a, 0x3dad491d, 0x3daf7f25, 0x3db1f03d, + 0x3db49c3e, 0x3db782fd, 0x3dbaa449, 0x3dbdfff1, 0x3dc195be, 0x3dc56575, + 0x3dc96ed9, 0x3dcdb1a8, 0x3dd22d9d, 0x3dd6e26e, 0x3ddbcfd0, 0x3de0f572, + 0x3de65301, 0x3debe825, 0x3df1b484, 0x3df7b7c0, 0x3dfdf176, 0x3e0230a1, + 0x3e05835d, 0x3e08f0ba, 0x3e0c7880, 0x3e101a75, 0x3e13d65f, 0x3e17ac00, + 0x3e1b9b1b, 0x3e1fa36f, 0x3e23c4bc, 0x3e27febd, 0x3e2c512e, 0x3e30bbc9, + 0x3e353e46, 0x3e39d85c, 0x3e3e89c0, 0x3e435226, 0x3e483140, 0x3e4d26be, + 0x3e523251, 0x3e5753a7, 0x3e5c8a6b, 0x3e61d64a, 0x3e6736ec, 0x3e6cabfc, + 0x3e72351f, 0x3e77d1fd, 0x3e7d8239, 0x3e81a2bc, 0x3e848dae, 0x3e8781c3, + 0x3e8a7eca, 0x3e8d8495, 0x3e9092f0, 0x3e93a9ab, 0x3e96c894, 0x3e99ef77, + 0x3e9d1e22, 0x3ea05460, 0x3ea391ff, 0x3ea6d6c8, 0x3eaa2286, 0x3ead7505, + 0x3eb0ce0f, 0x3eb42d6c, 0x3eb792e6, 0x3ebafe46, 0x3ebe6f54, 0x3ec1e5d9, + 0x3ec5619c, 0x3ec8e264, 0x3ecc67f8, 0x3ecff220, 0x3ed380a2, 0x3ed71344, + 0x3edaa9cb, 0x3ede43fe, 0x3ee1e1a3, 0x3ee5827d, 0x3ee92653, 0x3eeccce9, + 0x3ef07604, 0x3ef42168, 0x3ef7ceda, 0x3efb7e1d, 0x3eff2ef7, 0x3f017096, + 0x3f034a3f, 0x3f052459, 0x3f06fec5, 0x3f08d967, 0x3f0ab41f, 0x3f0c8ed0, + 0x3f0e695b, 0x3f1043a2, 0x3f121d87, 0x3f13f6ec, 0x3f15cfb4, 0x3f17a7bf, + 0x3f197ef0, 0x3f1b5529, 0x3f1d2a4d, 0x3f1efe3d, 0x3f20d0db, 0x3f22a20b, + 0x3f2471ae, 0x3f263fa8, 0x3f280bda, 0x3f29d628, 0x3f2b9e74, 0x3f2d64a2, + 0x3f2f2895, 0x3f30ea30, 0x3f32a956, 0x3f3465ec, 0x3f361fd4, 0x3f37d6f3, + 0x3f398b2d, 0x3f3b3c66, 0x3f3cea83, 0x3f3e9569, 0x3f403cfb, 0x3f41e121, + 0x3f4381be, 0x3f451eb8, 0x3f46b7f6, 0x3f484d5d, 0x3f49ded3, 0x3f4b6c3f, + 0x3f4cf588, 0x3f4e7a94, 0x3f4ffb4c, 0x3f517796, 0x3f52ef5a, 0x3f546282, + 0x3f55d0f4, 0x3f573a9a, 0x3f589f5d, 0x3f59ff26, 0x3f5b59df, 0x3f5caf72, + 0x3f5dffc9, 0x3f5f4acf, 0x3f60906f, 0x3f61d093, 0x3f630b29, 0x3f64401b, + 0x3f656f57, 0x3f6698c9, 0x3f67bc5d, 0x3f68da03, 0x3f69f1a6, 0x3f6b0337, + 0x3f6c0ea3, 0x3f6d13d9, 0x3f6e12c9, 0x3f6f0b62, 0x3f6ffd95, 0x3f70e953, + 0x3f71ce8c, 0x3f72ad32, 0x3f738537, 0x3f74568d, 0x3f752127, 0x3f75e4f8, + 0x3f76a1f3, 0x3f77580d, 0x3f780739, 0x3f78af6e, 0x3f79509f, 0x3f79eac3, + 0x3f7a7dd1, 0x3f7b09be, 0x3f7b8e83, 0x3f7c0c15, 0x3f7c826e, 0x3f7cf187, + 0x3f7d5957, 0x3f7db9d8, 0x3f7e1305, 0x3f7e64d7, 0x3f7eaf4a, 0x3f7ef258, + 0x3f7f2dfe, 0x3f7f6237, 0x3f7f8f00, 0x3f7fb457, 0x3f7fd239, 0x3f7fe8a4, + 0x3f7ff797, 0x3f7fff11, 0x3f7fff11, 0x3f7ff797, 0x3f7fe8a4, 0x3f7fd239, + 0x3f7fb457, 0x3f7f8f00, 0x3f7f6237, 0x3f7f2dfe, 0x3f7ef258, 0x3f7eaf4a, + 0x3f7e64d7, 0x3f7e1305, 0x3f7db9d8, 0x3f7d5957, 0x3f7cf187, 0x3f7c826e, + 0x3f7c0c15, 0x3f7b8e83, 0x3f7b09be, 0x3f7a7dd1, 0x3f79eac3, 0x3f79509f, + 0x3f78af6e, 0x3f780739, 0x3f77580d, 0x3f76a1f3, 0x3f75e4f8, 0x3f752127, + 0x3f74568d, 0x3f738537, 0x3f72ad32, 0x3f71ce8c, 0x3f70e953, 0x3f6ffd95, + 0x3f6f0b62, 0x3f6e12c9, 0x3f6d13d9, 0x3f6c0ea3, 0x3f6b0337, 0x3f69f1a6, + 0x3f68da03, 0x3f67bc5d, 0x3f6698c9, 0x3f656f57, 0x3f64401b, 0x3f630b29, + 0x3f61d093, 0x3f60906f, 0x3f5f4acf, 0x3f5dffc9, 0x3f5caf72, 0x3f5b59df, + 0x3f59ff26, 0x3f589f5d, 0x3f573a9a, 0x3f55d0f4, 0x3f546282, 0x3f52ef5a, + 0x3f517796, 0x3f4ffb4c, 0x3f4e7a94, 0x3f4cf588, 0x3f4b6c3f, 0x3f49ded3, + 0x3f484d5d, 0x3f46b7f6, 0x3f451eb8, 0x3f4381be, 0x3f41e121, 0x3f403cfb, + 0x3f3e9569, 0x3f3cea83, 0x3f3b3c66, 0x3f398b2d, 0x3f37d6f3, 0x3f361fd4, + 0x3f3465ec, 0x3f32a956, 0x3f30ea30, 0x3f2f2895, 0x3f2d64a2, 0x3f2b9e74, + 0x3f29d628, 0x3f280bda, 0x3f263fa8, 0x3f2471ae, 0x3f22a20b, 0x3f20d0db, + 0x3f1efe3d, 0x3f1d2a4d, 0x3f1b5529, 0x3f197ef0, 0x3f17a7bf, 0x3f15cfb4, + 0x3f13f6ec, 0x3f121d87, 0x3f1043a2, 0x3f0e695b, 0x3f0c8ed0, 0x3f0ab41f, + 0x3f08d967, 0x3f06fec5, 0x3f052459, 0x3f034a3f, 0x3f017096, 0x3eff2ef7, + 0x3efb7e1d, 0x3ef7ceda, 0x3ef42168, 0x3ef07604, 0x3eeccce9, 0x3ee92653, + 0x3ee5827d, 0x3ee1e1a3, 0x3ede43fe, 0x3edaa9cb, 0x3ed71344, 0x3ed380a2, + 0x3ecff220, 0x3ecc67f8, 0x3ec8e264, 0x3ec5619c, 0x3ec1e5d9, 0x3ebe6f54, + 0x3ebafe46, 0x3eb792e6, 0x3eb42d6c, 0x3eb0ce0f, 0x3ead7505, 0x3eaa2286, + 0x3ea6d6c8, 0x3ea391ff, 0x3ea05460, 0x3e9d1e22, 0x3e99ef77, 0x3e96c894, + 0x3e93a9ab, 0x3e9092f0, 0x3e8d8495, 0x3e8a7eca, 0x3e8781c3, 0x3e848dae, + 0x3e81a2bc, 0x3e7d8239, 0x3e77d1fd, 0x3e72351f, 0x3e6cabfc, 0x3e6736ec, + 0x3e61d64a, 0x3e5c8a6b, 0x3e5753a7, 0x3e523251, 0x3e4d26be, 0x3e483140, + 0x3e435226, 0x3e3e89c0, 0x3e39d85c, 0x3e353e46, 0x3e30bbc9, 0x3e2c512e, + 0x3e27febd, 0x3e23c4bc, 0x3e1fa36f, 0x3e1b9b1b, 0x3e17ac00, 0x3e13d65f, + 0x3e101a75, 0x3e0c7880, 0x3e08f0ba, 0x3e05835d, 0x3e0230a1, 0x3dfdf176, + 0x3df7b7c0, 0x3df1b484, 0x3debe825, 0x3de65301, 0x3de0f572, 0x3ddbcfd0, + 0x3dd6e26e, 0x3dd22d9d, 0x3dcdb1a8, 0x3dc96ed9, 0x3dc56575, 0x3dc195be, + 0x3dbdfff1, 0x3dbaa449, 0x3db782fd, 0x3db49c3e, 0x3db1f03d, 0x3daf7f25, + 0x3dad491d, 0x3dab4e4a, 0x3da98ecb, 0x3da80abd, 0x3da6c239, 0x3da5b554, + 0x3da4e41d, 0x3da44ea4, 0x3da3f4f1, 0x3da3d70a + +}; + +const int global_cmvn_mean_hex[] = { + 0x413d6566, 0x4147923f, 0x4156ab15, 0x41613d12, 0x416b155b, 0x41722783, + 0x4176cd05, 0x4178532a, 0x417aa3c3, 0x417aed19, 0x417d4d2c, 0x417e6abb, + 0x41805848, 0x418122ab, 0x41812b23, 0x418161a8, 0x41810ef9, 0x4180863a, + 0x41815d8f, 0x417ff8b2, 0x417de2aa, 0x4180a5f2, 0x417e8bd1, 0x418041ac, + 0x417f2d60, 0x4180487f, 0x417eb835, 0x418018d8, 0x417ef8c1, 0x417ea302, + 0x417f30cf, 0x417ea0bb, 0x417ebac2, 0x417faab6, 0x417fca4d, 0x41805e45, + 0x4180e308, 0x4180ef3e, 0x418109fc, 0x4180afa3, 0x418113e2, 0x4180c915, + 0x41819f86, 0x418190bf, 0x418220bd, 0x4182f2e5, 0x4183e1c7, 0x41843eec, + 0x4184b066, 0x418574db, 0x41852611, 0x4184fc81, 0x41851b2a, 0x4185a1c7, + 0x41861152, 0x41868c28, 0x41871930, 0x41871f83, 0x41868893, 0x4185d919, + 0x4185664b, 0x418480a6, 0x41840e3a, 0x41836ace, 0x4182b217, 0x4181cb79, + 0x4180fb13, 0x418098b9, 0x41805ded, 0x417ff69a, 0x417f49bd, 0x417ecef8, + 0x417e286c, 0x417d9135, 0x417cfff4, 0x417ca8f7, 0x417b2e8f, 0x41773788, + 0x4170b095, 0x4167417f}; + +const int global_cmvn_std_hex[] = { + 0x4040335e, 0x405235d3, 0x40589be4, 0x4054261f, 0x40544ba2, 0x40575418, + 0x405b6528, 0x40617999, 0x40605fcf, 0x405c9c6d, 0x40590796, 0x405899fc, + 0x405810b8, 0x40587c40, 0x40592b5e, 0x4057fb12, 0x4057028b, 0x405515d7, + 0x4053d714, 0x405418c7, 0x405536bc, 0x4052f54e, 0x4052d382, 0x4051201d, + 0x4050a8d2, 0x4050857f, 0x404ffe85, 0x4050a0da, 0x40517a8a, 0x40508862, + 0x40504f68, 0x404f3159, 0x404f0930, 0x404e8a2e, 0x404e7383, 0x404eb185, + 0x404edaa9, 0x404efed2, 0x404ea8f4, 0x404f6d0d, 0x404ee9d9, 0x404f4cca, + 0x404fb13f, 0x405051c5, 0x40503f5e, 0x4050df6e, 0x4052974e, 0x4053d421, + 0x40544d48, 0x40544ec8, 0x40550e57, 0x40558287, 0x4055d122, 0x4056b22a, + 0x4058ea5c, 0x405acbc3, 0x405a89e7, 0x405a88ed, 0x405afadb, 0x405a1c60, + 0x405a6f46, 0x405b0a24, 0x405b5f44, 0x405cc0a9, 0x405d984b, 0x405ef9b8, + 0x4061178a, 0x406262bf, 0x40644904, 0x40660b20, 0x4067f7f1, 0x406a35e5, + 0x406c1e97, 0x406e16a9, 0x406eadb1, 0x406d0cba, 0x406d9ca0, 0x406f5a14, + 0x406e84a7, 0x406cd985}; + +const int global_cmvn_mean_online_hex[] = { + + 0x413d5d27, 0x414785ae, 0x4156986a, 0x41612a4e, 0x416b063e, 0x41721c9b, + 0x4176c505, 0x41784b5b, 0x417a9575, 0x417adfb2, 0x417d4153, 0x417e611e, + 0x41805288, 0x41811c27, 0x4181250c, 0x41815cd4, 0x41810b77, 0x4180817c, + 0x41815881, 0x417feaf2, 0x417dd2bf, 0x41809f37, 0x417e7b47, 0x41803a6a, + 0x417f1ff4, 0x41804382, 0x417ead10, 0x41801220, 0x417eeb28, 0x417e9801, + 0x417f26b9, 0x417e95f9, 0x417eac06, 0x417f9aa5, 0x417fbb16, 0x41805651, + 0x4180daaa, 0x4180e84c, 0x41810566, 0x4180ab2c, 0x418111b0, 0x4180c6cc, + 0x41819e27, 0x418190cc, 0x4182205c, 0x4182f265, 0x4183e1a2, 0x41844012, + 0x4184b0cd, 0x41857447, 0x418527f7, 0x4184fdc6, 0x41851ad2, 0x4185a148, + 0x41860f8b, 0x41868888, 0x418712e4, 0x41871702, 0x41867ec3, 0x4185cc48, + 0x418559b4, 0x41847855, 0x418408f4, 0x418368f4, 0x4182b718, 0x4181d76d, + 0x41810e52, 0x4180b204, 0x418078a4, 0x41801179, 0x417f5579, 0x417e93b7, + 0x417d6f2c, 0x417c1a0b, 0x417a6c7a, 0x41787d18, 0x4174eceb, 0x416e3ed3, + 0x41644af8, 0x41566dd4 + +}; + +const int global_cmvn_std_online_hex[] = { + + 0x40408fdd, 0x405293b6, 0x4058f2d2, 0x40546ddb, 0x4054984c, 0x4057971b, + 0x405ba086, 0x4061afa7, 0x4060a24c, 0x405cbb7e, 0x405923f7, 0x4058c91f, + 0x40585cf3, 0x4058c22a, 0x40594960, 0x405824a6, 0x405703f3, 0x40556377, + 0x4053e02d, 0x40540a7e, 0x405553c7, 0x4052ead5, 0x4052d23d, 0x40510308, + 0x4050a2f3, 0x40505b81, 0x404fed20, 0x4050a372, 0x40515196, 0x40504810, + 0x40501fdd, 0x404f2225, 0x404f0931, 0x404e8a2b, 0x404e773b, 0x404ea782, + 0x404ee17d, 0x404ef49c, 0x404e884d, 0x404f696b, 0x404edd0e, 0x404f23cc, + 0x404f74d4, 0x40501e89, 0x405009f3, 0x4050c422, 0x4052902b, 0x4053987c, + 0x40542997, 0x40543695, 0x4054cbef, 0x40553947, 0x4055ab7c, 0x4056887c, + 0x4058b710, 0x405a8d28, 0x405a6a27, 0x405a6b3b, 0x405ac8d3, 0x405a031d, + 0x405a2158, 0x405abb1b, 0x405b1350, 0x405c98c0, 0x405d5cf9, 0x405ead5b, + 0x40609748, 0x4061dfb9, 0x4063aa9f, 0x40655831, 0x40671a35, 0x40694bf5, + 0x406b1f59, 0x406cb49b, 0x406cf19e, 0x406b592b, 0x406b757c, 0x406c866d, + 0x406ac24f, 0x406678d9 + +}; + +const unsigned int paraformer_cmvn_mean_hex[] = { + + 0xc104fd75, 0xc1099d56, 0xc119dad7, 0xc126f9a7, 0xc133681f, 0xc13e221f, + 0xc145cc83, 0xc14a3166, 0xc14e1bda, 0xc14d4a62, 0xc14e41a9, 0xc14f4e7b, + 0xc153297e, 0xc1567ee5, 0xc157dbab, 0xc158dfa4, 0xc158e6f9, 0xc1584e70, + 0xc15aecea, 0xc15886b8, 0xc156bcb4, 0xc15a7ba9, 0xc1581d34, 0xc15c0a48, + 0xc15c463f, 0xc15dfc3b, 0xc15bb28b, 0xc15b4413, 0xc158f8c0, 0xc1588ede, + 0xc158c880, 0xc158ff19, 0xc159815a, 0xc159ed72, 0xc15a458d, 0xc15a93d3, + 0xc15a06ec, 0xc15953d8, 0xc1592e92, 0xc1579518, 0xc1587d76, 0xc157bc56, + 0xc159c47c, 0xc15a5ac4, 0xc15b7286, 0xc15cab60, 0xc15e7f8d, 0xc1607ee5, + 0xc162e9ad, 0xc165bdb0, 0xc167bf3e, 0xc169a0a5, 0xc16b4b68, 0xc16d5682, + 0xc16ebd51, 0xc170197a, 0xc170d1cc, 0xc1707fc1, 0xc16fd830, 0xc16ec4b1, + 0xc16de888, 0xc16d3b06, 0xc16cc155, 0xc16c4e31, 0xc16b6abe, 0xc169cde8, + 0xc1684578, 0xc166c2a4, 0xc165d326, 0xc164df46, 0xc163b4ad, 0xc1632d19, + 0xc162a94a, 0xc16280fc, 0xc161ae3e, 0xc15fec42, 0xc15cbadc, 0xc15664c3, + 0xc14c6d5d, 0xc13b64ae, 0xc104fd75, 0xc1099d56, 0xc119dad7, 0xc126f9a7, + 0xc133681f, 0xc13e221f, 0xc145cc83, 0xc14a3166, 0xc14e1bda, 0xc14d4a62, + 0xc14e41a9, 0xc14f4e7b, 0xc153297e, 0xc1567ee5, 0xc157dbab, 0xc158dfa4, + 0xc158e6f9, 0xc1584e70, 0xc15aecea, 0xc15886b8, 0xc156bcb4, 0xc15a7ba9, + 0xc1581d34, 0xc15c0a48, 0xc15c463f, 0xc15dfc3b, 0xc15bb28b, 0xc15b4413, + 0xc158f8c0, 0xc1588ede, 0xc158c880, 0xc158ff19, 0xc159815a, 0xc159ed72, + 0xc15a458d, 0xc15a93d3, 0xc15a06ec, 0xc15953d8, 0xc1592e92, 0xc1579518, + 0xc1587d76, 0xc157bc56, 0xc159c47c, 0xc15a5ac4, 0xc15b7286, 0xc15cab60, + 0xc15e7f8d, 0xc1607ee5, 0xc162e9ad, 0xc165bdb0, 0xc167bf3e, 0xc169a0a5, + 0xc16b4b68, 0xc16d5682, 0xc16ebd51, 0xc170197a, 0xc170d1cc, 0xc1707fc1, + 0xc16fd830, 0xc16ec4b1, 0xc16de888, 0xc16d3b06, 0xc16cc155, 0xc16c4e31, + 0xc16b6abe, 0xc169cde8, 0xc1684578, 0xc166c2a4, 0xc165d326, 0xc164df46, + 0xc163b4ad, 0xc1632d19, 0xc162a94a, 0xc16280fc, 0xc161ae3e, 0xc15fec42, + 0xc15cbadc, 0xc15664c3, 0xc14c6d5d, 0xc13b64ae, 0xc104fd75, 0xc1099d56, + 0xc119dad7, 0xc126f9a7, 0xc133681f, 0xc13e221f, 0xc145cc83, 0xc14a3166, + 0xc14e1bda, 0xc14d4a62, 0xc14e41a9, 0xc14f4e7b, 0xc153297e, 0xc1567ee5, + 0xc157dbab, 0xc158dfa4, 0xc158e6f9, 0xc1584e70, 0xc15aecea, 0xc15886b8, + 0xc156bcb4, 0xc15a7ba9, 0xc1581d34, 0xc15c0a48, 0xc15c463f, 0xc15dfc3b, + 0xc15bb28b, 0xc15b4413, 0xc158f8c0, 0xc1588ede, 0xc158c880, 0xc158ff19, + 0xc159815a, 0xc159ed72, 0xc15a458d, 0xc15a93d3, 0xc15a06ec, 0xc15953d8, + 0xc1592e92, 0xc1579518, 0xc1587d76, 0xc157bc56, 0xc159c47c, 0xc15a5ac4, + 0xc15b7286, 0xc15cab60, 0xc15e7f8d, 0xc1607ee5, 0xc162e9ad, 0xc165bdb0, + 0xc167bf3e, 0xc169a0a5, 0xc16b4b68, 0xc16d5682, 0xc16ebd51, 0xc170197a, + 0xc170d1cc, 0xc1707fc1, 0xc16fd830, 0xc16ec4b1, 0xc16de888, 0xc16d3b06, + 0xc16cc155, 0xc16c4e31, 0xc16b6abe, 0xc169cde8, 0xc1684578, 0xc166c2a4, + 0xc165d326, 0xc164df46, 0xc163b4ad, 0xc1632d19, 0xc162a94a, 0xc16280fc, + 0xc161ae3e, 0xc15fec42, 0xc15cbadc, 0xc15664c3, 0xc14c6d5d, 0xc13b64ae, + 0xc104fd75, 0xc1099d56, 0xc119dad7, 0xc126f9a7, 0xc133681f, 0xc13e221f, + 0xc145cc83, 0xc14a3166, 0xc14e1bda, 0xc14d4a62, 0xc14e41a9, 0xc14f4e7b, + 0xc153297e, 0xc1567ee5, 0xc157dbab, 0xc158dfa4, 0xc158e6f9, 0xc1584e70, + 0xc15aecea, 0xc15886b8, 0xc156bcb4, 0xc15a7ba9, 0xc1581d34, 0xc15c0a48, + 0xc15c463f, 0xc15dfc3b, 0xc15bb28b, 0xc15b4413, 0xc158f8c0, 0xc1588ede, + 0xc158c880, 0xc158ff19, 0xc159815a, 0xc159ed72, 0xc15a458d, 0xc15a93d3, + 0xc15a06ec, 0xc15953d8, 0xc1592e92, 0xc1579518, 0xc1587d76, 0xc157bc56, + 0xc159c47c, 0xc15a5ac4, 0xc15b7286, 0xc15cab60, 0xc15e7f8d, 0xc1607ee5, + 0xc162e9ad, 0xc165bdb0, 0xc167bf3e, 0xc169a0a5, 0xc16b4b68, 0xc16d5682, + 0xc16ebd51, 0xc170197a, 0xc170d1cc, 0xc1707fc1, 0xc16fd830, 0xc16ec4b1, + 0xc16de888, 0xc16d3b06, 0xc16cc155, 0xc16c4e31, 0xc16b6abe, 0xc169cde8, + 0xc1684578, 0xc166c2a4, 0xc165d326, 0xc164df46, 0xc163b4ad, 0xc1632d19, + 0xc162a94a, 0xc16280fc, 0xc161ae3e, 0xc15fec42, 0xc15cbadc, 0xc15664c3, + 0xc14c6d5d, 0xc13b64ae, 0xc104fd75, 0xc1099d56, 0xc119dad7, 0xc126f9a7, + 0xc133681f, 0xc13e221f, 0xc145cc83, 0xc14a3166, 0xc14e1bda, 0xc14d4a62, + 0xc14e41a9, 0xc14f4e7b, 0xc153297e, 0xc1567ee5, 0xc157dbab, 0xc158dfa4, + 0xc158e6f9, 0xc1584e70, 0xc15aecea, 0xc15886b8, 0xc156bcb4, 0xc15a7ba9, + 0xc1581d34, 0xc15c0a48, 0xc15c463f, 0xc15dfc3b, 0xc15bb28b, 0xc15b4413, + 0xc158f8c0, 0xc1588ede, 0xc158c880, 0xc158ff19, 0xc159815a, 0xc159ed72, + 0xc15a458d, 0xc15a93d3, 0xc15a06ec, 0xc15953d8, 0xc1592e92, 0xc1579518, + 0xc1587d76, 0xc157bc56, 0xc159c47c, 0xc15a5ac4, 0xc15b7286, 0xc15cab60, + 0xc15e7f8d, 0xc1607ee5, 0xc162e9ad, 0xc165bdb0, 0xc167bf3e, 0xc169a0a5, + 0xc16b4b68, 0xc16d5682, 0xc16ebd51, 0xc170197a, 0xc170d1cc, 0xc1707fc1, + 0xc16fd830, 0xc16ec4b1, 0xc16de888, 0xc16d3b06, 0xc16cc155, 0xc16c4e31, + 0xc16b6abe, 0xc169cde8, 0xc1684578, 0xc166c2a4, 0xc165d326, 0xc164df46, + 0xc163b4ad, 0xc1632d19, 0xc162a94a, 0xc16280fc, 0xc161ae3e, 0xc15fec42, + 0xc15cbadc, 0xc15664c3, 0xc14c6d5d, 0xc13b64ae, 0xc104fd75, 0xc1099d56, + 0xc119dad7, 0xc126f9a7, 0xc133681f, 0xc13e221f, 0xc145cc83, 0xc14a3166, + 0xc14e1bda, 0xc14d4a62, 0xc14e41a9, 0xc14f4e7b, 0xc153297e, 0xc1567ee5, + 0xc157dbab, 0xc158dfa4, 0xc158e6f9, 0xc1584e70, 0xc15aecea, 0xc15886b8, + 0xc156bcb4, 0xc15a7ba9, 0xc1581d34, 0xc15c0a48, 0xc15c463f, 0xc15dfc3b, + 0xc15bb28b, 0xc15b4413, 0xc158f8c0, 0xc1588ede, 0xc158c880, 0xc158ff19, + 0xc159815a, 0xc159ed72, 0xc15a458d, 0xc15a93d3, 0xc15a06ec, 0xc15953d8, + 0xc1592e92, 0xc1579518, 0xc1587d76, 0xc157bc56, 0xc159c47c, 0xc15a5ac4, + 0xc15b7286, 0xc15cab60, 0xc15e7f8d, 0xc1607ee5, 0xc162e9ad, 0xc165bdb0, + 0xc167bf3e, 0xc169a0a5, 0xc16b4b68, 0xc16d5682, 0xc16ebd51, 0xc170197a, + 0xc170d1cc, 0xc1707fc1, 0xc16fd830, 0xc16ec4b1, 0xc16de888, 0xc16d3b06, + 0xc16cc155, 0xc16c4e31, 0xc16b6abe, 0xc169cde8, 0xc1684578, 0xc166c2a4, + 0xc165d326, 0xc164df46, 0xc163b4ad, 0xc1632d19, 0xc162a94a, 0xc16280fc, + 0xc161ae3e, 0xc15fec42, 0xc15cbadc, 0xc15664c3, 0xc14c6d5d, 0xc13b64ae, + 0xc104fd75, 0xc1099d56, 0xc119dad7, 0xc126f9a7, 0xc133681f, 0xc13e221f, + 0xc145cc83, 0xc14a3166, 0xc14e1bda, 0xc14d4a62, 0xc14e41a9, 0xc14f4e7b, + 0xc153297e, 0xc1567ee5, 0xc157dbab, 0xc158dfa4, 0xc158e6f9, 0xc1584e70, + 0xc15aecea, 0xc15886b8, 0xc156bcb4, 0xc15a7ba9, 0xc1581d34, 0xc15c0a48, + 0xc15c463f, 0xc15dfc3b, 0xc15bb28b, 0xc15b4413, 0xc158f8c0, 0xc1588ede, + 0xc158c880, 0xc158ff19, 0xc159815a, 0xc159ed72, 0xc15a458d, 0xc15a93d3, + 0xc15a06ec, 0xc15953d8, 0xc1592e92, 0xc1579518, 0xc1587d76, 0xc157bc56, + 0xc159c47c, 0xc15a5ac4, 0xc15b7286, 0xc15cab60, 0xc15e7f8d, 0xc1607ee5, + 0xc162e9ad, 0xc165bdb0, 0xc167bf3e, 0xc169a0a5, 0xc16b4b68, 0xc16d5682, + 0xc16ebd51, 0xc170197a, 0xc170d1cc, 0xc1707fc1, 0xc16fd830, 0xc16ec4b1, + 0xc16de888, 0xc16d3b06, 0xc16cc155, 0xc16c4e31, 0xc16b6abe, 0xc169cde8, + 0xc1684578, 0xc166c2a4, 0xc165d326, 0xc164df46, 0xc163b4ad, 0xc1632d19, + 0xc162a94a, 0xc16280fc, 0xc161ae3e, 0xc15fec42, 0xc15cbadc, 0xc15664c3, + 0xc14c6d5d, 0xc13b64ae}; + +const unsigned int paraformer_cmvn_var_hex[] = { + + 0x40619618, 0x405fb77c, 0x405d3028, 0x405bef11, 0x405a189d, 0x4057aad5, + 0x4054f9cc, 0x40518e8c, 0x404fffdd, 0x40510d0d, 0x4052400d, 0x4052bab0, + 0x40526416, 0x40515cb8, 0x40506aee, 0x404fef8d, 0x404ff527, 0x40505b95, + 0x4050d61c, 0x4051d0a5, 0x4052abd2, 0x4052f14b, 0x4053d196, 0x4054800d, + 0x405545f2, 0x4055d71f, 0x40567588, 0x4056de4d, 0x40579b72, 0x40584d35, + 0x4058cd2f, 0x40594731, 0x4059a53f, 0x405a00ed, 0x405a34c1, 0x405a406e, + 0x405a1748, 0x405a0300, 0x405a1547, 0x405a66a7, 0x405a9be4, 0x405b04b2, + 0x405b5754, 0x405b9189, 0x405b9016, 0x405b7a07, 0x405b63f9, 0x405b3f45, + 0x405b0cb4, 0x405ac80b, 0x405ac1f7, 0x405abbd9, 0x405ac86a, 0x405ad72b, + 0x405af2f0, 0x405ab465, 0x405a6364, 0x405a1350, 0x4059baa3, 0x4059911d, + 0x40597921, 0x40595564, 0x40593b8d, 0x4059310f, 0x40594e46, 0x40599bae, + 0x4059e703, 0x4059feec, 0x405a053a, 0x4059feaa, 0x4059d7a0, 0x40599386, + 0x40592d0e, 0x4058ce4c, 0x40587335, 0x4058396a, 0x40584ee1, 0x4058925a, + 0x40592f6d, 0x405a9f0a, 0x40619618, 0x405fb77c, 0x405d3028, 0x405bef11, + 0x405a189d, 0x4057aad5, 0x4054f9cc, 0x40518e8c, 0x404fffdd, 0x40510d0d, + 0x4052400d, 0x4052bab0, 0x40526416, 0x40515cb8, 0x40506aee, 0x404fef8d, + 0x404ff527, 0x40505b95, 0x4050d61c, 0x4051d0a5, 0x4052abd2, 0x4052f14b, + 0x4053d196, 0x4054800d, 0x405545f2, 0x4055d71f, 0x40567588, 0x4056de4d, + 0x40579b72, 0x40584d35, 0x4058cd2f, 0x40594731, 0x4059a53f, 0x405a00ed, + 0x405a34c1, 0x405a406e, 0x405a1748, 0x405a0300, 0x405a1547, 0x405a66a7, + 0x405a9be4, 0x405b04b2, 0x405b5754, 0x405b9189, 0x405b9016, 0x405b7a07, + 0x405b63f9, 0x405b3f45, 0x405b0cb4, 0x405ac80b, 0x405ac1f7, 0x405abbd9, + 0x405ac86a, 0x405ad72b, 0x405af2f0, 0x405ab465, 0x405a6364, 0x405a1350, + 0x4059baa3, 0x4059911d, 0x40597921, 0x40595564, 0x40593b8d, 0x4059310f, + 0x40594e46, 0x40599bae, 0x4059e703, 0x4059feec, 0x405a053a, 0x4059feaa, + 0x4059d7a0, 0x40599386, 0x40592d0e, 0x4058ce4c, 0x40587335, 0x4058396a, + 0x40584ee1, 0x4058925a, 0x40592f6d, 0x405a9f0a, 0x40619618, 0x405fb77c, + 0x405d3028, 0x405bef11, 0x405a189d, 0x4057aad5, 0x4054f9cc, 0x40518e8c, + 0x404fffdd, 0x40510d0d, 0x4052400d, 0x4052bab0, 0x40526416, 0x40515cb8, + 0x40506aee, 0x404fef8d, 0x404ff527, 0x40505b95, 0x4050d61c, 0x4051d0a5, + 0x4052abd2, 0x4052f14b, 0x4053d196, 0x4054800d, 0x405545f2, 0x4055d71f, + 0x40567588, 0x4056de4d, 0x40579b72, 0x40584d35, 0x4058cd2f, 0x40594731, + 0x4059a53f, 0x405a00ed, 0x405a34c1, 0x405a406e, 0x405a1748, 0x405a0300, + 0x405a1547, 0x405a66a7, 0x405a9be4, 0x405b04b2, 0x405b5754, 0x405b9189, + 0x405b9016, 0x405b7a07, 0x405b63f9, 0x405b3f45, 0x405b0cb4, 0x405ac80b, + 0x405ac1f7, 0x405abbd9, 0x405ac86a, 0x405ad72b, 0x405af2f0, 0x405ab465, + 0x405a6364, 0x405a1350, 0x4059baa3, 0x4059911d, 0x40597921, 0x40595564, + 0x40593b8d, 0x4059310f, 0x40594e46, 0x40599bae, 0x4059e703, 0x4059feec, + 0x405a053a, 0x4059feaa, 0x4059d7a0, 0x40599386, 0x40592d0e, 0x4058ce4c, + 0x40587335, 0x4058396a, 0x40584ee1, 0x4058925a, 0x40592f6d, 0x405a9f0a, + 0x40619618, 0x405fb77c, 0x405d3028, 0x405bef11, 0x405a189d, 0x4057aad5, + 0x4054f9cc, 0x40518e8c, 0x404fffdd, 0x40510d0d, 0x4052400d, 0x4052bab0, + 0x40526416, 0x40515cb8, 0x40506aee, 0x404fef8d, 0x404ff527, 0x40505b95, + 0x4050d61c, 0x4051d0a5, 0x4052abd2, 0x4052f14b, 0x4053d196, 0x4054800d, + 0x405545f2, 0x4055d71f, 0x40567588, 0x4056de4d, 0x40579b72, 0x40584d35, + 0x4058cd2f, 0x40594731, 0x4059a53f, 0x405a00ed, 0x405a34c1, 0x405a406e, + 0x405a1748, 0x405a0300, 0x405a1547, 0x405a66a7, 0x405a9be4, 0x405b04b2, + 0x405b5754, 0x405b9189, 0x405b9016, 0x405b7a07, 0x405b63f9, 0x405b3f45, + 0x405b0cb4, 0x405ac80b, 0x405ac1f7, 0x405abbd9, 0x405ac86a, 0x405ad72b, + 0x405af2f0, 0x405ab465, 0x405a6364, 0x405a1350, 0x4059baa3, 0x4059911d, + 0x40597921, 0x40595564, 0x40593b8d, 0x4059310f, 0x40594e46, 0x40599bae, + 0x4059e703, 0x4059feec, 0x405a053a, 0x4059feaa, 0x4059d7a0, 0x40599386, + 0x40592d0e, 0x4058ce4c, 0x40587335, 0x4058396a, 0x40584ee1, 0x4058925a, + 0x40592f6d, 0x405a9f0a, 0x40619618, 0x405fb77c, 0x405d3028, 0x405bef11, + 0x405a189d, 0x4057aad5, 0x4054f9cc, 0x40518e8c, 0x404fffdd, 0x40510d0d, + 0x4052400d, 0x4052bab0, 0x40526416, 0x40515cb8, 0x40506aee, 0x404fef8d, + 0x404ff527, 0x40505b95, 0x4050d61c, 0x4051d0a5, 0x4052abd2, 0x4052f14b, + 0x4053d196, 0x4054800d, 0x405545f2, 0x4055d71f, 0x40567588, 0x4056de4d, + 0x40579b72, 0x40584d35, 0x4058cd2f, 0x40594731, 0x4059a53f, 0x405a00ed, + 0x405a34c1, 0x405a406e, 0x405a1748, 0x405a0300, 0x405a1547, 0x405a66a7, + 0x405a9be4, 0x405b04b2, 0x405b5754, 0x405b9189, 0x405b9016, 0x405b7a07, + 0x405b63f9, 0x405b3f45, 0x405b0cb4, 0x405ac80b, 0x405ac1f7, 0x405abbd9, + 0x405ac86a, 0x405ad72b, 0x405af2f0, 0x405ab465, 0x405a6364, 0x405a1350, + 0x4059baa3, 0x4059911d, 0x40597921, 0x40595564, 0x40593b8d, 0x4059310f, + 0x40594e46, 0x40599bae, 0x4059e703, 0x4059feec, 0x405a053a, 0x4059feaa, + 0x4059d7a0, 0x40599386, 0x40592d0e, 0x4058ce4c, 0x40587335, 0x4058396a, + 0x40584ee1, 0x4058925a, 0x40592f6d, 0x405a9f0a, 0x40619618, 0x405fb77c, + 0x405d3028, 0x405bef11, 0x405a189d, 0x4057aad5, 0x4054f9cc, 0x40518e8c, + 0x404fffdd, 0x40510d0d, 0x4052400d, 0x4052bab0, 0x40526416, 0x40515cb8, + 0x40506aee, 0x404fef8d, 0x404ff527, 0x40505b95, 0x4050d61c, 0x4051d0a5, + 0x4052abd2, 0x4052f14b, 0x4053d196, 0x4054800d, 0x405545f2, 0x4055d71f, + 0x40567588, 0x4056de4d, 0x40579b72, 0x40584d35, 0x4058cd2f, 0x40594731, + 0x4059a53f, 0x405a00ed, 0x405a34c1, 0x405a406e, 0x405a1748, 0x405a0300, + 0x405a1547, 0x405a66a7, 0x405a9be4, 0x405b04b2, 0x405b5754, 0x405b9189, + 0x405b9016, 0x405b7a07, 0x405b63f9, 0x405b3f45, 0x405b0cb4, 0x405ac80b, + 0x405ac1f7, 0x405abbd9, 0x405ac86a, 0x405ad72b, 0x405af2f0, 0x405ab465, + 0x405a6364, 0x405a1350, 0x4059baa3, 0x4059911d, 0x40597921, 0x40595564, + 0x40593b8d, 0x4059310f, 0x40594e46, 0x40599bae, 0x4059e703, 0x4059feec, + 0x405a053a, 0x4059feaa, 0x4059d7a0, 0x40599386, 0x40592d0e, 0x4058ce4c, + 0x40587335, 0x4058396a, 0x40584ee1, 0x4058925a, 0x40592f6d, 0x405a9f0a, + 0x40619618, 0x405fb77c, 0x405d3028, 0x405bef11, 0x405a189d, 0x4057aad5, + 0x4054f9cc, 0x40518e8c, 0x404fffdd, 0x40510d0d, 0x4052400d, 0x4052bab0, + 0x40526416, 0x40515cb8, 0x40506aee, 0x404fef8d, 0x404ff527, 0x40505b95, + 0x4050d61c, 0x4051d0a5, 0x4052abd2, 0x4052f14b, 0x4053d196, 0x4054800d, + 0x405545f2, 0x4055d71f, 0x40567588, 0x4056de4d, 0x40579b72, 0x40584d35, + 0x4058cd2f, 0x40594731, 0x4059a53f, 0x405a00ed, 0x405a34c1, 0x405a406e, + 0x405a1748, 0x405a0300, 0x405a1547, 0x405a66a7, 0x405a9be4, 0x405b04b2, + 0x405b5754, 0x405b9189, 0x405b9016, 0x405b7a07, 0x405b63f9, 0x405b3f45, + 0x405b0cb4, 0x405ac80b, 0x405ac1f7, 0x405abbd9, 0x405ac86a, 0x405ad72b, + 0x405af2f0, 0x405ab465, 0x405a6364, 0x405a1350, 0x4059baa3, 0x4059911d, + 0x40597921, 0x40595564, 0x40593b8d, 0x4059310f, 0x40594e46, 0x40599bae, + 0x4059e703, 0x4059feec, 0x405a053a, 0x4059feaa, 0x4059d7a0, 0x40599386, + 0x40592d0e, 0x4058ce4c, 0x40587335, 0x4058396a, 0x40584ee1, 0x4058925a, + 0x40592f6d, 0x405a9f0a + +}; + +const int pos_enc_coe_hex[] = { + 0x3f800000, 0x3f84b063, 0x3f898cc0, 0x3f8e96b2, 0x3f93cfe5, 0x3f993a15, + 0x3f9ed70c, 0x3fa4a8a8, 0x3faab0d5, 0x3fb0f193, 0x3fb76cf5, 0x3fbe2520, + 0x3fc51c50, 0x3fcc54d2, 0x3fd3d10c, 0x3fdb9378, 0x3fe39ea9, 0x3febf549, + 0x3ff49a1b, 0x3ffd8ffe, 0x40036cf4, 0x40083d78, 0x400d3b22, 0x40126799, + 0x4017c496, 0x401d53df, 0x4023174b, 0x402910c4, 0x402f4244, 0x4035adda, + 0x403c55a4, 0x40433bd9, 0x404a62c2, 0x4051ccbd, 0x40597c3f, 0x406173d4, + 0x4069b621, 0x407245e2, 0x407b25ed, 0x40822c9a, 0x4086f161, 0x408be2e0, + 0x409102bc, 0x409652a6, 0x409bd461, 0x40a189c1, 0x40a774aa, 0x40ad9711, + 0x40b3f300, 0x40ba8a92, 0x40c15ff6, 0x40c8756f, 0x40cfcd58, 0x40d76a1e, + 0x40df4e48, 0x40e77c73, 0x40eff755, 0x40f8c1be, 0x4100ef4c, 0x4105a873, + 0x410a8de6, 0x410fa144, 0x4114e43b, 0x411a588a, 0x41200000, 0x4125dc7c, + 0x412beff0, 0x41323c5f, 0x4138c3df, 0x413f889a, 0x41468cd0, 0x414dd2d2, + 0x41555d0a, 0x415d2df7, 0x41654832, 0x416dae69, 0x41766364, 0x417f6a07, + 0x418462a7, 0x41893c2b, 0x418e432a, 0x4193794e, 0x4198e051, 0x419e79ff, + 0x41a44831, 0x41aa4cd6, 0x41b089ea, 0x41b70180, 0x41bdb5bc, 0x41c4a8d7, + 0x41cbdd1e, 0x41d354f5, 0x41db12d6, 0x41e31950, 0x41eb6b0d, 0x41f40ad0, + 0x41fcfb72, 0x42031ff6, 0x4207eda7, 0x420ce865, 0x421211d5, 0x42176bad, + 0x421cf7b4, 0x4222b7c0, 0x4228adb9, 0x422edb98, 0x4235436b, 0x423be74f, + 0x4242c979, 0x4249ec31, 0x425151d4, 0x4258fcd6, 0x4260efc0, 0x42692d37, + 0x4271b7f3, 0x427a92cb, 0x4281e057, 0x4286a253, 0x428b90ed, 0x4290adc8, + 0x4295fa95, 0x429b7917, 0x42a12b1f, 0x42a71290, 0x42ad3160, 0x42b38995, + 0x42ba1d4a, 0x42c0eead, 0x42c80000, 0x42cf539b, 0x42d6ebec, 0x42decb76, + 0x42e6f4d6, 0x42ef6ac1, 0x42f83003, 0x4300a3c3, 0x43055a26, 0x430a3cbb, + 0x430f4d1f, 0x43148d01, 0x4319fe1e, 0x431fa244, 0x43257b51, 0x432b8b36, + 0x4331d3f4, 0x433857a1, 0x433f1865, 0x4346187e, 0x434d5a3e, 0x4354e00b, + 0x435cac64, 0x4364c1e0, 0x436d232b, 0x4375d30c, 0x437ed466, 0x43841519, + 0x4388ebc5, 0x438defd2, 0x439322e8, 0x439886c2, 0x439e1d27, 0x43a3e7f3, + 0x43a9e911, 0x43b0227e, 0x43b6964a, 0x43bd4698, 0x43c435a1, 0x43cb65b0, + 0x43d2d927, 0x43da927e, 0x43e29445, 0x43eae123, 0x43f37bd8, 0x43fc673e, + 0x4402d325, 0x44079e06, 0x440c95d8, 0x4411bc42, 0x441712f8, 0x441c9bbf, + 0x4422586d, 0x44284ae8, 0x442e7528, 0x4434d93a, 0x443b793b, 0x4442575d, + 0x444975e6, 0x4450d734, 0x44587db7, 0x44606bfa, 0x4468a49c, 0x44712a58, + 0x447a0000, 0x44819441, 0x44865373, 0x448b3f2a, 0x44905906, 0x4495a2b9, + 0x449b1e02, 0x44a0ccb4, 0x44a6b0b0, 0x44accbe9, 0x44b32067, 0x44b9b042, + 0x44c07da6, 0x44c78ad5, 0x44ceda26, 0x44d66e03, 0x44de48f1, 0x44e66d89, + 0x44eede7f, 0x44f79e9e, 0x45005867, 0x45050c07, 0x4509ebbf, 0x450ef92c, + 0x451435fb, 0x4519a3e8, 0x451f44bf, 0x45251a60, 0x452b26b7, 0x45316bc7, + 0x4537eba3, 0x453ea872, 0x4545a471, 0x454ce1f0, 0x45546355, 0x455c2b1d, + 0x45643bdc, 0x456c983e, 0x45754309, 0x457e3f1c, 0x4583c7b8, 0x45889b8f, + 0x458d9cab, 0x4592ccb6, 0x45982d67, 0x459dc087, 0x45a387ee, 0x45a98587, + 0x45afbb4e, 0x45b62b53, 0x45bcd7b6, 0x45c3c2af, 0x45caee88, 0x45d25da1, + 0x45da1272, 0x45e20f88, 0x45ea5789, 0x45f2ed34, 0x45fbd360, 0x46028680, + 0x46074e93, 0x460c437c, 0x461166e2, 0x4616ba77}; + +const int pos_enc_div_term_hex[] = { + 0x3f800000, 0x3f76f410, 0x3f6e39f8, 0x3f65ced3, 0x3f5dafd7, 0x3f55da52, + 0x3f4e4bac, 0x3f470165, 0x3f3ff911, 0x3f39305c, 0x3f32a506, 0x3f2c54e5, + 0x3f263de0, 0x3f205df3, 0x3f1ab32b, 0x3f153ba8, 0x3f0ff59a, 0x3f0adf41, + 0x3f05f6ee, 0x3f013b01, 0x3ef953cf, 0x3ef0843c, 0x3ee80460, 0x3edfd167, + 0x3ed7e89b, 0x3ed0475c, 0x3ec8eb24, 0x3ec1d181, 0x3ebaf81a, 0x3eb45caa, + 0x3eadfcff, 0x3ea7d6fd, 0x3ea1e89b, 0x3e9c2fe1, 0x3e96aaea, 0x3e9157e1, + 0x3e8c3504, 0x3e87409d, 0x3e827909, 0x3e7bb965, 0x3e72d424, 0x3e6a3f5c, + 0x3e61f836, 0x3e59fbf3, 0x3e5247ed, 0x3e4ad998, 0x3e43ae7c, 0x3e3cc43a, + 0x3e361887, 0x3e2fa92d, 0x3e29740a, 0x3e23770f, 0x3e1db040, 0x3e181db4, + 0x3e12bd91, 0x3e0d8e0f, 0x3e088d77, 0x3e03ba20, 0x3dfe24e1, 0x3df529bb, + 0x3dec7fd5, 0x3de42450, 0x3ddc1466, 0x3dd44d6c, 0x3dcccccd, 0x3dc5900d, + 0x3dbe94c7, 0x3db7d8a9, 0x3db15978, 0x3dab150e, 0x3da50957, 0x3d9f3451, + 0x3d99940e, 0x3d9426b0, 0x3d8eea6c, 0x3d89dd84, 0x3d84fe4d, 0x3d804b29, + 0x3d778512, 0x3d6ec5da, 0x3d6655c3, 0x3d5e3202, 0x3d5657e4, 0x3d4ec4ce, + 0x3d47763f, 0x3d4069ca, 0x3d399d19, 0x3d330dec, 0x3d2cba15, 0x3d269f7d, + 0x3d20bc1d, 0x3d1b0e01, 0x3d159348, 0x3d104a21, 0x3d0b30cc, 0x3d064597, + 0x3d0186e2, 0x3cf9e635, 0x3cf11176, 0x3ce88c9c, 0x3ce054d2, 0x3cd86761, + 0x3cd0c1a8, 0x3cc9611d, 0x3cc24350, 0x3cbb65e3, 0x3cb4c691, 0x3cae6328, + 0x3ca8398b, 0x3ca247ad, 0x3c9c8b97, 0x3c970362, 0x3c91ad39, 0x3c8c8757, + 0x3c879008, 0x3c82c5a5, 0x3c7c4d33, 0x3c7362b9, 0x3c6ac8e7, 0x3c627ce5, + 0x3c5a7bf1, 0x3c52c366, 0x3c4b50b4, 0x3c442163, 0x3c3d3311, 0x3c368373, + 0x3c301052, 0x3c29d789, 0x3c23d70a, 0x3c1e0cd7, 0x3c187705, 0x3c1313ba, + 0x3c0de12d, 0x3c08dda5, 0x3c040779, 0x3bfeba1b, 0x3bf5b9b0, 0x3bed0ab3, + 0x3be4aa46, 0x3bdc95a0, 0x3bd4ca14, 0x3bcd450e, 0x3bc6040e, 0x3bbf04ae, + 0x3bb8449c, 0x3bb1c19b, 0x3bab7983, 0x3ba56a3f, 0x3b9f91cc, 0x3b99ee3b, + 0x3b947dae, 0x3b8f3e56, 0x3b8a2e77, 0x3b854c64, 0x3b80967d, 0x3b781668, + 0x3b6f520d, 0x3b66dd02, 0x3b5eb47a, 0x3b56d5bf, 0x3b4f3e37, 0x3b47eb5e, + 0x3b40dac5, 0x3b3a0a16, 0x3b33770f, 0x3b2d1f81, 0x3b270153, 0x3b211a7e, + 0x3b1b690d, 0x3b15eb1c, 0x3b109edb, 0x3b0b8287, 0x3b06946f, 0x3b01d2f1, + 0x3afa78f1, 0x3af19f03, 0x3ae91528, 0x3ae0d88b, 0x3ad8e673, 0x3ad13c3c, + 0x3ac9d75c, 0x3ac2b561, 0x3abbd3ec, 0x3ab530b7, 0x3aaec98e, 0x3aa89c52, + 0x3aa2a6f6, 0x3a9ce782, 0x3a975c0e, 0x3a9202c3, 0x3a8cd9db, 0x3a87dfa1, + 0x3a83126f, 0x3a7ce158, 0x3a73f1a2, 0x3a6b52c4, 0x3a6301e2, 0x3a5afc3b, + 0x3a533f27, 0x3a4bc816, 0x3a44948c, 0x3a3da229, 0x3a36ee9e, 0x3a3077b3, + 0x3a2a3b43, 0x3a24373e, 0x3a1e69a5, 0x3a18d08b, 0x3a136a16, 0x3a0e347c, + 0x3a092e02, 0x3a0454ff, 0x39ff4fad, 0x39f649f8, 0x39ed95e3, 0x39e5308a, + 0x39dd1726, 0x39d54706, 0x39cdbd95, 0x39c67853, 0x39bf74d7, 0x39b8b0cf, + 0x39b229fb, 0x39abde33, 0x39a5cb5f, 0x399fef7e, 0x399a489e, 0x3994d4df, + 0x398f9272, 0x398a7f9b, 0x39859aa9, 0x3980e1fe, 0x3978a814, 0x396fde93, + 0x39676491, 0x395f373e, 0x395753e5, 0x394fb7e7, 0x394860c1, 0x39414c02, + 0x393a7753, 0x3933e06f, 0x392d8529, 0x39276363, 0x39217917, 0x391bc44d, + 0x39164323, 0x3910f3c6, 0x390bd472, 0x3906e374, 0x39021f2b, 0x38fb0c03, + 0x38f22ce3, 0x38e99e04, 0x38e15c92, 0x38d965ce}; +#endif diff --git a/funasr/runtime/onnxruntime/src/tmp.h b/funasr/runtime/onnxruntime/src/tmp.h new file mode 100644 index 000000000..b57303f82 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/tmp.h @@ -0,0 +1,112 @@ + +#ifndef WENETPARAMS_H +#define WENETPARAMS_H +// #pragma pack(1) + +#define vocab_size 5538 + +typedef struct { + float conv0_weight[512 * 9]; + float conv0_bias[512]; + + float conv1_weight[512 * 512 * 9]; + float conv1_bias[512]; + + float out0_weight[9728 * 512]; + float out0_bias[512]; + +} EncEmbedParams; + +typedef struct { + float linear_q_weight[512 * 512]; + float linear_q_bias[512]; + float linear_k_weight[512 * 512]; + float linear_k_bias[512]; + float linear_v_weight[512 * 512]; + float linear_v_bias[512]; + float linear_out_weight[512 * 512]; + float linear_out_bias[512]; +} SelfAttnParams; + +typedef struct { + SelfAttnParams linear0; + float linear_pos_weight[512 * 512]; + float pos_bias_u[512]; + float pos_bias_v[512]; + +} EncSelfAttnParams; + +typedef struct { + float w1_weight[512 * 2048]; + float w1_bias[2048]; + float w2_weight[2048 * 512]; + float w2_bias[512]; +} FeedForwardParams; + +typedef struct { + float weight[512]; + float bias[512]; +} NormParams; + +typedef struct { + float pointwise_conv1_weight[1024 * 512]; + float pointwise_conv1_bias[1024]; + + float depthwise_conv_weight[512 * 15]; + float depthwise_conv_bias[512]; + + float pointwise_conv2_weight[512 * 512]; + float pointwise_conv2_bias[512]; + NormParams norm; +} EncConvParams; + +typedef struct { + EncSelfAttnParams self_attn; + FeedForwardParams feedforward; + FeedForwardParams feedforward_macaron; + EncConvParams conv_module; + NormParams norm_ff; + NormParams norm_mha; + NormParams norm_macaron; + NormParams norm_conv; + NormParams norm_final; + // float concat_weight[1024 * 512]; + // float concat_bias[512]; +} SubEncoderParams; + +typedef struct { + EncEmbedParams embed; + SubEncoderParams sub_encoder[12]; + NormParams after_norm; +} EncoderParams; + +typedef struct { + SelfAttnParams self_attn; + SelfAttnParams src_attn; + FeedForwardParams feedward; + NormParams norm1; + NormParams norm2; + NormParams norm3; + // float concat_weight1[1024 * 512]; + // float concat_bias1[512]; + // float concat_weight2[1024 * 512]; + // float concat_bias2[512]; +} SubDecoderParams; + +typedef struct { + float embed_weight[vocab_size * 512]; + SubDecoderParams sub_decoder[6]; + NormParams after_norm; + float output_weight[vocab_size * 512]; + float output_bias[vocab_size]; +} DecoderParams; + +typedef struct { + EncoderParams encoder; + float ctc_weight[512 * vocab_size]; + float ctc_bias[vocab_size]; + DecoderParams decoder; +} WenetParams; + +// #pragma pack() +#endif diff --git a/funasr/runtime/onnxruntime/src/util.cpp b/funasr/runtime/onnxruntime/src/util.cpp new file mode 100644 index 000000000..5a72c72b9 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/util.cpp @@ -0,0 +1,180 @@ + +#include "precomp.h" + +float *loadparams(const char *filename) +{ + + FILE *fp; + fp = fopen(filename, "rb"); + fseek(fp, 0, SEEK_END); + uint32_t nFileLen = ftell(fp); + fseek(fp, 0, SEEK_SET); + + float *params_addr = (float *)aligned_malloc(32, nFileLen); + int n = fread(params_addr, 1, nFileLen, fp); + fclose(fp); + + return params_addr; +} + +int val_align(int val, int align) +{ + float tmp = ceil((float)val / (float)align) * (float)align; + return (int)tmp; +} + +void disp_params(float *din, int size) +{ + int i; + for (i = 0; i < size; i++) { + printf("%f ", din[i]); + } + printf("\n"); +} +void SaveDataFile(const char *filename, void *data, uint32_t len) +{ + FILE *fp; + fp = fopen(filename, "wb+"); + fwrite(data, 1, len, fp); + fclose(fp); +} + +void basic_norm(Tensor *&din, float norm) +{ + + int Tmax = din->size[2]; + + int i, j; + for (i = 0; i < Tmax; i++) { + float sum = 0; + for (j = 0; j < 512; j++) { + int ii = i * 512 + j; + sum += din->buff[ii] * din->buff[ii]; + } + float mean = sqrt(sum / 512 + norm); + for (j = 0; j < 512; j++) { + int ii = i * 512 + j; + din->buff[ii] = din->buff[ii] / mean; + } + } +} + +void findmax(float *din, int len, float &max_val, int &max_idx) +{ + int i; + max_val = -INFINITY; + max_idx = -1; + for (i = 0; i < len; i++) { + if (din[i] > max_val) { + max_val = din[i]; + max_idx = i; + } + } +} + +string pathAppend(const string &p1, const string &p2) +{ + + char sep = '/'; + string tmp = p1; + +#ifdef _WIN32 + sep = '\\'; +#endif + + if (p1[p1.length()-1] != sep) { // Need to add a + tmp += sep; // path separator + return (tmp + p2); + } else + return (p1 + p2); +} + +void relu(Tensor *din) +{ + int i; + for (i = 0; i < din->buff_size; i++) { + float val = din->buff[i]; + din->buff[i] = val < 0 ? 0 : val; + } +} + +void swish(Tensor *din) +{ + int i; + for (i = 0; i < din->buff_size; i++) { + float val = din->buff[i]; + din->buff[i] = val / (1 + exp(-val)); + } +} + +void sigmoid(Tensor *din) +{ + int i; + for (i = 0; i < din->buff_size; i++) { + float val = din->buff[i]; + din->buff[i] = 1 / (1 + exp(-val)); + } +} + +void doubleswish(Tensor *din) +{ + int i; + for (i = 0; i < din->buff_size; i++) { + float val = din->buff[i]; + din->buff[i] = val / (1 + exp(-val + 1)); + } +} + +void softmax(float *din, int mask, int len) +{ + float *tmp = (float *)malloc(mask * sizeof(float)); + int i; + float sum = 0; + float max = -INFINITY; + + for (i = 0; i < mask; i++) { + max = max < din[i] ? din[i] : max; + } + + for (i = 0; i < mask; i++) { + tmp[i] = exp(din[i] - max); + sum += tmp[i]; + } + for (i = 0; i < mask; i++) { + din[i] = tmp[i] / sum; + } + free(tmp); + for (i = mask; i < len; i++) { + din[i] = 0; + } +} + +void log_softmax(float *din, int len) +{ + float *tmp = (float *)malloc(len * sizeof(float)); + int i; + float sum = 0; + for (i = 0; i < len; i++) { + tmp[i] = exp(din[i]); + sum += tmp[i]; + } + for (i = 0; i < len; i++) { + din[i] = log(tmp[i] / sum); + } + free(tmp); +} + +void glu(Tensor *din, Tensor *dout) +{ + int mm = din->buff_size / 1024; + int i, j; + for (i = 0; i < mm; i++) { + for (j = 0; j < 512; j++) { + int in_off = i * 1024 + j; + int out_off = i * 512 + j; + float a = din->buff[in_off]; + float b = din->buff[in_off + 512]; + dout->buff[out_off] = a / (1 + exp(-b)); + } + } +} diff --git a/funasr/runtime/onnxruntime/src/util.h b/funasr/runtime/onnxruntime/src/util.h new file mode 100644 index 000000000..48a27db28 --- /dev/null +++ b/funasr/runtime/onnxruntime/src/util.h @@ -0,0 +1,30 @@ + + +#ifndef UTIL_H +#define UTIL_H + +using namespace std; + +extern float *loadparams(const char *filename); + +extern void SaveDataFile(const char *filename, void *data, uint32_t len); +extern void relu(Tensor *din); +extern void swish(Tensor *din); +extern void sigmoid(Tensor *din); +extern void doubleswish(Tensor *din); + +extern void softmax(float *din, int mask, int len); + +extern void log_softmax(float *din, int len); +extern int val_align(int val, int align); +extern void disp_params(float *din, int size); + +extern void basic_norm(Tensor *&din, float norm); + +extern void findmax(float *din, int len, float &max_val, int &max_idx); + +extern void glu(Tensor *din, Tensor *dout); + +string pathAppend(const string &p1, const string &p2); + +#endif diff --git a/funasr/runtime/onnxruntime/tester/CMakeLists.txt b/funasr/runtime/onnxruntime/tester/CMakeLists.txt new file mode 100644 index 000000000..d79427135 --- /dev/null +++ b/funasr/runtime/onnxruntime/tester/CMakeLists.txt @@ -0,0 +1,20 @@ + + +if(WIN32) + if(CMAKE_CL_64) + link_directories( ${CMAKE_SOURCE_DIR}/win/lib/x64 ) + else() + link_directories( ${CMAKE_SOURCE_DIR}/win/lib/x86 ) + endif() +endif() + +set(EXTRA_LIBS rapidasr) + + +include_directories(${CMAKE_SOURCE_DIR}/include) +set(EXECNAME "tester") + +add_executable(${EXECNAME} "tester.cpp") +target_link_libraries(${EXECNAME} PUBLIC ${EXTRA_LIBS}) + + diff --git a/funasr/runtime/onnxruntime/tester/tester.cpp b/funasr/runtime/onnxruntime/tester/tester.cpp new file mode 100644 index 000000000..ba5c61ccb --- /dev/null +++ b/funasr/runtime/onnxruntime/tester/tester.cpp @@ -0,0 +1,118 @@ + +#ifndef _WIN32 +#include +#else +#include +#endif + +#include "librapidasrapi.h" + +#include +#include +using namespace std; + +int main(int argc, char *argv[]) +{ + + if (argc < 2) + { + printf("Usage: %s /path/to/model_dir /path/to/wav/file", argv[0]); + exit(-1); + } + struct timeval start, end; + gettimeofday(&start, NULL); + int nThreadNum = 4; + RPASR_HANDLE AsrHanlde=RapidAsrInit(argv[1], nThreadNum); + + if (!AsrHanlde) + { + printf("Cannot load ASR Model from: %s, there must be files model.onnx and vocab.txt", argv[1]); + exit(-1); + } + + + + gettimeofday(&end, NULL); + long seconds = (end.tv_sec - start.tv_sec); + long modle_init_micros = ((seconds * 1000000) + end.tv_usec) - (start.tv_usec); + printf("Model initialization takes %lfs.\n", (double)modle_init_micros / 1000000); + + + + gettimeofday(&start, NULL); + float snippet_time = 0.0f; + + + RPASR_RESULT Result=RapidAsrRecogFile(AsrHanlde, argv[2], RASR_NONE, NULL); + + gettimeofday(&end, NULL); + + if (Result) + { + string msg = RapidAsrGetResult(Result, 0); + setbuf(stdout, NULL); + cout << "Result: \""; + cout << msg << endl; + cout << "\"." << endl; + snippet_time = RapidAsrGetRetSnippetTime(Result); + RapidAsrFreeResult(Result); + } + else + { + cout <<"no return data!"; + } + + + //char* buff = nullptr; + //int len = 0; + //ifstream ifs(argv[2], std::ios::binary | std::ios::in); + //if (ifs.is_open()) + //{ + // ifs.seekg(0, std::ios::end); + // len = ifs.tellg(); + // ifs.seekg(0, std::ios::beg); + + // buff = new char[len]; + + // ifs.read(buff, len); + + + // //RPASR_RESULT Result = RapidAsrRecogPCMFile(AsrHanlde, argv[2], RASR_NONE, NULL); + + // RPASR_RESULT Result=RapidAsrRecogPCMBuffer(AsrHanlde, buff,len, RASR_NONE, NULL); + // //RPASR_RESULT Result = RapidAsrRecogPCMFile(AsrHanlde, argv[2], RASR_NONE, NULL); + // gettimeofday(&end, NULL); + // + // if (Result) + // { + // string msg = RapidAsrGetResult(Result, 0); + // setbuf(stdout, NULL); + // cout << "Result: \""; + // cout << msg << endl; + // cout << "\"." << endl; + // snippet_time = RapidAsrGetRetSnippetTime(Result); + // RapidAsrFreeResult(Result); + // } + // else + // { + // cout <<"no return data!"; + // } + + // + //delete[]buff; + //} + + + printf("Audio length %lfs.\n", (double)snippet_time); + seconds = (end.tv_sec - start.tv_sec); + long taking_micros = ((seconds * 1000000) + end.tv_usec) - (start.tv_usec); + printf("Model inference takes %lfs.\n", (double)taking_micros / 1000000); + + printf("Model inference RTF: %04lf.\n", (double)taking_micros/ (snippet_time*1000000)); + + RapidAsrUninit(AsrHanlde); + + return 0; +} + + \ No newline at end of file diff --git a/funasr/runtime/onnxruntime/third_party/install_openblas.sh b/funasr/runtime/onnxruntime/third_party/install_openblas.sh new file mode 100644 index 000000000..4a41012e7 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/install_openblas.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +OPENBLAS_VERSION=0.3.13 + +WGET=${WGET:-wget} + +set -e + +if ! command -v gfortran 2>/dev/null; then + echo "$0: gfortran is not installed. Please install it, e.g. by:" + echo " apt-get install gfortran" + echo "(if on Debian or Ubuntu), or:" + echo " yum install gcc-gfortran" + echo "(if on RedHat/CentOS). On a Mac, if brew is installed, it's:" + echo " brew install gfortran" + exit 1 +fi + + +tarball=OpenBLAS-$OPENBLAS_VERSION.tar.gz + +rm -rf xianyi-OpenBLAS-* OpenBLAS OpenBLAS-*.tar.gz + +if [ -d "$DOWNLOAD_DIR" ]; then + cp -p "$DOWNLOAD_DIR/$tarball" . +else + url=$($WGET -qO- "https://api.github.com/repos/xianyi/OpenBLAS/releases/tags/v${OPENBLAS_VERSION}" | python -c 'import sys,json;print(json.load(sys.stdin)["tarball_url"])') + test -n "$url" + $WGET -t3 -nv -O $tarball "$url" +fi + +tar xzf $tarball +mv xianyi-OpenBLAS-* OpenBLAS + +make PREFIX=$(pwd)/OpenBLAS/install USE_LOCKING=1 USE_THREAD=0 -C OpenBLAS all install +if [ $? -eq 0 ]; then + echo "OpenBLAS is installed successfully." + rm $tarball +fi \ No newline at end of file diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/CMakeLists.txt b/funasr/runtime/onnxruntime/third_party/webrtc/CMakeLists.txt new file mode 100644 index 000000000..51812eb7c --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/CMakeLists.txt @@ -0,0 +1,16 @@ + + +if(WIN32) + add_definitions(-DWEBRTC_WIN) +else() + add_definitions(-DWEBRTC_POSIX) +endif() + + +include_directories("..") + +file(GLOB_RECURSE files "*.c" "rtc_base/checks.cc") + +message("${files}") + +add_library(webrtcvad ${files}) diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/complex_bit_reverse.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/complex_bit_reverse.c new file mode 100644 index 000000000..c8bd2dc45 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/complex_bit_reverse.c @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" + +/* Tables for data buffer indexes that are bit reversed and thus need to be + * swapped. Note that, index_7[{0, 2, 4, ...}] are for the left side of the swap + * operations, while index_7[{1, 3, 5, ...}] are for the right side of the + * operation. Same for index_8. + */ + +/* Indexes for the case of stages == 7. */ +static const int16_t index_7[112] = { + 1, 64, 2, 32, 3, 96, 4, 16, 5, 80, 6, 48, 7, 112, 9, 72, 10, 40, 11, 104, + 12, 24, 13, 88, 14, 56, 15, 120, 17, 68, 18, 36, 19, 100, 21, 84, 22, 52, + 23, 116, 25, 76, 26, 44, 27, 108, 29, 92, 30, 60, 31, 124, 33, 66, 35, 98, + 37, 82, 38, 50, 39, 114, 41, 74, 43, 106, 45, 90, 46, 58, 47, 122, 49, 70, + 51, 102, 53, 86, 55, 118, 57, 78, 59, 110, 61, 94, 63, 126, 67, 97, 69, + 81, 71, 113, 75, 105, 77, 89, 79, 121, 83, 101, 87, 117, 91, 109, 95, 125, + 103, 115, 111, 123 +}; + +/* Indexes for the case of stages == 8. */ +static const int16_t index_8[240] = { + 1, 128, 2, 64, 3, 192, 4, 32, 5, 160, 6, 96, 7, 224, 8, 16, 9, 144, 10, 80, + 11, 208, 12, 48, 13, 176, 14, 112, 15, 240, 17, 136, 18, 72, 19, 200, 20, + 40, 21, 168, 22, 104, 23, 232, 25, 152, 26, 88, 27, 216, 28, 56, 29, 184, + 30, 120, 31, 248, 33, 132, 34, 68, 35, 196, 37, 164, 38, 100, 39, 228, 41, + 148, 42, 84, 43, 212, 44, 52, 45, 180, 46, 116, 47, 244, 49, 140, 50, 76, + 51, 204, 53, 172, 54, 108, 55, 236, 57, 156, 58, 92, 59, 220, 61, 188, 62, + 124, 63, 252, 65, 130, 67, 194, 69, 162, 70, 98, 71, 226, 73, 146, 74, 82, + 75, 210, 77, 178, 78, 114, 79, 242, 81, 138, 83, 202, 85, 170, 86, 106, 87, + 234, 89, 154, 91, 218, 93, 186, 94, 122, 95, 250, 97, 134, 99, 198, 101, + 166, 103, 230, 105, 150, 107, 214, 109, 182, 110, 118, 111, 246, 113, 142, + 115, 206, 117, 174, 119, 238, 121, 158, 123, 222, 125, 190, 127, 254, 131, + 193, 133, 161, 135, 225, 137, 145, 139, 209, 141, 177, 143, 241, 147, 201, + 149, 169, 151, 233, 155, 217, 157, 185, 159, 249, 163, 197, 167, 229, 171, + 213, 173, 181, 175, 245, 179, 205, 183, 237, 187, 221, 191, 253, 199, 227, + 203, 211, 207, 243, 215, 235, 223, 251, 239, 247 +}; + +void WebRtcSpl_ComplexBitReverse(int16_t* __restrict complex_data, int stages) { + /* For any specific value of stages, we know exactly the indexes that are + * bit reversed. Currently (Feb. 2012) in WebRTC the only possible values of + * stages are 7 and 8, so we use tables to save unnecessary iterations and + * calculations for these two cases. + */ + if (stages == 7 || stages == 8) { + int m = 0; + int length = 112; + const int16_t* index = index_7; + + if (stages == 8) { + length = 240; + index = index_8; + } + + /* Decimation in time. Swap the elements with bit-reversed indexes. */ + for (m = 0; m < length; m += 2) { + /* We declare a int32_t* type pointer, to load both the 16-bit real + * and imaginary elements from complex_data in one instruction, reducing + * complexity. + */ + int32_t* complex_data_ptr = (int32_t*)complex_data; + int32_t temp = 0; + + temp = complex_data_ptr[index[m]]; /* Real and imaginary */ + complex_data_ptr[index[m]] = complex_data_ptr[index[m + 1]]; + complex_data_ptr[index[m + 1]] = temp; + } + } + else { + int m = 0, mr = 0, l = 0; + int n = 1 << stages; + int nn = n - 1; + + /* Decimation in time - re-order data */ + for (m = 1; m <= nn; ++m) { + int32_t* complex_data_ptr = (int32_t*)complex_data; + int32_t temp = 0; + + /* Find out indexes that are bit-reversed. */ + l = n; + do { + l >>= 1; + } while (l > nn - mr); + mr = (mr & (l - 1)) + l; + + if (mr <= m) { + continue; + } + + /* Swap the elements with bit-reversed indexes. + * This is similar to the loop in the stages == 7 or 8 cases. + */ + temp = complex_data_ptr[m]; /* Real and imaginary */ + complex_data_ptr[m] = complex_data_ptr[mr]; + complex_data_ptr[mr] = temp; + } + } +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/complex_fft.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/complex_fft.c new file mode 100644 index 000000000..328087233 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/complex_fft.c @@ -0,0 +1,299 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + + +/* + * This file contains the function WebRtcSpl_ComplexFFT(). + * The description header can be found in signal_processing_library.h + * + */ + +#include "webrtc/common_audio/signal_processing/complex_fft_tables.h" +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" +#include "webrtc/rtc_base/system/arch.h" + +#define CFFTSFT 14 +#define CFFTRND 1 +#define CFFTRND2 16384 + +#define CIFFTSFT 14 +#define CIFFTRND 1 + + +int WebRtcSpl_ComplexFFT(int16_t frfi[], int stages, int mode) +{ + int i, j, l, k, istep, n, m; + int16_t wr, wi; + int32_t tr32, ti32, qr32, qi32; + + /* The 1024-value is a constant given from the size of kSinTable1024[], + * and should not be changed depending on the input parameter 'stages' + */ + n = 1 << stages; + if (n > 1024) + return -1; + + l = 1; + k = 10 - 1; /* Constant for given kSinTable1024[]. Do not change + depending on the input parameter 'stages' */ + + if (mode == 0) + { + // mode==0: Low-complexity and Low-accuracy mode + while (l < n) + { + istep = l << 1; + + for (m = 0; m < l; ++m) + { + j = m << k; + + /* The 256-value is a constant given as 1/4 of the size of + * kSinTable1024[], and should not be changed depending on the input + * parameter 'stages'. It will result in 0 <= j < N_SINE_WAVE/2 + */ + wr = kSinTable1024[j + 256]; + wi = -kSinTable1024[j]; + + for (i = m; i < n; i += istep) + { + j = i + l; + + tr32 = (wr * frfi[2 * j] - wi * frfi[2 * j + 1]) >> 15; + + ti32 = (wr * frfi[2 * j + 1] + wi * frfi[2 * j]) >> 15; + + qr32 = (int32_t)frfi[2 * i]; + qi32 = (int32_t)frfi[2 * i + 1]; + frfi[2 * j] = (int16_t)((qr32 - tr32) >> 1); + frfi[2 * j + 1] = (int16_t)((qi32 - ti32) >> 1); + frfi[2 * i] = (int16_t)((qr32 + tr32) >> 1); + frfi[2 * i + 1] = (int16_t)((qi32 + ti32) >> 1); + } + } + + --k; + l = istep; + + } + + } else + { + // mode==1: High-complexity and High-accuracy mode + while (l < n) + { + istep = l << 1; + + for (m = 0; m < l; ++m) + { + j = m << k; + + /* The 256-value is a constant given as 1/4 of the size of + * kSinTable1024[], and should not be changed depending on the input + * parameter 'stages'. It will result in 0 <= j < N_SINE_WAVE/2 + */ + wr = kSinTable1024[j + 256]; + wi = -kSinTable1024[j]; + +#ifdef WEBRTC_ARCH_ARM_V7 + int32_t wri = 0; + __asm __volatile("pkhbt %0, %1, %2, lsl #16" : "=r"(wri) : + "r"((int32_t)wr), "r"((int32_t)wi)); +#endif + + for (i = m; i < n; i += istep) + { + j = i + l; + +#ifdef WEBRTC_ARCH_ARM_V7 + register int32_t frfi_r; + __asm __volatile( + "pkhbt %[frfi_r], %[frfi_even], %[frfi_odd]," + " lsl #16\n\t" + "smlsd %[tr32], %[wri], %[frfi_r], %[cfftrnd]\n\t" + "smladx %[ti32], %[wri], %[frfi_r], %[cfftrnd]\n\t" + :[frfi_r]"=&r"(frfi_r), + [tr32]"=&r"(tr32), + [ti32]"=r"(ti32) + :[frfi_even]"r"((int32_t)frfi[2*j]), + [frfi_odd]"r"((int32_t)frfi[2*j +1]), + [wri]"r"(wri), + [cfftrnd]"r"(CFFTRND)); +#else + tr32 = wr * frfi[2 * j] - wi * frfi[2 * j + 1] + CFFTRND; + + ti32 = wr * frfi[2 * j + 1] + wi * frfi[2 * j] + CFFTRND; +#endif + + tr32 >>= 15 - CFFTSFT; + ti32 >>= 15 - CFFTSFT; + + qr32 = ((int32_t)frfi[2 * i]) * (1 << CFFTSFT); + qi32 = ((int32_t)frfi[2 * i + 1]) * (1 << CFFTSFT); + + frfi[2 * j] = (int16_t)( + (qr32 - tr32 + CFFTRND2) >> (1 + CFFTSFT)); + frfi[2 * j + 1] = (int16_t)( + (qi32 - ti32 + CFFTRND2) >> (1 + CFFTSFT)); + frfi[2 * i] = (int16_t)( + (qr32 + tr32 + CFFTRND2) >> (1 + CFFTSFT)); + frfi[2 * i + 1] = (int16_t)( + (qi32 + ti32 + CFFTRND2) >> (1 + CFFTSFT)); + } + } + + --k; + l = istep; + } + } + return 0; +} + +int WebRtcSpl_ComplexIFFT(int16_t frfi[], int stages, int mode) +{ + size_t i, j, l, istep, n, m; + int k, scale, shift; + int16_t wr, wi; + int32_t tr32, ti32, qr32, qi32; + int32_t tmp32, round2; + + /* The 1024-value is a constant given from the size of kSinTable1024[], + * and should not be changed depending on the input parameter 'stages' + */ + n = ((size_t)1) << stages; + if (n > 1024) + return -1; + + scale = 0; + + l = 1; + k = 10 - 1; /* Constant for given kSinTable1024[]. Do not change + depending on the input parameter 'stages' */ + + while (l < n) + { + // variable scaling, depending upon data + shift = 0; + round2 = 8192; + + tmp32 = WebRtcSpl_MaxAbsValueW16(frfi, 2 * n); + if (tmp32 > 13573) + { + shift++; + scale++; + round2 <<= 1; + } + if (tmp32 > 27146) + { + shift++; + scale++; + round2 <<= 1; + } + + istep = l << 1; + + if (mode == 0) + { + // mode==0: Low-complexity and Low-accuracy mode + for (m = 0; m < l; ++m) + { + j = m << k; + + /* The 256-value is a constant given as 1/4 of the size of + * kSinTable1024[], and should not be changed depending on the input + * parameter 'stages'. It will result in 0 <= j < N_SINE_WAVE/2 + */ + wr = kSinTable1024[j + 256]; + wi = kSinTable1024[j]; + + for (i = m; i < n; i += istep) + { + j = i + l; + + tr32 = (wr * frfi[2 * j] - wi * frfi[2 * j + 1]) >> 15; + + ti32 = (wr * frfi[2 * j + 1] + wi * frfi[2 * j]) >> 15; + + qr32 = (int32_t)frfi[2 * i]; + qi32 = (int32_t)frfi[2 * i + 1]; + frfi[2 * j] = (int16_t)((qr32 - tr32) >> shift); + frfi[2 * j + 1] = (int16_t)((qi32 - ti32) >> shift); + frfi[2 * i] = (int16_t)((qr32 + tr32) >> shift); + frfi[2 * i + 1] = (int16_t)((qi32 + ti32) >> shift); + } + } + } else + { + // mode==1: High-complexity and High-accuracy mode + + for (m = 0; m < l; ++m) + { + j = m << k; + + /* The 256-value is a constant given as 1/4 of the size of + * kSinTable1024[], and should not be changed depending on the input + * parameter 'stages'. It will result in 0 <= j < N_SINE_WAVE/2 + */ + wr = kSinTable1024[j + 256]; + wi = kSinTable1024[j]; + +#ifdef WEBRTC_ARCH_ARM_V7 + int32_t wri = 0; + __asm __volatile("pkhbt %0, %1, %2, lsl #16" : "=r"(wri) : + "r"((int32_t)wr), "r"((int32_t)wi)); +#endif + + for (i = m; i < n; i += istep) + { + j = i + l; + +#ifdef WEBRTC_ARCH_ARM_V7 + register int32_t frfi_r; + __asm __volatile( + "pkhbt %[frfi_r], %[frfi_even], %[frfi_odd], lsl #16\n\t" + "smlsd %[tr32], %[wri], %[frfi_r], %[cifftrnd]\n\t" + "smladx %[ti32], %[wri], %[frfi_r], %[cifftrnd]\n\t" + :[frfi_r]"=&r"(frfi_r), + [tr32]"=&r"(tr32), + [ti32]"=r"(ti32) + :[frfi_even]"r"((int32_t)frfi[2*j]), + [frfi_odd]"r"((int32_t)frfi[2*j +1]), + [wri]"r"(wri), + [cifftrnd]"r"(CIFFTRND) + ); +#else + + tr32 = wr * frfi[2 * j] - wi * frfi[2 * j + 1] + CIFFTRND; + + ti32 = wr * frfi[2 * j + 1] + wi * frfi[2 * j] + CIFFTRND; +#endif + tr32 >>= 15 - CIFFTSFT; + ti32 >>= 15 - CIFFTSFT; + + qr32 = ((int32_t)frfi[2 * i]) * (1 << CIFFTSFT); + qi32 = ((int32_t)frfi[2 * i + 1]) * (1 << CIFFTSFT); + + frfi[2 * j] = (int16_t)( + (qr32 - tr32 + round2) >> (shift + CIFFTSFT)); + frfi[2 * j + 1] = (int16_t)( + (qi32 - ti32 + round2) >> (shift + CIFFTSFT)); + frfi[2 * i] = (int16_t)( + (qr32 + tr32 + round2) >> (shift + CIFFTSFT)); + frfi[2 * i + 1] = (int16_t)( + (qi32 + ti32 + round2) >> (shift + CIFFTSFT)); + } + } + + } + --k; + l = istep; + } + return scale; +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/complex_fft_tables.h b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/complex_fft_tables.h new file mode 100644 index 000000000..90fac072d --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/complex_fft_tables.h @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef COMMON_AUDIO_SIGNAL_PROCESSING_COMPLEX_FFT_TABLES_H_ +#define COMMON_AUDIO_SIGNAL_PROCESSING_COMPLEX_FFT_TABLES_H_ + +#include + +static const int16_t kSinTable1024[] = { + 0, 201, 402, 603, 804, 1005, 1206, 1406, 1607, + 1808, 2009, 2209, 2410, 2610, 2811, 3011, 3211, 3411, + 3611, 3811, 4011, 4210, 4409, 4608, 4807, 5006, 5205, + 5403, 5601, 5799, 5997, 6195, 6392, 6589, 6786, 6982, + 7179, 7375, 7571, 7766, 7961, 8156, 8351, 8545, 8739, + 8932, 9126, 9319, 9511, 9703, 9895, 10087, 10278, 10469, + 10659, 10849, 11038, 11227, 11416, 11604, 11792, 11980, 12166, + 12353, 12539, 12724, 12909, 13094, 13278, 13462, 13645, 13827, + 14009, 14191, 14372, 14552, 14732, 14911, 15090, 15268, 15446, + 15623, 15799, 15975, 16150, 16325, 16499, 16672, 16845, 17017, + 17189, 17360, 17530, 17699, 17868, 18036, 18204, 18371, 18537, + 18702, 18867, 19031, 19194, 19357, 19519, 19680, 19840, 20000, + 20159, 20317, 20474, 20631, 20787, 20942, 21096, 21249, 21402, + 21554, 21705, 21855, 22004, 22153, 22301, 22448, 22594, 22739, + 22883, 23027, 23169, 23311, 23452, 23592, 23731, 23869, 24006, + 24143, 24278, 24413, 24546, 24679, 24811, 24942, 25072, 25201, + 25329, 25456, 25582, 25707, 25831, 25954, 26077, 26198, 26318, + 26437, 26556, 26673, 26789, 26905, 27019, 27132, 27244, 27355, + 27466, 27575, 27683, 27790, 27896, 28001, 28105, 28208, 28309, + 28410, 28510, 28608, 28706, 28802, 28897, 28992, 29085, 29177, + 29268, 29358, 29446, 29534, 29621, 29706, 29790, 29873, 29955, + 30036, 30116, 30195, 30272, 30349, 30424, 30498, 30571, 30643, + 30713, 30783, 30851, 30918, 30984, 31049, 31113, 31175, 31236, + 31297, 31356, 31413, 31470, 31525, 31580, 31633, 31684, 31735, + 31785, 31833, 31880, 31926, 31970, 32014, 32056, 32097, 32137, + 32176, 32213, 32249, 32284, 32318, 32350, 32382, 32412, 32441, + 32468, 32495, 32520, 32544, 32567, 32588, 32609, 32628, 32646, + 32662, 32678, 32692, 32705, 32717, 32727, 32736, 32744, 32751, + 32757, 32761, 32764, 32766, 32767, 32766, 32764, 32761, 32757, + 32751, 32744, 32736, 32727, 32717, 32705, 32692, 32678, 32662, + 32646, 32628, 32609, 32588, 32567, 32544, 32520, 32495, 32468, + 32441, 32412, 32382, 32350, 32318, 32284, 32249, 32213, 32176, + 32137, 32097, 32056, 32014, 31970, 31926, 31880, 31833, 31785, + 31735, 31684, 31633, 31580, 31525, 31470, 31413, 31356, 31297, + 31236, 31175, 31113, 31049, 30984, 30918, 30851, 30783, 30713, + 30643, 30571, 30498, 30424, 30349, 30272, 30195, 30116, 30036, + 29955, 29873, 29790, 29706, 29621, 29534, 29446, 29358, 29268, + 29177, 29085, 28992, 28897, 28802, 28706, 28608, 28510, 28410, + 28309, 28208, 28105, 28001, 27896, 27790, 27683, 27575, 27466, + 27355, 27244, 27132, 27019, 26905, 26789, 26673, 26556, 26437, + 26318, 26198, 26077, 25954, 25831, 25707, 25582, 25456, 25329, + 25201, 25072, 24942, 24811, 24679, 24546, 24413, 24278, 24143, + 24006, 23869, 23731, 23592, 23452, 23311, 23169, 23027, 22883, + 22739, 22594, 22448, 22301, 22153, 22004, 21855, 21705, 21554, + 21402, 21249, 21096, 20942, 20787, 20631, 20474, 20317, 20159, + 20000, 19840, 19680, 19519, 19357, 19194, 19031, 18867, 18702, + 18537, 18371, 18204, 18036, 17868, 17699, 17530, 17360, 17189, + 17017, 16845, 16672, 16499, 16325, 16150, 15975, 15799, 15623, + 15446, 15268, 15090, 14911, 14732, 14552, 14372, 14191, 14009, + 13827, 13645, 13462, 13278, 13094, 12909, 12724, 12539, 12353, + 12166, 11980, 11792, 11604, 11416, 11227, 11038, 10849, 10659, + 10469, 10278, 10087, 9895, 9703, 9511, 9319, 9126, 8932, + 8739, 8545, 8351, 8156, 7961, 7766, 7571, 7375, 7179, + 6982, 6786, 6589, 6392, 6195, 5997, 5799, 5601, 5403, + 5205, 5006, 4807, 4608, 4409, 4210, 4011, 3811, 3611, + 3411, 3211, 3011, 2811, 2610, 2410, 2209, 2009, 1808, + 1607, 1406, 1206, 1005, 804, 603, 402, 201, 0, + -201, -402, -603, -804, -1005, -1206, -1406, -1607, -1808, + -2009, -2209, -2410, -2610, -2811, -3011, -3211, -3411, -3611, + -3811, -4011, -4210, -4409, -4608, -4807, -5006, -5205, -5403, + -5601, -5799, -5997, -6195, -6392, -6589, -6786, -6982, -7179, + -7375, -7571, -7766, -7961, -8156, -8351, -8545, -8739, -8932, + -9126, -9319, -9511, -9703, -9895, -10087, -10278, -10469, -10659, + -10849, -11038, -11227, -11416, -11604, -11792, -11980, -12166, -12353, + -12539, -12724, -12909, -13094, -13278, -13462, -13645, -13827, -14009, + -14191, -14372, -14552, -14732, -14911, -15090, -15268, -15446, -15623, + -15799, -15975, -16150, -16325, -16499, -16672, -16845, -17017, -17189, + -17360, -17530, -17699, -17868, -18036, -18204, -18371, -18537, -18702, + -18867, -19031, -19194, -19357, -19519, -19680, -19840, -20000, -20159, + -20317, -20474, -20631, -20787, -20942, -21096, -21249, -21402, -21554, + -21705, -21855, -22004, -22153, -22301, -22448, -22594, -22739, -22883, + -23027, -23169, -23311, -23452, -23592, -23731, -23869, -24006, -24143, + -24278, -24413, -24546, -24679, -24811, -24942, -25072, -25201, -25329, + -25456, -25582, -25707, -25831, -25954, -26077, -26198, -26318, -26437, + -26556, -26673, -26789, -26905, -27019, -27132, -27244, -27355, -27466, + -27575, -27683, -27790, -27896, -28001, -28105, -28208, -28309, -28410, + -28510, -28608, -28706, -28802, -28897, -28992, -29085, -29177, -29268, + -29358, -29446, -29534, -29621, -29706, -29790, -29873, -29955, -30036, + -30116, -30195, -30272, -30349, -30424, -30498, -30571, -30643, -30713, + -30783, -30851, -30918, -30984, -31049, -31113, -31175, -31236, -31297, + -31356, -31413, -31470, -31525, -31580, -31633, -31684, -31735, -31785, + -31833, -31880, -31926, -31970, -32014, -32056, -32097, -32137, -32176, + -32213, -32249, -32284, -32318, -32350, -32382, -32412, -32441, -32468, + -32495, -32520, -32544, -32567, -32588, -32609, -32628, -32646, -32662, + -32678, -32692, -32705, -32717, -32727, -32736, -32744, -32751, -32757, + -32761, -32764, -32766, -32767, -32766, -32764, -32761, -32757, -32751, + -32744, -32736, -32727, -32717, -32705, -32692, -32678, -32662, -32646, + -32628, -32609, -32588, -32567, -32544, -32520, -32495, -32468, -32441, + -32412, -32382, -32350, -32318, -32284, -32249, -32213, -32176, -32137, + -32097, -32056, -32014, -31970, -31926, -31880, -31833, -31785, -31735, + -31684, -31633, -31580, -31525, -31470, -31413, -31356, -31297, -31236, + -31175, -31113, -31049, -30984, -30918, -30851, -30783, -30713, -30643, + -30571, -30498, -30424, -30349, -30272, -30195, -30116, -30036, -29955, + -29873, -29790, -29706, -29621, -29534, -29446, -29358, -29268, -29177, + -29085, -28992, -28897, -28802, -28706, -28608, -28510, -28410, -28309, + -28208, -28105, -28001, -27896, -27790, -27683, -27575, -27466, -27355, + -27244, -27132, -27019, -26905, -26789, -26673, -26556, -26437, -26318, + -26198, -26077, -25954, -25831, -25707, -25582, -25456, -25329, -25201, + -25072, -24942, -24811, -24679, -24546, -24413, -24278, -24143, -24006, + -23869, -23731, -23592, -23452, -23311, -23169, -23027, -22883, -22739, + -22594, -22448, -22301, -22153, -22004, -21855, -21705, -21554, -21402, + -21249, -21096, -20942, -20787, -20631, -20474, -20317, -20159, -20000, + -19840, -19680, -19519, -19357, -19194, -19031, -18867, -18702, -18537, + -18371, -18204, -18036, -17868, -17699, -17530, -17360, -17189, -17017, + -16845, -16672, -16499, -16325, -16150, -15975, -15799, -15623, -15446, + -15268, -15090, -14911, -14732, -14552, -14372, -14191, -14009, -13827, + -13645, -13462, -13278, -13094, -12909, -12724, -12539, -12353, -12166, + -11980, -11792, -11604, -11416, -11227, -11038, -10849, -10659, -10469, + -10278, -10087, -9895, -9703, -9511, -9319, -9126, -8932, -8739, + -8545, -8351, -8156, -7961, -7766, -7571, -7375, -7179, -6982, + -6786, -6589, -6392, -6195, -5997, -5799, -5601, -5403, -5205, + -5006, -4807, -4608, -4409, -4210, -4011, -3811, -3611, -3411, + -3211, -3011, -2811, -2610, -2410, -2209, -2009, -1808, -1607, + -1406, -1206, -1005, -804, -603, -402, -201}; + +#endif // COMMON_AUDIO_SIGNAL_PROCESSING_COMPLEX_FFT_TABLES_H_ diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/cross_correlation.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/cross_correlation.c new file mode 100644 index 000000000..d7c9f2b9a --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/cross_correlation.c @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" + +/* C version of WebRtcSpl_CrossCorrelation() for generic platforms. */ +void WebRtcSpl_CrossCorrelationC(int32_t* cross_correlation, + const int16_t* seq1, + const int16_t* seq2, + size_t dim_seq, + size_t dim_cross_correlation, + int right_shifts, + int step_seq2) { + size_t i = 0, j = 0; + + for (i = 0; i < dim_cross_correlation; i++) { + int32_t corr = 0; + for (j = 0; j < dim_seq; j++) + corr += (seq1[j] * seq2[j]) >> right_shifts; + seq2 += step_seq2; + *cross_correlation++ = corr; + } +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/division_operations.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/division_operations.c new file mode 100644 index 000000000..2d420525b --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/division_operations.c @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + + +/* + * This file contains implementations of the divisions + * WebRtcSpl_DivU32U16() + * WebRtcSpl_DivW32W16() + * WebRtcSpl_DivW32W16ResW16() + * WebRtcSpl_DivResultInQ31() + * WebRtcSpl_DivW32HiLow() + * + * The description header can be found in signal_processing_library.h + * + */ + +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" +#include "webrtc/rtc_base/sanitizer.h" + +uint32_t WebRtcSpl_DivU32U16(uint32_t num, uint16_t den) +{ + // Guard against division with 0 + if (den != 0) + { + return (uint32_t)(num / den); + } else + { + return (uint32_t)0xFFFFFFFF; + } +} + +int32_t WebRtcSpl_DivW32W16(int32_t num, int16_t den) +{ + // Guard against division with 0 + if (den != 0) + { + return (int32_t)(num / den); + } else + { + return (int32_t)0x7FFFFFFF; + } +} + +int16_t WebRtcSpl_DivW32W16ResW16(int32_t num, int16_t den) +{ + // Guard against division with 0 + if (den != 0) + { + return (int16_t)(num / den); + } else + { + return (int16_t)0x7FFF; + } +} + +int32_t WebRtcSpl_DivResultInQ31(int32_t num, int32_t den) +{ + int32_t L_num = num; + int32_t L_den = den; + int32_t div = 0; + int k = 31; + int change_sign = 0; + + if (num == 0) + return 0; + + if (num < 0) + { + change_sign++; + L_num = -num; + } + if (den < 0) + { + change_sign++; + L_den = -den; + } + while (k--) + { + div <<= 1; + L_num <<= 1; + if (L_num >= L_den) + { + L_num -= L_den; + div++; + } + } + if (change_sign == 1) + { + div = -div; + } + return div; +} + +int32_t RTC_NO_SANITIZE("signed-integer-overflow") // bugs.webrtc.org/5486 +WebRtcSpl_DivW32HiLow(int32_t num, int16_t den_hi, int16_t den_low) +{ + int16_t approx, tmp_hi, tmp_low, num_hi, num_low; + int32_t tmpW32; + + approx = (int16_t)WebRtcSpl_DivW32W16((int32_t)0x1FFFFFFF, den_hi); + // result in Q14 (Note: 3FFFFFFF = 0.5 in Q30) + + // tmpW32 = 1/den = approx * (2.0 - den * approx) (in Q30) + tmpW32 = (den_hi * approx << 1) + ((den_low * approx >> 15) << 1); + // tmpW32 = den * approx + + tmpW32 = (int32_t)0x7fffffffL - tmpW32; // result in Q30 (tmpW32 = 2.0-(den*approx)) + // UBSan: 2147483647 - -2 cannot be represented in type 'int' + + // Store tmpW32 in hi and low format + tmp_hi = (int16_t)(tmpW32 >> 16); + tmp_low = (int16_t)((tmpW32 - ((int32_t)tmp_hi << 16)) >> 1); + + // tmpW32 = 1/den in Q29 + tmpW32 = (tmp_hi * approx + (tmp_low * approx >> 15)) << 1; + + // 1/den in hi and low format + tmp_hi = (int16_t)(tmpW32 >> 16); + tmp_low = (int16_t)((tmpW32 - ((int32_t)tmp_hi << 16)) >> 1); + + // Store num in hi and low format + num_hi = (int16_t)(num >> 16); + num_low = (int16_t)((num - ((int32_t)num_hi << 16)) >> 1); + + // num * (1/den) by 32 bit multiplication (result in Q28) + + tmpW32 = num_hi * tmp_hi + (num_hi * tmp_low >> 15) + + (num_low * tmp_hi >> 15); + + // Put result in Q31 (convert from Q28) + tmpW32 = WEBRTC_SPL_LSHIFT_W32(tmpW32, 3); + + return tmpW32; +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/dot_product_with_scale.cc b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/dot_product_with_scale.cc new file mode 100644 index 000000000..d9661af11 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/dot_product_with_scale.cc @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "webrtc/common_audio/signal_processing/dot_product_with_scale.h" + +#include "webrtc/rtc_base/numerics/safe_conversions.h" + +int32_t WebRtcSpl_DotProductWithScale(const int16_t* vector1, + const int16_t* vector2, + size_t length, + int scaling) { + int64_t sum = 0; + size_t i = 0; + + /* Unroll the loop to improve performance. */ + for (i = 0; i + 3 < length; i += 4) { + sum += (vector1[i + 0] * vector2[i + 0]) >> scaling; + sum += (vector1[i + 1] * vector2[i + 1]) >> scaling; + sum += (vector1[i + 2] * vector2[i + 2]) >> scaling; + sum += (vector1[i + 3] * vector2[i + 3]) >> scaling; + } + for (; i < length; i++) { + sum += (vector1[i] * vector2[i]) >> scaling; + } + + return rtc::saturated_cast(sum); +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/dot_product_with_scale.h b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/dot_product_with_scale.h new file mode 100644 index 000000000..bb892d40c --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/dot_product_with_scale.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef COMMON_AUDIO_SIGNAL_PROCESSING_DOT_PRODUCT_WITH_SCALE_H_ +#define COMMON_AUDIO_SIGNAL_PROCESSING_DOT_PRODUCT_WITH_SCALE_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// Calculates the dot product between two (int16_t) vectors. +// +// Input: +// - vector1 : Vector 1 +// - vector2 : Vector 2 +// - vector_length : Number of samples used in the dot product +// - scaling : The number of right bit shifts to apply on each term +// during calculation to avoid overflow, i.e., the +// output will be in Q(-|scaling|) +// +// Return value : The dot product in Q(-scaling) +int32_t WebRtcSpl_DotProductWithScale(const int16_t* vector1, + const int16_t* vector2, + size_t length, + int scaling); + +#ifdef __cplusplus +} +#endif // __cplusplus +#endif // COMMON_AUDIO_SIGNAL_PROCESSING_DOT_PRODUCT_WITH_SCALE_H_ diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/downsample_fast.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/downsample_fast.c new file mode 100644 index 000000000..e575861ed --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/downsample_fast.c @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" + +#include "webrtc/rtc_base/checks.h" +#include "webrtc/rtc_base/sanitizer.h" + +// TODO(Bjornv): Change the function parameter order to WebRTC code style. +// C version of WebRtcSpl_DownsampleFast() for generic platforms. +int WebRtcSpl_DownsampleFastC(const int16_t* data_in, + size_t data_in_length, + int16_t* data_out, + size_t data_out_length, + const int16_t* __restrict coefficients, + size_t coefficients_length, + int factor, + size_t delay) { + int16_t* const original_data_out = data_out; + size_t i = 0; + size_t j = 0; + int32_t out_s32 = 0; + size_t endpos = delay + factor * (data_out_length - 1) + 1; + + // Return error if any of the running conditions doesn't meet. + if (data_out_length == 0 || coefficients_length == 0 + || data_in_length < endpos) { + return -1; + } + + rtc_MsanCheckInitialized(coefficients, sizeof(coefficients[0]), + coefficients_length); + + for (i = delay; i < endpos; i += factor) { + out_s32 = 2048; // Round value, 0.5 in Q12. + + for (j = 0; j < coefficients_length; j++) { + // Negative overflow is permitted here, because this is + // auto-regressive filters, and the state for each batch run is + // stored in the "negative" positions of the output vector. + rtc_MsanCheckInitialized(&data_in[(ptrdiff_t) i - (ptrdiff_t) j], + sizeof(data_in[0]), 1); + // out_s32 is in Q12 domain. + out_s32 += coefficients[j] * data_in[(ptrdiff_t) i - (ptrdiff_t) j]; + } + + out_s32 >>= 12; // Q0. + + // Saturate and store the output. + *data_out++ = WebRtcSpl_SatW32ToW16(out_s32); + } + + RTC_DCHECK_EQ(original_data_out + data_out_length, data_out); + rtc_MsanCheckInitialized(original_data_out, sizeof(original_data_out[0]), + data_out_length); + + return 0; +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/energy.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/energy.c new file mode 100644 index 000000000..e83f1a698 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/energy.c @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + + +/* + * This file contains the function WebRtcSpl_Energy(). + * The description header can be found in signal_processing_library.h + * + */ + +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" + +int32_t WebRtcSpl_Energy(int16_t* vector, + size_t vector_length, + int* scale_factor) +{ + int32_t en = 0; + size_t i; + int scaling = + WebRtcSpl_GetScalingSquare(vector, vector_length, vector_length); + size_t looptimes = vector_length; + int16_t *vectorptr = vector; + + for (i = 0; i < looptimes; i++) + { + en += (*vectorptr * *vectorptr) >> scaling; + vectorptr++; + } + *scale_factor = scaling; + + return en; +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/get_scaling_square.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/get_scaling_square.c new file mode 100644 index 000000000..82e3c8b09 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/get_scaling_square.c @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + + +/* + * This file contains the function WebRtcSpl_GetScalingSquare(). + * The description header can be found in signal_processing_library.h + * + */ + +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" + +int16_t WebRtcSpl_GetScalingSquare(int16_t* in_vector, + size_t in_vector_length, + size_t times) +{ + int16_t nbits = WebRtcSpl_GetSizeInBits((uint32_t)times); + size_t i; + int16_t smax = -1; + int16_t sabs; + int16_t *sptr = in_vector; + int16_t t; + size_t looptimes = in_vector_length; + + for (i = looptimes; i > 0; i--) + { + sabs = (*sptr > 0 ? *sptr++ : -*sptr++); + smax = (sabs > smax ? sabs : smax); + } + t = WebRtcSpl_NormW32(WEBRTC_SPL_MUL(smax, smax)); + + if (smax == 0) + { + return 0; // Since norm(0) returns 0 + } else + { + return (t > nbits) ? 0 : nbits - t; + } +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/include/real_fft.h b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/include/real_fft.h new file mode 100644 index 000000000..84450667d --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/include/real_fft.h @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef COMMON_AUDIO_SIGNAL_PROCESSING_INCLUDE_REAL_FFT_H_ +#define COMMON_AUDIO_SIGNAL_PROCESSING_INCLUDE_REAL_FFT_H_ + +#include + +// For ComplexFFT(), the maximum fft order is 10; +// WebRTC APM uses orders of only 7 and 8. +enum { kMaxFFTOrder = 10 }; + +struct RealFFT; + +#ifdef __cplusplus +extern "C" { +#endif + +struct RealFFT* WebRtcSpl_CreateRealFFT(int order); +void WebRtcSpl_FreeRealFFT(struct RealFFT* self); + +// Compute an FFT for a real-valued signal of length of 2^order, +// where 1 < order <= MAX_FFT_ORDER. Transform length is determined by the +// specification structure, which must be initialized prior to calling the FFT +// function with WebRtcSpl_CreateRealFFT(). +// The relationship between the input and output sequences can +// be expressed in terms of the DFT, i.e.: +// x[n] = (2^(-scalefactor)/N) . SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N) +// n=0,1,2,...N-1 +// N=2^order. +// The conjugate-symmetric output sequence is represented using a CCS vector, +// which is of length N+2, and is organized as follows: +// Index: 0 1 2 3 4 5 . . . N-2 N-1 N N+1 +// Component: R0 0 R1 I1 R2 I2 . . . R[N/2-1] I[N/2-1] R[N/2] 0 +// where R[n] and I[n], respectively, denote the real and imaginary components +// for FFT bin 'n'. Bins are numbered from 0 to N/2, where N is the FFT length. +// Bin index 0 corresponds to the DC component, and bin index N/2 corresponds to +// the foldover frequency. +// +// Input Arguments: +// self - pointer to preallocated and initialized FFT specification structure. +// real_data_in - the input signal. For an ARM Neon platform, it must be +// aligned on a 32-byte boundary. +// +// Output Arguments: +// complex_data_out - the output complex signal with (2^order + 2) 16-bit +// elements. For an ARM Neon platform, it must be different +// from real_data_in, and aligned on a 32-byte boundary. +// +// Return Value: +// 0 - FFT calculation is successful. +// -1 - Error with bad arguments (null pointers). +int WebRtcSpl_RealForwardFFT(struct RealFFT* self, + const int16_t* real_data_in, + int16_t* complex_data_out); + +// Compute the inverse FFT for a conjugate-symmetric input sequence of length of +// 2^order, where 1 < order <= MAX_FFT_ORDER. Transform length is determined by +// the specification structure, which must be initialized prior to calling the +// FFT function with WebRtcSpl_CreateRealFFT(). +// For a transform of length M, the input sequence is represented using a packed +// CCS vector of length M+2, which is explained in the comments for +// WebRtcSpl_RealForwardFFTC above. +// +// Input Arguments: +// self - pointer to preallocated and initialized FFT specification structure. +// complex_data_in - the input complex signal with (2^order + 2) 16-bit +// elements. For an ARM Neon platform, it must be aligned on +// a 32-byte boundary. +// +// Output Arguments: +// real_data_out - the output real signal. For an ARM Neon platform, it must +// be different to complex_data_in, and aligned on a 32-byte +// boundary. +// +// Return Value: +// 0 or a positive number - a value that the elements in the |real_data_out| +// should be shifted left with in order to get +// correct physical values. +// -1 - Error with bad arguments (null pointers). +int WebRtcSpl_RealInverseFFT(struct RealFFT* self, + const int16_t* complex_data_in, + int16_t* real_data_out); + +#ifdef __cplusplus +} +#endif + +#endif // COMMON_AUDIO_SIGNAL_PROCESSING_INCLUDE_REAL_FFT_H_ diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/include/signal_processing_library.h b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/include/signal_processing_library.h new file mode 100644 index 000000000..ccbb306d8 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/include/signal_processing_library.h @@ -0,0 +1,1612 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +/* + * This header file includes all of the fix point signal processing library + * (SPL) function descriptions and declarations. For specific function calls, + * see bottom of file. + */ + +#ifndef COMMON_AUDIO_SIGNAL_PROCESSING_INCLUDE_SIGNAL_PROCESSING_LIBRARY_H_ +#define COMMON_AUDIO_SIGNAL_PROCESSING_INCLUDE_SIGNAL_PROCESSING_LIBRARY_H_ + +#include +#include "webrtc/common_audio/signal_processing/dot_product_with_scale.h" + +// Macros specific for the fixed point implementation +#define WEBRTC_SPL_WORD16_MAX 32767 +#define WEBRTC_SPL_WORD16_MIN -32768 +#define WEBRTC_SPL_WORD32_MAX (int32_t)0x7fffffff +#define WEBRTC_SPL_WORD32_MIN (int32_t)0x80000000 +#define WEBRTC_SPL_MAX_LPC_ORDER 14 +#define WEBRTC_SPL_MIN(A, B) (A < B ? A : B) // Get min value +#define WEBRTC_SPL_MAX(A, B) (A > B ? A : B) // Get max value +// TODO(kma/bjorn): For the next two macros, investigate how to correct the code +// for inputs of a = WEBRTC_SPL_WORD16_MIN or WEBRTC_SPL_WORD32_MIN. +#define WEBRTC_SPL_ABS_W16(a) (((int16_t)a >= 0) ? ((int16_t)a) : -((int16_t)a)) +#define WEBRTC_SPL_ABS_W32(a) (((int32_t)a >= 0) ? ((int32_t)a) : -((int32_t)a)) + +#define WEBRTC_SPL_MUL(a, b) ((int32_t)((int32_t)(a) * (int32_t)(b))) +#define WEBRTC_SPL_UMUL(a, b) ((uint32_t)((uint32_t)(a) * (uint32_t)(b))) +#define WEBRTC_SPL_UMUL_32_16(a, b) ((uint32_t)((uint32_t)(a) * (uint16_t)(b))) +#define WEBRTC_SPL_MUL_16_U16(a, b) ((int32_t)(int16_t)(a) * (uint16_t)(b)) + +// clang-format off +// clang-format would choose some identation +// leading to presubmit error (cpplint.py) +#ifndef WEBRTC_ARCH_ARM_V7 +// For ARMv7 platforms, these are inline functions in spl_inl_armv7.h +#ifndef MIPS32_LE +// For MIPS platforms, these are inline functions in spl_inl_mips.h +#define WEBRTC_SPL_MUL_16_16(a, b) ((int32_t)(((int16_t)(a)) * ((int16_t)(b)))) +#define WEBRTC_SPL_MUL_16_32_RSFT16(a, b) \ + (WEBRTC_SPL_MUL_16_16(a, b >> 16) + \ + ((WEBRTC_SPL_MUL_16_16(a, (b & 0xffff) >> 1) + 0x4000) >> 15)) +#endif +#endif + +#define WEBRTC_SPL_MUL_16_32_RSFT11(a, b) \ + (WEBRTC_SPL_MUL_16_16(a, (b) >> 16) * (1 << 5) + \ + (((WEBRTC_SPL_MUL_16_U16(a, (uint16_t)(b)) >> 1) + 0x0200) >> 10)) +#define WEBRTC_SPL_MUL_16_32_RSFT14(a, b) \ + (WEBRTC_SPL_MUL_16_16(a, (b) >> 16) * (1 << 2) + \ + (((WEBRTC_SPL_MUL_16_U16(a, (uint16_t)(b)) >> 1) + 0x1000) >> 13)) +#define WEBRTC_SPL_MUL_16_32_RSFT15(a, b) \ + ((WEBRTC_SPL_MUL_16_16(a, (b) >> 16) * (1 << 1)) + \ + (((WEBRTC_SPL_MUL_16_U16(a, (uint16_t)(b)) >> 1) + 0x2000) >> 14)) +// clang-format on + +#define WEBRTC_SPL_MUL_16_16_RSFT(a, b, c) (WEBRTC_SPL_MUL_16_16(a, b) >> (c)) + +#define WEBRTC_SPL_MUL_16_16_RSFT_WITH_ROUND(a, b, c) \ + ((WEBRTC_SPL_MUL_16_16(a, b) + ((int32_t)(((int32_t)1) << ((c)-1)))) >> (c)) + +// C + the 32 most significant bits of A * B +#define WEBRTC_SPL_SCALEDIFF32(A, B, C) \ + (C + (B >> 16) * A + (((uint32_t)(B & 0x0000FFFF) * A) >> 16)) + +#define WEBRTC_SPL_SAT(a, b, c) (b > a ? a : b < c ? c : b) + +// Shifting with negative numbers allowed +// Positive means left shift +#define WEBRTC_SPL_SHIFT_W32(x, c) ((c) >= 0 ? (x) * (1 << (c)) : (x) >> -(c)) + +// Shifting with negative numbers not allowed +// We cannot do casting here due to signed/unsigned problem +#define WEBRTC_SPL_LSHIFT_W32(x, c) ((x) << (c)) + +#define WEBRTC_SPL_RSHIFT_U32(x, c) ((uint32_t)(x) >> (c)) + +#define WEBRTC_SPL_RAND(a) ((int16_t)((((int16_t)a * 18816) >> 7) & 0x00007fff)) + +#ifdef __cplusplus +extern "C" { +#endif + +#define WEBRTC_SPL_MEMCPY_W16(v1, v2, length) \ + memcpy(v1, v2, (length) * sizeof(int16_t)) + +// inline functions: +#include "webrtc/common_audio/signal_processing/include/spl_inl.h" + +// third party math functions +#include "webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor.h" + +// Initialize SPL. Currently it contains only function pointer initialization. +// If the underlying platform is known to be ARM-Neon (WEBRTC_HAS_NEON defined), +// the pointers will be assigned to code optimized for Neon; otherwise, generic +// C code will be assigned. +// Note that this function MUST be called in any application that uses SPL +// functions. +void WebRtcSpl_Init(void); + +int16_t WebRtcSpl_GetScalingSquare(int16_t* in_vector, + size_t in_vector_length, + size_t times); + +// Copy and set operations. Implementation in copy_set_operations.c. +// Descriptions at bottom of file. +void WebRtcSpl_MemSetW16(int16_t* vector, + int16_t set_value, + size_t vector_length); +void WebRtcSpl_MemSetW32(int32_t* vector, + int32_t set_value, + size_t vector_length); +void WebRtcSpl_MemCpyReversedOrder(int16_t* out_vector, + int16_t* in_vector, + size_t vector_length); +void WebRtcSpl_CopyFromEndW16(const int16_t* in_vector, + size_t in_vector_length, + size_t samples, + int16_t* out_vector); +void WebRtcSpl_ZerosArrayW16(int16_t* vector, size_t vector_length); +void WebRtcSpl_ZerosArrayW32(int32_t* vector, size_t vector_length); +// End: Copy and set operations. + +// Minimum and maximum operation functions and their pointers. +// Implementation in min_max_operations.c. + +// Returns the largest absolute value in a signed 16-bit vector. +// +// Input: +// - vector : 16-bit input vector. +// - length : Number of samples in vector. +// +// Return value : Maximum absolute value in vector. +typedef int16_t (*MaxAbsValueW16)(const int16_t* vector, size_t length); +extern MaxAbsValueW16 WebRtcSpl_MaxAbsValueW16; +int16_t WebRtcSpl_MaxAbsValueW16C(const int16_t* vector, size_t length); +#if defined(WEBRTC_HAS_NEON) +int16_t WebRtcSpl_MaxAbsValueW16Neon(const int16_t* vector, size_t length); +#endif +#if defined(MIPS32_LE) +int16_t WebRtcSpl_MaxAbsValueW16_mips(const int16_t* vector, size_t length); +#endif + +// Returns the largest absolute value in a signed 32-bit vector. +// +// Input: +// - vector : 32-bit input vector. +// - length : Number of samples in vector. +// +// Return value : Maximum absolute value in vector. +typedef int32_t (*MaxAbsValueW32)(const int32_t* vector, size_t length); +extern MaxAbsValueW32 WebRtcSpl_MaxAbsValueW32; +int32_t WebRtcSpl_MaxAbsValueW32C(const int32_t* vector, size_t length); +#if defined(WEBRTC_HAS_NEON) +int32_t WebRtcSpl_MaxAbsValueW32Neon(const int32_t* vector, size_t length); +#endif +#if defined(MIPS_DSP_R1_LE) +int32_t WebRtcSpl_MaxAbsValueW32_mips(const int32_t* vector, size_t length); +#endif + +// Returns the maximum value of a 16-bit vector. +// +// Input: +// - vector : 16-bit input vector. +// - length : Number of samples in vector. +// +// Return value : Maximum sample value in |vector|. +typedef int16_t (*MaxValueW16)(const int16_t* vector, size_t length); +extern MaxValueW16 WebRtcSpl_MaxValueW16; +int16_t WebRtcSpl_MaxValueW16C(const int16_t* vector, size_t length); +#if defined(WEBRTC_HAS_NEON) +int16_t WebRtcSpl_MaxValueW16Neon(const int16_t* vector, size_t length); +#endif +#if defined(MIPS32_LE) +int16_t WebRtcSpl_MaxValueW16_mips(const int16_t* vector, size_t length); +#endif + +// Returns the maximum value of a 32-bit vector. +// +// Input: +// - vector : 32-bit input vector. +// - length : Number of samples in vector. +// +// Return value : Maximum sample value in |vector|. +typedef int32_t (*MaxValueW32)(const int32_t* vector, size_t length); +extern MaxValueW32 WebRtcSpl_MaxValueW32; +int32_t WebRtcSpl_MaxValueW32C(const int32_t* vector, size_t length); +#if defined(WEBRTC_HAS_NEON) +int32_t WebRtcSpl_MaxValueW32Neon(const int32_t* vector, size_t length); +#endif +#if defined(MIPS32_LE) +int32_t WebRtcSpl_MaxValueW32_mips(const int32_t* vector, size_t length); +#endif + +// Returns the minimum value of a 16-bit vector. +// +// Input: +// - vector : 16-bit input vector. +// - length : Number of samples in vector. +// +// Return value : Minimum sample value in |vector|. +typedef int16_t (*MinValueW16)(const int16_t* vector, size_t length); +extern MinValueW16 WebRtcSpl_MinValueW16; +int16_t WebRtcSpl_MinValueW16C(const int16_t* vector, size_t length); +#if defined(WEBRTC_HAS_NEON) +int16_t WebRtcSpl_MinValueW16Neon(const int16_t* vector, size_t length); +#endif +#if defined(MIPS32_LE) +int16_t WebRtcSpl_MinValueW16_mips(const int16_t* vector, size_t length); +#endif + +// Returns the minimum value of a 32-bit vector. +// +// Input: +// - vector : 32-bit input vector. +// - length : Number of samples in vector. +// +// Return value : Minimum sample value in |vector|. +typedef int32_t (*MinValueW32)(const int32_t* vector, size_t length); +extern MinValueW32 WebRtcSpl_MinValueW32; +int32_t WebRtcSpl_MinValueW32C(const int32_t* vector, size_t length); +#if defined(WEBRTC_HAS_NEON) +int32_t WebRtcSpl_MinValueW32Neon(const int32_t* vector, size_t length); +#endif +#if defined(MIPS32_LE) +int32_t WebRtcSpl_MinValueW32_mips(const int32_t* vector, size_t length); +#endif + +// Returns the vector index to the largest absolute value of a 16-bit vector. +// +// Input: +// - vector : 16-bit input vector. +// - length : Number of samples in vector. +// +// Return value : Index to the maximum absolute value in vector. +// If there are multiple equal maxima, return the index of the +// first. -32768 will always have precedence over 32767 (despite +// -32768 presenting an int16 absolute value of 32767). +size_t WebRtcSpl_MaxAbsIndexW16(const int16_t* vector, size_t length); + +// Returns the vector index to the maximum sample value of a 16-bit vector. +// +// Input: +// - vector : 16-bit input vector. +// - length : Number of samples in vector. +// +// Return value : Index to the maximum value in vector (if multiple +// indexes have the maximum, return the first). +size_t WebRtcSpl_MaxIndexW16(const int16_t* vector, size_t length); + +// Returns the vector index to the maximum sample value of a 32-bit vector. +// +// Input: +// - vector : 32-bit input vector. +// - length : Number of samples in vector. +// +// Return value : Index to the maximum value in vector (if multiple +// indexes have the maximum, return the first). +size_t WebRtcSpl_MaxIndexW32(const int32_t* vector, size_t length); + +// Returns the vector index to the minimum sample value of a 16-bit vector. +// +// Input: +// - vector : 16-bit input vector. +// - length : Number of samples in vector. +// +// Return value : Index to the mimimum value in vector (if multiple +// indexes have the minimum, return the first). +size_t WebRtcSpl_MinIndexW16(const int16_t* vector, size_t length); + +// Returns the vector index to the minimum sample value of a 32-bit vector. +// +// Input: +// - vector : 32-bit input vector. +// - length : Number of samples in vector. +// +// Return value : Index to the mimimum value in vector (if multiple +// indexes have the minimum, return the first). +size_t WebRtcSpl_MinIndexW32(const int32_t* vector, size_t length); + +// End: Minimum and maximum operations. + +// Vector scaling operations. Implementation in vector_scaling_operations.c. +// Description at bottom of file. +void WebRtcSpl_VectorBitShiftW16(int16_t* out_vector, + size_t vector_length, + const int16_t* in_vector, + int16_t right_shifts); +void WebRtcSpl_VectorBitShiftW32(int32_t* out_vector, + size_t vector_length, + const int32_t* in_vector, + int16_t right_shifts); +void WebRtcSpl_VectorBitShiftW32ToW16(int16_t* out_vector, + size_t vector_length, + const int32_t* in_vector, + int right_shifts); +void WebRtcSpl_ScaleVector(const int16_t* in_vector, + int16_t* out_vector, + int16_t gain, + size_t vector_length, + int16_t right_shifts); +void WebRtcSpl_ScaleVectorWithSat(const int16_t* in_vector, + int16_t* out_vector, + int16_t gain, + size_t vector_length, + int16_t right_shifts); +void WebRtcSpl_ScaleAndAddVectors(const int16_t* in_vector1, + int16_t gain1, + int right_shifts1, + const int16_t* in_vector2, + int16_t gain2, + int right_shifts2, + int16_t* out_vector, + size_t vector_length); + +// The functions (with related pointer) perform the vector operation: +// out_vector[k] = ((scale1 * in_vector1[k]) + (scale2 * in_vector2[k]) +// + round_value) >> right_shifts, +// where round_value = (1 << right_shifts) >> 1. +// +// Input: +// - in_vector1 : Input vector 1 +// - in_vector1_scale : Gain to be used for vector 1 +// - in_vector2 : Input vector 2 +// - in_vector2_scale : Gain to be used for vector 2 +// - right_shifts : Number of right bit shifts to be applied +// - length : Number of elements in the input vectors +// +// Output: +// - out_vector : Output vector +// Return value : 0 if OK, -1 if (in_vector1 == null +// || in_vector2 == null || out_vector == null +// || length <= 0 || right_shift < 0). +typedef int (*ScaleAndAddVectorsWithRound)(const int16_t* in_vector1, + int16_t in_vector1_scale, + const int16_t* in_vector2, + int16_t in_vector2_scale, + int right_shifts, + int16_t* out_vector, + size_t length); +extern ScaleAndAddVectorsWithRound WebRtcSpl_ScaleAndAddVectorsWithRound; +int WebRtcSpl_ScaleAndAddVectorsWithRoundC(const int16_t* in_vector1, + int16_t in_vector1_scale, + const int16_t* in_vector2, + int16_t in_vector2_scale, + int right_shifts, + int16_t* out_vector, + size_t length); +#if defined(MIPS_DSP_R1_LE) +int WebRtcSpl_ScaleAndAddVectorsWithRound_mips(const int16_t* in_vector1, + int16_t in_vector1_scale, + const int16_t* in_vector2, + int16_t in_vector2_scale, + int right_shifts, + int16_t* out_vector, + size_t length); +#endif +// End: Vector scaling operations. + +// iLBC specific functions. Implementations in ilbc_specific_functions.c. +// Description at bottom of file. +void WebRtcSpl_ReverseOrderMultArrayElements(int16_t* out_vector, + const int16_t* in_vector, + const int16_t* window, + size_t vector_length, + int16_t right_shifts); +void WebRtcSpl_ElementwiseVectorMult(int16_t* out_vector, + const int16_t* in_vector, + const int16_t* window, + size_t vector_length, + int16_t right_shifts); +void WebRtcSpl_AddVectorsAndShift(int16_t* out_vector, + const int16_t* in_vector1, + const int16_t* in_vector2, + size_t vector_length, + int16_t right_shifts); +void WebRtcSpl_AddAffineVectorToVector(int16_t* out_vector, + int16_t* in_vector, + int16_t gain, + int32_t add_constant, + int16_t right_shifts, + size_t vector_length); +void WebRtcSpl_AffineTransformVector(int16_t* out_vector, + int16_t* in_vector, + int16_t gain, + int32_t add_constant, + int16_t right_shifts, + size_t vector_length); +// End: iLBC specific functions. + +// Signal processing operations. + +// A 32-bit fix-point implementation of auto-correlation computation +// +// Input: +// - in_vector : Vector to calculate autocorrelation upon +// - in_vector_length : Length (in samples) of |vector| +// - order : The order up to which the autocorrelation should be +// calculated +// +// Output: +// - result : auto-correlation values (values should be seen +// relative to each other since the absolute values +// might have been down shifted to avoid overflow) +// +// - scale : The number of left shifts required to obtain the +// auto-correlation in Q0 +// +// Return value : Number of samples in |result|, i.e. (order+1) +size_t WebRtcSpl_AutoCorrelation(const int16_t* in_vector, + size_t in_vector_length, + size_t order, + int32_t* result, + int* scale); + +// A 32-bit fix-point implementation of the Levinson-Durbin algorithm that +// does NOT use the 64 bit class +// +// Input: +// - auto_corr : Vector with autocorrelation values of length >= |order|+1 +// - order : The LPC filter order (support up to order 20) +// +// Output: +// - lpc_coef : lpc_coef[0..order] LPC coefficients in Q12 +// - refl_coef : refl_coef[0...order-1]| Reflection coefficients in Q15 +// +// Return value : 1 for stable 0 for unstable +int16_t WebRtcSpl_LevinsonDurbin(const int32_t* auto_corr, + int16_t* lpc_coef, + int16_t* refl_coef, + size_t order); + +// Converts reflection coefficients |refl_coef| to LPC coefficients |lpc_coef|. +// This version is a 16 bit operation. +// +// NOTE: The 16 bit refl_coef -> lpc_coef conversion might result in a +// "slightly unstable" filter (i.e., a pole just outside the unit circle) in +// "rare" cases even if the reflection coefficients are stable. +// +// Input: +// - refl_coef : Reflection coefficients in Q15 that should be converted +// to LPC coefficients +// - use_order : Number of coefficients in |refl_coef| +// +// Output: +// - lpc_coef : LPC coefficients in Q12 +void WebRtcSpl_ReflCoefToLpc(const int16_t* refl_coef, + int use_order, + int16_t* lpc_coef); + +// Converts LPC coefficients |lpc_coef| to reflection coefficients |refl_coef|. +// This version is a 16 bit operation. +// The conversion is implemented by the step-down algorithm. +// +// Input: +// - lpc_coef : LPC coefficients in Q12, that should be converted to +// reflection coefficients +// - use_order : Number of coefficients in |lpc_coef| +// +// Output: +// - refl_coef : Reflection coefficients in Q15. +void WebRtcSpl_LpcToReflCoef(int16_t* lpc_coef, + int use_order, + int16_t* refl_coef); + +// Calculates reflection coefficients (16 bit) from auto-correlation values +// +// Input: +// - auto_corr : Auto-correlation values +// - use_order : Number of coefficients wanted be calculated +// +// Output: +// - refl_coef : Reflection coefficients in Q15. +void WebRtcSpl_AutoCorrToReflCoef(const int32_t* auto_corr, + int use_order, + int16_t* refl_coef); + +// The functions (with related pointer) calculate the cross-correlation between +// two sequences |seq1| and |seq2|. +// |seq1| is fixed and |seq2| slides as the pointer is increased with the +// amount |step_seq2|. Note the arguments should obey the relationship: +// |dim_seq| - 1 + |step_seq2| * (|dim_cross_correlation| - 1) < +// buffer size of |seq2| +// +// Input: +// - seq1 : First sequence (fixed throughout the correlation) +// - seq2 : Second sequence (slides |step_vector2| for each +// new correlation) +// - dim_seq : Number of samples to use in the cross-correlation +// - dim_cross_correlation : Number of cross-correlations to calculate (the +// start position for |vector2| is updated for each +// new one) +// - right_shifts : Number of right bit shifts to use. This will +// become the output Q-domain. +// - step_seq2 : How many (positive or negative) steps the +// |vector2| pointer should be updated for each new +// cross-correlation value. +// +// Output: +// - cross_correlation : The cross-correlation in Q(-right_shifts) +typedef void (*CrossCorrelation)(int32_t* cross_correlation, + const int16_t* seq1, + const int16_t* seq2, + size_t dim_seq, + size_t dim_cross_correlation, + int right_shifts, + int step_seq2); +extern CrossCorrelation WebRtcSpl_CrossCorrelation; +void WebRtcSpl_CrossCorrelationC(int32_t* cross_correlation, + const int16_t* seq1, + const int16_t* seq2, + size_t dim_seq, + size_t dim_cross_correlation, + int right_shifts, + int step_seq2); +#if defined(WEBRTC_HAS_NEON) +void WebRtcSpl_CrossCorrelationNeon(int32_t* cross_correlation, + const int16_t* seq1, + const int16_t* seq2, + size_t dim_seq, + size_t dim_cross_correlation, + int right_shifts, + int step_seq2); +#endif +#if defined(MIPS32_LE) +void WebRtcSpl_CrossCorrelation_mips(int32_t* cross_correlation, + const int16_t* seq1, + const int16_t* seq2, + size_t dim_seq, + size_t dim_cross_correlation, + int right_shifts, + int step_seq2); +#endif + +// Creates (the first half of) a Hanning window. Size must be at least 1 and +// at most 512. +// +// Input: +// - size : Length of the requested Hanning window (1 to 512) +// +// Output: +// - window : Hanning vector in Q14. +void WebRtcSpl_GetHanningWindow(int16_t* window, size_t size); + +// Calculates y[k] = sqrt(1 - x[k]^2) for each element of the input vector +// |in_vector|. Input and output values are in Q15. +// +// Inputs: +// - in_vector : Values to calculate sqrt(1 - x^2) of +// - vector_length : Length of vector |in_vector| +// +// Output: +// - out_vector : Output values in Q15 +void WebRtcSpl_SqrtOfOneMinusXSquared(int16_t* in_vector, + size_t vector_length, + int16_t* out_vector); +// End: Signal processing operations. + +// Randomization functions. Implementations collected in +// randomization_functions.c and descriptions at bottom of this file. +int16_t WebRtcSpl_RandU(uint32_t* seed); +int16_t WebRtcSpl_RandN(uint32_t* seed); +int16_t WebRtcSpl_RandUArray(int16_t* vector, + int16_t vector_length, + uint32_t* seed); +// End: Randomization functions. + +// Math functions +int32_t WebRtcSpl_Sqrt(int32_t value); + +// Divisions. Implementations collected in division_operations.c and +// descriptions at bottom of this file. +uint32_t WebRtcSpl_DivU32U16(uint32_t num, uint16_t den); +int32_t WebRtcSpl_DivW32W16(int32_t num, int16_t den); +int16_t WebRtcSpl_DivW32W16ResW16(int32_t num, int16_t den); +int32_t WebRtcSpl_DivResultInQ31(int32_t num, int32_t den); +int32_t WebRtcSpl_DivW32HiLow(int32_t num, int16_t den_hi, int16_t den_low); +// End: Divisions. + +int32_t WebRtcSpl_Energy(int16_t* vector, + size_t vector_length, + int* scale_factor); + +// Filter operations. +size_t WebRtcSpl_FilterAR(const int16_t* ar_coef, + size_t ar_coef_length, + const int16_t* in_vector, + size_t in_vector_length, + int16_t* filter_state, + size_t filter_state_length, + int16_t* filter_state_low, + size_t filter_state_low_length, + int16_t* out_vector, + int16_t* out_vector_low, + size_t out_vector_low_length); + +// WebRtcSpl_FilterMAFastQ12(...) +// +// Performs a MA filtering on a vector in Q12 +// +// Input: +// - in_vector : Input samples (state in positions +// in_vector[-order] .. in_vector[-1]) +// - ma_coef : Filter coefficients (in Q12) +// - ma_coef_length : Number of B coefficients (order+1) +// - vector_length : Number of samples to be filtered +// +// Output: +// - out_vector : Filtered samples +// +void WebRtcSpl_FilterMAFastQ12(const int16_t* in_vector, + int16_t* out_vector, + const int16_t* ma_coef, + size_t ma_coef_length, + size_t vector_length); + +// Performs a AR filtering on a vector in Q12 +// Input: +// - data_in : Input samples +// - data_out : State information in positions +// data_out[-order] .. data_out[-1] +// - coefficients : Filter coefficients (in Q12) +// - coefficients_length: Number of coefficients (order+1) +// - data_length : Number of samples to be filtered +// Output: +// - data_out : Filtered samples +void WebRtcSpl_FilterARFastQ12(const int16_t* data_in, + int16_t* data_out, + const int16_t* __restrict coefficients, + size_t coefficients_length, + size_t data_length); + +// The functions (with related pointer) perform a MA down sampling filter +// on a vector. +// Input: +// - data_in : Input samples (state in positions +// data_in[-order] .. data_in[-1]) +// - data_in_length : Number of samples in |data_in| to be filtered. +// This must be at least +// |delay| + |factor|*(|out_vector_length|-1) + 1) +// - data_out_length : Number of down sampled samples desired +// - coefficients : Filter coefficients (in Q12) +// - coefficients_length: Number of coefficients (order+1) +// - factor : Decimation factor +// - delay : Delay of filter (compensated for in out_vector) +// Output: +// - data_out : Filtered samples +// Return value : 0 if OK, -1 if |in_vector| is too short +typedef int (*DownsampleFast)(const int16_t* data_in, + size_t data_in_length, + int16_t* data_out, + size_t data_out_length, + const int16_t* __restrict coefficients, + size_t coefficients_length, + int factor, + size_t delay); +extern DownsampleFast WebRtcSpl_DownsampleFast; +int WebRtcSpl_DownsampleFastC(const int16_t* data_in, + size_t data_in_length, + int16_t* data_out, + size_t data_out_length, + const int16_t* __restrict coefficients, + size_t coefficients_length, + int factor, + size_t delay); +#if defined(WEBRTC_HAS_NEON) +int WebRtcSpl_DownsampleFastNeon(const int16_t* data_in, + size_t data_in_length, + int16_t* data_out, + size_t data_out_length, + const int16_t* __restrict coefficients, + size_t coefficients_length, + int factor, + size_t delay); +#endif +#if defined(MIPS32_LE) +int WebRtcSpl_DownsampleFast_mips(const int16_t* data_in, + size_t data_in_length, + int16_t* data_out, + size_t data_out_length, + const int16_t* __restrict coefficients, + size_t coefficients_length, + int factor, + size_t delay); +#endif + +// End: Filter operations. + +// FFT operations + +int WebRtcSpl_ComplexFFT(int16_t vector[], int stages, int mode); +int WebRtcSpl_ComplexIFFT(int16_t vector[], int stages, int mode); + +// Treat a 16-bit complex data buffer |complex_data| as an array of 32-bit +// values, and swap elements whose indexes are bit-reverses of each other. +// +// Input: +// - complex_data : Complex data buffer containing 2^|stages| real +// elements interleaved with 2^|stages| imaginary +// elements: [Re Im Re Im Re Im....] +// - stages : Number of FFT stages. Must be at least 3 and at most +// 10, since the table WebRtcSpl_kSinTable1024[] is 1024 +// elements long. +// +// Output: +// - complex_data : The complex data buffer. + +void WebRtcSpl_ComplexBitReverse(int16_t* __restrict complex_data, int stages); + +// End: FFT operations + +/************************************************************ + * + * RESAMPLING FUNCTIONS AND THEIR STRUCTS ARE DEFINED BELOW + * + ************************************************************/ + +/******************************************************************* + * resample.c + * + * Includes the following resampling combinations + * 22 kHz -> 16 kHz + * 16 kHz -> 22 kHz + * 22 kHz -> 8 kHz + * 8 kHz -> 22 kHz + * + ******************************************************************/ + +// state structure for 22 -> 16 resampler +typedef struct { + int32_t S_22_44[8]; + int32_t S_44_32[8]; + int32_t S_32_16[8]; +} WebRtcSpl_State22khzTo16khz; + +void WebRtcSpl_Resample22khzTo16khz(const int16_t* in, + int16_t* out, + WebRtcSpl_State22khzTo16khz* state, + int32_t* tmpmem); + +void WebRtcSpl_ResetResample22khzTo16khz(WebRtcSpl_State22khzTo16khz* state); + +// state structure for 16 -> 22 resampler +typedef struct { + int32_t S_16_32[8]; + int32_t S_32_22[8]; +} WebRtcSpl_State16khzTo22khz; + +void WebRtcSpl_Resample16khzTo22khz(const int16_t* in, + int16_t* out, + WebRtcSpl_State16khzTo22khz* state, + int32_t* tmpmem); + +void WebRtcSpl_ResetResample16khzTo22khz(WebRtcSpl_State16khzTo22khz* state); + +// state structure for 22 -> 8 resampler +typedef struct { + int32_t S_22_22[16]; + int32_t S_22_16[8]; + int32_t S_16_8[8]; +} WebRtcSpl_State22khzTo8khz; + +void WebRtcSpl_Resample22khzTo8khz(const int16_t* in, + int16_t* out, + WebRtcSpl_State22khzTo8khz* state, + int32_t* tmpmem); + +void WebRtcSpl_ResetResample22khzTo8khz(WebRtcSpl_State22khzTo8khz* state); + +// state structure for 8 -> 22 resampler +typedef struct { + int32_t S_8_16[8]; + int32_t S_16_11[8]; + int32_t S_11_22[8]; +} WebRtcSpl_State8khzTo22khz; + +void WebRtcSpl_Resample8khzTo22khz(const int16_t* in, + int16_t* out, + WebRtcSpl_State8khzTo22khz* state, + int32_t* tmpmem); + +void WebRtcSpl_ResetResample8khzTo22khz(WebRtcSpl_State8khzTo22khz* state); + +/******************************************************************* + * resample_fractional.c + * Functions for internal use in the other resample functions + * + * Includes the following resampling combinations + * 48 kHz -> 32 kHz + * 32 kHz -> 24 kHz + * 44 kHz -> 32 kHz + * + ******************************************************************/ + +void WebRtcSpl_Resample48khzTo32khz(const int32_t* In, int32_t* Out, size_t K); + +void WebRtcSpl_Resample32khzTo24khz(const int32_t* In, int32_t* Out, size_t K); + +void WebRtcSpl_Resample44khzTo32khz(const int32_t* In, int32_t* Out, size_t K); + +/******************************************************************* + * resample_48khz.c + * + * Includes the following resampling combinations + * 48 kHz -> 16 kHz + * 16 kHz -> 48 kHz + * 48 kHz -> 8 kHz + * 8 kHz -> 48 kHz + * + ******************************************************************/ + +typedef struct { + int32_t S_48_48[16]; + int32_t S_48_32[8]; + int32_t S_32_16[8]; +} WebRtcSpl_State48khzTo16khz; + +void WebRtcSpl_Resample48khzTo16khz(const int16_t* in, + int16_t* out, + WebRtcSpl_State48khzTo16khz* state, + int32_t* tmpmem); + +void WebRtcSpl_ResetResample48khzTo16khz(WebRtcSpl_State48khzTo16khz* state); + +typedef struct { + int32_t S_16_32[8]; + int32_t S_32_24[8]; + int32_t S_24_48[8]; +} WebRtcSpl_State16khzTo48khz; + +void WebRtcSpl_Resample16khzTo48khz(const int16_t* in, + int16_t* out, + WebRtcSpl_State16khzTo48khz* state, + int32_t* tmpmem); + +void WebRtcSpl_ResetResample16khzTo48khz(WebRtcSpl_State16khzTo48khz* state); + +typedef struct { + int32_t S_48_24[8]; + int32_t S_24_24[16]; + int32_t S_24_16[8]; + int32_t S_16_8[8]; +} WebRtcSpl_State48khzTo8khz; + +void WebRtcSpl_Resample48khzTo8khz(const int16_t* in, + int16_t* out, + WebRtcSpl_State48khzTo8khz* state, + int32_t* tmpmem); + +void WebRtcSpl_ResetResample48khzTo8khz(WebRtcSpl_State48khzTo8khz* state); + +typedef struct { + int32_t S_8_16[8]; + int32_t S_16_12[8]; + int32_t S_12_24[8]; + int32_t S_24_48[8]; +} WebRtcSpl_State8khzTo48khz; + +void WebRtcSpl_Resample8khzTo48khz(const int16_t* in, + int16_t* out, + WebRtcSpl_State8khzTo48khz* state, + int32_t* tmpmem); + +void WebRtcSpl_ResetResample8khzTo48khz(WebRtcSpl_State8khzTo48khz* state); + +/******************************************************************* + * resample_by_2.c + * + * Includes down and up sampling by a factor of two. + * + ******************************************************************/ + +void WebRtcSpl_DownsampleBy2(const int16_t* in, + size_t len, + int16_t* out, + int32_t* filtState); + +void WebRtcSpl_UpsampleBy2(const int16_t* in, + size_t len, + int16_t* out, + int32_t* filtState); + +/************************************************************ + * END OF RESAMPLING FUNCTIONS + ************************************************************/ +void WebRtcSpl_AnalysisQMF(const int16_t* in_data, + size_t in_data_length, + int16_t* low_band, + int16_t* high_band, + int32_t* filter_state1, + int32_t* filter_state2); +void WebRtcSpl_SynthesisQMF(const int16_t* low_band, + const int16_t* high_band, + size_t band_length, + int16_t* out_data, + int32_t* filter_state1, + int32_t* filter_state2); + +#ifdef __cplusplus +} +#endif // __cplusplus +#endif // COMMON_AUDIO_SIGNAL_PROCESSING_INCLUDE_SIGNAL_PROCESSING_LIBRARY_H_ + +// +// WebRtcSpl_AddSatW16(...) +// WebRtcSpl_AddSatW32(...) +// +// Returns the result of a saturated 16-bit, respectively 32-bit, addition of +// the numbers specified by the |var1| and |var2| parameters. +// +// Input: +// - var1 : Input variable 1 +// - var2 : Input variable 2 +// +// Return value : Added and saturated value +// + +// +// WebRtcSpl_SubSatW16(...) +// WebRtcSpl_SubSatW32(...) +// +// Returns the result of a saturated 16-bit, respectively 32-bit, subtraction +// of the numbers specified by the |var1| and |var2| parameters. +// +// Input: +// - var1 : Input variable 1 +// - var2 : Input variable 2 +// +// Returned value : Subtracted and saturated value +// + +// +// WebRtcSpl_GetSizeInBits(...) +// +// Returns the # of bits that are needed at the most to represent the number +// specified by the |value| parameter. +// +// Input: +// - value : Input value +// +// Return value : Number of bits needed to represent |value| +// + +// +// WebRtcSpl_NormW32(...) +// +// Norm returns the # of left shifts required to 32-bit normalize the 32-bit +// signed number specified by the |value| parameter. +// +// Input: +// - value : Input value +// +// Return value : Number of bit shifts needed to 32-bit normalize |value| +// + +// +// WebRtcSpl_NormW16(...) +// +// Norm returns the # of left shifts required to 16-bit normalize the 16-bit +// signed number specified by the |value| parameter. +// +// Input: +// - value : Input value +// +// Return value : Number of bit shifts needed to 32-bit normalize |value| +// + +// +// WebRtcSpl_NormU32(...) +// +// Norm returns the # of left shifts required to 32-bit normalize the unsigned +// 32-bit number specified by the |value| parameter. +// +// Input: +// - value : Input value +// +// Return value : Number of bit shifts needed to 32-bit normalize |value| +// + +// +// WebRtcSpl_GetScalingSquare(...) +// +// Returns the # of bits required to scale the samples specified in the +// |in_vector| parameter so that, if the squares of the samples are added the +// # of times specified by the |times| parameter, the 32-bit addition will not +// overflow (result in int32_t). +// +// Input: +// - in_vector : Input vector to check scaling on +// - in_vector_length : Samples in |in_vector| +// - times : Number of additions to be performed +// +// Return value : Number of right bit shifts needed to avoid +// overflow in the addition calculation +// + +// +// WebRtcSpl_MemSetW16(...) +// +// Sets all the values in the int16_t vector |vector| of length +// |vector_length| to the specified value |set_value| +// +// Input: +// - vector : Pointer to the int16_t vector +// - set_value : Value specified +// - vector_length : Length of vector +// + +// +// WebRtcSpl_MemSetW32(...) +// +// Sets all the values in the int32_t vector |vector| of length +// |vector_length| to the specified value |set_value| +// +// Input: +// - vector : Pointer to the int16_t vector +// - set_value : Value specified +// - vector_length : Length of vector +// + +// +// WebRtcSpl_MemCpyReversedOrder(...) +// +// Copies all the values from the source int16_t vector |in_vector| to a +// destination int16_t vector |out_vector|. It is done in reversed order, +// meaning that the first sample of |in_vector| is copied to the last sample of +// the |out_vector|. The procedure continues until the last sample of +// |in_vector| has been copied to the first sample of |out_vector|. This +// creates a reversed vector. Used in e.g. prediction in iLBC. +// +// Input: +// - in_vector : Pointer to the first sample in a int16_t vector +// of length |length| +// - vector_length : Number of elements to copy +// +// Output: +// - out_vector : Pointer to the last sample in a int16_t vector +// of length |length| +// + +// +// WebRtcSpl_CopyFromEndW16(...) +// +// Copies the rightmost |samples| of |in_vector| (of length |in_vector_length|) +// to the vector |out_vector|. +// +// Input: +// - in_vector : Input vector +// - in_vector_length : Number of samples in |in_vector| +// - samples : Number of samples to extract (from right side) +// from |in_vector| +// +// Output: +// - out_vector : Vector with the requested samples +// + +// +// WebRtcSpl_ZerosArrayW16(...) +// WebRtcSpl_ZerosArrayW32(...) +// +// Inserts the value "zero" in all positions of a w16 and a w32 vector +// respectively. +// +// Input: +// - vector_length : Number of samples in vector +// +// Output: +// - vector : Vector containing all zeros +// + +// +// WebRtcSpl_VectorBitShiftW16(...) +// WebRtcSpl_VectorBitShiftW32(...) +// +// Bit shifts all the values in a vector up or downwards. Different calls for +// int16_t and int32_t vectors respectively. +// +// Input: +// - vector_length : Length of vector +// - in_vector : Pointer to the vector that should be bit shifted +// - right_shifts : Number of right bit shifts (negative value gives left +// shifts) +// +// Output: +// - out_vector : Pointer to the result vector (can be the same as +// |in_vector|) +// + +// +// WebRtcSpl_VectorBitShiftW32ToW16(...) +// +// Bit shifts all the values in a int32_t vector up or downwards and +// stores the result as an int16_t vector. The function will saturate the +// signal if needed, before storing in the output vector. +// +// Input: +// - vector_length : Length of vector +// - in_vector : Pointer to the vector that should be bit shifted +// - right_shifts : Number of right bit shifts (negative value gives left +// shifts) +// +// Output: +// - out_vector : Pointer to the result vector (can be the same as +// |in_vector|) +// + +// +// WebRtcSpl_ScaleVector(...) +// +// Performs the vector operation: +// out_vector[k] = (gain*in_vector[k])>>right_shifts +// +// Input: +// - in_vector : Input vector +// - gain : Scaling gain +// - vector_length : Elements in the |in_vector| +// - right_shifts : Number of right bit shifts applied +// +// Output: +// - out_vector : Output vector (can be the same as |in_vector|) +// + +// +// WebRtcSpl_ScaleVectorWithSat(...) +// +// Performs the vector operation: +// out_vector[k] = SATURATE( (gain*in_vector[k])>>right_shifts ) +// +// Input: +// - in_vector : Input vector +// - gain : Scaling gain +// - vector_length : Elements in the |in_vector| +// - right_shifts : Number of right bit shifts applied +// +// Output: +// - out_vector : Output vector (can be the same as |in_vector|) +// + +// +// WebRtcSpl_ScaleAndAddVectors(...) +// +// Performs the vector operation: +// out_vector[k] = (gain1*in_vector1[k])>>right_shifts1 +// + (gain2*in_vector2[k])>>right_shifts2 +// +// Input: +// - in_vector1 : Input vector 1 +// - gain1 : Gain to be used for vector 1 +// - right_shifts1 : Right bit shift to be used for vector 1 +// - in_vector2 : Input vector 2 +// - gain2 : Gain to be used for vector 2 +// - right_shifts2 : Right bit shift to be used for vector 2 +// - vector_length : Elements in the input vectors +// +// Output: +// - out_vector : Output vector +// + +// +// WebRtcSpl_ReverseOrderMultArrayElements(...) +// +// Performs the vector operation: +// out_vector[n] = (in_vector[n]*window[-n])>>right_shifts +// +// Input: +// - in_vector : Input vector +// - window : Window vector (should be reversed). The pointer +// should be set to the last value in the vector +// - right_shifts : Number of right bit shift to be applied after the +// multiplication +// - vector_length : Number of elements in |in_vector| +// +// Output: +// - out_vector : Output vector (can be same as |in_vector|) +// + +// +// WebRtcSpl_ElementwiseVectorMult(...) +// +// Performs the vector operation: +// out_vector[n] = (in_vector[n]*window[n])>>right_shifts +// +// Input: +// - in_vector : Input vector +// - window : Window vector. +// - right_shifts : Number of right bit shift to be applied after the +// multiplication +// - vector_length : Number of elements in |in_vector| +// +// Output: +// - out_vector : Output vector (can be same as |in_vector|) +// + +// +// WebRtcSpl_AddVectorsAndShift(...) +// +// Performs the vector operation: +// out_vector[k] = (in_vector1[k] + in_vector2[k])>>right_shifts +// +// Input: +// - in_vector1 : Input vector 1 +// - in_vector2 : Input vector 2 +// - right_shifts : Number of right bit shift to be applied after the +// multiplication +// - vector_length : Number of elements in |in_vector1| and |in_vector2| +// +// Output: +// - out_vector : Output vector (can be same as |in_vector1|) +// + +// +// WebRtcSpl_AddAffineVectorToVector(...) +// +// Adds an affine transformed vector to another vector |out_vector|, i.e, +// performs +// out_vector[k] += (in_vector[k]*gain+add_constant)>>right_shifts +// +// Input: +// - in_vector : Input vector +// - gain : Gain value, used to multiply the in vector with +// - add_constant : Constant value to add (usually 1<<(right_shifts-1), +// but others can be used as well +// - right_shifts : Number of right bit shifts (0-16) +// - vector_length : Number of samples in |in_vector| and |out_vector| +// +// Output: +// - out_vector : Vector with the output +// + +// +// WebRtcSpl_AffineTransformVector(...) +// +// Affine transforms a vector, i.e, performs +// out_vector[k] = (in_vector[k]*gain+add_constant)>>right_shifts +// +// Input: +// - in_vector : Input vector +// - gain : Gain value, used to multiply the in vector with +// - add_constant : Constant value to add (usually 1<<(right_shifts-1), +// but others can be used as well +// - right_shifts : Number of right bit shifts (0-16) +// - vector_length : Number of samples in |in_vector| and |out_vector| +// +// Output: +// - out_vector : Vector with the output +// + +// +// WebRtcSpl_IncreaseSeed(...) +// +// Increases the seed (and returns the new value) +// +// Input: +// - seed : Seed for random calculation +// +// Output: +// - seed : Updated seed value +// +// Return value : The new seed value +// + +// +// WebRtcSpl_RandU(...) +// +// Produces a uniformly distributed value in the int16_t range +// +// Input: +// - seed : Seed for random calculation +// +// Output: +// - seed : Updated seed value +// +// Return value : Uniformly distributed value in the range +// [Word16_MIN...Word16_MAX] +// + +// +// WebRtcSpl_RandN(...) +// +// Produces a normal distributed value in the int16_t range +// +// Input: +// - seed : Seed for random calculation +// +// Output: +// - seed : Updated seed value +// +// Return value : N(0,1) value in the Q13 domain +// + +// +// WebRtcSpl_RandUArray(...) +// +// Produces a uniformly distributed vector with elements in the int16_t +// range +// +// Input: +// - vector_length : Samples wanted in the vector +// - seed : Seed for random calculation +// +// Output: +// - vector : Vector with the uniform values +// - seed : Updated seed value +// +// Return value : Number of samples in vector, i.e., |vector_length| +// + +// +// WebRtcSpl_Sqrt(...) +// +// Returns the square root of the input value |value|. The precision of this +// function is integer precision, i.e., sqrt(8) gives 2 as answer. +// If |value| is a negative number then 0 is returned. +// +// Algorithm: +// +// A sixth order Taylor Series expansion is used here to compute the square +// root of a number y^0.5 = (1+x)^0.5 +// where +// x = y-1 +// = 1+(x/2)-0.5*((x/2)^2+0.5*((x/2)^3-0.625*((x/2)^4+0.875*((x/2)^5) +// 0.5 <= x < 1 +// +// Input: +// - value : Value to calculate sqrt of +// +// Return value : Result of the sqrt calculation +// + +// +// WebRtcSpl_DivU32U16(...) +// +// Divides a uint32_t |num| by a uint16_t |den|. +// +// If |den|==0, (uint32_t)0xFFFFFFFF is returned. +// +// Input: +// - num : Numerator +// - den : Denominator +// +// Return value : Result of the division (as a uint32_t), i.e., the +// integer part of num/den. +// + +// +// WebRtcSpl_DivW32W16(...) +// +// Divides a int32_t |num| by a int16_t |den|. +// +// If |den|==0, (int32_t)0x7FFFFFFF is returned. +// +// Input: +// - num : Numerator +// - den : Denominator +// +// Return value : Result of the division (as a int32_t), i.e., the +// integer part of num/den. +// + +// +// WebRtcSpl_DivW32W16ResW16(...) +// +// Divides a int32_t |num| by a int16_t |den|, assuming that the +// result is less than 32768, otherwise an unpredictable result will occur. +// +// If |den|==0, (int16_t)0x7FFF is returned. +// +// Input: +// - num : Numerator +// - den : Denominator +// +// Return value : Result of the division (as a int16_t), i.e., the +// integer part of num/den. +// + +// +// WebRtcSpl_DivResultInQ31(...) +// +// Divides a int32_t |num| by a int16_t |den|, assuming that the +// absolute value of the denominator is larger than the numerator, otherwise +// an unpredictable result will occur. +// +// Input: +// - num : Numerator +// - den : Denominator +// +// Return value : Result of the division in Q31. +// + +// +// WebRtcSpl_DivW32HiLow(...) +// +// Divides a int32_t |num| by a denominator in hi, low format. The +// absolute value of the denominator has to be larger (or equal to) the +// numerator. +// +// Input: +// - num : Numerator +// - den_hi : High part of denominator +// - den_low : Low part of denominator +// +// Return value : Divided value in Q31 +// + +// +// WebRtcSpl_Energy(...) +// +// Calculates the energy of a vector +// +// Input: +// - vector : Vector which the energy should be calculated on +// - vector_length : Number of samples in vector +// +// Output: +// - scale_factor : Number of left bit shifts needed to get the physical +// energy value, i.e, to get the Q0 value +// +// Return value : Energy value in Q(-|scale_factor|) +// + +// +// WebRtcSpl_FilterAR(...) +// +// Performs a 32-bit AR filtering on a vector in Q12 +// +// Input: +// - ar_coef : AR-coefficient vector (values in Q12), +// ar_coef[0] must be 4096. +// - ar_coef_length : Number of coefficients in |ar_coef|. +// - in_vector : Vector to be filtered. +// - in_vector_length : Number of samples in |in_vector|. +// - filter_state : Current state (higher part) of the filter. +// - filter_state_length : Length (in samples) of |filter_state|. +// - filter_state_low : Current state (lower part) of the filter. +// - filter_state_low_length : Length (in samples) of |filter_state_low|. +// - out_vector_low_length : Maximum length (in samples) of +// |out_vector_low|. +// +// Output: +// - filter_state : Updated state (upper part) vector. +// - filter_state_low : Updated state (lower part) vector. +// - out_vector : Vector containing the upper part of the +// filtered values. +// - out_vector_low : Vector containing the lower part of the +// filtered values. +// +// Return value : Number of samples in the |out_vector|. +// + +// +// WebRtcSpl_ComplexIFFT(...) +// +// Complex Inverse FFT +// +// Computes an inverse complex 2^|stages|-point FFT on the input vector, which +// is in bit-reversed order. The original content of the vector is destroyed in +// the process, since the input is overwritten by the output, normal-ordered, +// FFT vector. With X as the input complex vector, y as the output complex +// vector and with M = 2^|stages|, the following is computed: +// +// M-1 +// y(k) = sum[X(i)*[cos(2*pi*i*k/M) + j*sin(2*pi*i*k/M)]] +// i=0 +// +// The implementations are optimized for speed, not for code size. It uses the +// decimation-in-time algorithm with radix-2 butterfly technique. +// +// Input: +// - vector : In pointer to complex vector containing 2^|stages| +// real elements interleaved with 2^|stages| imaginary +// elements. +// [ReImReImReIm....] +// The elements are in Q(-scale) domain, see more on Return +// Value below. +// +// - stages : Number of FFT stages. Must be at least 3 and at most 10, +// since the table WebRtcSpl_kSinTable1024[] is 1024 +// elements long. +// +// - mode : This parameter gives the user to choose how the FFT +// should work. +// mode==0: Low-complexity and Low-accuracy mode +// mode==1: High-complexity and High-accuracy mode +// +// Output: +// - vector : Out pointer to the FFT vector (the same as input). +// +// Return Value : The scale value that tells the number of left bit shifts +// that the elements in the |vector| should be shifted with +// in order to get Q0 values, i.e. the physically correct +// values. The scale parameter is always 0 or positive, +// except if N>1024 (|stages|>10), which returns a scale +// value of -1, indicating error. +// + +// +// WebRtcSpl_ComplexFFT(...) +// +// Complex FFT +// +// Computes a complex 2^|stages|-point FFT on the input vector, which is in +// bit-reversed order. The original content of the vector is destroyed in +// the process, since the input is overwritten by the output, normal-ordered, +// FFT vector. With x as the input complex vector, Y as the output complex +// vector and with M = 2^|stages|, the following is computed: +// +// M-1 +// Y(k) = 1/M * sum[x(i)*[cos(2*pi*i*k/M) + j*sin(2*pi*i*k/M)]] +// i=0 +// +// The implementations are optimized for speed, not for code size. It uses the +// decimation-in-time algorithm with radix-2 butterfly technique. +// +// This routine prevents overflow by scaling by 2 before each FFT stage. This is +// a fixed scaling, for proper normalization - there will be log2(n) passes, so +// this results in an overall factor of 1/n, distributed to maximize arithmetic +// accuracy. +// +// Input: +// - vector : In pointer to complex vector containing 2^|stages| real +// elements interleaved with 2^|stages| imaginary elements. +// [ReImReImReIm....] +// The output is in the Q0 domain. +// +// - stages : Number of FFT stages. Must be at least 3 and at most 10, +// since the table WebRtcSpl_kSinTable1024[] is 1024 +// elements long. +// +// - mode : This parameter gives the user to choose how the FFT +// should work. +// mode==0: Low-complexity and Low-accuracy mode +// mode==1: High-complexity and High-accuracy mode +// +// Output: +// - vector : The output FFT vector is in the Q0 domain. +// +// Return value : The scale parameter is always 0, except if N>1024, +// which returns a scale value of -1, indicating error. +// + +// +// WebRtcSpl_AnalysisQMF(...) +// +// Splits a 0-2*F Hz signal into two sub bands: 0-F Hz and F-2*F Hz. The +// current version has F = 8000, therefore, a super-wideband audio signal is +// split to lower-band 0-8 kHz and upper-band 8-16 kHz. +// +// Input: +// - in_data : Wide band speech signal, 320 samples (10 ms) +// +// Input & Output: +// - filter_state1 : Filter state for first All-pass filter +// - filter_state2 : Filter state for second All-pass filter +// +// Output: +// - low_band : Lower-band signal 0-8 kHz band, 160 samples (10 ms) +// - high_band : Upper-band signal 8-16 kHz band (flipped in frequency +// domain), 160 samples (10 ms) +// + +// +// WebRtcSpl_SynthesisQMF(...) +// +// Combines the two sub bands (0-F and F-2*F Hz) into a signal of 0-2*F +// Hz, (current version has F = 8000 Hz). So the filter combines lower-band +// (0-8 kHz) and upper-band (8-16 kHz) channels to obtain super-wideband 0-16 +// kHz audio. +// +// Input: +// - low_band : The signal with the 0-8 kHz band, 160 samples (10 ms) +// - high_band : The signal with the 8-16 kHz band, 160 samples (10 ms) +// +// Input & Output: +// - filter_state1 : Filter state for first All-pass filter +// - filter_state2 : Filter state for second All-pass filter +// +// Output: +// - out_data : Super-wideband speech signal, 0-16 kHz +// + +// int16_t WebRtcSpl_SatW32ToW16(...) +// +// This function saturates a 32-bit word into a 16-bit word. +// +// Input: +// - value32 : The value of a 32-bit word. +// +// Output: +// - out16 : the saturated 16-bit word. +// + +// int32_t WebRtc_MulAccumW16(...) +// +// This function multiply a 16-bit word by a 16-bit word, and accumulate this +// value to a 32-bit integer. +// +// Input: +// - a : The value of the first 16-bit word. +// - b : The value of the second 16-bit word. +// - c : The value of an 32-bit integer. +// +// Return Value: The value of a * b + c. +// diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/include/spl_inl.h b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/include/spl_inl.h new file mode 100644 index 000000000..d24b3a5f5 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/include/spl_inl.h @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +// This header file includes the inline functions in +// the fix point signal processing library. + +#ifndef COMMON_AUDIO_SIGNAL_PROCESSING_INCLUDE_SPL_INL_H_ +#define COMMON_AUDIO_SIGNAL_PROCESSING_INCLUDE_SPL_INL_H_ + +#include "webrtc/rtc_base/compile_assert_c.h" + +extern const int8_t kWebRtcSpl_CountLeadingZeros32_Table[64]; + +// Don't call this directly except in tests! +static __inline int WebRtcSpl_CountLeadingZeros32_NotBuiltin(uint32_t n) { + // Normalize n by rounding up to the nearest number that is a sequence of 0 + // bits followed by a sequence of 1 bits. This number has the same number of + // leading zeros as the original n. There are exactly 33 such values. + n |= n >> 1; + n |= n >> 2; + n |= n >> 4; + n |= n >> 8; + n |= n >> 16; + + // Multiply the modified n with a constant selected (by exhaustive search) + // such that each of the 33 possible values of n give a product whose 6 most + // significant bits are unique. Then look up the answer in the table. + return kWebRtcSpl_CountLeadingZeros32_Table[(n * 0x8c0b2891) >> 26]; +} + +// Don't call this directly except in tests! +static __inline int WebRtcSpl_CountLeadingZeros64_NotBuiltin(uint64_t n) { + const int leading_zeros = n >> 32 == 0 ? 32 : 0; + return leading_zeros + WebRtcSpl_CountLeadingZeros32_NotBuiltin( + (uint32_t)(n >> (32 - leading_zeros))); +} + +// Returns the number of leading zero bits in the argument. +static __inline int WebRtcSpl_CountLeadingZeros32(uint32_t n) { +#ifdef __GNUC__ + RTC_COMPILE_ASSERT(sizeof(unsigned int) == sizeof(uint32_t)); + return n == 0 ? 32 : __builtin_clz(n); +#else + return WebRtcSpl_CountLeadingZeros32_NotBuiltin(n); +#endif +} + +// Returns the number of leading zero bits in the argument. +static __inline int WebRtcSpl_CountLeadingZeros64(uint64_t n) { +#ifdef __GNUC__ + RTC_COMPILE_ASSERT(sizeof(unsigned long long) == sizeof(uint64_t)); // NOLINT + return n == 0 ? 64 : __builtin_clzll(n); +#else + return WebRtcSpl_CountLeadingZeros64_NotBuiltin(n); +#endif +} + +#ifdef WEBRTC_ARCH_ARM_V7 +#include "webrtc/common_audio/signal_processing/include/spl_inl_armv7.h" +#else + +#if defined(MIPS32_LE) +#include "webrtc/common_audio/signal_processing/include/spl_inl_mips.h" +#endif + +#if !defined(MIPS_DSP_R1_LE) +static __inline int16_t WebRtcSpl_SatW32ToW16(int32_t value32) { + int16_t out16 = (int16_t)value32; + + if (value32 > 32767) + out16 = 32767; + else if (value32 < -32768) + out16 = -32768; + + return out16; +} + +static __inline int32_t WebRtcSpl_AddSatW32(int32_t a, int32_t b) { + // Do the addition in unsigned numbers, since signed overflow is undefined + // behavior. + const int32_t sum = (int32_t)((uint32_t)a + (uint32_t)b); + + // a + b can't overflow if a and b have different signs. If they have the + // same sign, a + b also has the same sign iff it didn't overflow. + if ((a < 0) == (b < 0) && (a < 0) != (sum < 0)) { + // The direction of the overflow is obvious from the sign of a + b. + return sum < 0 ? INT32_MAX : INT32_MIN; + } + return sum; +} + +static __inline int32_t WebRtcSpl_SubSatW32(int32_t a, int32_t b) { + // Do the subtraction in unsigned numbers, since signed overflow is undefined + // behavior. + const int32_t diff = (int32_t)((uint32_t)a - (uint32_t)b); + + // a - b can't overflow if a and b have the same sign. If they have different + // signs, a - b has the same sign as a iff it didn't overflow. + if ((a < 0) != (b < 0) && (a < 0) != (diff < 0)) { + // The direction of the overflow is obvious from the sign of a - b. + return diff < 0 ? INT32_MAX : INT32_MIN; + } + return diff; +} + +static __inline int16_t WebRtcSpl_AddSatW16(int16_t a, int16_t b) { + return WebRtcSpl_SatW32ToW16((int32_t)a + (int32_t)b); +} + +static __inline int16_t WebRtcSpl_SubSatW16(int16_t var1, int16_t var2) { + return WebRtcSpl_SatW32ToW16((int32_t)var1 - (int32_t)var2); +} +#endif // #if !defined(MIPS_DSP_R1_LE) + +#if !defined(MIPS32_LE) +static __inline int16_t WebRtcSpl_GetSizeInBits(uint32_t n) { + return 32 - WebRtcSpl_CountLeadingZeros32(n); +} + +// Return the number of steps a can be left-shifted without overflow, +// or 0 if a == 0. +static __inline int16_t WebRtcSpl_NormW32(int32_t a) { + return a == 0 ? 0 : WebRtcSpl_CountLeadingZeros32(a < 0 ? ~a : a) - 1; +} + +// Return the number of steps a can be left-shifted without overflow, +// or 0 if a == 0. +static __inline int16_t WebRtcSpl_NormU32(uint32_t a) { + return a == 0 ? 0 : WebRtcSpl_CountLeadingZeros32(a); +} + +// Return the number of steps a can be left-shifted without overflow, +// or 0 if a == 0. +static __inline int16_t WebRtcSpl_NormW16(int16_t a) { + const int32_t a32 = a; + return a == 0 ? 0 : WebRtcSpl_CountLeadingZeros32(a < 0 ? ~a32 : a32) - 17; +} + +static __inline int32_t WebRtc_MulAccumW16(int16_t a, int16_t b, int32_t c) { + return (a * b + c); +} +#endif // #if !defined(MIPS32_LE) + +#endif // WEBRTC_ARCH_ARM_V7 + +#endif // COMMON_AUDIO_SIGNAL_PROCESSING_INCLUDE_SPL_INL_H_ diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/min_max_operations.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/min_max_operations.c new file mode 100644 index 000000000..75975bb09 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/min_max_operations.c @@ -0,0 +1,224 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +/* + * This file contains the implementation of functions + * WebRtcSpl_MaxAbsValueW16C() + * WebRtcSpl_MaxAbsValueW32C() + * WebRtcSpl_MaxValueW16C() + * WebRtcSpl_MaxValueW32C() + * WebRtcSpl_MinValueW16C() + * WebRtcSpl_MinValueW32C() + * WebRtcSpl_MaxAbsIndexW16() + * WebRtcSpl_MaxIndexW16() + * WebRtcSpl_MaxIndexW32() + * WebRtcSpl_MinIndexW16() + * WebRtcSpl_MinIndexW32() + * + */ + +#include + +#include "webrtc/rtc_base/checks.h" +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" + +// TODO(bjorn/kma): Consolidate function pairs (e.g. combine +// WebRtcSpl_MaxAbsValueW16C and WebRtcSpl_MaxAbsIndexW16 into a single one.) +// TODO(kma): Move the next six functions into min_max_operations_c.c. + +// Maximum absolute value of word16 vector. C version for generic platforms. +int16_t WebRtcSpl_MaxAbsValueW16C(const int16_t* vector, size_t length) { + size_t i = 0; + int absolute = 0, maximum = 0; + + RTC_DCHECK_GT(length, 0); + + for (i = 0; i < length; i++) { + absolute = abs((int)vector[i]); + + if (absolute > maximum) { + maximum = absolute; + } + } + + // Guard the case for abs(-32768). + if (maximum > WEBRTC_SPL_WORD16_MAX) { + maximum = WEBRTC_SPL_WORD16_MAX; + } + + return (int16_t)maximum; +} + +// Maximum absolute value of word32 vector. C version for generic platforms. +int32_t WebRtcSpl_MaxAbsValueW32C(const int32_t* vector, size_t length) { + // Use uint32_t for the local variables, to accommodate the return value + // of abs(0x80000000), which is 0x80000000. + + uint32_t absolute = 0, maximum = 0; + size_t i = 0; + + RTC_DCHECK_GT(length, 0); + + for (i = 0; i < length; i++) { + absolute = abs((int)vector[i]); + if (absolute > maximum) { + maximum = absolute; + } + } + + maximum = WEBRTC_SPL_MIN(maximum, WEBRTC_SPL_WORD32_MAX); + + return (int32_t)maximum; +} + +// Maximum value of word16 vector. C version for generic platforms. +int16_t WebRtcSpl_MaxValueW16C(const int16_t* vector, size_t length) { + int16_t maximum = WEBRTC_SPL_WORD16_MIN; + size_t i = 0; + + RTC_DCHECK_GT(length, 0); + + for (i = 0; i < length; i++) { + if (vector[i] > maximum) + maximum = vector[i]; + } + return maximum; +} + +// Maximum value of word32 vector. C version for generic platforms. +int32_t WebRtcSpl_MaxValueW32C(const int32_t* vector, size_t length) { + int32_t maximum = WEBRTC_SPL_WORD32_MIN; + size_t i = 0; + + RTC_DCHECK_GT(length, 0); + + for (i = 0; i < length; i++) { + if (vector[i] > maximum) + maximum = vector[i]; + } + return maximum; +} + +// Minimum value of word16 vector. C version for generic platforms. +int16_t WebRtcSpl_MinValueW16C(const int16_t* vector, size_t length) { + int16_t minimum = WEBRTC_SPL_WORD16_MAX; + size_t i = 0; + + RTC_DCHECK_GT(length, 0); + + for (i = 0; i < length; i++) { + if (vector[i] < minimum) + minimum = vector[i]; + } + return minimum; +} + +// Minimum value of word32 vector. C version for generic platforms. +int32_t WebRtcSpl_MinValueW32C(const int32_t* vector, size_t length) { + int32_t minimum = WEBRTC_SPL_WORD32_MAX; + size_t i = 0; + + RTC_DCHECK_GT(length, 0); + + for (i = 0; i < length; i++) { + if (vector[i] < minimum) + minimum = vector[i]; + } + return minimum; +} + +// Index of maximum absolute value in a word16 vector. +size_t WebRtcSpl_MaxAbsIndexW16(const int16_t* vector, size_t length) { + // Use type int for local variables, to accomodate the value of abs(-32768). + + size_t i = 0, index = 0; + int absolute = 0, maximum = 0; + + RTC_DCHECK_GT(length, 0); + + for (i = 0; i < length; i++) { + absolute = abs((int)vector[i]); + + if (absolute > maximum) { + maximum = absolute; + index = i; + } + } + + return index; +} + +// Index of maximum value in a word16 vector. +size_t WebRtcSpl_MaxIndexW16(const int16_t* vector, size_t length) { + size_t i = 0, index = 0; + int16_t maximum = WEBRTC_SPL_WORD16_MIN; + + RTC_DCHECK_GT(length, 0); + + for (i = 0; i < length; i++) { + if (vector[i] > maximum) { + maximum = vector[i]; + index = i; + } + } + + return index; +} + +// Index of maximum value in a word32 vector. +size_t WebRtcSpl_MaxIndexW32(const int32_t* vector, size_t length) { + size_t i = 0, index = 0; + int32_t maximum = WEBRTC_SPL_WORD32_MIN; + + RTC_DCHECK_GT(length, 0); + + for (i = 0; i < length; i++) { + if (vector[i] > maximum) { + maximum = vector[i]; + index = i; + } + } + + return index; +} + +// Index of minimum value in a word16 vector. +size_t WebRtcSpl_MinIndexW16(const int16_t* vector, size_t length) { + size_t i = 0, index = 0; + int16_t minimum = WEBRTC_SPL_WORD16_MAX; + + RTC_DCHECK_GT(length, 0); + + for (i = 0; i < length; i++) { + if (vector[i] < minimum) { + minimum = vector[i]; + index = i; + } + } + + return index; +} + +// Index of minimum value in a word32 vector. +size_t WebRtcSpl_MinIndexW32(const int32_t* vector, size_t length) { + size_t i = 0, index = 0; + int32_t minimum = WEBRTC_SPL_WORD32_MAX; + + RTC_DCHECK_GT(length, 0); + + for (i = 0; i < length; i++) { + if (vector[i] < minimum) { + minimum = vector[i]; + index = i; + } + } + + return index; +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/resample_48khz.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/resample_48khz.c new file mode 100644 index 000000000..2220cc333 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/resample_48khz.c @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + + +/* + * This file contains resampling functions between 48 kHz and nb/wb. + * The description header can be found in signal_processing_library.h + * + */ + +#include +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" +#include "webrtc/common_audio/signal_processing/resample_by_2_internal.h" + +//////////////////////////// +///// 48 kHz -> 16 kHz ///// +//////////////////////////// + +// 48 -> 16 resampler +void WebRtcSpl_Resample48khzTo16khz(const int16_t* in, int16_t* out, + WebRtcSpl_State48khzTo16khz* state, int32_t* tmpmem) +{ + ///// 48 --> 48(LP) ///// + // int16_t in[480] + // int32_t out[480] + ///// + WebRtcSpl_LPBy2ShortToInt(in, 480, tmpmem + 16, state->S_48_48); + + ///// 48 --> 32 ///// + // int32_t in[480] + // int32_t out[320] + ///// + // copy state to and from input array + memcpy(tmpmem + 8, state->S_48_32, 8 * sizeof(int32_t)); + memcpy(state->S_48_32, tmpmem + 488, 8 * sizeof(int32_t)); + WebRtcSpl_Resample48khzTo32khz(tmpmem + 8, tmpmem, 160); + + ///// 32 --> 16 ///// + // int32_t in[320] + // int16_t out[160] + ///// + WebRtcSpl_DownBy2IntToShort(tmpmem, 320, out, state->S_32_16); +} + +// initialize state of 48 -> 16 resampler +void WebRtcSpl_ResetResample48khzTo16khz(WebRtcSpl_State48khzTo16khz* state) +{ + memset(state->S_48_48, 0, 16 * sizeof(int32_t)); + memset(state->S_48_32, 0, 8 * sizeof(int32_t)); + memset(state->S_32_16, 0, 8 * sizeof(int32_t)); +} + +//////////////////////////// +///// 16 kHz -> 48 kHz ///// +//////////////////////////// + +// 16 -> 48 resampler +void WebRtcSpl_Resample16khzTo48khz(const int16_t* in, int16_t* out, + WebRtcSpl_State16khzTo48khz* state, int32_t* tmpmem) +{ + ///// 16 --> 32 ///// + // int16_t in[160] + // int32_t out[320] + ///// + WebRtcSpl_UpBy2ShortToInt(in, 160, tmpmem + 16, state->S_16_32); + + ///// 32 --> 24 ///// + // int32_t in[320] + // int32_t out[240] + // copy state to and from input array + ///// + memcpy(tmpmem + 8, state->S_32_24, 8 * sizeof(int32_t)); + memcpy(state->S_32_24, tmpmem + 328, 8 * sizeof(int32_t)); + WebRtcSpl_Resample32khzTo24khz(tmpmem + 8, tmpmem, 80); + + ///// 24 --> 48 ///// + // int32_t in[240] + // int16_t out[480] + ///// + WebRtcSpl_UpBy2IntToShort(tmpmem, 240, out, state->S_24_48); +} + +// initialize state of 16 -> 48 resampler +void WebRtcSpl_ResetResample16khzTo48khz(WebRtcSpl_State16khzTo48khz* state) +{ + memset(state->S_16_32, 0, 8 * sizeof(int32_t)); + memset(state->S_32_24, 0, 8 * sizeof(int32_t)); + memset(state->S_24_48, 0, 8 * sizeof(int32_t)); +} + +//////////////////////////// +///// 48 kHz -> 8 kHz ///// +//////////////////////////// + +// 48 -> 8 resampler +void WebRtcSpl_Resample48khzTo8khz(const int16_t* in, int16_t* out, + WebRtcSpl_State48khzTo8khz* state, int32_t* tmpmem) +{ + ///// 48 --> 24 ///// + // int16_t in[480] + // int32_t out[240] + ///// + WebRtcSpl_DownBy2ShortToInt(in, 480, tmpmem + 256, state->S_48_24); + + ///// 24 --> 24(LP) ///// + // int32_t in[240] + // int32_t out[240] + ///// + WebRtcSpl_LPBy2IntToInt(tmpmem + 256, 240, tmpmem + 16, state->S_24_24); + + ///// 24 --> 16 ///// + // int32_t in[240] + // int32_t out[160] + ///// + // copy state to and from input array + memcpy(tmpmem + 8, state->S_24_16, 8 * sizeof(int32_t)); + memcpy(state->S_24_16, tmpmem + 248, 8 * sizeof(int32_t)); + WebRtcSpl_Resample48khzTo32khz(tmpmem + 8, tmpmem, 80); + + ///// 16 --> 8 ///// + // int32_t in[160] + // int16_t out[80] + ///// + WebRtcSpl_DownBy2IntToShort(tmpmem, 160, out, state->S_16_8); +} + +// initialize state of 48 -> 8 resampler +void WebRtcSpl_ResetResample48khzTo8khz(WebRtcSpl_State48khzTo8khz* state) +{ + memset(state->S_48_24, 0, 8 * sizeof(int32_t)); + memset(state->S_24_24, 0, 16 * sizeof(int32_t)); + memset(state->S_24_16, 0, 8 * sizeof(int32_t)); + memset(state->S_16_8, 0, 8 * sizeof(int32_t)); +} + +//////////////////////////// +///// 8 kHz -> 48 kHz ///// +//////////////////////////// + +// 8 -> 48 resampler +void WebRtcSpl_Resample8khzTo48khz(const int16_t* in, int16_t* out, + WebRtcSpl_State8khzTo48khz* state, int32_t* tmpmem) +{ + ///// 8 --> 16 ///// + // int16_t in[80] + // int32_t out[160] + ///// + WebRtcSpl_UpBy2ShortToInt(in, 80, tmpmem + 264, state->S_8_16); + + ///// 16 --> 12 ///// + // int32_t in[160] + // int32_t out[120] + ///// + // copy state to and from input array + memcpy(tmpmem + 256, state->S_16_12, 8 * sizeof(int32_t)); + memcpy(state->S_16_12, tmpmem + 416, 8 * sizeof(int32_t)); + WebRtcSpl_Resample32khzTo24khz(tmpmem + 256, tmpmem + 240, 40); + + ///// 12 --> 24 ///// + // int32_t in[120] + // int16_t out[240] + ///// + WebRtcSpl_UpBy2IntToInt(tmpmem + 240, 120, tmpmem, state->S_12_24); + + ///// 24 --> 48 ///// + // int32_t in[240] + // int16_t out[480] + ///// + WebRtcSpl_UpBy2IntToShort(tmpmem, 240, out, state->S_24_48); +} + +// initialize state of 8 -> 48 resampler +void WebRtcSpl_ResetResample8khzTo48khz(WebRtcSpl_State8khzTo48khz* state) +{ + memset(state->S_8_16, 0, 8 * sizeof(int32_t)); + memset(state->S_16_12, 0, 8 * sizeof(int32_t)); + memset(state->S_12_24, 0, 8 * sizeof(int32_t)); + memset(state->S_24_48, 0, 8 * sizeof(int32_t)); +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/resample_by_2_internal.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/resample_by_2_internal.c new file mode 100644 index 000000000..72bc0f92b --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/resample_by_2_internal.c @@ -0,0 +1,689 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + + +/* + * This header file contains some internal resampling functions. + * + */ + +#include "webrtc/common_audio/signal_processing/resample_by_2_internal.h" +#include "webrtc/rtc_base/sanitizer.h" + +// allpass filter coefficients. +static const int16_t kResampleAllpass[2][3] = { + {821, 6110, 12382}, + {3050, 9368, 15063} +}; + +// +// decimator +// input: int32_t (shifted 15 positions to the left, + offset 16384) OVERWRITTEN! +// output: int16_t (saturated) (of length len/2) +// state: filter state array; length = 8 + +void RTC_NO_SANITIZE("signed-integer-overflow") // bugs.webrtc.org/5486 +WebRtcSpl_DownBy2IntToShort(int32_t *in, int32_t len, int16_t *out, + int32_t *state) +{ + int32_t tmp0, tmp1, diff; + int32_t i; + + len >>= 1; + + // lower allpass filter (operates on even input samples) + for (i = 0; i < len; i++) + { + tmp0 = in[i << 1]; + diff = tmp0 - state[1]; + // UBSan: -1771017321 - 999586185 cannot be represented in type 'int' + + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[0] + diff * kResampleAllpass[1][0]; + state[0] = tmp0; + diff = tmp1 - state[2]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[1] + diff * kResampleAllpass[1][1]; + state[1] = tmp1; + diff = tmp0 - state[3]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[3] = state[2] + diff * kResampleAllpass[1][2]; + state[2] = tmp0; + + // divide by two and store temporarily + in[i << 1] = (state[3] >> 1); + } + + in++; + + // upper allpass filter (operates on odd input samples) + for (i = 0; i < len; i++) + { + tmp0 = in[i << 1]; + diff = tmp0 - state[5]; + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[4] + diff * kResampleAllpass[0][0]; + state[4] = tmp0; + diff = tmp1 - state[6]; + // scale down and round + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[5] + diff * kResampleAllpass[0][1]; + state[5] = tmp1; + diff = tmp0 - state[7]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[7] = state[6] + diff * kResampleAllpass[0][2]; + state[6] = tmp0; + + // divide by two and store temporarily + in[i << 1] = (state[7] >> 1); + } + + in--; + + // combine allpass outputs + for (i = 0; i < len; i += 2) + { + // divide by two, add both allpass outputs and round + tmp0 = (in[i << 1] + in[(i << 1) + 1]) >> 15; + tmp1 = (in[(i << 1) + 2] + in[(i << 1) + 3]) >> 15; + if (tmp0 > (int32_t)0x00007FFF) + tmp0 = 0x00007FFF; + if (tmp0 < (int32_t)0xFFFF8000) + tmp0 = 0xFFFF8000; + out[i] = (int16_t)tmp0; + if (tmp1 > (int32_t)0x00007FFF) + tmp1 = 0x00007FFF; + if (tmp1 < (int32_t)0xFFFF8000) + tmp1 = 0xFFFF8000; + out[i + 1] = (int16_t)tmp1; + } +} + +// +// decimator +// input: int16_t +// output: int32_t (shifted 15 positions to the left, + offset 16384) (of length len/2) +// state: filter state array; length = 8 + +void RTC_NO_SANITIZE("signed-integer-overflow") // bugs.webrtc.org/5486 +WebRtcSpl_DownBy2ShortToInt(const int16_t *in, + int32_t len, + int32_t *out, + int32_t *state) +{ + int32_t tmp0, tmp1, diff; + int32_t i; + + len >>= 1; + + // lower allpass filter (operates on even input samples) + for (i = 0; i < len; i++) + { + tmp0 = ((int32_t)in[i << 1] << 15) + (1 << 14); + diff = tmp0 - state[1]; + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[0] + diff * kResampleAllpass[1][0]; + state[0] = tmp0; + diff = tmp1 - state[2]; + // UBSan: -1379909682 - 834099714 cannot be represented in type 'int' + + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[1] + diff * kResampleAllpass[1][1]; + state[1] = tmp1; + diff = tmp0 - state[3]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[3] = state[2] + diff * kResampleAllpass[1][2]; + state[2] = tmp0; + + // divide by two and store temporarily + out[i] = (state[3] >> 1); + } + + in++; + + // upper allpass filter (operates on odd input samples) + for (i = 0; i < len; i++) + { + tmp0 = ((int32_t)in[i << 1] << 15) + (1 << 14); + diff = tmp0 - state[5]; + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[4] + diff * kResampleAllpass[0][0]; + state[4] = tmp0; + diff = tmp1 - state[6]; + // scale down and round + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[5] + diff * kResampleAllpass[0][1]; + state[5] = tmp1; + diff = tmp0 - state[7]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[7] = state[6] + diff * kResampleAllpass[0][2]; + state[6] = tmp0; + + // divide by two and store temporarily + out[i] += (state[7] >> 1); + } + + in--; +} + +// +// interpolator +// input: int16_t +// output: int32_t (normalized, not saturated) (of length len*2) +// state: filter state array; length = 8 +void WebRtcSpl_UpBy2ShortToInt(const int16_t *in, int32_t len, int32_t *out, + int32_t *state) +{ + int32_t tmp0, tmp1, diff; + int32_t i; + + // upper allpass filter (generates odd output samples) + for (i = 0; i < len; i++) + { + tmp0 = ((int32_t)in[i] << 15) + (1 << 14); + diff = tmp0 - state[5]; + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[4] + diff * kResampleAllpass[0][0]; + state[4] = tmp0; + diff = tmp1 - state[6]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[5] + diff * kResampleAllpass[0][1]; + state[5] = tmp1; + diff = tmp0 - state[7]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[7] = state[6] + diff * kResampleAllpass[0][2]; + state[6] = tmp0; + + // scale down, round and store + out[i << 1] = state[7] >> 15; + } + + out++; + + // lower allpass filter (generates even output samples) + for (i = 0; i < len; i++) + { + tmp0 = ((int32_t)in[i] << 15) + (1 << 14); + diff = tmp0 - state[1]; + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[0] + diff * kResampleAllpass[1][0]; + state[0] = tmp0; + diff = tmp1 - state[2]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[1] + diff * kResampleAllpass[1][1]; + state[1] = tmp1; + diff = tmp0 - state[3]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[3] = state[2] + diff * kResampleAllpass[1][2]; + state[2] = tmp0; + + // scale down, round and store + out[i << 1] = state[3] >> 15; + } +} + +// +// interpolator +// input: int32_t (shifted 15 positions to the left, + offset 16384) +// output: int32_t (shifted 15 positions to the left, + offset 16384) (of length len*2) +// state: filter state array; length = 8 +void WebRtcSpl_UpBy2IntToInt(const int32_t *in, int32_t len, int32_t *out, + int32_t *state) +{ + int32_t tmp0, tmp1, diff; + int32_t i; + + // upper allpass filter (generates odd output samples) + for (i = 0; i < len; i++) + { + tmp0 = in[i]; + diff = tmp0 - state[5]; + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[4] + diff * kResampleAllpass[0][0]; + state[4] = tmp0; + diff = tmp1 - state[6]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[5] + diff * kResampleAllpass[0][1]; + state[5] = tmp1; + diff = tmp0 - state[7]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[7] = state[6] + diff * kResampleAllpass[0][2]; + state[6] = tmp0; + + // scale down, round and store + out[i << 1] = state[7]; + } + + out++; + + // lower allpass filter (generates even output samples) + for (i = 0; i < len; i++) + { + tmp0 = in[i]; + diff = tmp0 - state[1]; + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[0] + diff * kResampleAllpass[1][0]; + state[0] = tmp0; + diff = tmp1 - state[2]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[1] + diff * kResampleAllpass[1][1]; + state[1] = tmp1; + diff = tmp0 - state[3]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[3] = state[2] + diff * kResampleAllpass[1][2]; + state[2] = tmp0; + + // scale down, round and store + out[i << 1] = state[3]; + } +} + +// +// interpolator +// input: int32_t (shifted 15 positions to the left, + offset 16384) +// output: int16_t (saturated) (of length len*2) +// state: filter state array; length = 8 +void WebRtcSpl_UpBy2IntToShort(const int32_t *in, int32_t len, int16_t *out, + int32_t *state) +{ + int32_t tmp0, tmp1, diff; + int32_t i; + + // upper allpass filter (generates odd output samples) + for (i = 0; i < len; i++) + { + tmp0 = in[i]; + diff = tmp0 - state[5]; + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[4] + diff * kResampleAllpass[0][0]; + state[4] = tmp0; + diff = tmp1 - state[6]; + // scale down and round + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[5] + diff * kResampleAllpass[0][1]; + state[5] = tmp1; + diff = tmp0 - state[7]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[7] = state[6] + diff * kResampleAllpass[0][2]; + state[6] = tmp0; + + // scale down, saturate and store + tmp1 = state[7] >> 15; + if (tmp1 > (int32_t)0x00007FFF) + tmp1 = 0x00007FFF; + if (tmp1 < (int32_t)0xFFFF8000) + tmp1 = 0xFFFF8000; + out[i << 1] = (int16_t)tmp1; + } + + out++; + + // lower allpass filter (generates even output samples) + for (i = 0; i < len; i++) + { + tmp0 = in[i]; + diff = tmp0 - state[1]; + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[0] + diff * kResampleAllpass[1][0]; + state[0] = tmp0; + diff = tmp1 - state[2]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[1] + diff * kResampleAllpass[1][1]; + state[1] = tmp1; + diff = tmp0 - state[3]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[3] = state[2] + diff * kResampleAllpass[1][2]; + state[2] = tmp0; + + // scale down, saturate and store + tmp1 = state[3] >> 15; + if (tmp1 > (int32_t)0x00007FFF) + tmp1 = 0x00007FFF; + if (tmp1 < (int32_t)0xFFFF8000) + tmp1 = 0xFFFF8000; + out[i << 1] = (int16_t)tmp1; + } +} + +// lowpass filter +// input: int16_t +// output: int32_t (normalized, not saturated) +// state: filter state array; length = 8 +void WebRtcSpl_LPBy2ShortToInt(const int16_t* in, int32_t len, int32_t* out, + int32_t* state) +{ + int32_t tmp0, tmp1, diff; + int32_t i; + + len >>= 1; + + // lower allpass filter: odd input -> even output samples + in++; + // initial state of polyphase delay element + tmp0 = state[12]; + for (i = 0; i < len; i++) + { + diff = tmp0 - state[1]; + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[0] + diff * kResampleAllpass[1][0]; + state[0] = tmp0; + diff = tmp1 - state[2]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[1] + diff * kResampleAllpass[1][1]; + state[1] = tmp1; + diff = tmp0 - state[3]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[3] = state[2] + diff * kResampleAllpass[1][2]; + state[2] = tmp0; + + // scale down, round and store + out[i << 1] = state[3] >> 1; + tmp0 = ((int32_t)in[i << 1] << 15) + (1 << 14); + } + in--; + + // upper allpass filter: even input -> even output samples + for (i = 0; i < len; i++) + { + tmp0 = ((int32_t)in[i << 1] << 15) + (1 << 14); + diff = tmp0 - state[5]; + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[4] + diff * kResampleAllpass[0][0]; + state[4] = tmp0; + diff = tmp1 - state[6]; + // scale down and round + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[5] + diff * kResampleAllpass[0][1]; + state[5] = tmp1; + diff = tmp0 - state[7]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[7] = state[6] + diff * kResampleAllpass[0][2]; + state[6] = tmp0; + + // average the two allpass outputs, scale down and store + out[i << 1] = (out[i << 1] + (state[7] >> 1)) >> 15; + } + + // switch to odd output samples + out++; + + // lower allpass filter: even input -> odd output samples + for (i = 0; i < len; i++) + { + tmp0 = ((int32_t)in[i << 1] << 15) + (1 << 14); + diff = tmp0 - state[9]; + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[8] + diff * kResampleAllpass[1][0]; + state[8] = tmp0; + diff = tmp1 - state[10]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[9] + diff * kResampleAllpass[1][1]; + state[9] = tmp1; + diff = tmp0 - state[11]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[11] = state[10] + diff * kResampleAllpass[1][2]; + state[10] = tmp0; + + // scale down, round and store + out[i << 1] = state[11] >> 1; + } + + // upper allpass filter: odd input -> odd output samples + in++; + for (i = 0; i < len; i++) + { + tmp0 = ((int32_t)in[i << 1] << 15) + (1 << 14); + diff = tmp0 - state[13]; + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[12] + diff * kResampleAllpass[0][0]; + state[12] = tmp0; + diff = tmp1 - state[14]; + // scale down and round + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[13] + diff * kResampleAllpass[0][1]; + state[13] = tmp1; + diff = tmp0 - state[15]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[15] = state[14] + diff * kResampleAllpass[0][2]; + state[14] = tmp0; + + // average the two allpass outputs, scale down and store + out[i << 1] = (out[i << 1] + (state[15] >> 1)) >> 15; + } +} + +// lowpass filter +// input: int32_t (shifted 15 positions to the left, + offset 16384) +// output: int32_t (normalized, not saturated) +// state: filter state array; length = 8 +void RTC_NO_SANITIZE("signed-integer-overflow") // bugs.webrtc.org/5486 +WebRtcSpl_LPBy2IntToInt(const int32_t* in, int32_t len, int32_t* out, + int32_t* state) +{ + int32_t tmp0, tmp1, diff; + int32_t i; + + len >>= 1; + + // lower allpass filter: odd input -> even output samples + in++; + // initial state of polyphase delay element + tmp0 = state[12]; + for (i = 0; i < len; i++) + { + diff = tmp0 - state[1]; + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[0] + diff * kResampleAllpass[1][0]; + state[0] = tmp0; + diff = tmp1 - state[2]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[1] + diff * kResampleAllpass[1][1]; + state[1] = tmp1; + diff = tmp0 - state[3]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[3] = state[2] + diff * kResampleAllpass[1][2]; + state[2] = tmp0; + + // scale down, round and store + out[i << 1] = state[3] >> 1; + tmp0 = in[i << 1]; + } + in--; + + // upper allpass filter: even input -> even output samples + for (i = 0; i < len; i++) + { + tmp0 = in[i << 1]; + diff = tmp0 - state[5]; + // UBSan: -794814117 - 1566149201 cannot be represented in type 'int' + + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[4] + diff * kResampleAllpass[0][0]; + state[4] = tmp0; + diff = tmp1 - state[6]; + // scale down and round + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[5] + diff * kResampleAllpass[0][1]; + state[5] = tmp1; + diff = tmp0 - state[7]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[7] = state[6] + diff * kResampleAllpass[0][2]; + state[6] = tmp0; + + // average the two allpass outputs, scale down and store + out[i << 1] = (out[i << 1] + (state[7] >> 1)) >> 15; + } + + // switch to odd output samples + out++; + + // lower allpass filter: even input -> odd output samples + for (i = 0; i < len; i++) + { + tmp0 = in[i << 1]; + diff = tmp0 - state[9]; + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[8] + diff * kResampleAllpass[1][0]; + state[8] = tmp0; + diff = tmp1 - state[10]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[9] + diff * kResampleAllpass[1][1]; + state[9] = tmp1; + diff = tmp0 - state[11]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[11] = state[10] + diff * kResampleAllpass[1][2]; + state[10] = tmp0; + + // scale down, round and store + out[i << 1] = state[11] >> 1; + } + + // upper allpass filter: odd input -> odd output samples + in++; + for (i = 0; i < len; i++) + { + tmp0 = in[i << 1]; + diff = tmp0 - state[13]; + // scale down and round + diff = (diff + (1 << 13)) >> 14; + tmp1 = state[12] + diff * kResampleAllpass[0][0]; + state[12] = tmp0; + diff = tmp1 - state[14]; + // scale down and round + diff = diff >> 14; + if (diff < 0) + diff += 1; + tmp0 = state[13] + diff * kResampleAllpass[0][1]; + state[13] = tmp1; + diff = tmp0 - state[15]; + // scale down and truncate + diff = diff >> 14; + if (diff < 0) + diff += 1; + state[15] = state[14] + diff * kResampleAllpass[0][2]; + state[14] = tmp0; + + // average the two allpass outputs, scale down and store + out[i << 1] = (out[i << 1] + (state[15] >> 1)) >> 15; + } +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/resample_by_2_internal.h b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/resample_by_2_internal.h new file mode 100644 index 000000000..145395a4c --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/resample_by_2_internal.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +/* + * This header file contains some internal resampling functions. + * + */ + +#ifndef COMMON_AUDIO_SIGNAL_PROCESSING_RESAMPLE_BY_2_INTERNAL_H_ +#define COMMON_AUDIO_SIGNAL_PROCESSING_RESAMPLE_BY_2_INTERNAL_H_ + +#include + +/******************************************************************* + * resample_by_2_fast.c + * Functions for internal use in the other resample functions + ******************************************************************/ +void WebRtcSpl_DownBy2IntToShort(int32_t* in, + int32_t len, + int16_t* out, + int32_t* state); + +void WebRtcSpl_DownBy2ShortToInt(const int16_t* in, + int32_t len, + int32_t* out, + int32_t* state); + +void WebRtcSpl_UpBy2ShortToInt(const int16_t* in, + int32_t len, + int32_t* out, + int32_t* state); + +void WebRtcSpl_UpBy2IntToInt(const int32_t* in, + int32_t len, + int32_t* out, + int32_t* state); + +void WebRtcSpl_UpBy2IntToShort(const int32_t* in, + int32_t len, + int16_t* out, + int32_t* state); + +void WebRtcSpl_LPBy2ShortToInt(const int16_t* in, + int32_t len, + int32_t* out, + int32_t* state); + +void WebRtcSpl_LPBy2IntToInt(const int32_t* in, + int32_t len, + int32_t* out, + int32_t* state); + +#endif // COMMON_AUDIO_SIGNAL_PROCESSING_RESAMPLE_BY_2_INTERNAL_H_ diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/resample_fractional.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/resample_fractional.c new file mode 100644 index 000000000..6409fbac4 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/resample_fractional.c @@ -0,0 +1,239 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + + +/* + * This file contains the resampling functions between 48, 44, 32 and 24 kHz. + * The description headers can be found in signal_processing_library.h + * + */ + +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" + +// interpolation coefficients +static const int16_t kCoefficients48To32[2][8] = { + {778, -2050, 1087, 23285, 12903, -3783, 441, 222}, + {222, 441, -3783, 12903, 23285, 1087, -2050, 778} +}; + +static const int16_t kCoefficients32To24[3][8] = { + {767, -2362, 2434, 24406, 10620, -3838, 721, 90}, + {386, -381, -2646, 19062, 19062, -2646, -381, 386}, + {90, 721, -3838, 10620, 24406, 2434, -2362, 767} +}; + +static const int16_t kCoefficients44To32[4][9] = { + {117, -669, 2245, -6183, 26267, 13529, -3245, 845, -138}, + {-101, 612, -2283, 8532, 29790, -5138, 1789, -524, 91}, + {50, -292, 1016, -3064, 32010, 3933, -1147, 315, -53}, + {-156, 974, -3863, 18603, 21691, -6246, 2353, -712, 126} +}; + +// Resampling ratio: 2/3 +// input: int32_t (normalized, not saturated) :: size 3 * K +// output: int32_t (shifted 15 positions to the left, + offset 16384) :: size 2 * K +// K: number of blocks + +void WebRtcSpl_Resample48khzTo32khz(const int32_t *In, int32_t *Out, size_t K) +{ + ///////////////////////////////////////////////////////////// + // Filter operation: + // + // Perform resampling (3 input samples -> 2 output samples); + // process in sub blocks of size 3 samples. + int32_t tmp; + size_t m; + + for (m = 0; m < K; m++) + { + tmp = 1 << 14; + tmp += kCoefficients48To32[0][0] * In[0]; + tmp += kCoefficients48To32[0][1] * In[1]; + tmp += kCoefficients48To32[0][2] * In[2]; + tmp += kCoefficients48To32[0][3] * In[3]; + tmp += kCoefficients48To32[0][4] * In[4]; + tmp += kCoefficients48To32[0][5] * In[5]; + tmp += kCoefficients48To32[0][6] * In[6]; + tmp += kCoefficients48To32[0][7] * In[7]; + Out[0] = tmp; + + tmp = 1 << 14; + tmp += kCoefficients48To32[1][0] * In[1]; + tmp += kCoefficients48To32[1][1] * In[2]; + tmp += kCoefficients48To32[1][2] * In[3]; + tmp += kCoefficients48To32[1][3] * In[4]; + tmp += kCoefficients48To32[1][4] * In[5]; + tmp += kCoefficients48To32[1][5] * In[6]; + tmp += kCoefficients48To32[1][6] * In[7]; + tmp += kCoefficients48To32[1][7] * In[8]; + Out[1] = tmp; + + // update pointers + In += 3; + Out += 2; + } +} + +// Resampling ratio: 3/4 +// input: int32_t (normalized, not saturated) :: size 4 * K +// output: int32_t (shifted 15 positions to the left, + offset 16384) :: size 3 * K +// K: number of blocks + +void WebRtcSpl_Resample32khzTo24khz(const int32_t *In, int32_t *Out, size_t K) +{ + ///////////////////////////////////////////////////////////// + // Filter operation: + // + // Perform resampling (4 input samples -> 3 output samples); + // process in sub blocks of size 4 samples. + size_t m; + int32_t tmp; + + for (m = 0; m < K; m++) + { + tmp = 1 << 14; + tmp += kCoefficients32To24[0][0] * In[0]; + tmp += kCoefficients32To24[0][1] * In[1]; + tmp += kCoefficients32To24[0][2] * In[2]; + tmp += kCoefficients32To24[0][3] * In[3]; + tmp += kCoefficients32To24[0][4] * In[4]; + tmp += kCoefficients32To24[0][5] * In[5]; + tmp += kCoefficients32To24[0][6] * In[6]; + tmp += kCoefficients32To24[0][7] * In[7]; + Out[0] = tmp; + + tmp = 1 << 14; + tmp += kCoefficients32To24[1][0] * In[1]; + tmp += kCoefficients32To24[1][1] * In[2]; + tmp += kCoefficients32To24[1][2] * In[3]; + tmp += kCoefficients32To24[1][3] * In[4]; + tmp += kCoefficients32To24[1][4] * In[5]; + tmp += kCoefficients32To24[1][5] * In[6]; + tmp += kCoefficients32To24[1][6] * In[7]; + tmp += kCoefficients32To24[1][7] * In[8]; + Out[1] = tmp; + + tmp = 1 << 14; + tmp += kCoefficients32To24[2][0] * In[2]; + tmp += kCoefficients32To24[2][1] * In[3]; + tmp += kCoefficients32To24[2][2] * In[4]; + tmp += kCoefficients32To24[2][3] * In[5]; + tmp += kCoefficients32To24[2][4] * In[6]; + tmp += kCoefficients32To24[2][5] * In[7]; + tmp += kCoefficients32To24[2][6] * In[8]; + tmp += kCoefficients32To24[2][7] * In[9]; + Out[2] = tmp; + + // update pointers + In += 4; + Out += 3; + } +} + +// +// fractional resampling filters +// Fout = 11/16 * Fin +// Fout = 8/11 * Fin +// + +// compute two inner-products and store them to output array +static void WebRtcSpl_ResampDotProduct(const int32_t *in1, const int32_t *in2, + const int16_t *coef_ptr, int32_t *out1, + int32_t *out2) +{ + int32_t tmp1 = 16384; + int32_t tmp2 = 16384; + int16_t coef; + + coef = coef_ptr[0]; + tmp1 += coef * in1[0]; + tmp2 += coef * in2[-0]; + + coef = coef_ptr[1]; + tmp1 += coef * in1[1]; + tmp2 += coef * in2[-1]; + + coef = coef_ptr[2]; + tmp1 += coef * in1[2]; + tmp2 += coef * in2[-2]; + + coef = coef_ptr[3]; + tmp1 += coef * in1[3]; + tmp2 += coef * in2[-3]; + + coef = coef_ptr[4]; + tmp1 += coef * in1[4]; + tmp2 += coef * in2[-4]; + + coef = coef_ptr[5]; + tmp1 += coef * in1[5]; + tmp2 += coef * in2[-5]; + + coef = coef_ptr[6]; + tmp1 += coef * in1[6]; + tmp2 += coef * in2[-6]; + + coef = coef_ptr[7]; + tmp1 += coef * in1[7]; + tmp2 += coef * in2[-7]; + + coef = coef_ptr[8]; + *out1 = tmp1 + coef * in1[8]; + *out2 = tmp2 + coef * in2[-8]; +} + +// Resampling ratio: 8/11 +// input: int32_t (normalized, not saturated) :: size 11 * K +// output: int32_t (shifted 15 positions to the left, + offset 16384) :: size 8 * K +// K: number of blocks + +void WebRtcSpl_Resample44khzTo32khz(const int32_t *In, int32_t *Out, size_t K) +{ + ///////////////////////////////////////////////////////////// + // Filter operation: + // + // Perform resampling (11 input samples -> 8 output samples); + // process in sub blocks of size 11 samples. + int32_t tmp; + size_t m; + + for (m = 0; m < K; m++) + { + tmp = 1 << 14; + + // first output sample + Out[0] = ((int32_t)In[3] << 15) + tmp; + + // sum and accumulate filter coefficients and input samples + tmp += kCoefficients44To32[3][0] * In[5]; + tmp += kCoefficients44To32[3][1] * In[6]; + tmp += kCoefficients44To32[3][2] * In[7]; + tmp += kCoefficients44To32[3][3] * In[8]; + tmp += kCoefficients44To32[3][4] * In[9]; + tmp += kCoefficients44To32[3][5] * In[10]; + tmp += kCoefficients44To32[3][6] * In[11]; + tmp += kCoefficients44To32[3][7] * In[12]; + tmp += kCoefficients44To32[3][8] * In[13]; + Out[4] = tmp; + + // sum and accumulate filter coefficients and input samples + WebRtcSpl_ResampDotProduct(&In[0], &In[17], kCoefficients44To32[0], &Out[1], &Out[7]); + + // sum and accumulate filter coefficients and input samples + WebRtcSpl_ResampDotProduct(&In[2], &In[15], kCoefficients44To32[1], &Out[2], &Out[6]); + + // sum and accumulate filter coefficients and input samples + WebRtcSpl_ResampDotProduct(&In[3], &In[14], kCoefficients44To32[2], &Out[3], &Out[5]); + + // update pointers + In += 11; + Out += 8; + } +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/spl_init.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/spl_init.c new file mode 100644 index 000000000..82fba1dac --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/spl_init.c @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +/* The global function contained in this file initializes SPL function + * pointers, currently only for ARM platforms. + * + * Some code came from common/rtcd.c in the WebM project. + */ + +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" +#include "webrtc/system_wrappers/include/cpu_features_wrapper.h" + +/* Declare function pointers. */ +MaxAbsValueW16 WebRtcSpl_MaxAbsValueW16; +MaxAbsValueW32 WebRtcSpl_MaxAbsValueW32; +MaxValueW16 WebRtcSpl_MaxValueW16; +MaxValueW32 WebRtcSpl_MaxValueW32; +MinValueW16 WebRtcSpl_MinValueW16; +MinValueW32 WebRtcSpl_MinValueW32; +CrossCorrelation WebRtcSpl_CrossCorrelation; +DownsampleFast WebRtcSpl_DownsampleFast; +ScaleAndAddVectorsWithRound WebRtcSpl_ScaleAndAddVectorsWithRound; + +#if (!defined(WEBRTC_HAS_NEON)) && !defined(MIPS32_LE) +/* Initialize function pointers to the generic C version. */ +static void InitPointersToC(void) { + WebRtcSpl_MaxAbsValueW16 = WebRtcSpl_MaxAbsValueW16C; + WebRtcSpl_MaxAbsValueW32 = WebRtcSpl_MaxAbsValueW32C; + WebRtcSpl_MaxValueW16 = WebRtcSpl_MaxValueW16C; + WebRtcSpl_MaxValueW32 = WebRtcSpl_MaxValueW32C; + WebRtcSpl_MinValueW16 = WebRtcSpl_MinValueW16C; + WebRtcSpl_MinValueW32 = WebRtcSpl_MinValueW32C; + WebRtcSpl_CrossCorrelation = WebRtcSpl_CrossCorrelationC; + WebRtcSpl_DownsampleFast = WebRtcSpl_DownsampleFastC; + WebRtcSpl_ScaleAndAddVectorsWithRound = + WebRtcSpl_ScaleAndAddVectorsWithRoundC; +} +#endif + +#if defined(WEBRTC_HAS_NEON) +/* Initialize function pointers to the Neon version. */ +static void InitPointersToNeon(void) { + WebRtcSpl_MaxAbsValueW16 = WebRtcSpl_MaxAbsValueW16Neon; + WebRtcSpl_MaxAbsValueW32 = WebRtcSpl_MaxAbsValueW32Neon; + WebRtcSpl_MaxValueW16 = WebRtcSpl_MaxValueW16Neon; + WebRtcSpl_MaxValueW32 = WebRtcSpl_MaxValueW32Neon; + WebRtcSpl_MinValueW16 = WebRtcSpl_MinValueW16Neon; + WebRtcSpl_MinValueW32 = WebRtcSpl_MinValueW32Neon; + WebRtcSpl_CrossCorrelation = WebRtcSpl_CrossCorrelationNeon; + WebRtcSpl_DownsampleFast = WebRtcSpl_DownsampleFastNeon; + WebRtcSpl_ScaleAndAddVectorsWithRound = + WebRtcSpl_ScaleAndAddVectorsWithRoundC; +} +#endif + +#if defined(MIPS32_LE) +/* Initialize function pointers to the MIPS version. */ +static void InitPointersToMIPS(void) { + WebRtcSpl_MaxAbsValueW16 = WebRtcSpl_MaxAbsValueW16_mips; + WebRtcSpl_MaxValueW16 = WebRtcSpl_MaxValueW16_mips; + WebRtcSpl_MaxValueW32 = WebRtcSpl_MaxValueW32_mips; + WebRtcSpl_MinValueW16 = WebRtcSpl_MinValueW16_mips; + WebRtcSpl_MinValueW32 = WebRtcSpl_MinValueW32_mips; + WebRtcSpl_CrossCorrelation = WebRtcSpl_CrossCorrelation_mips; + WebRtcSpl_DownsampleFast = WebRtcSpl_DownsampleFast_mips; +#if defined(MIPS_DSP_R1_LE) + WebRtcSpl_MaxAbsValueW32 = WebRtcSpl_MaxAbsValueW32_mips; + WebRtcSpl_ScaleAndAddVectorsWithRound = + WebRtcSpl_ScaleAndAddVectorsWithRound_mips; +#else + WebRtcSpl_MaxAbsValueW32 = WebRtcSpl_MaxAbsValueW32C; + WebRtcSpl_ScaleAndAddVectorsWithRound = + WebRtcSpl_ScaleAndAddVectorsWithRoundC; +#endif +} +#endif + +static void InitFunctionPointers(void) { +#if defined(WEBRTC_HAS_NEON) + InitPointersToNeon(); +#elif defined(MIPS32_LE) + InitPointersToMIPS(); +#else + InitPointersToC(); +#endif /* WEBRTC_HAS_NEON */ +} + +#if defined(WEBRTC_POSIX) +#include + +static void once(void (*func)(void)) { + static pthread_once_t lock = PTHREAD_ONCE_INIT; + pthread_once(&lock, func); +} + +#elif defined(_WIN32) +#include + +static void once(void (*func)(void)) { + /* Didn't use InitializeCriticalSection() since there's no race-free context + * in which to execute it. + * + * TODO(kma): Change to different implementation (e.g. + * InterlockedCompareExchangePointer) to avoid issues similar to + * http://code.google.com/p/webm/issues/detail?id=467. + */ + static CRITICAL_SECTION lock = {(void *)((size_t)-1), -1, 0, 0, 0, 0}; + static int done = 0; + + EnterCriticalSection(&lock); + if (!done) { + func(); + done = 1; + } + LeaveCriticalSection(&lock); +} + +/* There's no fallback version as an #else block here to ensure thread safety. + * In case of neither pthread for WEBRTC_POSIX nor _WIN32 is present, build + * system should pick it up. + */ +#endif /* WEBRTC_POSIX */ + +void WebRtcSpl_Init(void) { + once(InitFunctionPointers); +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/spl_inl.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/spl_inl.c new file mode 100644 index 000000000..efa6a65f0 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/spl_inl.c @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include + +#include "webrtc/common_audio/signal_processing/include/spl_inl.h" + +// Table used by WebRtcSpl_CountLeadingZeros32_NotBuiltin. For each uint32_t n +// that's a sequence of 0 bits followed by a sequence of 1 bits, the entry at +// index (n * 0x8c0b2891) >> 26 in this table gives the number of zero bits in +// n. +const int8_t kWebRtcSpl_CountLeadingZeros32_Table[64] = { + 32, 8, 17, -1, -1, 14, -1, -1, -1, 20, -1, -1, -1, 28, -1, 18, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 26, 25, 24, + 4, 11, 23, 31, 3, 7, 10, 16, 22, 30, -1, -1, 2, 6, 13, 9, + -1, 15, -1, 21, -1, 29, 19, -1, -1, -1, -1, -1, 1, 27, 5, 12, +}; diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/spl_sqrt.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/spl_sqrt.c new file mode 100644 index 000000000..f79ac9fa6 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/spl_sqrt.c @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + + +/* + * This file contains the function WebRtcSpl_Sqrt(). + * The description header can be found in signal_processing_library.h + * + */ + +#include "webrtc/rtc_base/checks.h" +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" + +int32_t WebRtcSpl_SqrtLocal(int32_t in); + +int32_t WebRtcSpl_SqrtLocal(int32_t in) +{ + + int16_t x_half, t16; + int32_t A, B, x2; + + /* The following block performs: + y=in/2 + x=y-2^30 + x_half=x/2^31 + t = 1 + (x_half) - 0.5*((x_half)^2) + 0.5*((x_half)^3) - 0.625*((x_half)^4) + + 0.875*((x_half)^5) + */ + + B = in / 2; + + B = B - ((int32_t)0x40000000); // B = in/2 - 1/2 + x_half = (int16_t)(B >> 16); // x_half = x/2 = (in-1)/2 + B = B + ((int32_t)0x40000000); // B = 1 + x/2 + B = B + ((int32_t)0x40000000); // Add 0.5 twice (since 1.0 does not exist in Q31) + + x2 = ((int32_t)x_half) * ((int32_t)x_half) * 2; // A = (x/2)^2 + A = -x2; // A = -(x/2)^2 + B = B + (A >> 1); // B = 1 + x/2 - 0.5*(x/2)^2 + + A >>= 16; + A = A * A * 2; // A = (x/2)^4 + t16 = (int16_t)(A >> 16); + B += -20480 * t16 * 2; // B = B - 0.625*A + // After this, B = 1 + x/2 - 0.5*(x/2)^2 - 0.625*(x/2)^4 + + A = x_half * t16 * 2; // A = (x/2)^5 + t16 = (int16_t)(A >> 16); + B += 28672 * t16 * 2; // B = B + 0.875*A + // After this, B = 1 + x/2 - 0.5*(x/2)^2 - 0.625*(x/2)^4 + 0.875*(x/2)^5 + + t16 = (int16_t)(x2 >> 16); + A = x_half * t16 * 2; // A = x/2^3 + + B = B + (A >> 1); // B = B + 0.5*A + // After this, B = 1 + x/2 - 0.5*(x/2)^2 + 0.5*(x/2)^3 - 0.625*(x/2)^4 + 0.875*(x/2)^5 + + B = B + ((int32_t)32768); // Round off bit + + return B; +} + +int32_t WebRtcSpl_Sqrt(int32_t value) +{ + /* + Algorithm: + + Six term Taylor Series is used here to compute the square root of a number + y^0.5 = (1+x)^0.5 where x = y-1 + = 1+(x/2)-0.5*((x/2)^2+0.5*((x/2)^3-0.625*((x/2)^4+0.875*((x/2)^5) + 0.5 <= x < 1 + + Example of how the algorithm works, with ut=sqrt(in), and + with in=73632 and ut=271 (even shift value case): + + in=73632 + y= in/131072 + x=y-1 + t = 1 + (x/2) - 0.5*((x/2)^2) + 0.5*((x/2)^3) - 0.625*((x/2)^4) + 0.875*((x/2)^5) + ut=t*(1/sqrt(2))*512 + + or: + + in=73632 + in2=73632*2^14 + y= in2/2^31 + x=y-1 + t = 1 + (x/2) - 0.5*((x/2)^2) + 0.5*((x/2)^3) - 0.625*((x/2)^4) + 0.875*((x/2)^5) + ut=t*(1/sqrt(2)) + ut2=ut*2^9 + + which gives: + + in = 73632 + in2 = 1206386688 + y = 0.56176757812500 + x = -0.43823242187500 + t = 0.74973506527313 + ut = 0.53014274874797 + ut2 = 2.714330873589594e+002 + + or: + + in=73632 + in2=73632*2^14 + y=in2/2 + x=y-2^30 + x_half=x/2^31 + t = 1 + (x_half) - 0.5*((x_half)^2) + 0.5*((x_half)^3) - 0.625*((x_half)^4) + + 0.875*((x_half)^5) + ut=t*(1/sqrt(2)) + ut2=ut*2^9 + + which gives: + + in = 73632 + in2 = 1206386688 + y = 603193344 + x = -470548480 + x_half = -0.21911621093750 + t = 0.74973506527313 + ut = 0.53014274874797 + ut2 = 2.714330873589594e+002 + + */ + + int16_t x_norm, nshift, t16, sh; + int32_t A; + + int16_t k_sqrt_2 = 23170; // 1/sqrt2 (==5a82) + + A = value; + + // The convention in this function is to calculate sqrt(abs(A)). Negate the + // input if it is negative. + if (A < 0) { + if (A == WEBRTC_SPL_WORD32_MIN) { + // This number cannot be held in an int32_t after negating. + // Map it to the maximum positive value. + A = WEBRTC_SPL_WORD32_MAX; + } else { + A = -A; + } + } else if (A == 0) { + return 0; // sqrt(0) = 0 + } + + sh = WebRtcSpl_NormW32(A); // # shifts to normalize A + A = WEBRTC_SPL_LSHIFT_W32(A, sh); // Normalize A + if (A < (WEBRTC_SPL_WORD32_MAX - 32767)) + { + A = A + ((int32_t)32768); // Round off bit + } else + { + A = WEBRTC_SPL_WORD32_MAX; + } + + x_norm = (int16_t)(A >> 16); // x_norm = AH + + nshift = (sh / 2); + RTC_DCHECK_GE(nshift, 0); + + A = (int32_t)WEBRTC_SPL_LSHIFT_W32((int32_t)x_norm, 16); + A = WEBRTC_SPL_ABS_W32(A); // A = abs(x_norm<<16) + A = WebRtcSpl_SqrtLocal(A); // A = sqrt(A) + + if (2 * nshift == sh) { + // Even shift value case + + t16 = (int16_t)(A >> 16); // t16 = AH + + A = k_sqrt_2 * t16 * 2; // A = 1/sqrt(2)*t16 + A = A + ((int32_t)32768); // Round off + A = A & ((int32_t)0x7fff0000); // Round off + + A >>= 15; // A = A>>16 + + } else + { + A >>= 16; // A = A>>16 + } + + A = A & ((int32_t)0x0000ffff); + A >>= nshift; // De-normalize the result. + + return A; +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/vector_scaling_operations.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/vector_scaling_operations.c new file mode 100644 index 000000000..e1f391d10 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/signal_processing/vector_scaling_operations.c @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + + +/* + * This file contains implementations of the functions + * WebRtcSpl_VectorBitShiftW16() + * WebRtcSpl_VectorBitShiftW32() + * WebRtcSpl_VectorBitShiftW32ToW16() + * WebRtcSpl_ScaleVector() + * WebRtcSpl_ScaleVectorWithSat() + * WebRtcSpl_ScaleAndAddVectors() + * WebRtcSpl_ScaleAndAddVectorsWithRoundC() + */ + +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" + +void WebRtcSpl_VectorBitShiftW16(int16_t *res, size_t length, + const int16_t *in, int16_t right_shifts) +{ + size_t i; + + if (right_shifts > 0) + { + for (i = length; i > 0; i--) + { + (*res++) = ((*in++) >> right_shifts); + } + } else + { + for (i = length; i > 0; i--) + { + (*res++) = ((*in++) * (1 << (-right_shifts))); + } + } +} + +void WebRtcSpl_VectorBitShiftW32(int32_t *out_vector, + size_t vector_length, + const int32_t *in_vector, + int16_t right_shifts) +{ + size_t i; + + if (right_shifts > 0) + { + for (i = vector_length; i > 0; i--) + { + (*out_vector++) = ((*in_vector++) >> right_shifts); + } + } else + { + for (i = vector_length; i > 0; i--) + { + (*out_vector++) = ((*in_vector++) << (-right_shifts)); + } + } +} + +void WebRtcSpl_VectorBitShiftW32ToW16(int16_t* out, size_t length, + const int32_t* in, int right_shifts) { + size_t i; + int32_t tmp_w32; + + if (right_shifts >= 0) { + for (i = length; i > 0; i--) { + tmp_w32 = (*in++) >> right_shifts; + (*out++) = WebRtcSpl_SatW32ToW16(tmp_w32); + } + } else { + int left_shifts = -right_shifts; + for (i = length; i > 0; i--) { + tmp_w32 = (*in++) << left_shifts; + (*out++) = WebRtcSpl_SatW32ToW16(tmp_w32); + } + } +} + +void WebRtcSpl_ScaleVector(const int16_t *in_vector, int16_t *out_vector, + int16_t gain, size_t in_vector_length, + int16_t right_shifts) +{ + // Performs vector operation: out_vector = (gain*in_vector)>>right_shifts + size_t i; + const int16_t *inptr; + int16_t *outptr; + + inptr = in_vector; + outptr = out_vector; + + for (i = 0; i < in_vector_length; i++) + { + *outptr++ = (int16_t)((*inptr++ * gain) >> right_shifts); + } +} + +void WebRtcSpl_ScaleVectorWithSat(const int16_t *in_vector, int16_t *out_vector, + int16_t gain, size_t in_vector_length, + int16_t right_shifts) +{ + // Performs vector operation: out_vector = (gain*in_vector)>>right_shifts + size_t i; + const int16_t *inptr; + int16_t *outptr; + + inptr = in_vector; + outptr = out_vector; + + for (i = 0; i < in_vector_length; i++) { + *outptr++ = WebRtcSpl_SatW32ToW16((*inptr++ * gain) >> right_shifts); + } +} + +void WebRtcSpl_ScaleAndAddVectors(const int16_t *in1, int16_t gain1, int shift1, + const int16_t *in2, int16_t gain2, int shift2, + int16_t *out, size_t vector_length) +{ + // Performs vector operation: out = (gain1*in1)>>shift1 + (gain2*in2)>>shift2 + size_t i; + const int16_t *in1ptr; + const int16_t *in2ptr; + int16_t *outptr; + + in1ptr = in1; + in2ptr = in2; + outptr = out; + + for (i = 0; i < vector_length; i++) + { + *outptr++ = (int16_t)((gain1 * *in1ptr++) >> shift1) + + (int16_t)((gain2 * *in2ptr++) >> shift2); + } +} + +// C version of WebRtcSpl_ScaleAndAddVectorsWithRound() for generic platforms. +int WebRtcSpl_ScaleAndAddVectorsWithRoundC(const int16_t* in_vector1, + int16_t in_vector1_scale, + const int16_t* in_vector2, + int16_t in_vector2_scale, + int right_shifts, + int16_t* out_vector, + size_t length) { + size_t i = 0; + int round_value = (1 << right_shifts) >> 1; + + if (in_vector1 == NULL || in_vector2 == NULL || out_vector == NULL || + length == 0 || right_shifts < 0) { + return -1; + } + + for (i = 0; i < length; i++) { + out_vector[i] = (int16_t)(( + in_vector1[i] * in_vector1_scale + in_vector2[i] * in_vector2_scale + + round_value) >> right_shifts); + } + + return 0; +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor.c new file mode 100644 index 000000000..25bb0a114 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor.c @@ -0,0 +1,77 @@ +/* + * Written by Wilco Dijkstra, 1996. The following email exchange establishes the + * license. + * + * From: Wilco Dijkstra + * Date: Fri, Jun 24, 2011 at 3:20 AM + * Subject: Re: sqrt routine + * To: Kevin Ma + * Hi Kevin, + * Thanks for asking. Those routines are public domain (originally posted to + * comp.sys.arm a long time ago), so you can use them freely for any purpose. + * Cheers, + * Wilco + * + * ----- Original Message ----- + * From: "Kevin Ma" + * To: + * Sent: Thursday, June 23, 2011 11:44 PM + * Subject: Fwd: sqrt routine + * Hi Wilco, + * I saw your sqrt routine from several web sites, including + * http://www.finesse.demon.co.uk/steven/sqrt.html. + * Just wonder if there's any copyright information with your Successive + * approximation routines, or if I can freely use it for any purpose. + * Thanks. + * Kevin + */ + +// Minor modifications in code style for WebRTC, 2012. + +#include "webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor.h" + +/* + * Algorithm: + * Successive approximation of the equation (root + delta) ^ 2 = N + * until delta < 1. If delta < 1 we have the integer part of SQRT (N). + * Use delta = 2^i for i = 15 .. 0. + * + * Output precision is 16 bits. Note for large input values (close to + * 0x7FFFFFFF), bit 15 (the highest bit of the low 16-bit half word) + * contains the MSB information (a non-sign value). Do with caution + * if you need to cast the output to int16_t type. + * + * If the input value is negative, it returns 0. + */ + +#define WEBRTC_SPL_SQRT_ITER(N) \ + try1 = root + (1 << (N)); \ + if (value >= try1 << (N)) \ + { \ + value -= try1 << (N); \ + root |= 2 << (N); \ + } + +int32_t WebRtcSpl_SqrtFloor(int32_t value) +{ + int32_t root = 0, try1; + + WEBRTC_SPL_SQRT_ITER (15); + WEBRTC_SPL_SQRT_ITER (14); + WEBRTC_SPL_SQRT_ITER (13); + WEBRTC_SPL_SQRT_ITER (12); + WEBRTC_SPL_SQRT_ITER (11); + WEBRTC_SPL_SQRT_ITER (10); + WEBRTC_SPL_SQRT_ITER ( 9); + WEBRTC_SPL_SQRT_ITER ( 8); + WEBRTC_SPL_SQRT_ITER ( 7); + WEBRTC_SPL_SQRT_ITER ( 6); + WEBRTC_SPL_SQRT_ITER ( 5); + WEBRTC_SPL_SQRT_ITER ( 4); + WEBRTC_SPL_SQRT_ITER ( 3); + WEBRTC_SPL_SQRT_ITER ( 2); + WEBRTC_SPL_SQRT_ITER ( 1); + WEBRTC_SPL_SQRT_ITER ( 0); + + return root >> 1; +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor.h b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor.h new file mode 100644 index 000000000..eaa58e30a --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2018 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include + +// +// WebRtcSpl_SqrtFloor(...) +// +// Returns the square root of the input value |value|. The precision of this +// function is rounding down integer precision, i.e., sqrt(8) gives 2 as answer. +// If |value| is a negative number then 0 is returned. +// +// Algorithm: +// +// An iterative 4 cylce/bit routine +// +// Input: +// - value : Value to calculate sqrt of +// +// Return value : Result of the sqrt calculation +// +int32_t WebRtcSpl_SqrtFloor(int32_t value); diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/include/webrtc_vad.h b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/include/webrtc_vad.h new file mode 100644 index 000000000..f5bbadf5b --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/include/webrtc_vad.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +/* + * This header file includes the VAD API calls. Specific function calls are + * given below. + */ + +#ifndef COMMON_AUDIO_VAD_INCLUDE_WEBRTC_VAD_H_ // NOLINT +#define COMMON_AUDIO_VAD_INCLUDE_WEBRTC_VAD_H_ + +#include +#include + +typedef struct WebRtcVadInst VadInst; + +#ifdef __cplusplus +extern "C" { +#endif + +// Creates an instance to the VAD structure. +VadInst* WebRtcVad_Create(void); + +// Frees the dynamic memory of a specified VAD instance. +// +// - handle [i] : Pointer to VAD instance that should be freed. +void WebRtcVad_Free(VadInst* handle); + +// Initializes a VAD instance. +// +// - handle [i/o] : Instance that should be initialized. +// +// returns : 0 - (OK), +// -1 - (null pointer or Default mode could not be set). +int WebRtcVad_Init(VadInst* handle); + +// Sets the VAD operating mode. A more aggressive (higher mode) VAD is more +// restrictive in reporting speech. Put in other words the probability of being +// speech when the VAD returns 1 is increased with increasing mode. As a +// consequence also the missed detection rate goes up. +// +// - handle [i/o] : VAD instance. +// - mode [i] : Aggressiveness mode (0, 1, 2, or 3). +// +// returns : 0 - (OK), +// -1 - (null pointer, mode could not be set or the VAD instance +// has not been initialized). +int WebRtcVad_set_mode(VadInst* handle, int mode); + +// Calculates a VAD decision for the |audio_frame|. For valid sampling rates +// frame lengths, see the description of WebRtcVad_ValidRatesAndFrameLengths(). +// +// - handle [i/o] : VAD Instance. Needs to be initialized by +// WebRtcVad_Init() before call. +// - fs [i] : Sampling frequency (Hz): 8000, 16000, or 32000 +// - audio_frame [i] : Audio frame buffer. +// - frame_length [i] : Length of audio frame buffer in number of samples. +// +// returns : 1 - (Active Voice), +// 0 - (Non-active Voice), +// -1 - (Error) +int WebRtcVad_Process(VadInst* handle, + int fs, + const int16_t* audio_frame, + size_t frame_length); + +// Checks for valid combinations of |rate| and |frame_length|. We support 10, +// 20 and 30 ms frames and the rates 8000, 16000 and 32000 Hz. +// +// - rate [i] : Sampling frequency (Hz). +// - frame_length [i] : Speech frame buffer length in number of samples. +// +// returns : 0 - (valid combination), -1 - (invalid combination) +int WebRtcVad_ValidRateAndFrameLength(int rate, size_t frame_length); + +#ifdef __cplusplus +} +#endif + +#endif // COMMON_AUDIO_VAD_INCLUDE_WEBRTC_VAD_H_ // NOLINT diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_core.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_core.c new file mode 100644 index 000000000..eb336f9b7 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_core.c @@ -0,0 +1,685 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "webrtc/common_audio/vad/vad_core.h" + +#include "webrtc/rtc_base/sanitizer.h" +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" +#include "webrtc/common_audio/vad/vad_filterbank.h" +#include "webrtc/common_audio/vad/vad_gmm.h" +#include "webrtc/common_audio/vad/vad_sp.h" + +// Spectrum Weighting +static const int16_t kSpectrumWeight[kNumChannels] = { 6, 8, 10, 12, 14, 16 }; +static const int16_t kNoiseUpdateConst = 655; // Q15 +static const int16_t kSpeechUpdateConst = 6554; // Q15 +static const int16_t kBackEta = 154; // Q8 +// Minimum difference between the two models, Q5 +static const int16_t kMinimumDifference[kNumChannels] = { + 544, 544, 576, 576, 576, 576 }; +// Upper limit of mean value for speech model, Q7 +static const int16_t kMaximumSpeech[kNumChannels] = { + 11392, 11392, 11520, 11520, 11520, 11520 }; +// Minimum value for mean value +static const int16_t kMinimumMean[kNumGaussians] = { 640, 768 }; +// Upper limit of mean value for noise model, Q7 +static const int16_t kMaximumNoise[kNumChannels] = { + 9216, 9088, 8960, 8832, 8704, 8576 }; +// Start values for the Gaussian models, Q7 +// Weights for the two Gaussians for the six channels (noise) +static const int16_t kNoiseDataWeights[kTableSize] = { + 34, 62, 72, 66, 53, 25, 94, 66, 56, 62, 75, 103 }; +// Weights for the two Gaussians for the six channels (speech) +static const int16_t kSpeechDataWeights[kTableSize] = { + 48, 82, 45, 87, 50, 47, 80, 46, 83, 41, 78, 81 }; +// Means for the two Gaussians for the six channels (noise) +static const int16_t kNoiseDataMeans[kTableSize] = { + 6738, 4892, 7065, 6715, 6771, 3369, 7646, 3863, 7820, 7266, 5020, 4362 }; +// Means for the two Gaussians for the six channels (speech) +static const int16_t kSpeechDataMeans[kTableSize] = { + 8306, 10085, 10078, 11823, 11843, 6309, 9473, 9571, 10879, 7581, 8180, 7483 +}; +// Stds for the two Gaussians for the six channels (noise) +static const int16_t kNoiseDataStds[kTableSize] = { + 378, 1064, 493, 582, 688, 593, 474, 697, 475, 688, 421, 455 }; +// Stds for the two Gaussians for the six channels (speech) +static const int16_t kSpeechDataStds[kTableSize] = { + 555, 505, 567, 524, 585, 1231, 509, 828, 492, 1540, 1079, 850 }; + +// Constants used in GmmProbability(). +// +// Maximum number of counted speech (VAD = 1) frames in a row. +static const int16_t kMaxSpeechFrames = 6; +// Minimum standard deviation for both speech and noise. +static const int16_t kMinStd = 384; + +// Constants in WebRtcVad_InitCore(). +// Default aggressiveness mode. +static const short kDefaultMode = 0; +static const int kInitCheck = 42; + +// Constants used in WebRtcVad_set_mode_core(). +// +// Thresholds for different frame lengths (10 ms, 20 ms and 30 ms). +// +// Mode 0, Quality. +static const int16_t kOverHangMax1Q[3] = { 8, 4, 3 }; +static const int16_t kOverHangMax2Q[3] = { 14, 7, 5 }; +static const int16_t kLocalThresholdQ[3] = { 24, 21, 24 }; +static const int16_t kGlobalThresholdQ[3] = { 57, 48, 57 }; +// Mode 1, Low bitrate. +static const int16_t kOverHangMax1LBR[3] = { 8, 4, 3 }; +static const int16_t kOverHangMax2LBR[3] = { 14, 7, 5 }; +static const int16_t kLocalThresholdLBR[3] = { 37, 32, 37 }; +static const int16_t kGlobalThresholdLBR[3] = { 100, 80, 100 }; +// Mode 2, Aggressive. +static const int16_t kOverHangMax1AGG[3] = { 6, 3, 2 }; +static const int16_t kOverHangMax2AGG[3] = { 9, 5, 3 }; +static const int16_t kLocalThresholdAGG[3] = { 82, 78, 82 }; +static const int16_t kGlobalThresholdAGG[3] = { 285, 260, 285 }; +// Mode 3, Very aggressive. +static const int16_t kOverHangMax1VAG[3] = { 6, 3, 2 }; +static const int16_t kOverHangMax2VAG[3] = { 9, 5, 3 }; +static const int16_t kLocalThresholdVAG[3] = { 94, 94, 94 }; +static const int16_t kGlobalThresholdVAG[3] = { 1100, 1050, 1100 }; + +// Calculates the weighted average w.r.t. number of Gaussians. The |data| are +// updated with an |offset| before averaging. +// +// - data [i/o] : Data to average. +// - offset [i] : An offset added to |data|. +// - weights [i] : Weights used for averaging. +// +// returns : The weighted average. +static int32_t WeightedAverage(int16_t* data, int16_t offset, + const int16_t* weights) { + int k; + int32_t weighted_average = 0; + + for (k = 0; k < kNumGaussians; k++) { + data[k * kNumChannels] += offset; + weighted_average += data[k * kNumChannels] * weights[k * kNumChannels]; + } + return weighted_average; +} + +// An s16 x s32 -> s32 multiplication that's allowed to overflow. (It's still +// undefined behavior, so not a good idea; this just makes UBSan ignore the +// violation, so that our old code can continue to do what it's always been +// doing.) +static inline int32_t RTC_NO_SANITIZE("signed-integer-overflow") + OverflowingMulS16ByS32ToS32(int16_t a, int32_t b) { + return a * b; +} + +// Calculates the probabilities for both speech and background noise using +// Gaussian Mixture Models (GMM). A hypothesis-test is performed to decide which +// type of signal is most probable. +// +// - self [i/o] : Pointer to VAD instance +// - features [i] : Feature vector of length |kNumChannels| +// = log10(energy in frequency band) +// - total_power [i] : Total power in audio frame. +// - frame_length [i] : Number of input samples +// +// - returns : the VAD decision (0 - noise, 1 - speech). +static int16_t GmmProbability(VadInstT* self, int16_t* features, + int16_t total_power, size_t frame_length) { + int channel, k; + int16_t feature_minimum; + int16_t h0, h1; + int16_t log_likelihood_ratio; + int16_t vadflag = 0; + int16_t shifts_h0, shifts_h1; + int16_t tmp_s16, tmp1_s16, tmp2_s16; + int16_t diff; + int gaussian; + int16_t nmk, nmk2, nmk3, smk, smk2, nsk, ssk; + int16_t delt, ndelt; + int16_t maxspe, maxmu; + int16_t deltaN[kTableSize], deltaS[kTableSize]; + int16_t ngprvec[kTableSize] = { 0 }; // Conditional probability = 0. + int16_t sgprvec[kTableSize] = { 0 }; // Conditional probability = 0. + int32_t h0_test, h1_test; + int32_t tmp1_s32, tmp2_s32; + int32_t sum_log_likelihood_ratios = 0; + int32_t noise_global_mean, speech_global_mean; + int32_t noise_probability[kNumGaussians], speech_probability[kNumGaussians]; + int16_t overhead1, overhead2, individualTest, totalTest; + + // Set various thresholds based on frame lengths (80, 160 or 240 samples). + if (frame_length == 80) { + overhead1 = self->over_hang_max_1[0]; + overhead2 = self->over_hang_max_2[0]; + individualTest = self->individual[0]; + totalTest = self->total[0]; + } else if (frame_length == 160) { + overhead1 = self->over_hang_max_1[1]; + overhead2 = self->over_hang_max_2[1]; + individualTest = self->individual[1]; + totalTest = self->total[1]; + } else { + overhead1 = self->over_hang_max_1[2]; + overhead2 = self->over_hang_max_2[2]; + individualTest = self->individual[2]; + totalTest = self->total[2]; + } + + if (total_power > kMinEnergy) { + // The signal power of current frame is large enough for processing. The + // processing consists of two parts: + // 1) Calculating the likelihood of speech and thereby a VAD decision. + // 2) Updating the underlying model, w.r.t., the decision made. + + // The detection scheme is an LRT with hypothesis + // H0: Noise + // H1: Speech + // + // We combine a global LRT with local tests, for each frequency sub-band, + // here defined as |channel|. + for (channel = 0; channel < kNumChannels; channel++) { + // For each channel we model the probability with a GMM consisting of + // |kNumGaussians|, with different means and standard deviations depending + // on H0 or H1. + h0_test = 0; + h1_test = 0; + for (k = 0; k < kNumGaussians; k++) { + gaussian = channel + k * kNumChannels; + // Probability under H0, that is, probability of frame being noise. + // Value given in Q27 = Q7 * Q20. + tmp1_s32 = WebRtcVad_GaussianProbability(features[channel], + self->noise_means[gaussian], + self->noise_stds[gaussian], + &deltaN[gaussian]); + noise_probability[k] = kNoiseDataWeights[gaussian] * tmp1_s32; + h0_test += noise_probability[k]; // Q27 + + // Probability under H1, that is, probability of frame being speech. + // Value given in Q27 = Q7 * Q20. + tmp1_s32 = WebRtcVad_GaussianProbability(features[channel], + self->speech_means[gaussian], + self->speech_stds[gaussian], + &deltaS[gaussian]); + speech_probability[k] = kSpeechDataWeights[gaussian] * tmp1_s32; + h1_test += speech_probability[k]; // Q27 + } + + // Calculate the log likelihood ratio: log2(Pr{X|H1} / Pr{X|H1}). + // Approximation: + // log2(Pr{X|H1} / Pr{X|H1}) = log2(Pr{X|H1}*2^Q) - log2(Pr{X|H1}*2^Q) + // = log2(h1_test) - log2(h0_test) + // = log2(2^(31-shifts_h1)*(1+b1)) + // - log2(2^(31-shifts_h0)*(1+b0)) + // = shifts_h0 - shifts_h1 + // + log2(1+b1) - log2(1+b0) + // ~= shifts_h0 - shifts_h1 + // + // Note that b0 and b1 are values less than 1, hence, 0 <= log2(1+b0) < 1. + // Further, b0 and b1 are independent and on the average the two terms + // cancel. + shifts_h0 = WebRtcSpl_NormW32(h0_test); + shifts_h1 = WebRtcSpl_NormW32(h1_test); + if (h0_test == 0) { + shifts_h0 = 31; + } + if (h1_test == 0) { + shifts_h1 = 31; + } + log_likelihood_ratio = shifts_h0 - shifts_h1; + + // Update |sum_log_likelihood_ratios| with spectrum weighting. This is + // used for the global VAD decision. + sum_log_likelihood_ratios += + (int32_t) (log_likelihood_ratio * kSpectrumWeight[channel]); + + // Local VAD decision. + if ((log_likelihood_ratio * 4) > individualTest) { + vadflag = 1; + } + + // TODO(bjornv): The conditional probabilities below are applied on the + // hard coded number of Gaussians set to two. Find a way to generalize. + // Calculate local noise probabilities used later when updating the GMM. + h0 = (int16_t) (h0_test >> 12); // Q15 + if (h0 > 0) { + // High probability of noise. Assign conditional probabilities for each + // Gaussian in the GMM. + tmp1_s32 = (noise_probability[0] & 0xFFFFF000) << 2; // Q29 + ngprvec[channel] = (int16_t) WebRtcSpl_DivW32W16(tmp1_s32, h0); // Q14 + ngprvec[channel + kNumChannels] = 16384 - ngprvec[channel]; + } else { + // Low noise probability. Assign conditional probability 1 to the first + // Gaussian and 0 to the rest (which is already set at initialization). + ngprvec[channel] = 16384; + } + + // Calculate local speech probabilities used later when updating the GMM. + h1 = (int16_t) (h1_test >> 12); // Q15 + if (h1 > 0) { + // High probability of speech. Assign conditional probabilities for each + // Gaussian in the GMM. Otherwise use the initialized values, i.e., 0. + tmp1_s32 = (speech_probability[0] & 0xFFFFF000) << 2; // Q29 + sgprvec[channel] = (int16_t) WebRtcSpl_DivW32W16(tmp1_s32, h1); // Q14 + sgprvec[channel + kNumChannels] = 16384 - sgprvec[channel]; + } + } + + // Make a global VAD decision. + vadflag |= (sum_log_likelihood_ratios >= totalTest); + + // Update the model parameters. + maxspe = 12800; + for (channel = 0; channel < kNumChannels; channel++) { + + // Get minimum value in past which is used for long term correction in Q4. + feature_minimum = WebRtcVad_FindMinimum(self, features[channel], channel); + + // Compute the "global" mean, that is the sum of the two means weighted. + noise_global_mean = WeightedAverage(&self->noise_means[channel], 0, + &kNoiseDataWeights[channel]); + tmp1_s16 = (int16_t) (noise_global_mean >> 6); // Q8 + + for (k = 0; k < kNumGaussians; k++) { + gaussian = channel + k * kNumChannels; + + nmk = self->noise_means[gaussian]; + smk = self->speech_means[gaussian]; + nsk = self->noise_stds[gaussian]; + ssk = self->speech_stds[gaussian]; + + // Update noise mean vector if the frame consists of noise only. + nmk2 = nmk; + if (!vadflag) { + // deltaN = (x-mu)/sigma^2 + // ngprvec[k] = |noise_probability[k]| / + // (|noise_probability[0]| + |noise_probability[1]|) + + // (Q14 * Q11 >> 11) = Q14. + delt = (int16_t)((ngprvec[gaussian] * deltaN[gaussian]) >> 11); + // Q7 + (Q14 * Q15 >> 22) = Q7. + nmk2 = nmk + (int16_t)((delt * kNoiseUpdateConst) >> 22); + } + + // Long term correction of the noise mean. + // Q8 - Q8 = Q8. + ndelt = (feature_minimum << 4) - tmp1_s16; + // Q7 + (Q8 * Q8) >> 9 = Q7. + nmk3 = nmk2 + (int16_t)((ndelt * kBackEta) >> 9); + + // Control that the noise mean does not drift to much. + tmp_s16 = (int16_t) ((k + 5) << 7); + if (nmk3 < tmp_s16) { + nmk3 = tmp_s16; + } + tmp_s16 = (int16_t) ((72 + k - channel) << 7); + if (nmk3 > tmp_s16) { + nmk3 = tmp_s16; + } + self->noise_means[gaussian] = nmk3; + + if (vadflag) { + // Update speech mean vector: + // |deltaS| = (x-mu)/sigma^2 + // sgprvec[k] = |speech_probability[k]| / + // (|speech_probability[0]| + |speech_probability[1]|) + + // (Q14 * Q11) >> 11 = Q14. + delt = (int16_t)((sgprvec[gaussian] * deltaS[gaussian]) >> 11); + // Q14 * Q15 >> 21 = Q8. + tmp_s16 = (int16_t)((delt * kSpeechUpdateConst) >> 21); + // Q7 + (Q8 >> 1) = Q7. With rounding. + smk2 = smk + ((tmp_s16 + 1) >> 1); + + // Control that the speech mean does not drift to much. + maxmu = maxspe + 640; + if (smk2 < kMinimumMean[k]) { + smk2 = kMinimumMean[k]; + } + if (smk2 > maxmu) { + smk2 = maxmu; + } + self->speech_means[gaussian] = smk2; // Q7. + + // (Q7 >> 3) = Q4. With rounding. + tmp_s16 = ((smk + 4) >> 3); + + tmp_s16 = features[channel] - tmp_s16; // Q4 + // (Q11 * Q4 >> 3) = Q12. + tmp1_s32 = (deltaS[gaussian] * tmp_s16) >> 3; + tmp2_s32 = tmp1_s32 - 4096; + tmp_s16 = sgprvec[gaussian] >> 2; + // (Q14 >> 2) * Q12 = Q24. + tmp1_s32 = tmp_s16 * tmp2_s32; + + tmp2_s32 = tmp1_s32 >> 4; // Q20 + + // 0.1 * Q20 / Q7 = Q13. + if (tmp2_s32 > 0) { + tmp_s16 = (int16_t) WebRtcSpl_DivW32W16(tmp2_s32, ssk * 10); + } else { + tmp_s16 = (int16_t) WebRtcSpl_DivW32W16(-tmp2_s32, ssk * 10); + tmp_s16 = -tmp_s16; + } + // Divide by 4 giving an update factor of 0.025 (= 0.1 / 4). + // Note that division by 4 equals shift by 2, hence, + // (Q13 >> 8) = (Q13 >> 6) / 4 = Q7. + tmp_s16 += 128; // Rounding. + ssk += (tmp_s16 >> 8); + if (ssk < kMinStd) { + ssk = kMinStd; + } + self->speech_stds[gaussian] = ssk; + } else { + // Update GMM variance vectors. + // deltaN * (features[channel] - nmk) - 1 + // Q4 - (Q7 >> 3) = Q4. + tmp_s16 = features[channel] - (nmk >> 3); + // (Q11 * Q4 >> 3) = Q12. + tmp1_s32 = (deltaN[gaussian] * tmp_s16) >> 3; + tmp1_s32 -= 4096; + + // (Q14 >> 2) * Q12 = Q24. + tmp_s16 = (ngprvec[gaussian] + 2) >> 2; + tmp2_s32 = OverflowingMulS16ByS32ToS32(tmp_s16, tmp1_s32); + // Q20 * approx 0.001 (2^-10=0.0009766), hence, + // (Q24 >> 14) = (Q24 >> 4) / 2^10 = Q20. + tmp1_s32 = tmp2_s32 >> 14; + + // Q20 / Q7 = Q13. + if (tmp1_s32 > 0) { + tmp_s16 = (int16_t) WebRtcSpl_DivW32W16(tmp1_s32, nsk); + } else { + tmp_s16 = (int16_t) WebRtcSpl_DivW32W16(-tmp1_s32, nsk); + tmp_s16 = -tmp_s16; + } + tmp_s16 += 32; // Rounding + nsk += tmp_s16 >> 6; // Q13 >> 6 = Q7. + if (nsk < kMinStd) { + nsk = kMinStd; + } + self->noise_stds[gaussian] = nsk; + } + } + + // Separate models if they are too close. + // |noise_global_mean| in Q14 (= Q7 * Q7). + noise_global_mean = WeightedAverage(&self->noise_means[channel], 0, + &kNoiseDataWeights[channel]); + + // |speech_global_mean| in Q14 (= Q7 * Q7). + speech_global_mean = WeightedAverage(&self->speech_means[channel], 0, + &kSpeechDataWeights[channel]); + + // |diff| = "global" speech mean - "global" noise mean. + // (Q14 >> 9) - (Q14 >> 9) = Q5. + diff = (int16_t) (speech_global_mean >> 9) - + (int16_t) (noise_global_mean >> 9); + if (diff < kMinimumDifference[channel]) { + tmp_s16 = kMinimumDifference[channel] - diff; + + // |tmp1_s16| = ~0.8 * (kMinimumDifference - diff) in Q7. + // |tmp2_s16| = ~0.2 * (kMinimumDifference - diff) in Q7. + tmp1_s16 = (int16_t)((13 * tmp_s16) >> 2); + tmp2_s16 = (int16_t)((3 * tmp_s16) >> 2); + + // Move Gaussian means for speech model by |tmp1_s16| and update + // |speech_global_mean|. Note that |self->speech_means[channel]| is + // changed after the call. + speech_global_mean = WeightedAverage(&self->speech_means[channel], + tmp1_s16, + &kSpeechDataWeights[channel]); + + // Move Gaussian means for noise model by -|tmp2_s16| and update + // |noise_global_mean|. Note that |self->noise_means[channel]| is + // changed after the call. + noise_global_mean = WeightedAverage(&self->noise_means[channel], + -tmp2_s16, + &kNoiseDataWeights[channel]); + } + + // Control that the speech & noise means do not drift to much. + maxspe = kMaximumSpeech[channel]; + tmp2_s16 = (int16_t) (speech_global_mean >> 7); + if (tmp2_s16 > maxspe) { + // Upper limit of speech model. + tmp2_s16 -= maxspe; + + for (k = 0; k < kNumGaussians; k++) { + self->speech_means[channel + k * kNumChannels] -= tmp2_s16; + } + } + + tmp2_s16 = (int16_t) (noise_global_mean >> 7); + if (tmp2_s16 > kMaximumNoise[channel]) { + tmp2_s16 -= kMaximumNoise[channel]; + + for (k = 0; k < kNumGaussians; k++) { + self->noise_means[channel + k * kNumChannels] -= tmp2_s16; + } + } + } + self->frame_counter++; + } + + // Smooth with respect to transition hysteresis. + if (!vadflag) { + if (self->over_hang > 0) { + vadflag = 2 + self->over_hang; + self->over_hang--; + } + self->num_of_speech = 0; + } else { + self->num_of_speech++; + if (self->num_of_speech > kMaxSpeechFrames) { + self->num_of_speech = kMaxSpeechFrames; + self->over_hang = overhead2; + } else { + self->over_hang = overhead1; + } + } + return vadflag; +} + +// Initialize the VAD. Set aggressiveness mode to default value. +int WebRtcVad_InitCore(VadInstT* self) { + int i; + + if (self == NULL) { + return -1; + } + + // Initialization of general struct variables. + self->vad = 1; // Speech active (=1). + self->frame_counter = 0; + self->over_hang = 0; + self->num_of_speech = 0; + + // Initialization of downsampling filter state. + memset(self->downsampling_filter_states, 0, + sizeof(self->downsampling_filter_states)); + + // Initialization of 48 to 8 kHz downsampling. + WebRtcSpl_ResetResample48khzTo8khz(&self->state_48_to_8); + + // Read initial PDF parameters. + for (i = 0; i < kTableSize; i++) { + self->noise_means[i] = kNoiseDataMeans[i]; + self->speech_means[i] = kSpeechDataMeans[i]; + self->noise_stds[i] = kNoiseDataStds[i]; + self->speech_stds[i] = kSpeechDataStds[i]; + } + + // Initialize Index and Minimum value vectors. + for (i = 0; i < 16 * kNumChannels; i++) { + self->low_value_vector[i] = 10000; + self->index_vector[i] = 0; + } + + // Initialize splitting filter states. + memset(self->upper_state, 0, sizeof(self->upper_state)); + memset(self->lower_state, 0, sizeof(self->lower_state)); + + // Initialize high pass filter states. + memset(self->hp_filter_state, 0, sizeof(self->hp_filter_state)); + + // Initialize mean value memory, for WebRtcVad_FindMinimum(). + for (i = 0; i < kNumChannels; i++) { + self->mean_value[i] = 1600; + } + + // Set aggressiveness mode to default (=|kDefaultMode|). + if (WebRtcVad_set_mode_core(self, kDefaultMode) != 0) { + return -1; + } + + self->init_flag = kInitCheck; + + return 0; +} + +// Set aggressiveness mode +int WebRtcVad_set_mode_core(VadInstT* self, int mode) { + int return_value = 0; + + switch (mode) { + case 0: + // Quality mode. + memcpy(self->over_hang_max_1, kOverHangMax1Q, + sizeof(self->over_hang_max_1)); + memcpy(self->over_hang_max_2, kOverHangMax2Q, + sizeof(self->over_hang_max_2)); + memcpy(self->individual, kLocalThresholdQ, + sizeof(self->individual)); + memcpy(self->total, kGlobalThresholdQ, + sizeof(self->total)); + break; + case 1: + // Low bitrate mode. + memcpy(self->over_hang_max_1, kOverHangMax1LBR, + sizeof(self->over_hang_max_1)); + memcpy(self->over_hang_max_2, kOverHangMax2LBR, + sizeof(self->over_hang_max_2)); + memcpy(self->individual, kLocalThresholdLBR, + sizeof(self->individual)); + memcpy(self->total, kGlobalThresholdLBR, + sizeof(self->total)); + break; + case 2: + // Aggressive mode. + memcpy(self->over_hang_max_1, kOverHangMax1AGG, + sizeof(self->over_hang_max_1)); + memcpy(self->over_hang_max_2, kOverHangMax2AGG, + sizeof(self->over_hang_max_2)); + memcpy(self->individual, kLocalThresholdAGG, + sizeof(self->individual)); + memcpy(self->total, kGlobalThresholdAGG, + sizeof(self->total)); + break; + case 3: + // Very aggressive mode. + memcpy(self->over_hang_max_1, kOverHangMax1VAG, + sizeof(self->over_hang_max_1)); + memcpy(self->over_hang_max_2, kOverHangMax2VAG, + sizeof(self->over_hang_max_2)); + memcpy(self->individual, kLocalThresholdVAG, + sizeof(self->individual)); + memcpy(self->total, kGlobalThresholdVAG, + sizeof(self->total)); + break; + default: + return_value = -1; + break; + } + + return return_value; +} + +// Calculate VAD decision by first extracting feature values and then calculate +// probability for both speech and background noise. + +int WebRtcVad_CalcVad48khz(VadInstT* inst, const int16_t* speech_frame, + size_t frame_length) { + int vad; + size_t i; + int16_t speech_nb[240]; // 30 ms in 8 kHz. + // |tmp_mem| is a temporary memory used by resample function, length is + // frame length in 10 ms (480 samples) + 256 extra. + int32_t tmp_mem[480 + 256] = { 0 }; + const size_t kFrameLen10ms48khz = 480; + const size_t kFrameLen10ms8khz = 80; + size_t num_10ms_frames = frame_length / kFrameLen10ms48khz; + + for (i = 0; i < num_10ms_frames; i++) { + WebRtcSpl_Resample48khzTo8khz(speech_frame, + &speech_nb[i * kFrameLen10ms8khz], + &inst->state_48_to_8, + tmp_mem); + } + + // Do VAD on an 8 kHz signal + vad = WebRtcVad_CalcVad8khz(inst, speech_nb, frame_length / 6); + + return vad; +} + +int WebRtcVad_CalcVad32khz(VadInstT* inst, const int16_t* speech_frame, + size_t frame_length) +{ + size_t len; + int vad; + int16_t speechWB[480]; // Downsampled speech frame: 960 samples (30ms in SWB) + int16_t speechNB[240]; // Downsampled speech frame: 480 samples (30ms in WB) + + + // Downsample signal 32->16->8 before doing VAD + WebRtcVad_Downsampling(speech_frame, speechWB, &(inst->downsampling_filter_states[2]), + frame_length); + len = frame_length / 2; + + WebRtcVad_Downsampling(speechWB, speechNB, inst->downsampling_filter_states, len); + len /= 2; + + // Do VAD on an 8 kHz signal + vad = WebRtcVad_CalcVad8khz(inst, speechNB, len); + + return vad; +} + +int WebRtcVad_CalcVad16khz(VadInstT* inst, const int16_t* speech_frame, + size_t frame_length) +{ + size_t len; + int vad; + int16_t speechNB[240]; // Downsampled speech frame: 480 samples (30ms in WB) + + // Wideband: Downsample signal before doing VAD + WebRtcVad_Downsampling(speech_frame, speechNB, inst->downsampling_filter_states, + frame_length); + + len = frame_length / 2; + vad = WebRtcVad_CalcVad8khz(inst, speechNB, len); + + return vad; +} + +int WebRtcVad_CalcVad8khz(VadInstT* inst, const int16_t* speech_frame, + size_t frame_length) +{ + int16_t feature_vector[kNumChannels], total_power; + + // Get power in the bands + total_power = WebRtcVad_CalculateFeatures(inst, speech_frame, frame_length, + feature_vector); + + // Make a VAD + inst->vad = GmmProbability(inst, feature_vector, total_power, frame_length); + + return inst->vad; +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_core.h b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_core.h new file mode 100644 index 000000000..8f0cfc063 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_core.h @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +/* + * This header file includes the descriptions of the core VAD calls. + */ + +#ifndef COMMON_AUDIO_VAD_VAD_CORE_H_ +#define COMMON_AUDIO_VAD_VAD_CORE_H_ + +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" + +enum { kNumChannels = 6 }; // Number of frequency bands (named channels). +enum { kNumGaussians = 2 }; // Number of Gaussians per channel in the GMM. +enum { kTableSize = kNumChannels * kNumGaussians }; +enum { kMinEnergy = 10 }; // Minimum energy required to trigger audio signal. + +typedef struct VadInstT_ { + int vad; + int32_t downsampling_filter_states[4]; + WebRtcSpl_State48khzTo8khz state_48_to_8; + int16_t noise_means[kTableSize]; + int16_t speech_means[kTableSize]; + int16_t noise_stds[kTableSize]; + int16_t speech_stds[kTableSize]; + // TODO(bjornv): Change to |frame_count|. + int32_t frame_counter; + int16_t over_hang; // Over Hang + int16_t num_of_speech; + // TODO(bjornv): Change to |age_vector|. + int16_t index_vector[16 * kNumChannels]; + int16_t low_value_vector[16 * kNumChannels]; + // TODO(bjornv): Change to |median|. + int16_t mean_value[kNumChannels]; + int16_t upper_state[5]; + int16_t lower_state[5]; + int16_t hp_filter_state[4]; + int16_t over_hang_max_1[3]; + int16_t over_hang_max_2[3]; + int16_t individual[3]; + int16_t total[3]; + + int init_flag; +} VadInstT; + +// Initializes the core VAD component. The default aggressiveness mode is +// controlled by |kDefaultMode| in vad_core.c. +// +// - self [i/o] : Instance that should be initialized +// +// returns : 0 (OK), -1 (null pointer in or if the default mode can't be +// set) +int WebRtcVad_InitCore(VadInstT* self); + +/**************************************************************************** + * WebRtcVad_set_mode_core(...) + * + * This function changes the VAD settings + * + * Input: + * - inst : VAD instance + * - mode : Aggressiveness degree + * 0 (High quality) - 3 (Highly aggressive) + * + * Output: + * - inst : Changed instance + * + * Return value : 0 - Ok + * -1 - Error + */ + +int WebRtcVad_set_mode_core(VadInstT* self, int mode); + +/**************************************************************************** + * WebRtcVad_CalcVad48khz(...) + * WebRtcVad_CalcVad32khz(...) + * WebRtcVad_CalcVad16khz(...) + * WebRtcVad_CalcVad8khz(...) + * + * Calculate probability for active speech and make VAD decision. + * + * Input: + * - inst : Instance that should be initialized + * - speech_frame : Input speech frame + * - frame_length : Number of input samples + * + * Output: + * - inst : Updated filter states etc. + * + * Return value : VAD decision + * 0 - No active speech + * 1-6 - Active speech + */ +int WebRtcVad_CalcVad48khz(VadInstT* inst, + const int16_t* speech_frame, + size_t frame_length); +int WebRtcVad_CalcVad32khz(VadInstT* inst, + const int16_t* speech_frame, + size_t frame_length); +int WebRtcVad_CalcVad16khz(VadInstT* inst, + const int16_t* speech_frame, + size_t frame_length); +int WebRtcVad_CalcVad8khz(VadInstT* inst, + const int16_t* speech_frame, + size_t frame_length); + +#endif // COMMON_AUDIO_VAD_VAD_CORE_H_ diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_filterbank.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_filterbank.c new file mode 100644 index 000000000..7d25e2abe --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_filterbank.c @@ -0,0 +1,329 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "webrtc/common_audio/vad/vad_filterbank.h" + +#include "webrtc/rtc_base/checks.h" +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" + +// Constants used in LogOfEnergy(). +static const int16_t kLogConst = 24660; // 160*log10(2) in Q9. +static const int16_t kLogEnergyIntPart = 14336; // 14 in Q10 + +// Coefficients used by HighPassFilter, Q14. +static const int16_t kHpZeroCoefs[3] = { 6631, -13262, 6631 }; +static const int16_t kHpPoleCoefs[3] = { 16384, -7756, 5620 }; + +// Allpass filter coefficients, upper and lower, in Q15. +// Upper: 0.64, Lower: 0.17 +static const int16_t kAllPassCoefsQ15[2] = { 20972, 5571 }; + +// Adjustment for division with two in SplitFilter. +static const int16_t kOffsetVector[6] = { 368, 368, 272, 176, 176, 176 }; + +// High pass filtering, with a cut-off frequency at 80 Hz, if the |data_in| is +// sampled at 500 Hz. +// +// - data_in [i] : Input audio data sampled at 500 Hz. +// - data_length [i] : Length of input and output data. +// - filter_state [i/o] : State of the filter. +// - data_out [o] : Output audio data in the frequency interval +// 80 - 250 Hz. +static void HighPassFilter(const int16_t* data_in, size_t data_length, + int16_t* filter_state, int16_t* data_out) { + size_t i; + const int16_t* in_ptr = data_in; + int16_t* out_ptr = data_out; + int32_t tmp32 = 0; + + + // The sum of the absolute values of the impulse response: + // The zero/pole-filter has a max amplification of a single sample of: 1.4546 + // Impulse response: 0.4047 -0.6179 -0.0266 0.1993 0.1035 -0.0194 + // The all-zero section has a max amplification of a single sample of: 1.6189 + // Impulse response: 0.4047 -0.8094 0.4047 0 0 0 + // The all-pole section has a max amplification of a single sample of: 1.9931 + // Impulse response: 1.0000 0.4734 -0.1189 -0.2187 -0.0627 0.04532 + + for (i = 0; i < data_length; i++) { + // All-zero section (filter coefficients in Q14). + tmp32 = kHpZeroCoefs[0] * *in_ptr; + tmp32 += kHpZeroCoefs[1] * filter_state[0]; + tmp32 += kHpZeroCoefs[2] * filter_state[1]; + filter_state[1] = filter_state[0]; + filter_state[0] = *in_ptr++; + + // All-pole section (filter coefficients in Q14). + tmp32 -= kHpPoleCoefs[1] * filter_state[2]; + tmp32 -= kHpPoleCoefs[2] * filter_state[3]; + filter_state[3] = filter_state[2]; + filter_state[2] = (int16_t) (tmp32 >> 14); + *out_ptr++ = filter_state[2]; + } +} + +// All pass filtering of |data_in|, used before splitting the signal into two +// frequency bands (low pass vs high pass). +// Note that |data_in| and |data_out| can NOT correspond to the same address. +// +// - data_in [i] : Input audio signal given in Q0. +// - data_length [i] : Length of input and output data. +// - filter_coefficient [i] : Given in Q15. +// - filter_state [i/o] : State of the filter given in Q(-1). +// - data_out [o] : Output audio signal given in Q(-1). +static void AllPassFilter(const int16_t* data_in, size_t data_length, + int16_t filter_coefficient, int16_t* filter_state, + int16_t* data_out) { + // The filter can only cause overflow (in the w16 output variable) + // if more than 4 consecutive input numbers are of maximum value and + // has the the same sign as the impulse responses first taps. + // First 6 taps of the impulse response: + // 0.6399 0.5905 -0.3779 0.2418 -0.1547 0.0990 + + size_t i; + int16_t tmp16 = 0; + int32_t tmp32 = 0; + int32_t state32 = ((int32_t) (*filter_state) * (1 << 16)); // Q15 + + for (i = 0; i < data_length; i++) { + tmp32 = state32 + filter_coefficient * *data_in; + tmp16 = (int16_t) (tmp32 >> 16); // Q(-1) + *data_out++ = tmp16; + state32 = (*data_in * (1 << 14)) - filter_coefficient * tmp16; // Q14 + state32 *= 2; // Q15. + data_in += 2; + } + + *filter_state = (int16_t) (state32 >> 16); // Q(-1) +} + +// Splits |data_in| into |hp_data_out| and |lp_data_out| corresponding to +// an upper (high pass) part and a lower (low pass) part respectively. +// +// - data_in [i] : Input audio data to be split into two frequency bands. +// - data_length [i] : Length of |data_in|. +// - upper_state [i/o] : State of the upper filter, given in Q(-1). +// - lower_state [i/o] : State of the lower filter, given in Q(-1). +// - hp_data_out [o] : Output audio data of the upper half of the spectrum. +// The length is |data_length| / 2. +// - lp_data_out [o] : Output audio data of the lower half of the spectrum. +// The length is |data_length| / 2. +static void SplitFilter(const int16_t* data_in, size_t data_length, + int16_t* upper_state, int16_t* lower_state, + int16_t* hp_data_out, int16_t* lp_data_out) { + size_t i; + size_t half_length = data_length >> 1; // Downsampling by 2. + int16_t tmp_out; + + // All-pass filtering upper branch. + AllPassFilter(&data_in[0], half_length, kAllPassCoefsQ15[0], upper_state, + hp_data_out); + + // All-pass filtering lower branch. + AllPassFilter(&data_in[1], half_length, kAllPassCoefsQ15[1], lower_state, + lp_data_out); + + // Make LP and HP signals. + for (i = 0; i < half_length; i++) { + tmp_out = *hp_data_out; + *hp_data_out++ -= *lp_data_out; + *lp_data_out++ += tmp_out; + } +} + +// Calculates the energy of |data_in| in dB, and also updates an overall +// |total_energy| if necessary. +// +// - data_in [i] : Input audio data for energy calculation. +// - data_length [i] : Length of input data. +// - offset [i] : Offset value added to |log_energy|. +// - total_energy [i/o] : An external energy updated with the energy of +// |data_in|. +// NOTE: |total_energy| is only updated if +// |total_energy| <= |kMinEnergy|. +// - log_energy [o] : 10 * log10("energy of |data_in|") given in Q4. +static void LogOfEnergy(const int16_t* data_in, size_t data_length, + int16_t offset, int16_t* total_energy, + int16_t* log_energy) { + // |tot_rshifts| accumulates the number of right shifts performed on |energy|. + int tot_rshifts = 0; + // The |energy| will be normalized to 15 bits. We use unsigned integer because + // we eventually will mask out the fractional part. + uint32_t energy = 0; + + RTC_DCHECK(data_in); + RTC_DCHECK_GT(data_length, 0); + + energy = (uint32_t) WebRtcSpl_Energy((int16_t*) data_in, data_length, + &tot_rshifts); + + if (energy != 0) { + // By construction, normalizing to 15 bits is equivalent with 17 leading + // zeros of an unsigned 32 bit value. + int normalizing_rshifts = 17 - WebRtcSpl_NormU32(energy); + // In a 15 bit representation the leading bit is 2^14. log2(2^14) in Q10 is + // (14 << 10), which is what we initialize |log2_energy| with. For a more + // detailed derivations, see below. + int16_t log2_energy = kLogEnergyIntPart; + + tot_rshifts += normalizing_rshifts; + // Normalize |energy| to 15 bits. + // |tot_rshifts| is now the total number of right shifts performed on + // |energy| after normalization. This means that |energy| is in + // Q(-tot_rshifts). + if (normalizing_rshifts < 0) { + energy <<= -normalizing_rshifts; + } else { + energy >>= normalizing_rshifts; + } + + // Calculate the energy of |data_in| in dB, in Q4. + // + // 10 * log10("true energy") in Q4 = 2^4 * 10 * log10("true energy") = + // 160 * log10(|energy| * 2^|tot_rshifts|) = + // 160 * log10(2) * log2(|energy| * 2^|tot_rshifts|) = + // 160 * log10(2) * (log2(|energy|) + log2(2^|tot_rshifts|)) = + // (160 * log10(2)) * (log2(|energy|) + |tot_rshifts|) = + // |kLogConst| * (|log2_energy| + |tot_rshifts|) + // + // We know by construction that |energy| is normalized to 15 bits. Hence, + // |energy| = 2^14 + frac_Q15, where frac_Q15 is a fractional part in Q15. + // Further, we'd like |log2_energy| in Q10 + // log2(|energy|) in Q10 = 2^10 * log2(2^14 + frac_Q15) = + // 2^10 * log2(2^14 * (1 + frac_Q15 * 2^-14)) = + // 2^10 * (14 + log2(1 + frac_Q15 * 2^-14)) ~= + // (14 << 10) + 2^10 * (frac_Q15 * 2^-14) = + // (14 << 10) + (frac_Q15 * 2^-4) = (14 << 10) + (frac_Q15 >> 4) + // + // Note that frac_Q15 = (|energy| & 0x00003FFF) + + // Calculate and add the fractional part to |log2_energy|. + log2_energy += (int16_t) ((energy & 0x00003FFF) >> 4); + + // |kLogConst| is in Q9, |log2_energy| in Q10 and |tot_rshifts| in Q0. + // Note that we in our derivation above have accounted for an output in Q4. + *log_energy = (int16_t)(((kLogConst * log2_energy) >> 19) + + ((tot_rshifts * kLogConst) >> 9)); + + if (*log_energy < 0) { + *log_energy = 0; + } + } else { + *log_energy = offset; + return; + } + + *log_energy += offset; + + // Update the approximate |total_energy| with the energy of |data_in|, if + // |total_energy| has not exceeded |kMinEnergy|. |total_energy| is used as an + // energy indicator in WebRtcVad_GmmProbability() in vad_core.c. + if (*total_energy <= kMinEnergy) { + if (tot_rshifts >= 0) { + // We know by construction that the |energy| > |kMinEnergy| in Q0, so add + // an arbitrary value such that |total_energy| exceeds |kMinEnergy|. + *total_energy += kMinEnergy + 1; + } else { + // By construction |energy| is represented by 15 bits, hence any number of + // right shifted |energy| will fit in an int16_t. In addition, adding the + // value to |total_energy| is wrap around safe as long as + // |kMinEnergy| < 8192. + *total_energy += (int16_t) (energy >> -tot_rshifts); // Q0. + } + } +} + +int16_t WebRtcVad_CalculateFeatures(VadInstT* self, const int16_t* data_in, + size_t data_length, int16_t* features) { + int16_t total_energy = 0; + // We expect |data_length| to be 80, 160 or 240 samples, which corresponds to + // 10, 20 or 30 ms in 8 kHz. Therefore, the intermediate downsampled data will + // have at most 120 samples after the first split and at most 60 samples after + // the second split. + int16_t hp_120[120], lp_120[120]; + int16_t hp_60[60], lp_60[60]; + const size_t half_data_length = data_length >> 1; + size_t length = half_data_length; // |data_length| / 2, corresponds to + // bandwidth = 2000 Hz after downsampling. + + // Initialize variables for the first SplitFilter(). + int frequency_band = 0; + const int16_t* in_ptr = data_in; // [0 - 4000] Hz. + int16_t* hp_out_ptr = hp_120; // [2000 - 4000] Hz. + int16_t* lp_out_ptr = lp_120; // [0 - 2000] Hz. + + RTC_DCHECK_LE(data_length, 240); + RTC_DCHECK_LT(4, kNumChannels - 1); // Checking maximum |frequency_band|. + + // Split at 2000 Hz and downsample. + SplitFilter(in_ptr, data_length, &self->upper_state[frequency_band], + &self->lower_state[frequency_band], hp_out_ptr, lp_out_ptr); + + // For the upper band (2000 Hz - 4000 Hz) split at 3000 Hz and downsample. + frequency_band = 1; + in_ptr = hp_120; // [2000 - 4000] Hz. + hp_out_ptr = hp_60; // [3000 - 4000] Hz. + lp_out_ptr = lp_60; // [2000 - 3000] Hz. + SplitFilter(in_ptr, length, &self->upper_state[frequency_band], + &self->lower_state[frequency_band], hp_out_ptr, lp_out_ptr); + + // Energy in 3000 Hz - 4000 Hz. + length >>= 1; // |data_length| / 4 <=> bandwidth = 1000 Hz. + + LogOfEnergy(hp_60, length, kOffsetVector[5], &total_energy, &features[5]); + + // Energy in 2000 Hz - 3000 Hz. + LogOfEnergy(lp_60, length, kOffsetVector[4], &total_energy, &features[4]); + + // For the lower band (0 Hz - 2000 Hz) split at 1000 Hz and downsample. + frequency_band = 2; + in_ptr = lp_120; // [0 - 2000] Hz. + hp_out_ptr = hp_60; // [1000 - 2000] Hz. + lp_out_ptr = lp_60; // [0 - 1000] Hz. + length = half_data_length; // |data_length| / 2 <=> bandwidth = 2000 Hz. + SplitFilter(in_ptr, length, &self->upper_state[frequency_band], + &self->lower_state[frequency_band], hp_out_ptr, lp_out_ptr); + + // Energy in 1000 Hz - 2000 Hz. + length >>= 1; // |data_length| / 4 <=> bandwidth = 1000 Hz. + LogOfEnergy(hp_60, length, kOffsetVector[3], &total_energy, &features[3]); + + // For the lower band (0 Hz - 1000 Hz) split at 500 Hz and downsample. + frequency_band = 3; + in_ptr = lp_60; // [0 - 1000] Hz. + hp_out_ptr = hp_120; // [500 - 1000] Hz. + lp_out_ptr = lp_120; // [0 - 500] Hz. + SplitFilter(in_ptr, length, &self->upper_state[frequency_band], + &self->lower_state[frequency_band], hp_out_ptr, lp_out_ptr); + + // Energy in 500 Hz - 1000 Hz. + length >>= 1; // |data_length| / 8 <=> bandwidth = 500 Hz. + LogOfEnergy(hp_120, length, kOffsetVector[2], &total_energy, &features[2]); + + // For the lower band (0 Hz - 500 Hz) split at 250 Hz and downsample. + frequency_band = 4; + in_ptr = lp_120; // [0 - 500] Hz. + hp_out_ptr = hp_60; // [250 - 500] Hz. + lp_out_ptr = lp_60; // [0 - 250] Hz. + SplitFilter(in_ptr, length, &self->upper_state[frequency_band], + &self->lower_state[frequency_band], hp_out_ptr, lp_out_ptr); + + // Energy in 250 Hz - 500 Hz. + length >>= 1; // |data_length| / 16 <=> bandwidth = 250 Hz. + LogOfEnergy(hp_60, length, kOffsetVector[1], &total_energy, &features[1]); + + // Remove 0 Hz - 80 Hz, by high pass filtering the lower band. + HighPassFilter(lp_60, length, self->hp_filter_state, hp_120); + + // Energy in 80 Hz - 250 Hz. + LogOfEnergy(hp_120, length, kOffsetVector[0], &total_energy, &features[0]); + + return total_energy; +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_filterbank.h b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_filterbank.h new file mode 100644 index 000000000..b40050519 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_filterbank.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +/* + * This file includes feature calculating functionality used in vad_core.c. + */ + +#ifndef COMMON_AUDIO_VAD_VAD_FILTERBANK_H_ +#define COMMON_AUDIO_VAD_VAD_FILTERBANK_H_ + +#include "webrtc/common_audio/vad/vad_core.h" + +// Takes |data_length| samples of |data_in| and calculates the logarithm of the +// energy of each of the |kNumChannels| = 6 frequency bands used by the VAD: +// 80 Hz - 250 Hz +// 250 Hz - 500 Hz +// 500 Hz - 1000 Hz +// 1000 Hz - 2000 Hz +// 2000 Hz - 3000 Hz +// 3000 Hz - 4000 Hz +// +// The values are given in Q4 and written to |features|. Further, an approximate +// overall energy is returned. The return value is used in +// WebRtcVad_GmmProbability() as a signal indicator, hence it is arbitrary above +// the threshold |kMinEnergy|. +// +// - self [i/o] : State information of the VAD. +// - data_in [i] : Input audio data, for feature extraction. +// - data_length [i] : Audio data size, in number of samples. +// - features [o] : 10 * log10(energy in each frequency band), Q4. +// - returns : Total energy of the signal (NOTE! This value is not +// exact. It is only used in a comparison.) +int16_t WebRtcVad_CalculateFeatures(VadInstT* self, + const int16_t* data_in, + size_t data_length, + int16_t* features); + +#endif // COMMON_AUDIO_VAD_VAD_FILTERBANK_H_ diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_gmm.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_gmm.c new file mode 100644 index 000000000..176270cc5 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_gmm.c @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "webrtc/common_audio/vad/vad_gmm.h" + +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" + +static const int32_t kCompVar = 22005; +static const int16_t kLog2Exp = 5909; // log2(exp(1)) in Q12. + +// For a normal distribution, the probability of |input| is calculated and +// returned (in Q20). The formula for normal distributed probability is +// +// 1 / s * exp(-(x - m)^2 / (2 * s^2)) +// +// where the parameters are given in the following Q domains: +// m = |mean| (Q7) +// s = |std| (Q7) +// x = |input| (Q4) +// in addition to the probability we output |delta| (in Q11) used when updating +// the noise/speech model. +int32_t WebRtcVad_GaussianProbability(int16_t input, + int16_t mean, + int16_t std, + int16_t* delta) { + int16_t tmp16, inv_std, inv_std2, exp_value = 0; + int32_t tmp32; + + // Calculate |inv_std| = 1 / s, in Q10. + // 131072 = 1 in Q17, and (|std| >> 1) is for rounding instead of truncation. + // Q-domain: Q17 / Q7 = Q10. + tmp32 = (int32_t) 131072 + (int32_t) (std >> 1); + inv_std = (int16_t) WebRtcSpl_DivW32W16(tmp32, std); + + // Calculate |inv_std2| = 1 / s^2, in Q14. + tmp16 = (inv_std >> 2); // Q10 -> Q8. + // Q-domain: (Q8 * Q8) >> 2 = Q14. + inv_std2 = (int16_t)((tmp16 * tmp16) >> 2); + // TODO(bjornv): Investigate if changing to + // inv_std2 = (int16_t)((inv_std * inv_std) >> 6); + // gives better accuracy. + + tmp16 = (input << 3); // Q4 -> Q7 + tmp16 = tmp16 - mean; // Q7 - Q7 = Q7 + + // To be used later, when updating noise/speech model. + // |delta| = (x - m) / s^2, in Q11. + // Q-domain: (Q14 * Q7) >> 10 = Q11. + *delta = (int16_t)((inv_std2 * tmp16) >> 10); + + // Calculate the exponent |tmp32| = (x - m)^2 / (2 * s^2), in Q10. Replacing + // division by two with one shift. + // Q-domain: (Q11 * Q7) >> 8 = Q10. + tmp32 = (*delta * tmp16) >> 9; + + // If the exponent is small enough to give a non-zero probability we calculate + // |exp_value| ~= exp(-(x - m)^2 / (2 * s^2)) + // ~= exp2(-log2(exp(1)) * |tmp32|). + if (tmp32 < kCompVar) { + // Calculate |tmp16| = log2(exp(1)) * |tmp32|, in Q10. + // Q-domain: (Q12 * Q10) >> 12 = Q10. + tmp16 = (int16_t)((kLog2Exp * tmp32) >> 12); + tmp16 = -tmp16; + exp_value = (0x0400 | (tmp16 & 0x03FF)); + tmp16 ^= 0xFFFF; + tmp16 >>= 10; + tmp16 += 1; + // Get |exp_value| = exp(-|tmp32|) in Q10. + exp_value >>= tmp16; + } + + // Calculate and return (1 / s) * exp(-(x - m)^2 / (2 * s^2)), in Q20. + // Q-domain: Q10 * Q10 = Q20. + return inv_std * exp_value; +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_gmm.h b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_gmm.h new file mode 100644 index 000000000..6b2d11ba3 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_gmm.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +// Gaussian probability calculations internally used in vad_core.c. + +#ifndef COMMON_AUDIO_VAD_VAD_GMM_H_ +#define COMMON_AUDIO_VAD_VAD_GMM_H_ + +#include + +// Calculates the probability for |input|, given that |input| comes from a +// normal distribution with mean and standard deviation (|mean|, |std|). +// +// Inputs: +// - input : input sample in Q4. +// - mean : mean input in the statistical model, Q7. +// - std : standard deviation, Q7. +// +// Output: +// +// - delta : input used when updating the model, Q11. +// |delta| = (|input| - |mean|) / |std|^2. +// +// Return: +// (probability for |input|) = +// 1 / |std| * exp(-(|input| - |mean|)^2 / (2 * |std|^2)); +int32_t WebRtcVad_GaussianProbability(int16_t input, + int16_t mean, + int16_t std, + int16_t* delta); + +#endif // COMMON_AUDIO_VAD_VAD_GMM_H_ diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_sp.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_sp.c new file mode 100644 index 000000000..97d5d6ce4 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_sp.c @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "webrtc/common_audio/vad/vad_sp.h" + +#include "webrtc/rtc_base/checks.h" +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" +#include "webrtc/common_audio/vad/vad_core.h" + +// Allpass filter coefficients, upper and lower, in Q13. +// Upper: 0.64, Lower: 0.17. +static const int16_t kAllPassCoefsQ13[2] = { 5243, 1392 }; // Q13. +static const int16_t kSmoothingDown = 6553; // 0.2 in Q15. +static const int16_t kSmoothingUp = 32439; // 0.99 in Q15. + +// TODO(bjornv): Move this function to vad_filterbank.c. +// Downsampling filter based on splitting filter and allpass functions. +void WebRtcVad_Downsampling(const int16_t* signal_in, + int16_t* signal_out, + int32_t* filter_state, + size_t in_length) { + int16_t tmp16_1 = 0, tmp16_2 = 0; + int32_t tmp32_1 = filter_state[0]; + int32_t tmp32_2 = filter_state[1]; + size_t n = 0; + // Downsampling by 2 gives half length. + size_t half_length = (in_length >> 1); + + // Filter coefficients in Q13, filter state in Q0. + for (n = 0; n < half_length; n++) { + // All-pass filtering upper branch. + tmp16_1 = (int16_t) ((tmp32_1 >> 1) + + ((kAllPassCoefsQ13[0] * *signal_in) >> 14)); + *signal_out = tmp16_1; + tmp32_1 = (int32_t)(*signal_in++) - ((kAllPassCoefsQ13[0] * tmp16_1) >> 12); + + // All-pass filtering lower branch. + tmp16_2 = (int16_t) ((tmp32_2 >> 1) + + ((kAllPassCoefsQ13[1] * *signal_in) >> 14)); + *signal_out++ += tmp16_2; + tmp32_2 = (int32_t)(*signal_in++) - ((kAllPassCoefsQ13[1] * tmp16_2) >> 12); + } + // Store the filter states. + filter_state[0] = tmp32_1; + filter_state[1] = tmp32_2; +} + +// Inserts |feature_value| into |low_value_vector|, if it is one of the 16 +// smallest values the last 100 frames. Then calculates and returns the median +// of the five smallest values. +int16_t WebRtcVad_FindMinimum(VadInstT* self, + int16_t feature_value, + int channel) { + int i = 0, j = 0; + int position = -1; + // Offset to beginning of the 16 minimum values in memory. + const int offset = (channel << 4); + int16_t current_median = 1600; + int16_t alpha = 0; + int32_t tmp32 = 0; + // Pointer to memory for the 16 minimum values and the age of each value of + // the |channel|. + int16_t* age = &self->index_vector[offset]; + int16_t* smallest_values = &self->low_value_vector[offset]; + + RTC_DCHECK_LT(channel, kNumChannels); + + // Each value in |smallest_values| is getting 1 loop older. Update |age|, and + // remove old values. + for (i = 0; i < 16; i++) { + if (age[i] != 100) { + age[i]++; + } else { + // Too old value. Remove from memory and shift larger values downwards. + for (j = i; j < 15; j++) { + smallest_values[j] = smallest_values[j + 1]; + age[j] = age[j + 1]; + } + age[15] = 101; + smallest_values[15] = 10000; + } + } + + // Check if |feature_value| is smaller than any of the values in + // |smallest_values|. If so, find the |position| where to insert the new value + // (|feature_value|). + if (feature_value < smallest_values[7]) { + if (feature_value < smallest_values[3]) { + if (feature_value < smallest_values[1]) { + if (feature_value < smallest_values[0]) { + position = 0; + } else { + position = 1; + } + } else if (feature_value < smallest_values[2]) { + position = 2; + } else { + position = 3; + } + } else if (feature_value < smallest_values[5]) { + if (feature_value < smallest_values[4]) { + position = 4; + } else { + position = 5; + } + } else if (feature_value < smallest_values[6]) { + position = 6; + } else { + position = 7; + } + } else if (feature_value < smallest_values[15]) { + if (feature_value < smallest_values[11]) { + if (feature_value < smallest_values[9]) { + if (feature_value < smallest_values[8]) { + position = 8; + } else { + position = 9; + } + } else if (feature_value < smallest_values[10]) { + position = 10; + } else { + position = 11; + } + } else if (feature_value < smallest_values[13]) { + if (feature_value < smallest_values[12]) { + position = 12; + } else { + position = 13; + } + } else if (feature_value < smallest_values[14]) { + position = 14; + } else { + position = 15; + } + } + + // If we have detected a new small value, insert it at the correct position + // and shift larger values up. + if (position > -1) { + for (i = 15; i > position; i--) { + smallest_values[i] = smallest_values[i - 1]; + age[i] = age[i - 1]; + } + smallest_values[position] = feature_value; + age[position] = 1; + } + + // Get |current_median|. + if (self->frame_counter > 2) { + current_median = smallest_values[2]; + } else if (self->frame_counter > 0) { + current_median = smallest_values[0]; + } + + // Smooth the median value. + if (self->frame_counter > 0) { + if (current_median < self->mean_value[channel]) { + alpha = kSmoothingDown; // 0.2 in Q15. + } else { + alpha = kSmoothingUp; // 0.99 in Q15. + } + } + tmp32 = (alpha + 1) * self->mean_value[channel]; + tmp32 += (WEBRTC_SPL_WORD16_MAX - alpha) * current_median; + tmp32 += 16384; + self->mean_value[channel] = (int16_t) (tmp32 >> 15); + + return self->mean_value[channel]; +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_sp.h b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_sp.h new file mode 100644 index 000000000..002fcd8d6 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/vad_sp.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +// This file includes specific signal processing tools used in vad_core.c. + +#ifndef COMMON_AUDIO_VAD_VAD_SP_H_ +#define COMMON_AUDIO_VAD_VAD_SP_H_ + +#include "webrtc/common_audio/vad/vad_core.h" + +// Downsamples the signal by a factor 2, eg. 32->16 or 16->8. +// +// Inputs: +// - signal_in : Input signal. +// - in_length : Length of input signal in samples. +// +// Input & Output: +// - filter_state : Current filter states of the two all-pass filters. The +// |filter_state| is updated after all samples have been +// processed. +// +// Output: +// - signal_out : Downsampled signal (of length |in_length| / 2). +void WebRtcVad_Downsampling(const int16_t* signal_in, + int16_t* signal_out, + int32_t* filter_state, + size_t in_length); + +// Updates and returns the smoothed feature minimum. As minimum we use the +// median of the five smallest feature values in a 100 frames long window. +// As long as |handle->frame_counter| is zero, that is, we haven't received any +// "valid" data, FindMinimum() outputs the default value of 1600. +// +// Inputs: +// - feature_value : New feature value to update with. +// - channel : Channel number. +// +// Input & Output: +// - handle : State information of the VAD. +// +// Returns: +// : Smoothed minimum value for a moving window. +int16_t WebRtcVad_FindMinimum(VadInstT* handle, + int16_t feature_value, + int channel); + +#endif // COMMON_AUDIO_VAD_VAD_SP_H_ diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/webrtc_vad.c b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/webrtc_vad.c new file mode 100644 index 000000000..4315b0995 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/common_audio/vad/webrtc_vad.c @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "webrtc/common_audio/vad/include/webrtc_vad.h" + +#include +#include + +#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" +#include "webrtc/common_audio/vad/vad_core.h" + +static const int kInitCheck = 42; +static const int kValidRates[] = { 8000, 16000, 32000, 48000 }; +static const size_t kRatesSize = sizeof(kValidRates) / sizeof(*kValidRates); +static const int kMaxFrameLengthMs = 30; + +VadInst* WebRtcVad_Create() { + VadInstT* self = (VadInstT*)malloc(sizeof(VadInstT)); + + WebRtcSpl_Init(); + self->init_flag = 0; + + return (VadInst*)self; +} + +void WebRtcVad_Free(VadInst* handle) { + free(handle); +} + +// TODO(bjornv): Move WebRtcVad_InitCore() code here. +int WebRtcVad_Init(VadInst* handle) { + // Initialize the core VAD component. + return WebRtcVad_InitCore((VadInstT*) handle); +} + +// TODO(bjornv): Move WebRtcVad_set_mode_core() code here. +int WebRtcVad_set_mode(VadInst* handle, int mode) { + VadInstT* self = (VadInstT*) handle; + + if (handle == NULL) { + return -1; + } + if (self->init_flag != kInitCheck) { + return -1; + } + + return WebRtcVad_set_mode_core(self, mode); +} + +int WebRtcVad_Process(VadInst* handle, int fs, const int16_t* audio_frame, + size_t frame_length) { + int vad = -1; + VadInstT* self = (VadInstT*) handle; + + if (handle == NULL) { + return -1; + } + + if (self->init_flag != kInitCheck) { + return -1; + } + if (audio_frame == NULL) { + return -1; + } + if (WebRtcVad_ValidRateAndFrameLength(fs, frame_length) != 0) { + return -1; + } + + if (fs == 48000) { + vad = WebRtcVad_CalcVad48khz(self, audio_frame, frame_length); + } else if (fs == 32000) { + vad = WebRtcVad_CalcVad32khz(self, audio_frame, frame_length); + } else if (fs == 16000) { + vad = WebRtcVad_CalcVad16khz(self, audio_frame, frame_length); + } else if (fs == 8000) { + vad = WebRtcVad_CalcVad8khz(self, audio_frame, frame_length); + } + + if (vad > 0) { + vad = 1; + } + return vad; +} + +int WebRtcVad_ValidRateAndFrameLength(int rate, size_t frame_length) { + int return_value = -1; + size_t i; + int valid_length_ms; + size_t valid_length; + + // We only allow 10, 20 or 30 ms frames. Loop through valid frame rates and + // see if we have a matching pair. + for (i = 0; i < kRatesSize; i++) { + if (kValidRates[i] == rate) { + for (valid_length_ms = 10; valid_length_ms <= kMaxFrameLengthMs; + valid_length_ms += 10) { + valid_length = (size_t)(kValidRates[i] / 1000 * valid_length_ms); + if (frame_length == valid_length) { + return_value = 0; + break; + } + } + break; + } + } + + return return_value; +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/checks.cc b/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/checks.cc new file mode 100644 index 000000000..03baf3156 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/checks.cc @@ -0,0 +1,167 @@ +/* + * Copyright 2006 The WebRTC Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +// Most of this was borrowed (with minor modifications) from V8's and Chromium's +// src/base/logging.cc. + +#include +#include +#include + +#if defined(WEBRTC_ANDROID) +#define RTC_LOG_TAG_ANDROID "rtc" +#include // NOLINT +#endif + +#if defined(WEBRTC_WIN) +#include +#endif + +#if defined(WEBRTC_WIN) +#define LAST_SYSTEM_ERROR (::GetLastError()) +#elif defined(__native_client__) && __native_client__ +#define LAST_SYSTEM_ERROR (0) +#elif defined(WEBRTC_POSIX) +#include +#define LAST_SYSTEM_ERROR (errno) +#endif // WEBRTC_WIN + +#include "webrtc/rtc_base/checks.h" + +namespace { +#if defined(__GNUC__) +__attribute__((__format__(__printf__, 2, 3))) +#endif + void AppendFormat(std::string* s, const char* fmt, ...) { + va_list args, copy; + va_start(args, fmt); + va_copy(copy, args); + const int predicted_length = std::vsnprintf(nullptr, 0, fmt, copy); + va_end(copy); + + if (predicted_length > 0) { + const size_t size = s->size(); + s->resize(size + predicted_length); + // Pass "+ 1" to vsnprintf to include space for the '\0'. + std::vsnprintf(&((*s)[size]), predicted_length + 1, fmt, args); + } + va_end(args); +} +} + +namespace rtc { +namespace webrtc_checks_impl { + +// Reads one argument from args, appends it to s and advances fmt. +// Returns true iff an argument was sucessfully parsed. +bool ParseArg(va_list* args, const CheckArgType** fmt, std::string* s) { + if (**fmt == CheckArgType::kEnd) + return false; + + switch (**fmt) { + case CheckArgType::kInt: + AppendFormat(s, "%d", va_arg(*args, int)); + break; + case CheckArgType::kLong: + AppendFormat(s, "%ld", va_arg(*args, long)); + break; + case CheckArgType::kLongLong: + AppendFormat(s, "%lld", va_arg(*args, long long)); + break; + case CheckArgType::kUInt: + AppendFormat(s, "%u", va_arg(*args, unsigned)); + break; + case CheckArgType::kULong: + AppendFormat(s, "%lu", va_arg(*args, unsigned long)); + break; + case CheckArgType::kULongLong: + AppendFormat(s, "%llu", va_arg(*args, unsigned long long)); + break; + case CheckArgType::kDouble: + AppendFormat(s, "%g", va_arg(*args, double)); + break; + case CheckArgType::kLongDouble: + AppendFormat(s, "%Lg", va_arg(*args, long double)); + break; + case CheckArgType::kCharP: + s->append(va_arg(*args, const char*)); + break; + case CheckArgType::kStdString: + s->append(*va_arg(*args, const std::string*)); + break; + case CheckArgType::kVoidP: + AppendFormat(s, "%p", va_arg(*args, const void*)); + break; + default: + s->append("[Invalid CheckArgType]"); + return false; + } + (*fmt)++; + return true; +} + +RTC_NORETURN void FatalLog(const char* file, + int line, + const char* message, + const CheckArgType* fmt, + ...) { + va_list args; + va_start(args, fmt); + + std::string s; + AppendFormat(&s, + "\n\n" + "#\n" + "# Fatal error in: %s, line %d\n" + "# last system error: %u\n" + "# Check failed: %s", + file, line, LAST_SYSTEM_ERROR, message); + + if (*fmt == CheckArgType::kCheckOp) { + // This log message was generated by RTC_CHECK_OP, so we have to complete + // the error message using the operands that have been passed as the first + // two arguments. + fmt++; + + std::string s1, s2; + if (ParseArg(&args, &fmt, &s1) && ParseArg(&args, &fmt, &s2)) + AppendFormat(&s, " (%s vs. %s)\n# ", s1.c_str(), s2.c_str()); + } else { + s.append("\n# "); + } + + // Append all the user-supplied arguments to the message. + while (ParseArg(&args, &fmt, &s)) + ; + + va_end(args); + + const char* output = s.c_str(); + +#if defined(WEBRTC_ANDROID) + __android_log_print(ANDROID_LOG_ERROR, RTC_LOG_TAG_ANDROID, "%s\n", output); +#endif + + fflush(stdout); + fprintf(stderr, "%s", output); + fflush(stderr); + abort(); +} + +} // namespace webrtc_checks_impl +} // namespace rtc + +// Function to call from the C version of the RTC_CHECK and RTC_DCHECK macros. +RTC_NORETURN void rtc_FatalMessage(const char* file, int line, + const char* msg) { + static constexpr rtc::webrtc_checks_impl::CheckArgType t[] = { + rtc::webrtc_checks_impl::CheckArgType::kEnd}; + FatalLog(file, line, msg, t); +} diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/checks.h b/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/checks.h new file mode 100644 index 000000000..3dbef18f5 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/checks.h @@ -0,0 +1,400 @@ +/* + * Copyright 2006 The WebRTC Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef RTC_BASE_CHECKS_H_ +#define RTC_BASE_CHECKS_H_ + +// If you for some reson need to know if DCHECKs are on, test the value of +// RTC_DCHECK_IS_ON. (Test its value, not if it's defined; it'll always be +// defined, to either a true or a false value.) +#if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON) +#define RTC_DCHECK_IS_ON 1 +#else +#define RTC_DCHECK_IS_ON 0 +#endif + +// Annotate a function that will not return control flow to the caller. +#if defined(_MSC_VER) +#define RTC_NORETURN __declspec(noreturn) +#elif defined(__GNUC__) +#define RTC_NORETURN __attribute__ ((__noreturn__)) +#else +#define RTC_NORETURN +#endif + +#ifdef __cplusplus +extern "C" { +#endif +RTC_NORETURN void rtc_FatalMessage(const char* file, int line, const char* msg); +#ifdef __cplusplus +} // extern "C" +#endif + +#ifdef __cplusplus +// C++ version. + +#include + +#include "webrtc/rtc_base/numerics/safe_compare.h" +#include "webrtc/rtc_base/system/inline.h" + +// The macros here print a message to stderr and abort under various +// conditions. All will accept additional stream messages. For example: +// RTC_DCHECK_EQ(foo, bar) << "I'm printed when foo != bar."; +// +// - RTC_CHECK(x) is an assertion that x is always true, and that if it isn't, +// it's better to terminate the process than to continue. During development, +// the reason that it's better to terminate might simply be that the error +// handling code isn't in place yet; in production, the reason might be that +// the author of the code truly believes that x will always be true, but that +// she recognizes that if she is wrong, abrupt and unpleasant process +// termination is still better than carrying on with the assumption violated. +// +// RTC_CHECK always evaluates its argument, so it's OK for x to have side +// effects. +// +// - RTC_DCHECK(x) is the same as RTC_CHECK(x)---an assertion that x is always +// true---except that x will only be evaluated in debug builds; in production +// builds, x is simply assumed to be true. This is useful if evaluating x is +// expensive and the expected cost of failing to detect the violated +// assumption is acceptable. You should not handle cases where a production +// build fails to spot a violated condition, even those that would result in +// crashes. If the code needs to cope with the error, make it cope, but don't +// call RTC_DCHECK; if the condition really can't occur, but you'd sleep +// better at night knowing that the process will suicide instead of carrying +// on in case you were wrong, use RTC_CHECK instead of RTC_DCHECK. +// +// RTC_DCHECK only evaluates its argument in debug builds, so if x has visible +// side effects, you need to write e.g. +// bool w = x; RTC_DCHECK(w); +// +// - RTC_CHECK_EQ, _NE, _GT, ..., and RTC_DCHECK_EQ, _NE, _GT, ... are +// specialized variants of RTC_CHECK and RTC_DCHECK that print prettier +// messages if the condition doesn't hold. Prefer them to raw RTC_CHECK and +// RTC_DCHECK. +// +// - FATAL() aborts unconditionally. +// +// TODO(ajm): Ideally, checks.h would be combined with logging.h, but +// consolidation with system_wrappers/logging.h should happen first. + +namespace rtc { +namespace webrtc_checks_impl { +enum class CheckArgType : int8_t { + kEnd = 0, + kInt, + kLong, + kLongLong, + kUInt, + kULong, + kULongLong, + kDouble, + kLongDouble, + kCharP, + kStdString, + kVoidP, + + // kCheckOp doesn't represent an argument type. Instead, it is sent as the + // first argument from RTC_CHECK_OP to make FatalLog use the next two + // arguments to build the special CHECK_OP error message + // (the "a == b (1 vs. 2)" bit). + kCheckOp, +}; + +RTC_NORETURN void FatalLog(const char* file, + int line, + const char* message, + const CheckArgType* fmt, + ...); + +// Wrapper for log arguments. Only ever make values of this type with the +// MakeVal() functions. +template +struct Val { + static constexpr CheckArgType Type() { return N; } + T GetVal() const { return val; } + T val; +}; + +inline Val MakeVal(int x) { + return {x}; +} +inline Val MakeVal(long x) { + return {x}; +} +inline Val MakeVal(long long x) { + return {x}; +} +inline Val MakeVal(unsigned int x) { + return {x}; +} +inline Val MakeVal(unsigned long x) { + return {x}; +} +inline Val MakeVal( + unsigned long long x) { + return {x}; +} + +inline Val MakeVal(double x) { + return {x}; +} +inline Val MakeVal(long double x) { + return {x}; +} + +inline Val MakeVal(const char* x) { + return {x}; +} +inline Val MakeVal( + const std::string& x) { + return {&x}; +} + +inline Val MakeVal(const void* x) { + return {x}; +} + +// Ephemeral type that represents the result of the logging << operator. +template +class LogStreamer; + +// Base case: Before the first << argument. +template <> +class LogStreamer<> final { + public: + template < + typename U, + typename std::enable_if::value>::type* = nullptr> + RTC_FORCE_INLINE LogStreamer()))> operator<<( + U arg) const { + return LogStreamer()))>(MakeVal(arg), + this); + } + + template < + typename U, + typename std::enable_if::value>::type* = nullptr> + RTC_FORCE_INLINE LogStreamer()))> operator<<( + const U& arg) const { + return LogStreamer()))>(MakeVal(arg), + this); + } + + template + RTC_NORETURN RTC_FORCE_INLINE static void Call(const char* file, + const int line, + const char* message, + const Us&... args) { + static constexpr CheckArgType t[] = {Us::Type()..., CheckArgType::kEnd}; + FatalLog(file, line, message, t, args.GetVal()...); + } + + template + RTC_NORETURN RTC_FORCE_INLINE static void CallCheckOp(const char* file, + const int line, + const char* message, + const Us&... args) { + static constexpr CheckArgType t[] = {CheckArgType::kCheckOp, Us::Type()..., + CheckArgType::kEnd}; + FatalLog(file, line, message, t, args.GetVal()...); + } +}; + +// Inductive case: We've already seen at least one << argument. The most recent +// one had type `T`, and the earlier ones had types `Ts`. +template +class LogStreamer final { + public: + RTC_FORCE_INLINE LogStreamer(T arg, const LogStreamer* prior) + : arg_(arg), prior_(prior) {} + + template < + typename U, + typename std::enable_if::value>::type* = nullptr> + RTC_FORCE_INLINE LogStreamer())), T, Ts...> + operator<<(U arg) const { + return LogStreamer())), T, Ts...>( + MakeVal(arg), this); + } + + template < + typename U, + typename std::enable_if::value>::type* = nullptr> + RTC_FORCE_INLINE LogStreamer())), T, Ts...> + operator<<(const U& arg) const { + return LogStreamer())), T, Ts...>( + MakeVal(arg), this); + } + + template + RTC_NORETURN RTC_FORCE_INLINE void Call(const char* file, + const int line, + const char* message, + const Us&... args) const { + prior_->Call(file, line, message, arg_, args...); + } + + template + RTC_NORETURN RTC_FORCE_INLINE void CallCheckOp(const char* file, + const int line, + const char* message, + const Us&... args) const { + prior_->CallCheckOp(file, line, message, arg_, args...); + } + + private: + // The most recent argument. + T arg_; + + // Earlier arguments. + const LogStreamer* prior_; +}; + +template +class FatalLogCall final { + public: + FatalLogCall(const char* file, int line, const char* message) + : file_(file), line_(line), message_(message) {} + + // This can be any binary operator with precedence lower than <<. + template + RTC_NORETURN RTC_FORCE_INLINE void operator&( + const LogStreamer& streamer) { + isCheckOp ? streamer.CallCheckOp(file_, line_, message_) + : streamer.Call(file_, line_, message_); + } + + private: + const char* file_; + int line_; + const char* message_; +}; +} // namespace webrtc_checks_impl + +// The actual stream used isn't important. We reference |ignored| in the code +// but don't evaluate it; this is to avoid "unused variable" warnings (we do so +// in a particularly convoluted way with an extra ?: because that appears to be +// the simplest construct that keeps Visual Studio from complaining about +// condition being unused). +#define RTC_EAT_STREAM_PARAMETERS(ignored) \ + (true ? true : ((void)(ignored), true)) \ + ? static_cast(0) \ + : rtc::webrtc_checks_impl::FatalLogCall("", 0, "") & \ + rtc::webrtc_checks_impl::LogStreamer<>() + +// Call RTC_EAT_STREAM_PARAMETERS with an argument that fails to compile if +// values of the same types as |a| and |b| can't be compared with the given +// operation, and that would evaluate |a| and |b| if evaluated. +#define RTC_EAT_STREAM_PARAMETERS_OP(op, a, b) \ + RTC_EAT_STREAM_PARAMETERS(((void)rtc::Safe##op(a, b))) + +// RTC_CHECK dies with a fatal error if condition is not true. It is *not* +// controlled by NDEBUG or anything else, so the check will be executed +// regardless of compilation mode. +// +// We make sure RTC_CHECK et al. always evaluates |condition|, as +// doing RTC_CHECK(FunctionWithSideEffect()) is a common idiom. +#define RTC_CHECK(condition) \ + while (!(condition)) \ + rtc::webrtc_checks_impl::FatalLogCall(__FILE__, __LINE__, \ + #condition) & \ + rtc::webrtc_checks_impl::LogStreamer<>() + +// Helper macro for binary operators. +// Don't use this macro directly in your code, use RTC_CHECK_EQ et al below. +#define RTC_CHECK_OP(name, op, val1, val2) \ + while (!rtc::Safe##name((val1), (val2))) \ + rtc::webrtc_checks_impl::FatalLogCall(__FILE__, __LINE__, \ + #val1 " " #op " " #val2) & \ + rtc::webrtc_checks_impl::LogStreamer<>() << (val1) << (val2) + +#define RTC_CHECK_EQ(val1, val2) RTC_CHECK_OP(Eq, ==, val1, val2) +#define RTC_CHECK_NE(val1, val2) RTC_CHECK_OP(Ne, !=, val1, val2) +#define RTC_CHECK_LE(val1, val2) RTC_CHECK_OP(Le, <=, val1, val2) +#define RTC_CHECK_LT(val1, val2) RTC_CHECK_OP(Lt, <, val1, val2) +#define RTC_CHECK_GE(val1, val2) RTC_CHECK_OP(Ge, >=, val1, val2) +#define RTC_CHECK_GT(val1, val2) RTC_CHECK_OP(Gt, >, val1, val2) + +// The RTC_DCHECK macro is equivalent to RTC_CHECK except that it only generates +// code in debug builds. It does reference the condition parameter in all cases, +// though, so callers won't risk getting warnings about unused variables. +#if RTC_DCHECK_IS_ON +#define RTC_DCHECK(condition) RTC_CHECK(condition) +#define RTC_DCHECK_EQ(v1, v2) RTC_CHECK_EQ(v1, v2) +#define RTC_DCHECK_NE(v1, v2) RTC_CHECK_NE(v1, v2) +#define RTC_DCHECK_LE(v1, v2) RTC_CHECK_LE(v1, v2) +#define RTC_DCHECK_LT(v1, v2) RTC_CHECK_LT(v1, v2) +#define RTC_DCHECK_GE(v1, v2) RTC_CHECK_GE(v1, v2) +#define RTC_DCHECK_GT(v1, v2) RTC_CHECK_GT(v1, v2) +#else +#define RTC_DCHECK(condition) RTC_EAT_STREAM_PARAMETERS(condition) +#define RTC_DCHECK_EQ(v1, v2) RTC_EAT_STREAM_PARAMETERS_OP(Eq, v1, v2) +#define RTC_DCHECK_NE(v1, v2) RTC_EAT_STREAM_PARAMETERS_OP(Ne, v1, v2) +#define RTC_DCHECK_LE(v1, v2) RTC_EAT_STREAM_PARAMETERS_OP(Le, v1, v2) +#define RTC_DCHECK_LT(v1, v2) RTC_EAT_STREAM_PARAMETERS_OP(Lt, v1, v2) +#define RTC_DCHECK_GE(v1, v2) RTC_EAT_STREAM_PARAMETERS_OP(Ge, v1, v2) +#define RTC_DCHECK_GT(v1, v2) RTC_EAT_STREAM_PARAMETERS_OP(Gt, v1, v2) +#endif + +#define RTC_UNREACHABLE_CODE_HIT false +#define RTC_NOTREACHED() RTC_DCHECK(RTC_UNREACHABLE_CODE_HIT) + +// TODO(bugs.webrtc.org/8454): Add an RTC_ prefix or rename differently. +#define FATAL() \ + rtc::webrtc_checks_impl::FatalLogCall(__FILE__, __LINE__, \ + "FATAL()") & \ + rtc::webrtc_checks_impl::LogStreamer<>() + +// Performs the integer division a/b and returns the result. CHECKs that the +// remainder is zero. +template +inline T CheckedDivExact(T a, T b) { + RTC_CHECK_EQ(a % b, 0) << a << " is not evenly divisible by " << b; + return a / b; +} + +} // namespace rtc + +#else // __cplusplus not defined +// C version. Lacks many features compared to the C++ version, but usage +// guidelines are the same. + +#define RTC_CHECK(condition) \ + do { \ + if (!(condition)) { \ + rtc_FatalMessage(__FILE__, __LINE__, "CHECK failed: " #condition); \ + } \ + } while (0) + +#define RTC_CHECK_EQ(a, b) RTC_CHECK((a) == (b)) +#define RTC_CHECK_NE(a, b) RTC_CHECK((a) != (b)) +#define RTC_CHECK_LE(a, b) RTC_CHECK((a) <= (b)) +#define RTC_CHECK_LT(a, b) RTC_CHECK((a) < (b)) +#define RTC_CHECK_GE(a, b) RTC_CHECK((a) >= (b)) +#define RTC_CHECK_GT(a, b) RTC_CHECK((a) > (b)) + +#define RTC_DCHECK(condition) \ + do { \ + if (RTC_DCHECK_IS_ON && !(condition)) { \ + rtc_FatalMessage(__FILE__, __LINE__, "DCHECK failed: " #condition); \ + } \ + } while (0) + +#define RTC_DCHECK_EQ(a, b) RTC_DCHECK((a) == (b)) +#define RTC_DCHECK_NE(a, b) RTC_DCHECK((a) != (b)) +#define RTC_DCHECK_LE(a, b) RTC_DCHECK((a) <= (b)) +#define RTC_DCHECK_LT(a, b) RTC_DCHECK((a) < (b)) +#define RTC_DCHECK_GE(a, b) RTC_DCHECK((a) >= (b)) +#define RTC_DCHECK_GT(a, b) RTC_DCHECK((a) > (b)) + +#endif // __cplusplus + +#endif // RTC_BASE_CHECKS_H_ diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/compile_assert_c.h b/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/compile_assert_c.h new file mode 100644 index 000000000..db2e4a811 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/compile_assert_c.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef RTC_BASE_COMPILE_ASSERT_C_H_ +#define RTC_BASE_COMPILE_ASSERT_C_H_ + +// Use this macro to verify at compile time that certain restrictions are met. +// The argument is the boolean expression to evaluate. +// Example: +// RTC_COMPILE_ASSERT(sizeof(foo) < 128); +// Note: In C++, use static_assert instead! +#define RTC_COMPILE_ASSERT(expression) \ + switch (0) { \ + case 0: \ + case expression:; \ + } + +#endif // RTC_BASE_COMPILE_ASSERT_C_H_ diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/numerics/safe_compare.h b/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/numerics/safe_compare.h new file mode 100644 index 000000000..d62eee114 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/numerics/safe_compare.h @@ -0,0 +1,176 @@ +/* + * Copyright 2016 The WebRTC Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +// This file defines six constexpr functions: +// +// rtc::SafeEq // == +// rtc::SafeNe // != +// rtc::SafeLt // < +// rtc::SafeLe // <= +// rtc::SafeGt // > +// rtc::SafeGe // >= +// +// They each accept two arguments of arbitrary types, and in almost all cases, +// they simply call the appropriate comparison operator. However, if both +// arguments are integers, they don't compare them using C++'s quirky rules, +// but instead adhere to the true mathematical definitions. It is as if the +// arguments were first converted to infinite-range signed integers, and then +// compared, although of course nothing expensive like that actually takes +// place. In practice, for signed/signed and unsigned/unsigned comparisons and +// some mixed-signed comparisons with a compile-time constant, the overhead is +// zero; in the remaining cases, it is just a few machine instructions (no +// branches). + +#ifndef RTC_BASE_NUMERICS_SAFE_COMPARE_H_ +#define RTC_BASE_NUMERICS_SAFE_COMPARE_H_ + +#include +#include + +#include +#include + +#include "webrtc/rtc_base/type_traits.h" + +namespace rtc { + +namespace safe_cmp_impl { + +template +struct LargerIntImpl : std::false_type {}; +template <> +struct LargerIntImpl : std::true_type { + using type = int16_t; +}; +template <> +struct LargerIntImpl : std::true_type { + using type = int32_t; +}; +template <> +struct LargerIntImpl : std::true_type { + using type = int64_t; +}; + +// LargerInt::value is true iff there's a signed type that's larger +// than T1 (and no larger than the larger of T2 and int*, for performance +// reasons); and if there is such a type, LargerInt::type is an alias +// for it. +template +struct LargerInt + : LargerIntImpl {}; + +template +constexpr typename std::make_unsigned::type MakeUnsigned(T a) { + return static_cast::type>(a); +} + +// Overload for when both T1 and T2 have the same signedness. +template ::value == + std::is_signed::value>::type* = nullptr> +constexpr bool Cmp(T1 a, T2 b) { + return Op::Op(a, b); +} + +// Overload for signed - unsigned comparison that can be promoted to a bigger +// signed type. +template ::value && + std::is_unsigned::value && + LargerInt::value>::type* = nullptr> +constexpr bool Cmp(T1 a, T2 b) { + return Op::Op(a, static_cast::type>(b)); +} + +// Overload for unsigned - signed comparison that can be promoted to a bigger +// signed type. +template ::value && + std::is_signed::value && + LargerInt::value>::type* = nullptr> +constexpr bool Cmp(T1 a, T2 b) { + return Op::Op(static_cast::type>(a), b); +} + +// Overload for signed - unsigned comparison that can't be promoted to a bigger +// signed type. +template ::value && + std::is_unsigned::value && + !LargerInt::value>::type* = nullptr> +constexpr bool Cmp(T1 a, T2 b) { + return a < 0 ? Op::Op(-1, 0) : Op::Op(safe_cmp_impl::MakeUnsigned(a), b); +} + +// Overload for unsigned - signed comparison that can't be promoted to a bigger +// signed type. +template ::value && + std::is_signed::value && + !LargerInt::value>::type* = nullptr> +constexpr bool Cmp(T1 a, T2 b) { + return b < 0 ? Op::Op(0, -1) : Op::Op(a, safe_cmp_impl::MakeUnsigned(b)); +} + +#define RTC_SAFECMP_MAKE_OP(name, op) \ + struct name { \ + template \ + static constexpr bool Op(T1 a, T2 b) { \ + return a op b; \ + } \ + }; +RTC_SAFECMP_MAKE_OP(EqOp, ==) +RTC_SAFECMP_MAKE_OP(NeOp, !=) +RTC_SAFECMP_MAKE_OP(LtOp, <) +RTC_SAFECMP_MAKE_OP(LeOp, <=) +RTC_SAFECMP_MAKE_OP(GtOp, >) +RTC_SAFECMP_MAKE_OP(GeOp, >=) +#undef RTC_SAFECMP_MAKE_OP + +} // namespace safe_cmp_impl + +#define RTC_SAFECMP_MAKE_FUN(name) \ + template \ + constexpr \ + typename std::enable_if::value && IsIntlike::value, \ + bool>::type Safe##name(T1 a, T2 b) { \ + /* Unary plus here turns enums into real integral types. */ \ + return safe_cmp_impl::Cmp(+a, +b); \ + } \ + template \ + constexpr \ + typename std::enable_if::value || !IsIntlike::value, \ + bool>::type Safe##name(const T1& a, \ + const T2& b) { \ + return safe_cmp_impl::name##Op::Op(a, b); \ + } +RTC_SAFECMP_MAKE_FUN(Eq) +RTC_SAFECMP_MAKE_FUN(Ne) +RTC_SAFECMP_MAKE_FUN(Lt) +RTC_SAFECMP_MAKE_FUN(Le) +RTC_SAFECMP_MAKE_FUN(Gt) +RTC_SAFECMP_MAKE_FUN(Ge) +#undef RTC_SAFECMP_MAKE_FUN + +} // namespace rtc + +#endif // RTC_BASE_NUMERICS_SAFE_COMPARE_H_ diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/sanitizer.h b/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/sanitizer.h new file mode 100644 index 000000000..a9eccfcc9 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/sanitizer.h @@ -0,0 +1,144 @@ +/* + * Copyright 2016 The WebRTC Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef RTC_BASE_SANITIZER_H_ +#define RTC_BASE_SANITIZER_H_ + +#include // For size_t. + +#ifdef __cplusplus +#include +#endif + +#if defined(__has_feature) +#if __has_feature(address_sanitizer) +#define RTC_HAS_ASAN 1 +#endif +#if __has_feature(memory_sanitizer) +#define RTC_HAS_MSAN 1 +#endif +#endif +#ifndef RTC_HAS_ASAN +#define RTC_HAS_ASAN 0 +#endif +#ifndef RTC_HAS_MSAN +#define RTC_HAS_MSAN 0 +#endif + +#if RTC_HAS_ASAN +#include +#endif +#if RTC_HAS_MSAN +#include +#endif + +#ifdef __has_attribute +#if __has_attribute(no_sanitize) +#define RTC_NO_SANITIZE(what) __attribute__((no_sanitize(what))) +#endif +#endif +#ifndef RTC_NO_SANITIZE +#define RTC_NO_SANITIZE(what) +#endif + +// Ask ASan to mark the memory range [ptr, ptr + element_size * num_elements) +// as being unaddressable, so that reads and writes are not allowed. ASan may +// narrow the range to the nearest alignment boundaries. +static inline void rtc_AsanPoison(const volatile void* ptr, + size_t element_size, + size_t num_elements) { +#if RTC_HAS_ASAN + ASAN_POISON_MEMORY_REGION(ptr, element_size * num_elements); +#endif +} + +// Ask ASan to mark the memory range [ptr, ptr + element_size * num_elements) +// as being addressable, so that reads and writes are allowed. ASan may widen +// the range to the nearest alignment boundaries. +static inline void rtc_AsanUnpoison(const volatile void* ptr, + size_t element_size, + size_t num_elements) { +#if RTC_HAS_ASAN + ASAN_UNPOISON_MEMORY_REGION(ptr, element_size * num_elements); +#endif +} + +// Ask MSan to mark the memory range [ptr, ptr + element_size * num_elements) +// as being uninitialized. +static inline void rtc_MsanMarkUninitialized(const volatile void* ptr, + size_t element_size, + size_t num_elements) { +#if RTC_HAS_MSAN + __msan_poison(ptr, element_size * num_elements); +#endif +} + +// Force an MSan check (if any bits in the memory range [ptr, ptr + +// element_size * num_elements) are uninitialized the call will crash with an +// MSan report). +static inline void rtc_MsanCheckInitialized(const volatile void* ptr, + size_t element_size, + size_t num_elements) { +#if RTC_HAS_MSAN + __msan_check_mem_is_initialized(ptr, element_size * num_elements); +#endif +} + +#ifdef __cplusplus + +namespace rtc { +namespace sanitizer_impl { + +template +constexpr bool IsTriviallyCopyable() { + return static_cast(std::is_trivially_copy_constructible::value && + (std::is_trivially_copy_assignable::value || + !std::is_copy_assignable::value) && + std::is_trivially_destructible::value); +} + +} // namespace sanitizer_impl + +template +inline void AsanPoison(const T& mem) { + rtc_AsanPoison(mem.data(), sizeof(mem.data()[0]), mem.size()); +} + +template +inline void AsanUnpoison(const T& mem) { + rtc_AsanUnpoison(mem.data(), sizeof(mem.data()[0]), mem.size()); +} + +template +inline void MsanMarkUninitialized(const T& mem) { + rtc_MsanMarkUninitialized(mem.data(), sizeof(mem.data()[0]), mem.size()); +} + +template +inline T MsanUninitialized(T t) { +#if RTC_HAS_MSAN + // TODO(bugs.webrtc.org/8762): Switch to std::is_trivially_copyable when it + // becomes available in downstream projects. + static_assert(sanitizer_impl::IsTriviallyCopyable(), ""); +#endif + rtc_MsanMarkUninitialized(&t, sizeof(T), 1); + return t; +} + +template +inline void MsanCheckInitialized(const T& mem) { + rtc_MsanCheckInitialized(mem.data(), sizeof(mem.data()[0]), mem.size()); +} + +} // namespace rtc + +#endif // __cplusplus + +#endif // RTC_BASE_SANITIZER_H_ diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/system/arch.h b/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/system/arch.h new file mode 100644 index 000000000..a2a118064 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/system/arch.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2018 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +// This file contains platform-specific typedefs and defines. +// Much of it is derived from Chromium's build/build_config.h. + +#ifndef RTC_BASE_SYSTEM_ARCH_H_ +#define RTC_BASE_SYSTEM_ARCH_H_ + +// Processor architecture detection. For more info on what's defined, see: +// http://msdn.microsoft.com/en-us/library/b0084kay.aspx +// http://www.agner.org/optimize/calling_conventions.pdf +// or with gcc, run: "echo | gcc -E -dM -" +#if defined(_M_X64) || defined(__x86_64__) +#define WEBRTC_ARCH_X86_FAMILY +#define WEBRTC_ARCH_X86_64 +#define WEBRTC_ARCH_64_BITS +#define WEBRTC_ARCH_LITTLE_ENDIAN +#elif defined(__aarch64__) +#define WEBRTC_ARCH_ARM_FAMILY +#define WEBRTC_ARCH_64_BITS +#define WEBRTC_ARCH_LITTLE_ENDIAN +#elif defined(_M_IX86) || defined(__i386__) +#define WEBRTC_ARCH_X86_FAMILY +#define WEBRTC_ARCH_X86 +#define WEBRTC_ARCH_32_BITS +#define WEBRTC_ARCH_LITTLE_ENDIAN +#elif defined(__ARMEL__) +#define WEBRTC_ARCH_ARM_FAMILY +#define WEBRTC_ARCH_32_BITS +#define WEBRTC_ARCH_LITTLE_ENDIAN +#elif defined(__MIPSEL__) +#define WEBRTC_ARCH_MIPS_FAMILY +#if defined(__LP64__) +#define WEBRTC_ARCH_64_BITS +#else +#define WEBRTC_ARCH_32_BITS +#endif +#define WEBRTC_ARCH_LITTLE_ENDIAN +#elif defined(__pnacl__) +#define WEBRTC_ARCH_32_BITS +#define WEBRTC_ARCH_LITTLE_ENDIAN +#else +#error Please add support for your architecture in typedefs.h +#endif + +#if !(defined(WEBRTC_ARCH_LITTLE_ENDIAN) ^ defined(WEBRTC_ARCH_BIG_ENDIAN)) +#error Define either WEBRTC_ARCH_LITTLE_ENDIAN or WEBRTC_ARCH_BIG_ENDIAN +#endif + +#endif // RTC_BASE_SYSTEM_ARCH_H_ diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/system/inline.h b/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/system/inline.h new file mode 100644 index 000000000..f585d34de --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/system/inline.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2018 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef RTC_BASE_SYSTEM_INLINE_H_ +#define RTC_BASE_SYSTEM_INLINE_H_ + +#if defined(_MSC_VER) + +#define RTC_FORCE_INLINE __forceinline +#define RTC_NO_INLINE __declspec(noinline) + +#elif defined(__GNUC__) + +#define RTC_FORCE_INLINE __attribute__((__always_inline__)) +#define RTC_NO_INLINE __attribute__((__noinline__)) + +#else + +#define RTC_FORCE_INLINE +#define RTC_NO_INLINE + +#endif + +#endif // RTC_BASE_SYSTEM_INLINE_H_ diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/type_traits.h b/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/type_traits.h new file mode 100644 index 000000000..0cb899c47 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/rtc_base/type_traits.h @@ -0,0 +1,140 @@ +/* + * Copyright 2016 The WebRTC Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef RTC_BASE_TYPE_TRAITS_H_ +#define RTC_BASE_TYPE_TRAITS_H_ + +#include +#include + +namespace rtc { + +// Determines if the given class has zero-argument .data() and .size() methods +// whose return values are convertible to T* and size_t, respectively. +template +class HasDataAndSize { + private: + template < + typename C, + typename std::enable_if< + std::is_convertible().data()), T*>::value && + std::is_convertible().size()), + std::size_t>::value>::type* = nullptr> + static int Test(int); + + template + static char Test(...); + + public: + static constexpr bool value = std::is_same(0)), int>::value; +}; + +namespace test_has_data_and_size { + +template +struct Test1 { + DR data(); + SR size(); +}; +static_assert(HasDataAndSize, int>::value, ""); +static_assert(HasDataAndSize, const int>::value, ""); +static_assert(HasDataAndSize, const int>::value, ""); +static_assert(!HasDataAndSize, int>::value, + "implicit cast of const int* to int*"); +static_assert(!HasDataAndSize, int>::value, + "implicit cast of char* to int*"); + +struct Test2 { + int* data; + size_t size; +}; +static_assert(!HasDataAndSize::value, + ".data and .size aren't functions"); + +struct Test3 { + int* data(); +}; +static_assert(!HasDataAndSize::value, ".size() is missing"); + +class Test4 { + int* data(); + size_t size(); +}; +static_assert(!HasDataAndSize::value, + ".data() and .size() are private"); + +} // namespace test_has_data_and_size + +namespace type_traits_impl { + +// Determines if the given type is an enum that converts implicitly to +// an integral type. +template +struct IsIntEnum { + private: + // This overload is used if the type is an enum, and unary plus + // compiles and turns it into an integral type. + template ::value && + std::is_integral())>::value>::type* = + nullptr> + static int Test(int); + + // Otherwise, this overload is used. + template + static char Test(...); + + public: + static constexpr bool value = + std::is_same::type>(0)), + int>::value; +}; + +} // namespace type_traits_impl + +// Determines if the given type is integral, or an enum that +// converts implicitly to an integral type. +template +struct IsIntlike { + private: + using X = typename std::remove_reference::type; + + public: + static constexpr bool value = + std::is_integral::value || type_traits_impl::IsIntEnum::value; +}; + +namespace test_enum_intlike { + +enum E1 { e1 }; +enum { e2 }; +enum class E3 { e3 }; +struct S {}; + +static_assert(type_traits_impl::IsIntEnum::value, ""); +static_assert(type_traits_impl::IsIntEnum::value, ""); +static_assert(!type_traits_impl::IsIntEnum::value, ""); +static_assert(!type_traits_impl::IsIntEnum::value, ""); +static_assert(!type_traits_impl::IsIntEnum::value, ""); +static_assert(!type_traits_impl::IsIntEnum::value, ""); + +static_assert(IsIntlike::value, ""); +static_assert(IsIntlike::value, ""); +static_assert(!IsIntlike::value, ""); +static_assert(IsIntlike::value, ""); +static_assert(!IsIntlike::value, ""); +static_assert(!IsIntlike::value, ""); + +} // namespace test_enum_intlike + +} // namespace rtc + +#endif // RTC_BASE_TYPE_TRAITS_H_ diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/system_wrappers/include/cpu_features_wrapper.h b/funasr/runtime/onnxruntime/third_party/webrtc/system_wrappers/include/cpu_features_wrapper.h new file mode 100644 index 000000000..739161afc --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/system_wrappers/include/cpu_features_wrapper.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef SYSTEM_WRAPPERS_INCLUDE_CPU_FEATURES_WRAPPER_H_ +#define SYSTEM_WRAPPERS_INCLUDE_CPU_FEATURES_WRAPPER_H_ + +#include + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +// List of features in x86. +typedef enum { kSSE2, kSSE3 } CPUFeature; + +// List of features in ARM. +enum { + kCPUFeatureARMv7 = (1 << 0), + kCPUFeatureVFPv3 = (1 << 1), + kCPUFeatureNEON = (1 << 2), + kCPUFeatureLDREXSTREX = (1 << 3) +}; + +typedef int (*WebRtc_CPUInfo)(CPUFeature feature); + +// Returns true if the CPU supports the feature. +extern WebRtc_CPUInfo WebRtc_GetCPUInfo; + +// No CPU feature is available => straight C path. +extern WebRtc_CPUInfo WebRtc_GetCPUInfoNoASM; + +// Return the features in an ARM device. +// It detects the features in the hardware platform, and returns supported +// values in the above enum definition as a bitmask. +extern uint64_t WebRtc_GetCPUFeaturesARM(void); + +#if defined(__cplusplus) || defined(c_plusplus) +} // extern "C" +#endif + +#endif // SYSTEM_WRAPPERS_INCLUDE_CPU_FEATURES_WRAPPER_H_ diff --git a/funasr/runtime/onnxruntime/third_party/webrtc/typedefs.h b/funasr/runtime/onnxruntime/third_party/webrtc/typedefs.h new file mode 100644 index 000000000..8286ecae7 --- /dev/null +++ b/funasr/runtime/onnxruntime/third_party/webrtc/typedefs.h @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +// This file contains platform-specific typedefs and defines. +// Much of it is derived from Chromium's build/build_config.h. + +#ifndef WEBRTC_TYPEDEFS_H_ +#define WEBRTC_TYPEDEFS_H_ + +// Processor architecture detection. For more info on what's defined, see: +// http://msdn.microsoft.com/en-us/library/b0084kay.aspx +// http://www.agner.org/optimize/calling_conventions.pdf +// or with gcc, run: "echo | gcc -E -dM -" +#if defined(_M_X64) || defined(__x86_64__) +#define WEBRTC_ARCH_X86_FAMILY +#define WEBRTC_ARCH_X86_64 +#define WEBRTC_ARCH_64_BITS +#define WEBRTC_ARCH_LITTLE_ENDIAN +#elif defined(__aarch64__) +#define WEBRTC_ARCH_64_BITS +#define WEBRTC_ARCH_LITTLE_ENDIAN +#elif defined(_M_IX86) || defined(__i386__) +#define WEBRTC_ARCH_X86_FAMILY +#define WEBRTC_ARCH_X86 +#define WEBRTC_ARCH_32_BITS +#define WEBRTC_ARCH_LITTLE_ENDIAN +#elif defined(__ARMEL__) +// TODO(ajm): We'd prefer to control platform defines here, but this is +// currently provided by the Android makefiles. Commented to avoid duplicate +// definition warnings. +//#define WEBRTC_ARCH_ARM +// TODO(ajm): Chromium uses the following two defines. Should we switch? +//#define WEBRTC_ARCH_ARM_FAMILY +//#define WEBRTC_ARCH_ARMEL +#define WEBRTC_ARCH_32_BITS +#define WEBRTC_ARCH_LITTLE_ENDIAN +#elif defined(__MIPSEL__) +#define WEBRTC_ARCH_32_BITS +#define WEBRTC_ARCH_LITTLE_ENDIAN +#elif defined(__pnacl__) +#define WEBRTC_ARCH_32_BITS +#define WEBRTC_ARCH_LITTLE_ENDIAN +#elif defined(__PPC__) +#if defined(__PPC64__) +#define WEBRTC_ARCH_64_BITS +#else +#define WEBRTC_ARCH_32_BITS +#endif +#define WEBRTC_ARCH_BIG_ENDIAN +#else +#error Please add support for your architecture in typedefs.h +#endif + +#if !(defined(WEBRTC_ARCH_LITTLE_ENDIAN) ^ defined(WEBRTC_ARCH_BIG_ENDIAN)) +#error Define either WEBRTC_ARCH_LITTLE_ENDIAN or WEBRTC_ARCH_BIG_ENDIAN +#endif + +#if (defined(WEBRTC_ARCH_X86_FAMILY) && !defined(__SSE2__)) || \ + (defined(WEBRTC_ARCH_ARM_V7) && !defined(WEBRTC_ARCH_ARM_NEON)) +#define WEBRTC_CPU_DETECTION +#endif + +#if !defined(_MSC_VER) +#include +#else +// Define C99 equivalent types, since pre-2010 MSVC doesn't provide stdint.h. +typedef signed char int8_t; +typedef signed short int16_t; +typedef signed int int32_t; +typedef __int64 int64_t; +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +typedef unsigned __int64 uint64_t; +#endif + +// Borrowed from Chromium's base/compiler_specific.h. +// Annotate a virtual method indicating it must be overriding a virtual +// method in the parent class. +// Use like: +// virtual void foo() OVERRIDE; +#if defined(_MSC_VER) +#define OVERRIDE override +#elif defined(__clang__) +// Clang defaults to C++03 and warns about using override. Squelch that. +// Intentionally no push/pop here so all users of OVERRIDE ignore the warning +// too. This is like passing -Wno-c++11-extensions, except that GCC won't die +// (because it won't see this pragma). +#pragma clang diagnostic ignored "-Wc++11-extensions" +#define OVERRIDE override +#elif defined(__GNUC__) && __cplusplus >= 201103 && \ + (__GNUC__ * 10000 + __GNUC_MINOR__ * 100) >= 40700 +// GCC 4.7 supports explicit virtual overrides when C++11 support is enabled. +#define OVERRIDE override +#else +#define OVERRIDE +#endif + +// Annotate a function indicating the caller must examine the return value. +// Use like: +// int foo() WARN_UNUSED_RESULT; +// TODO(ajm): Hack to avoid multiple definitions until the base/ of webrtc and +// libjingle are merged. +#if !defined(WARN_UNUSED_RESULT) +#if defined(__GNUC__) +#define WARN_UNUSED_RESULT __attribute__((warn_unused_result)) +#else +#define WARN_UNUSED_RESULT +#endif +#endif // WARN_UNUSED_RESULT + +// Put after a variable that might not be used, to prevent compiler warnings: +// int result ATTRIBUTE_UNUSED = DoSomething(); +// assert(result == 17); +#ifndef ATTRIBUTE_UNUSED +#if defined(__GNUC__) || defined(__clang__) +#define ATTRIBUTE_UNUSED __attribute__((unused)) +#else +#define ATTRIBUTE_UNUSED +#endif +#endif + +// Macro to be used for switch-case fallthrough (required for enabling +// -Wimplicit-fallthrough warning on Clang). +#ifndef FALLTHROUGH +#if defined(__clang__) +#define FALLTHROUGH() [[clang::fallthrough]] +#else +#define FALLTHROUGH() do { } while (0) +#endif +#endif + +// Annotate a function that will not return control flow to the caller. +#if defined(_MSC_VER) +#define NO_RETURN __declspec(noreturn) +#elif defined(__GNUC__) +#define NO_RETURN __attribute__((noreturn)) +#else +#define NO_RETURN +#endif + +#endif // WEBRTC_TYPEDEFS_H_ diff --git a/funasr/runtime/onnxruntime/wave/asr_example.wav b/funasr/runtime/onnxruntime/wave/asr_example.wav new file mode 100644 index 000000000..be33a3c61 Binary files /dev/null and b/funasr/runtime/onnxruntime/wave/asr_example.wav differ diff --git a/funasr/runtime/onnxruntime/wave/long.wav b/funasr/runtime/onnxruntime/wave/long.wav new file mode 100644 index 000000000..22b383a48 Binary files /dev/null and b/funasr/runtime/onnxruntime/wave/long.wav differ diff --git a/funasr/runtime/onnxruntime/wave/short.wav b/funasr/runtime/onnxruntime/wave/short.wav new file mode 100644 index 000000000..bf13bb160 Binary files /dev/null and b/funasr/runtime/onnxruntime/wave/short.wav differ diff --git a/funasr/runtime/onnxruntime/wave/test.pcm.bytes b/funasr/runtime/onnxruntime/wave/test.pcm.bytes new file mode 100644 index 000000000..f3962c633 Binary files /dev/null and b/funasr/runtime/onnxruntime/wave/test.pcm.bytes differ diff --git a/funasr/runtime/onnxruntime/wave/test.pcm.wav b/funasr/runtime/onnxruntime/wave/test.pcm.wav new file mode 100644 index 000000000..b83d56c96 Binary files /dev/null and b/funasr/runtime/onnxruntime/wave/test.pcm.wav differ diff --git a/funasr/runtime/onnxruntime/win/bin/x64/libfftw3-3.dll b/funasr/runtime/onnxruntime/win/bin/x64/libfftw3-3.dll new file mode 100644 index 000000000..75080e49f Binary files /dev/null and b/funasr/runtime/onnxruntime/win/bin/x64/libfftw3-3.dll differ diff --git a/funasr/runtime/onnxruntime/win/bin/x64/libfftw3f-3.dll b/funasr/runtime/onnxruntime/win/bin/x64/libfftw3f-3.dll new file mode 100644 index 000000000..32a3fcf1d Binary files /dev/null and b/funasr/runtime/onnxruntime/win/bin/x64/libfftw3f-3.dll differ diff --git a/funasr/runtime/onnxruntime/win/bin/x64/libfftw3l-3.dll b/funasr/runtime/onnxruntime/win/bin/x64/libfftw3l-3.dll new file mode 100644 index 000000000..3e46d34db Binary files /dev/null and b/funasr/runtime/onnxruntime/win/bin/x64/libfftw3l-3.dll differ diff --git a/funasr/runtime/onnxruntime/win/bin/x64/onnxruntime.dll b/funasr/runtime/onnxruntime/win/bin/x64/onnxruntime.dll new file mode 100644 index 000000000..087a1b439 Binary files /dev/null and b/funasr/runtime/onnxruntime/win/bin/x64/onnxruntime.dll differ diff --git a/funasr/runtime/onnxruntime/win/bin/x86/libfftw3-3.dll b/funasr/runtime/onnxruntime/win/bin/x86/libfftw3-3.dll new file mode 100644 index 000000000..f5a97b49d Binary files /dev/null and b/funasr/runtime/onnxruntime/win/bin/x86/libfftw3-3.dll differ diff --git a/funasr/runtime/onnxruntime/win/bin/x86/libfftw3f-3.dll b/funasr/runtime/onnxruntime/win/bin/x86/libfftw3f-3.dll new file mode 100644 index 000000000..b0a053a82 Binary files /dev/null and b/funasr/runtime/onnxruntime/win/bin/x86/libfftw3f-3.dll differ diff --git a/funasr/runtime/onnxruntime/win/bin/x86/libfftw3l-3.dll b/funasr/runtime/onnxruntime/win/bin/x86/libfftw3l-3.dll new file mode 100644 index 000000000..abc81ea87 Binary files /dev/null and b/funasr/runtime/onnxruntime/win/bin/x86/libfftw3l-3.dll differ diff --git a/funasr/runtime/onnxruntime/win/bin/x86/onnxruntime.dll b/funasr/runtime/onnxruntime/win/bin/x86/onnxruntime.dll new file mode 100644 index 000000000..e284b45b0 Binary files /dev/null and b/funasr/runtime/onnxruntime/win/bin/x86/onnxruntime.dll differ diff --git a/funasr/runtime/onnxruntime/win/images/sample.png b/funasr/runtime/onnxruntime/win/images/sample.png new file mode 100644 index 000000000..cbd7cd3c1 Binary files /dev/null and b/funasr/runtime/onnxruntime/win/images/sample.png differ diff --git a/funasr/runtime/onnxruntime/win/include/cpu_provider_factory.h b/funasr/runtime/onnxruntime/win/include/cpu_provider_factory.h new file mode 100644 index 000000000..292678692 --- /dev/null +++ b/funasr/runtime/onnxruntime/win/include/cpu_provider_factory.h @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#include "onnxruntime_c_api.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \param use_arena zero: false. non-zero: true. + */ +ORT_EXPORT +ORT_API_STATUS(OrtSessionOptionsAppendExecutionProvider_CPU, _In_ OrtSessionOptions* options, int use_arena) +ORT_ALL_ARGS_NONNULL; + +#ifdef __cplusplus +} +#endif diff --git a/funasr/runtime/onnxruntime/win/include/fftw3.h b/funasr/runtime/onnxruntime/win/include/fftw3.h new file mode 100644 index 000000000..39661d226 --- /dev/null +++ b/funasr/runtime/onnxruntime/win/include/fftw3.h @@ -0,0 +1,415 @@ +/* + * Copyright (c) 2003, 2007-14 Matteo Frigo + * Copyright (c) 2003, 2007-14 Massachusetts Institute of Technology + * + * The following statement of license applies *only* to this header file, + * and *not* to the other files distributed with FFTW or derived therefrom: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/***************************** NOTE TO USERS ********************************* + * + * THIS IS A HEADER FILE, NOT A MANUAL + * + * If you want to know how to use FFTW, please read the manual, + * online at http://www.fftw.org/doc/ and also included with FFTW. + * For a quick start, see the manual's tutorial section. + * + * (Reading header files to learn how to use a library is a habit + * stemming from code lacking a proper manual. Arguably, it's a + * *bad* habit in most cases, because header files can contain + * interfaces that are not part of the public, stable API.) + * + ****************************************************************************/ + +#ifndef FFTW3_H +#define FFTW3_H + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* If is included, use the C99 complex type. Otherwise + define a type bit-compatible with C99 complex */ +#if !defined(FFTW_NO_Complex) && defined(_Complex_I) && defined(complex) && defined(I) +# define FFTW_DEFINE_COMPLEX(R, C) typedef R _Complex C +#else +# define FFTW_DEFINE_COMPLEX(R, C) typedef R C[2] +#endif + +#define FFTW_CONCAT(prefix, name) prefix ## name +#define FFTW_MANGLE_DOUBLE(name) FFTW_CONCAT(fftw_, name) +#define FFTW_MANGLE_FLOAT(name) FFTW_CONCAT(fftwf_, name) +#define FFTW_MANGLE_LONG_DOUBLE(name) FFTW_CONCAT(fftwl_, name) +#define FFTW_MANGLE_QUAD(name) FFTW_CONCAT(fftwq_, name) + +/* IMPORTANT: for Windows compilers, you should add a line +*/ +#define FFTW_DLL +/* + here and in kernel/ifftw.h if you are compiling/using FFTW as a + DLL, in order to do the proper importing/exporting, or + alternatively compile with -DFFTW_DLL or the equivalent + command-line flag. This is not necessary under MinGW/Cygwin, where + libtool does the imports/exports automatically. */ +#if defined(FFTW_DLL) && (defined(_WIN32) || defined(__WIN32__)) + /* annoying Windows syntax for shared-library declarations */ +# if defined(COMPILING_FFTW) /* defined in api.h when compiling FFTW */ +# define FFTW_EXTERN extern __declspec(dllexport) +# else /* user is calling FFTW; import symbol */ +# define FFTW_EXTERN extern __declspec(dllimport) +# endif +#else +# define FFTW_EXTERN extern +#endif + +enum fftw_r2r_kind_do_not_use_me { + FFTW_R2HC=0, FFTW_HC2R=1, FFTW_DHT=2, + FFTW_REDFT00=3, FFTW_REDFT01=4, FFTW_REDFT10=5, FFTW_REDFT11=6, + FFTW_RODFT00=7, FFTW_RODFT01=8, FFTW_RODFT10=9, FFTW_RODFT11=10 +}; + +struct fftw_iodim_do_not_use_me { + int n; /* dimension size */ + int is; /* input stride */ + int os; /* output stride */ +}; + +#include /* for ptrdiff_t */ +struct fftw_iodim64_do_not_use_me { + ptrdiff_t n; /* dimension size */ + ptrdiff_t is; /* input stride */ + ptrdiff_t os; /* output stride */ +}; + +typedef void (*fftw_write_char_func_do_not_use_me)(char c, void *); +typedef int (*fftw_read_char_func_do_not_use_me)(void *); + +/* + huge second-order macro that defines prototypes for all API + functions. We expand this macro for each supported precision + + X: name-mangling macro + R: real data type + C: complex data type +*/ + +#define FFTW_DEFINE_API(X, R, C) \ + \ +FFTW_DEFINE_COMPLEX(R, C); \ + \ +typedef struct X(plan_s) *X(plan); \ + \ +typedef struct fftw_iodim_do_not_use_me X(iodim); \ +typedef struct fftw_iodim64_do_not_use_me X(iodim64); \ + \ +typedef enum fftw_r2r_kind_do_not_use_me X(r2r_kind); \ + \ +typedef fftw_write_char_func_do_not_use_me X(write_char_func); \ +typedef fftw_read_char_func_do_not_use_me X(read_char_func); \ + \ +FFTW_EXTERN void X(execute)(const X(plan) p); \ + \ +FFTW_EXTERN X(plan) X(plan_dft)(int rank, const int *n, \ + C *in, C *out, int sign, unsigned flags); \ + \ +FFTW_EXTERN X(plan) X(plan_dft_1d)(int n, C *in, C *out, int sign, \ + unsigned flags); \ +FFTW_EXTERN X(plan) X(plan_dft_2d)(int n0, int n1, \ + C *in, C *out, int sign, unsigned flags); \ +FFTW_EXTERN X(plan) X(plan_dft_3d)(int n0, int n1, int n2, \ + C *in, C *out, int sign, unsigned flags); \ + \ +FFTW_EXTERN X(plan) X(plan_many_dft)(int rank, const int *n, \ + int howmany, \ + C *in, const int *inembed, \ + int istride, int idist, \ + C *out, const int *onembed, \ + int ostride, int odist, \ + int sign, unsigned flags); \ + \ +FFTW_EXTERN X(plan) X(plan_guru_dft)(int rank, const X(iodim) *dims, \ + int howmany_rank, \ + const X(iodim) *howmany_dims, \ + C *in, C *out, \ + int sign, unsigned flags); \ +FFTW_EXTERN X(plan) X(plan_guru_split_dft)(int rank, const X(iodim) *dims, \ + int howmany_rank, \ + const X(iodim) *howmany_dims, \ + R *ri, R *ii, R *ro, R *io, \ + unsigned flags); \ + \ +FFTW_EXTERN X(plan) X(plan_guru64_dft)(int rank, \ + const X(iodim64) *dims, \ + int howmany_rank, \ + const X(iodim64) *howmany_dims, \ + C *in, C *out, \ + int sign, unsigned flags); \ +FFTW_EXTERN X(plan) X(plan_guru64_split_dft)(int rank, \ + const X(iodim64) *dims, \ + int howmany_rank, \ + const X(iodim64) *howmany_dims, \ + R *ri, R *ii, R *ro, R *io, \ + unsigned flags); \ + \ +FFTW_EXTERN void X(execute_dft)(const X(plan) p, C *in, C *out); \ +FFTW_EXTERN void X(execute_split_dft)(const X(plan) p, R *ri, R *ii, \ + R *ro, R *io); \ + \ +FFTW_EXTERN X(plan) X(plan_many_dft_r2c)(int rank, const int *n, \ + int howmany, \ + R *in, const int *inembed, \ + int istride, int idist, \ + C *out, const int *onembed, \ + int ostride, int odist, \ + unsigned flags); \ + \ +FFTW_EXTERN X(plan) X(plan_dft_r2c)(int rank, const int *n, \ + R *in, C *out, unsigned flags); \ + \ +FFTW_EXTERN X(plan) X(plan_dft_r2c_1d)(int n,R *in,C *out,unsigned flags); \ +FFTW_EXTERN X(plan) X(plan_dft_r2c_2d)(int n0, int n1, \ + R *in, C *out, unsigned flags); \ +FFTW_EXTERN X(plan) X(plan_dft_r2c_3d)(int n0, int n1, \ + int n2, \ + R *in, C *out, unsigned flags); \ + \ + \ +FFTW_EXTERN X(plan) X(plan_many_dft_c2r)(int rank, const int *n, \ + int howmany, \ + C *in, const int *inembed, \ + int istride, int idist, \ + R *out, const int *onembed, \ + int ostride, int odist, \ + unsigned flags); \ + \ +FFTW_EXTERN X(plan) X(plan_dft_c2r)(int rank, const int *n, \ + C *in, R *out, unsigned flags); \ + \ +FFTW_EXTERN X(plan) X(plan_dft_c2r_1d)(int n,C *in,R *out,unsigned flags); \ +FFTW_EXTERN X(plan) X(plan_dft_c2r_2d)(int n0, int n1, \ + C *in, R *out, unsigned flags); \ +FFTW_EXTERN X(plan) X(plan_dft_c2r_3d)(int n0, int n1, \ + int n2, \ + C *in, R *out, unsigned flags); \ + \ +FFTW_EXTERN X(plan) X(plan_guru_dft_r2c)(int rank, const X(iodim) *dims, \ + int howmany_rank, \ + const X(iodim) *howmany_dims, \ + R *in, C *out, \ + unsigned flags); \ +FFTW_EXTERN X(plan) X(plan_guru_dft_c2r)(int rank, const X(iodim) *dims, \ + int howmany_rank, \ + const X(iodim) *howmany_dims, \ + C *in, R *out, \ + unsigned flags); \ + \ +FFTW_EXTERN X(plan) X(plan_guru_split_dft_r2c)( \ + int rank, const X(iodim) *dims, \ + int howmany_rank, \ + const X(iodim) *howmany_dims, \ + R *in, R *ro, R *io, \ + unsigned flags); \ +FFTW_EXTERN X(plan) X(plan_guru_split_dft_c2r)( \ + int rank, const X(iodim) *dims, \ + int howmany_rank, \ + const X(iodim) *howmany_dims, \ + R *ri, R *ii, R *out, \ + unsigned flags); \ + \ +FFTW_EXTERN X(plan) X(plan_guru64_dft_r2c)(int rank, \ + const X(iodim64) *dims, \ + int howmany_rank, \ + const X(iodim64) *howmany_dims, \ + R *in, C *out, \ + unsigned flags); \ +FFTW_EXTERN X(plan) X(plan_guru64_dft_c2r)(int rank, \ + const X(iodim64) *dims, \ + int howmany_rank, \ + const X(iodim64) *howmany_dims, \ + C *in, R *out, \ + unsigned flags); \ + \ +FFTW_EXTERN X(plan) X(plan_guru64_split_dft_r2c)( \ + int rank, const X(iodim64) *dims, \ + int howmany_rank, \ + const X(iodim64) *howmany_dims, \ + R *in, R *ro, R *io, \ + unsigned flags); \ +FFTW_EXTERN X(plan) X(plan_guru64_split_dft_c2r)( \ + int rank, const X(iodim64) *dims, \ + int howmany_rank, \ + const X(iodim64) *howmany_dims, \ + R *ri, R *ii, R *out, \ + unsigned flags); \ + \ +FFTW_EXTERN void X(execute_dft_r2c)(const X(plan) p, R *in, C *out); \ +FFTW_EXTERN void X(execute_dft_c2r)(const X(plan) p, C *in, R *out); \ + \ +FFTW_EXTERN void X(execute_split_dft_r2c)(const X(plan) p, \ + R *in, R *ro, R *io); \ +FFTW_EXTERN void X(execute_split_dft_c2r)(const X(plan) p, \ + R *ri, R *ii, R *out); \ + \ +FFTW_EXTERN X(plan) X(plan_many_r2r)(int rank, const int *n, \ + int howmany, \ + R *in, const int *inembed, \ + int istride, int idist, \ + R *out, const int *onembed, \ + int ostride, int odist, \ + const X(r2r_kind) *kind, unsigned flags); \ + \ +FFTW_EXTERN X(plan) X(plan_r2r)(int rank, const int *n, R *in, R *out, \ + const X(r2r_kind) *kind, unsigned flags); \ + \ +FFTW_EXTERN X(plan) X(plan_r2r_1d)(int n, R *in, R *out, \ + X(r2r_kind) kind, unsigned flags); \ +FFTW_EXTERN X(plan) X(plan_r2r_2d)(int n0, int n1, R *in, R *out, \ + X(r2r_kind) kind0, X(r2r_kind) kind1, \ + unsigned flags); \ +FFTW_EXTERN X(plan) X(plan_r2r_3d)(int n0, int n1, int n2, \ + R *in, R *out, X(r2r_kind) kind0, \ + X(r2r_kind) kind1, X(r2r_kind) kind2, \ + unsigned flags); \ + \ +FFTW_EXTERN X(plan) X(plan_guru_r2r)(int rank, const X(iodim) *dims, \ + int howmany_rank, \ + const X(iodim) *howmany_dims, \ + R *in, R *out, \ + const X(r2r_kind) *kind, unsigned flags); \ + \ +FFTW_EXTERN X(plan) X(plan_guru64_r2r)(int rank, const X(iodim64) *dims, \ + int howmany_rank, \ + const X(iodim64) *howmany_dims, \ + R *in, R *out, \ + const X(r2r_kind) *kind, unsigned flags); \ + \ +FFTW_EXTERN void X(execute_r2r)(const X(plan) p, R *in, R *out); \ + \ +FFTW_EXTERN void X(destroy_plan)(X(plan) p); \ +FFTW_EXTERN void X(forget_wisdom)(void); \ +FFTW_EXTERN void X(cleanup)(void); \ + \ +FFTW_EXTERN void X(set_timelimit)(double t); \ + \ +FFTW_EXTERN void X(plan_with_nthreads)(int nthreads); \ +FFTW_EXTERN int X(init_threads)(void); \ +FFTW_EXTERN void X(cleanup_threads)(void); \ +FFTW_EXTERN void X(make_planner_thread_safe)(void); \ + \ +FFTW_EXTERN int X(export_wisdom_to_filename)(const char *filename); \ +FFTW_EXTERN void X(export_wisdom_to_file)(FILE *output_file); \ +FFTW_EXTERN char *X(export_wisdom_to_string)(void); \ +FFTW_EXTERN void X(export_wisdom)(X(write_char_func) write_char, \ + void *data); \ +FFTW_EXTERN int X(import_system_wisdom)(void); \ +FFTW_EXTERN int X(import_wisdom_from_filename)(const char *filename); \ +FFTW_EXTERN int X(import_wisdom_from_file)(FILE *input_file); \ +FFTW_EXTERN int X(import_wisdom_from_string)(const char *input_string); \ +FFTW_EXTERN int X(import_wisdom)(X(read_char_func) read_char, void *data); \ + \ +FFTW_EXTERN void X(fprint_plan)(const X(plan) p, FILE *output_file); \ +FFTW_EXTERN void X(print_plan)(const X(plan) p); \ +FFTW_EXTERN char *X(sprint_plan)(const X(plan) p); \ + \ +FFTW_EXTERN void *X(malloc)(size_t n); \ +FFTW_EXTERN R *X(alloc_real)(size_t n); \ +FFTW_EXTERN C *X(alloc_complex)(size_t n); \ +FFTW_EXTERN void X(free)(void *p); \ + \ +FFTW_EXTERN void X(flops)(const X(plan) p, \ + double *add, double *mul, double *fmas); \ +FFTW_EXTERN double X(estimate_cost)(const X(plan) p); \ +FFTW_EXTERN double X(cost)(const X(plan) p); \ + \ +FFTW_EXTERN int X(alignment_of)(R *p); \ +FFTW_EXTERN const char X(version)[]; \ +FFTW_EXTERN const char X(cc)[]; \ +FFTW_EXTERN const char X(codelet_optim)[]; + + +/* end of FFTW_DEFINE_API macro */ + +FFTW_DEFINE_API(FFTW_MANGLE_DOUBLE, double, fftw_complex) +FFTW_DEFINE_API(FFTW_MANGLE_FLOAT, float, fftwf_complex) +FFTW_DEFINE_API(FFTW_MANGLE_LONG_DOUBLE, long double, fftwl_complex) + +/* __float128 (quad precision) is a gcc extension on i386, x86_64, and ia64 + for gcc >= 4.6 (compiled in FFTW with --enable-quad-precision) */ +#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) \ + && !(defined(__ICC) || defined(__INTEL_COMPILER) || defined(__CUDACC__) || defined(__PGI)) \ + && (defined(__i386__) || defined(__x86_64__) || defined(__ia64__)) +# if !defined(FFTW_NO_Complex) && defined(_Complex_I) && defined(complex) && defined(I) +/* note: __float128 is a typedef, which is not supported with the _Complex + keyword in gcc, so instead we use this ugly __attribute__ version. + However, we can't simply pass the __attribute__ version to + FFTW_DEFINE_API because the __attribute__ confuses gcc in pointer + types. Hence redefining FFTW_DEFINE_COMPLEX. Ugh. */ +# undef FFTW_DEFINE_COMPLEX +# define FFTW_DEFINE_COMPLEX(R, C) typedef _Complex float __attribute__((mode(TC))) C +# endif +FFTW_DEFINE_API(FFTW_MANGLE_QUAD, __float128, fftwq_complex) +#endif + +#define FFTW_FORWARD (-1) +#define FFTW_BACKWARD (+1) + +#define FFTW_NO_TIMELIMIT (-1.0) + +/* documented flags */ +#define FFTW_MEASURE (0U) +#define FFTW_DESTROY_INPUT (1U << 0) +#define FFTW_UNALIGNED (1U << 1) +#define FFTW_CONSERVE_MEMORY (1U << 2) +#define FFTW_EXHAUSTIVE (1U << 3) /* NO_EXHAUSTIVE is default */ +#define FFTW_PRESERVE_INPUT (1U << 4) /* cancels FFTW_DESTROY_INPUT */ +#define FFTW_PATIENT (1U << 5) /* IMPATIENT is default */ +#define FFTW_ESTIMATE (1U << 6) +#define FFTW_WISDOM_ONLY (1U << 21) + +/* undocumented beyond-guru flags */ +#define FFTW_ESTIMATE_PATIENT (1U << 7) +#define FFTW_BELIEVE_PCOST (1U << 8) +#define FFTW_NO_DFT_R2HC (1U << 9) +#define FFTW_NO_NONTHREADED (1U << 10) +#define FFTW_NO_BUFFERING (1U << 11) +#define FFTW_NO_INDIRECT_OP (1U << 12) +#define FFTW_ALLOW_LARGE_GENERIC (1U << 13) /* NO_LARGE_GENERIC is default */ +#define FFTW_NO_RANK_SPLITS (1U << 14) +#define FFTW_NO_VRANK_SPLITS (1U << 15) +#define FFTW_NO_VRECURSE (1U << 16) +#define FFTW_NO_SIMD (1U << 17) +#define FFTW_NO_SLOW (1U << 18) +#define FFTW_NO_FIXED_RADIX_LARGE_N (1U << 19) +#define FFTW_ALLOW_PRUNING (1U << 20) + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* FFTW3_H */ diff --git a/funasr/runtime/onnxruntime/win/include/onnxruntime_c_api.h b/funasr/runtime/onnxruntime/win/include/onnxruntime_c_api.h new file mode 100644 index 000000000..44875b0f9 --- /dev/null +++ b/funasr/runtime/onnxruntime/win/include/onnxruntime_c_api.h @@ -0,0 +1,3987 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +// See docs\c_cxx\README.md on generating the Doxygen documentation from this file + +/** \mainpage C & C++ APIs + * + *

C

+ * + * ::OrtApi - Click here to go to the structure with all C API functions. + * + *

C++

+ * + * ::Ort - Click here to go to the namespace holding all of the C++ wrapper classes + * + * It is a set of header only wrapper classes around the C API. The goal is to turn the C style return value error codes into C++ exceptions, and to + * automate memory management through standard C++ RAII principles. + * + * \addtogroup Global + * ONNX Runtime C API + * @{ + */ + +#pragma once +#include +#include +#include + +/** \brief The API version defined in this header + * + * This value is used by some API functions to behave as this version of the header expects. + */ +#define ORT_API_VERSION 14 + +#ifdef __cplusplus +extern "C" { +#endif + +//! @} +// SAL2 Definitions +#ifndef _WIN32 +#define _In_ +#define _In_z_ +#define _In_opt_ +#define _In_opt_z_ +#define _Out_ +#define _Outptr_ +#define _Out_opt_ +#define _Inout_ +#define _Inout_opt_ +#define _Frees_ptr_opt_ +#define _Ret_maybenull_ +#define _Ret_notnull_ +#define _Check_return_ +#define _Outptr_result_maybenull_ +#define _In_reads_(X) +#define _Inout_updates_all_(X) +#define _Out_writes_bytes_all_(X) +#define _Out_writes_all_(X) +#define _Success_(X) +#define _Outptr_result_buffer_maybenull_(X) +#define ORT_ALL_ARGS_NONNULL __attribute__((nonnull)) +#else +#include +#define ORT_ALL_ARGS_NONNULL +#endif + +#ifdef _WIN32 +// Define ORT_DLL_IMPORT if your program is dynamically linked to Ort. +// dllexport is not used, we use a .def file. +#ifdef ORT_DLL_IMPORT +#define ORT_EXPORT __declspec(dllimport) +#else +#define ORT_EXPORT +#endif +#define ORT_API_CALL _stdcall +#define ORT_MUST_USE_RESULT +#define ORTCHAR_T wchar_t +#else +// To make symbols visible on macOS/iOS +#ifdef __APPLE__ +#define ORT_EXPORT __attribute__((visibility("default"))) +#else +#define ORT_EXPORT +#endif +#define ORT_API_CALL +#define ORT_MUST_USE_RESULT __attribute__((warn_unused_result)) +#define ORTCHAR_T char +#endif + +#ifndef ORT_TSTR +#ifdef _WIN32 +#define ORT_TSTR(X) L##X +#else +#define ORT_TSTR(X) X +#endif +#endif + +// Any pointer marked with _In_ or _Out_, cannot be NULL. + +// Windows users should use unicode paths when possible to bypass the MAX_PATH limitation +// Every pointer marked with _In_ or _Out_, cannot be NULL. Caller should ensure that. +// for ReleaseXXX(...) functions, they can accept NULL pointer. + +#ifdef __cplusplus +// For any compiler with C++11 support, MSVC 2015 and greater, or Clang version supporting noexcept. +// Such complex condition is needed because compilers set __cplusplus value differently. +#ifndef __has_feature +#define __has_feature(x) 0 +#endif +#if ((__cplusplus >= 201103L) || (_MSC_VER >= 1900) || (defined(__has_feature) && __has_feature(cxx_noexcept))) +#define NO_EXCEPTION noexcept +#else +#define NO_EXCEPTION throw() +#endif +#else +#define NO_EXCEPTION +#endif + +// __VA_ARGS__ on Windows and Linux are different +#define ORT_API(RETURN_TYPE, NAME, ...) RETURN_TYPE ORT_API_CALL NAME(__VA_ARGS__) NO_EXCEPTION + +#define ORT_API_STATUS(NAME, ...) \ + _Success_(return == 0) _Check_return_ _Ret_maybenull_ OrtStatusPtr ORT_API_CALL NAME(__VA_ARGS__) \ + NO_EXCEPTION ORT_MUST_USE_RESULT + +// XXX: Unfortunately, SAL annotations are known to not work with function pointers +#define ORT_API2_STATUS(NAME, ...) \ + _Check_return_ _Ret_maybenull_ OrtStatusPtr(ORT_API_CALL* NAME)(__VA_ARGS__) NO_EXCEPTION ORT_MUST_USE_RESULT + +// Used in *.cc files. Almost as same as ORT_API_STATUS, except without ORT_MUST_USE_RESULT and ORT_EXPORT +#define ORT_API_STATUS_IMPL(NAME, ...) \ + _Success_(return == 0) _Check_return_ _Ret_maybenull_ OrtStatusPtr ORT_API_CALL NAME(__VA_ARGS__) NO_EXCEPTION + +#define ORT_CLASS_RELEASE(X) void(ORT_API_CALL * Release##X)(_Frees_ptr_opt_ Ort##X * input) + +#ifdef __DOXYGEN__ +#undef ORT_API_STATUS +#define ORT_API_STATUS(NAME, ...) OrtStatus* NAME(__VA_ARGS__) +#undef ORT_API2_STATUS +#define ORT_API2_STATUS(NAME, ...) OrtStatus* NAME(__VA_ARGS__) +#undef ORT_CLASS_RELEASE +#define ORT_CLASS_RELEASE(X) void Release##X(Ort##X* input) +#undef NO_EXCEPTION +#define NO_EXCEPTION +#endif +/** \addtogroup Global + * ONNX Runtime C API + * @{ + */ + +/** Copied from TensorProto::DataType + * Currently, Ort doesn't support complex64, complex128 + */ +typedef enum ONNXTensorElementDataType { + ONNX_TENSOR_ELEMENT_DATA_TYPE_UNDEFINED, + ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT, // maps to c type float + ONNX_TENSOR_ELEMENT_DATA_TYPE_UINT8, // maps to c type uint8_t + ONNX_TENSOR_ELEMENT_DATA_TYPE_INT8, // maps to c type int8_t + ONNX_TENSOR_ELEMENT_DATA_TYPE_UINT16, // maps to c type uint16_t + ONNX_TENSOR_ELEMENT_DATA_TYPE_INT16, // maps to c type int16_t + ONNX_TENSOR_ELEMENT_DATA_TYPE_INT32, // maps to c type int32_t + ONNX_TENSOR_ELEMENT_DATA_TYPE_INT64, // maps to c type int64_t + ONNX_TENSOR_ELEMENT_DATA_TYPE_STRING, // maps to c++ type std::string + ONNX_TENSOR_ELEMENT_DATA_TYPE_BOOL, + ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT16, + ONNX_TENSOR_ELEMENT_DATA_TYPE_DOUBLE, // maps to c type double + ONNX_TENSOR_ELEMENT_DATA_TYPE_UINT32, // maps to c type uint32_t + ONNX_TENSOR_ELEMENT_DATA_TYPE_UINT64, // maps to c type uint64_t + ONNX_TENSOR_ELEMENT_DATA_TYPE_COMPLEX64, // complex with float32 real and imaginary components + ONNX_TENSOR_ELEMENT_DATA_TYPE_COMPLEX128, // complex with float64 real and imaginary components + ONNX_TENSOR_ELEMENT_DATA_TYPE_BFLOAT16 // Non-IEEE floating-point format based on IEEE754 single-precision +} ONNXTensorElementDataType; + +// Synced with onnx TypeProto oneof +typedef enum ONNXType { + ONNX_TYPE_UNKNOWN, + ONNX_TYPE_TENSOR, + ONNX_TYPE_SEQUENCE, + ONNX_TYPE_MAP, + ONNX_TYPE_OPAQUE, + ONNX_TYPE_SPARSETENSOR, + ONNX_TYPE_OPTIONAL +} ONNXType; + +// These types are synced with internal +// SparseFormatFlags +typedef enum OrtSparseFormat { + ORT_SPARSE_UNDEFINED = 0, + ORT_SPARSE_COO = 0x1, + ORT_SPARSE_CSRC = 0x2, + ORT_SPARSE_BLOCK_SPARSE = 0x4 +} OrtSparseFormat; + +// Enum allows to query sparse tensor indices +enum OrtSparseIndicesFormat { + ORT_SPARSE_COO_INDICES, + ORT_SPARSE_CSR_INNER_INDICES, + ORT_SPARSE_CSR_OUTER_INDICES, + ORT_SPARSE_BLOCK_SPARSE_INDICES +}; + +/** \brief Logging severity levels + * + * In typical API usage, specifying a logging severity level specifies the minimum severity of log messages to show. + */ +typedef enum OrtLoggingLevel { + ORT_LOGGING_LEVEL_VERBOSE, ///< Verbose informational messages (least severe). + ORT_LOGGING_LEVEL_INFO, ///< Informational messages. + ORT_LOGGING_LEVEL_WARNING, ///< Warning messages. + ORT_LOGGING_LEVEL_ERROR, ///< Error messages. + ORT_LOGGING_LEVEL_FATAL, ///< Fatal error messages (most severe). +} OrtLoggingLevel; + +typedef enum OrtErrorCode { + ORT_OK, + ORT_FAIL, + ORT_INVALID_ARGUMENT, + ORT_NO_SUCHFILE, + ORT_NO_MODEL, + ORT_ENGINE_ERROR, + ORT_RUNTIME_EXCEPTION, + ORT_INVALID_PROTOBUF, + ORT_MODEL_LOADED, + ORT_NOT_IMPLEMENTED, + ORT_INVALID_GRAPH, + ORT_EP_FAIL, +} OrtErrorCode; + +typedef enum OrtOpAttrType { + ORT_OP_ATTR_UNDEFINED = 0, + ORT_OP_ATTR_INT, + ORT_OP_ATTR_INTS, + ORT_OP_ATTR_FLOAT, + ORT_OP_ATTR_FLOATS, + ORT_OP_ATTR_STRING, + ORT_OP_ATTR_STRINGS, +} OrtOpAttrType; + +//! @} +#define ORT_RUNTIME_CLASS(X) \ + struct Ort##X; \ + typedef struct Ort##X Ort##X; + +/** \addtogroup Global + * ONNX Runtime C API + * @{ + */ +// The actual types defined have an Ort prefix +ORT_RUNTIME_CLASS(Env); +ORT_RUNTIME_CLASS(Status); // nullptr for Status* indicates success +ORT_RUNTIME_CLASS(MemoryInfo); +ORT_RUNTIME_CLASS(IoBinding); +ORT_RUNTIME_CLASS(Session); // Don't call ReleaseSession from Dllmain (because session owns a thread pool) +ORT_RUNTIME_CLASS(Value); +ORT_RUNTIME_CLASS(RunOptions); +ORT_RUNTIME_CLASS(TypeInfo); +ORT_RUNTIME_CLASS(TensorTypeAndShapeInfo); +ORT_RUNTIME_CLASS(SessionOptions); +ORT_RUNTIME_CLASS(CustomOpDomain); +ORT_RUNTIME_CLASS(MapTypeInfo); +ORT_RUNTIME_CLASS(SequenceTypeInfo); +ORT_RUNTIME_CLASS(ModelMetadata); +ORT_RUNTIME_CLASS(ThreadPoolParams); +ORT_RUNTIME_CLASS(ThreadingOptions); +ORT_RUNTIME_CLASS(ArenaCfg); +ORT_RUNTIME_CLASS(PrepackedWeightsContainer); +ORT_RUNTIME_CLASS(TensorRTProviderOptionsV2); +ORT_RUNTIME_CLASS(CUDAProviderOptionsV2); +ORT_RUNTIME_CLASS(CANNProviderOptions); +ORT_RUNTIME_CLASS(Op); +ORT_RUNTIME_CLASS(OpAttr); + +#ifdef _WIN32 +typedef _Return_type_success_(return == 0) OrtStatus* OrtStatusPtr; +#else +typedef OrtStatus* OrtStatusPtr; +#endif + +/** \brief Memory allocation interface + * + * Structure of function pointers that defines a memory allocator. This can be created and filled in by the user for custom allocators. + * + * When an allocator is passed to any function, be sure that the allocator object is not destroyed until the last allocated object using it is freed. + */ +typedef struct OrtAllocator { + uint32_t version; ///< Must be initialized to ORT_API_VERSION + void*(ORT_API_CALL* Alloc)(struct OrtAllocator* this_, size_t size); ///< Returns a pointer to an allocated block of `size` bytes + void(ORT_API_CALL* Free)(struct OrtAllocator* this_, void* p); ///< Free a block of memory previously allocated with OrtAllocator::Alloc + const struct OrtMemoryInfo*(ORT_API_CALL* Info)(const struct OrtAllocator* this_); ///< Return a pointer to an ::OrtMemoryInfo that describes this allocator +} OrtAllocator; + +typedef void(ORT_API_CALL* OrtLoggingFunction)( + void* param, OrtLoggingLevel severity, const char* category, const char* logid, const char* code_location, + const char* message); + +/** \brief Graph optimization level + * + * Refer to https://www.onnxruntime.ai/docs/resources/graph-optimizations.html + * for an in-depth understanding of Graph Optimizations + */ +typedef enum GraphOptimizationLevel { + ORT_DISABLE_ALL = 0, + ORT_ENABLE_BASIC = 1, + ORT_ENABLE_EXTENDED = 2, + ORT_ENABLE_ALL = 99 +} GraphOptimizationLevel; + +typedef enum ExecutionMode { + ORT_SEQUENTIAL = 0, + ORT_PARALLEL = 1, +} ExecutionMode; + +/** \brief Language projection identifiers + * /see OrtApi::SetLanguageProjection + */ +typedef enum OrtLanguageProjection { + ORT_PROJECTION_C = 0, + ORT_PROJECTION_CPLUSPLUS = 1, + ORT_PROJECTION_CSHARP = 2, + ORT_PROJECTION_PYTHON = 3, + ORT_PROJECTION_JAVA = 4, + ORT_PROJECTION_WINML = 5, + ORT_PROJECTION_NODEJS = 6, +} OrtLanguageProjection; + +struct OrtKernelInfo; +typedef struct OrtKernelInfo OrtKernelInfo; +struct OrtKernelContext; +typedef struct OrtKernelContext OrtKernelContext; +struct OrtCustomOp; +typedef struct OrtCustomOp OrtCustomOp; + +typedef enum OrtAllocatorType { + OrtInvalidAllocator = -1, + OrtDeviceAllocator = 0, + OrtArenaAllocator = 1 +} OrtAllocatorType; + +/** \brief Memory types for allocated memory, execution provider specific types should be extended in each provider. + */ +// Whenever this struct is updated, please also update the MakeKey function in onnxruntime / core / framework / execution_provider.cc +typedef enum OrtMemType { + OrtMemTypeCPUInput = -2, ///< Any CPU memory used by non-CPU execution provider + OrtMemTypeCPUOutput = -1, ///< CPU accessible memory outputted by non-CPU execution provider, i.e. CUDA_PINNED + OrtMemTypeCPU = OrtMemTypeCPUOutput, ///< Temporary CPU accessible memory allocated by non-CPU execution provider, i.e. CUDA_PINNED + OrtMemTypeDefault = 0, ///< The default allocator for execution provider +} OrtMemType; + +/** \brief This mimics OrtDevice type constants so they can be returned in the API + */ +typedef enum OrtMemoryInfoDeviceType { + OrtMemoryInfoDeviceType_CPU = 0, + OrtMemoryInfoDeviceType_GPU = 1, + OrtMemoryInfoDeviceType_FPGA = 2 +} OrtMemoryInfoDeviceType; + +/** \brief Algorithm to use for cuDNN Convolution Op + */ +typedef enum OrtCudnnConvAlgoSearch { + OrtCudnnConvAlgoSearchExhaustive, // expensive exhaustive benchmarking using cudnnFindConvolutionForwardAlgorithmEx + OrtCudnnConvAlgoSearchHeuristic, // lightweight heuristic based search using cudnnGetConvolutionForwardAlgorithm_v7 + OrtCudnnConvAlgoSearchDefault, // default algorithm using CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM +} OrtCudnnConvAlgoSearch; + +/** \brief CUDA Provider Options + * + * \see OrtApi::SessionOptionsAppendExecutionProvider_CUDA + */ +typedef struct OrtCUDAProviderOptions { +#ifdef __cplusplus + OrtCUDAProviderOptions() + : device_id{}, + cudnn_conv_algo_search{OrtCudnnConvAlgoSearchExhaustive}, + gpu_mem_limit{SIZE_MAX}, + arena_extend_strategy{}, + do_copy_in_default_stream{1}, + has_user_compute_stream{}, + user_compute_stream{}, + default_memory_arena_cfg{}, + tunable_op_enabled{false} {} +#endif + + /** \brief CUDA device Id + * Defaults to 0. + */ + int device_id; + + /** \brief CUDA Convolution algorithm search configuration. + * See enum OrtCudnnConvAlgoSearch for more details. + * Defaults to OrtCudnnConvAlgoSearchExhaustive. + */ + OrtCudnnConvAlgoSearch cudnn_conv_algo_search; + + /** \brief CUDA memory limit (To use all possible memory pass in maximum size_t) + * Defaults to SIZE_MAX. + * \note If a ::OrtArenaCfg has been applied, it will override this field + */ + size_t gpu_mem_limit; + + /** \brief Strategy used to grow the memory arena + * 0 = kNextPowerOfTwo
+ * 1 = kSameAsRequested
+ * Defaults to 0. + * \note If a ::OrtArenaCfg has been applied, it will override this field + */ + int arena_extend_strategy; + + /** \brief Flag indicating if copying needs to take place on the same stream as the compute stream in the CUDA EP + * 0 = Use separate streams for copying and compute. + * 1 = Use the same stream for copying and compute. + * Defaults to 1. + * WARNING: Setting this to 0 may result in data races for some models. + * Please see issue #4829 for more details. + */ + int do_copy_in_default_stream; + + /** \brief Flag indicating if there is a user provided compute stream + * Defaults to 0. + */ + int has_user_compute_stream; + + /** \brief User provided compute stream. + * If provided, please set `has_user_compute_stream` to 1. + */ + void* user_compute_stream; + + /** \brief CUDA memory arena configuration parameters + */ + OrtArenaCfg* default_memory_arena_cfg; + + /** \brief Enable TunableOp. + * Set it to 1 to enable TunableOp. Otherwise, it is disabled by default. + * This option can be superseded by environment variable ORT_CUDA_TUNABLE_OP_ENABLED. + */ + int tunable_op_enabled; + +} OrtCUDAProviderOptions; + +/** \brief ROCM Provider Options + * + * \see OrtApi::SessionOptionsAppendExecutionProvider_ROCM + */ +typedef struct OrtROCMProviderOptions { +#ifdef __cplusplus + OrtROCMProviderOptions() + : device_id{}, + miopen_conv_exhaustive_search{0}, + gpu_mem_limit{SIZE_MAX}, + arena_extend_strategy{}, + do_copy_in_default_stream{1}, + has_user_compute_stream{}, + user_compute_stream{}, + default_memory_arena_cfg{}, + tunable_op_enabled{false} {} +#endif + + /** \brief ROCM device Id + * Defaults to 0. + */ + int device_id; + + /** \brief ROCM MIOpen Convolution algorithm exaustive search option. + * Defaults to 0 (false). + */ + int miopen_conv_exhaustive_search; + + /** \brief ROCM memory limit (To use all possible memory pass in maximum size_t) + * Defaults to SIZE_MAX. + * \note If a ::OrtArenaCfg has been applied, it will override this field + */ + size_t gpu_mem_limit; + + /** \brief Strategy used to grow the memory arena + * 0 = kNextPowerOfTwo
+ * 1 = kSameAsRequested
+ * Defaults to 0. + * \note If a ::OrtArenaCfg has been applied, it will override this field + */ + int arena_extend_strategy; + + /** \brief Flag indicating if copying needs to take place on the same stream as the compute stream in the ROCM EP + * 0 = Use separate streams for copying and compute. + * 1 = Use the same stream for copying and compute. + * Defaults to 1. + * WARNING: Setting this to 0 may result in data races for some models. + * Please see issue #4829 for more details. + */ + int do_copy_in_default_stream; + + /** \brief Flag indicating if there is a user provided compute stream + * Defaults to 0. + */ + int has_user_compute_stream; + + /** \brief User provided compute stream. + * If provided, please set `has_user_compute_stream` to 1. + */ + void* user_compute_stream; + + /** \brief ROCM memory arena configuration parameters + */ + OrtArenaCfg* default_memory_arena_cfg; + + /** \brief Enable TunableOp. + * Set it to 1 to enable TunableOp. Otherwise, it is disabled by default. + * This option can be superseded by environment variable ORT_ROCM_TUNABLE_OP_ENABLED. + */ + int tunable_op_enabled; + +} OrtROCMProviderOptions; + +/** \brief TensorRT Provider Options + * + * \see OrtApi::SessionOptionsAppendExecutionProvider_TensorRT + */ +typedef struct OrtTensorRTProviderOptions { + int device_id; ///< CUDA device id (0 = default device) + int has_user_compute_stream; // indicator of user specified CUDA compute stream. + void* user_compute_stream; // user specified CUDA compute stream. + int trt_max_partition_iterations; // maximum iterations for TensorRT parser to get capability + int trt_min_subgraph_size; // minimum size of TensorRT subgraphs + size_t trt_max_workspace_size; // maximum workspace size for TensorRT. + int trt_fp16_enable; // enable TensorRT FP16 precision. Default 0 = false, nonzero = true + int trt_int8_enable; // enable TensorRT INT8 precision. Default 0 = false, nonzero = true + const char* trt_int8_calibration_table_name; // TensorRT INT8 calibration table name. + int trt_int8_use_native_calibration_table; // use native TensorRT generated calibration table. Default 0 = false, nonzero = true + int trt_dla_enable; // enable DLA. Default 0 = false, nonzero = true + int trt_dla_core; // DLA core number. Default 0 + int trt_dump_subgraphs; // dump TRT subgraph. Default 0 = false, nonzero = true + int trt_engine_cache_enable; // enable engine caching. Default 0 = false, nonzero = true + const char* trt_engine_cache_path; // specify engine cache path + int trt_engine_decryption_enable; // enable engine decryption. Default 0 = false, nonzero = true + const char* trt_engine_decryption_lib_path; // specify engine decryption library path + int trt_force_sequential_engine_build; // force building TensorRT engine sequentially. Default 0 = false, nonzero = true + // This is the legacy struct and don't add new fields here. + // For new field that can be represented by string, please add it in include/onnxruntime/core/providers/tensorrt/tensorrt_provider_options.h + // For non-string field, need to create a new separate api to handle it. +} OrtTensorRTProviderOptions; + +/** \brief MIGraphX Provider Options + * + * \see OrtApi::SessionOptionsAppendExecutionProvider_MIGraphX + */ +typedef struct OrtMIGraphXProviderOptions { + int device_id; // hip device id. + int migraphx_fp16_enable; // enable MIGraphX FP16 precision. Default 0 = false, nonzero = true + int migraphx_int8_enable; // enable MIGraphX INT8 precision. Default 0 = false, nonzero = true +} OrtMIGraphXProviderOptions; + +/** \brief OpenVINO Provider Options + * + * \see OrtApi::SessionOptionsAppendExecutionProvider_OpenVINO + */ +typedef struct OrtOpenVINOProviderOptions { +#ifdef __cplusplus + OrtOpenVINOProviderOptions() : device_type{}, enable_vpu_fast_compile{}, device_id{}, + num_of_threads{}, cache_dir{}, + context{}, enable_opencl_throttling{}, enable_dynamic_shapes{} {} +#endif + /** \brief Device type string + * + * Valid settings are one of: "CPU_FP32", "CPU_FP16", "GPU_FP32", "GPU_FP16", "MYRIAD_FP16", "VAD-M_FP16" or "VAD-F_FP32" + */ + const char* device_type; + unsigned char enable_vpu_fast_compile; ///< 0 = disabled, nonzero = enabled + const char* device_id; + size_t num_of_threads; ///< 0 = Use default number of threads + const char* cache_dir; // path is set to empty by default + void* context; + unsigned char enable_opencl_throttling; ///< 0 = disabled, nonzero = enabled + unsigned char enable_dynamic_shapes; ///< 0 = disabled, nonzero = enabled +} OrtOpenVINOProviderOptions; + +struct OrtApi; +typedef struct OrtApi OrtApi; + +struct OrtTrainingApi; +typedef struct OrtTrainingApi OrtTrainingApi; + +/** \brief The helper interface to get the right version of OrtApi + * + * Get a pointer to this structure through ::OrtGetApiBase + */ +struct OrtApiBase { + /** \brief Get a pointer to the requested version of the ::OrtApi + * + * \param[in] version Must be ::ORT_API_VERSION + * \return The ::OrtApi for the version requested, nullptr will be returned if this version is unsupported, for example when using a runtime + * older than the version created with this header file. + */ + const OrtApi*(ORT_API_CALL* GetApi)(uint32_t version)NO_EXCEPTION; + const char*(ORT_API_CALL* GetVersionString)(void)NO_EXCEPTION; ///< Returns a null terminated string of the version of the Onnxruntime library (eg: "1.8.1") +}; +typedef struct OrtApiBase OrtApiBase; + +/** \brief The Onnxruntime library's entry point to access the C API + * + * Call this to get the a pointer to an ::OrtApiBase + */ +ORT_EXPORT const OrtApiBase* ORT_API_CALL OrtGetApiBase(void) NO_EXCEPTION; + +/** \brief Thread work loop function + * + * Onnxruntime will provide the working loop on custom thread creation + * Argument is an onnxruntime built-in type which will be provided when thread pool calls OrtCustomCreateThreadFn + */ +typedef void (*OrtThreadWorkerFn)(void* ort_worker_fn_param); + +typedef const struct OrtCustomHandleType { + char __place_holder; +}* OrtCustomThreadHandle; + +/** \brief Ort custom thread creation function + * + * The function should return a thread handle to be used in onnxruntime thread pools + * Onnxruntime will throw exception on return value of nullptr or 0, indicating that the function failed to create a thread + */ +typedef OrtCustomThreadHandle (*OrtCustomCreateThreadFn)(void* ort_custom_thread_creation_options, OrtThreadWorkerFn ort_thread_worker_fn, void* ort_worker_fn_param); + +/** \brief Custom thread join function + * + * Onnxruntime thread pool destructor will call the function to join a custom thread. + * Argument ort_custom_thread_handle is the value returned by OrtCustomCreateThreadFn + */ +typedef void (*OrtCustomJoinThreadFn)(OrtCustomThreadHandle ort_custom_thread_handle); + +typedef OrtStatus*(ORT_API_CALL* RegisterCustomOpsFn)(OrtSessionOptions* options, const OrtApiBase* api); + +/** \brief The C API + * + * All C API functions are defined inside this structure as pointers to functions. + * Call OrtApiBase::GetApi to get a pointer to it + * + * \nosubgrouping + */ +struct OrtApi { + /// \name OrtStatus + /// @{ + + /** + * \brief Create an OrtStatus from a null terminated string + * + * \param[in] code + * \param[in] msg A null-terminated string. Its contents will be copied. + * \return A new OrtStatus object, must be destroyed with OrtApi::ReleaseStatus + */ + OrtStatus*(ORT_API_CALL* CreateStatus)(OrtErrorCode code, _In_ const char* msg)NO_EXCEPTION ORT_ALL_ARGS_NONNULL; + + /** \brief Get OrtErrorCode from OrtStatus + * + * \param[in] status + * \return OrtErrorCode that \p status was created with + */ + OrtErrorCode(ORT_API_CALL* GetErrorCode)(_In_ const OrtStatus* status) NO_EXCEPTION ORT_ALL_ARGS_NONNULL; + + /** \brief Get error string from OrtStatus + * + * \param[in] status + * \return The error message inside the `status`. Do not free the returned value. + */ + const char*(ORT_API_CALL* GetErrorMessage)(_In_ const OrtStatus* status)NO_EXCEPTION ORT_ALL_ARGS_NONNULL; + + /// @} + /// \name OrtEnv + /// @{ + + /** \brief Create an OrtEnv + * + * \param[in] log_severity_level The log severity level. + * \param[in] logid The log identifier. + * \param[out] out Returned newly created OrtEnv. Must be freed with OrtApi::ReleaseEnv + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateEnv, OrtLoggingLevel log_severity_level, _In_ const char* logid, _Outptr_ OrtEnv** out); + + /** \brief Create an OrtEnv + * + * \param[in] logging_function A pointer to a logging function. + * \param[in] logger_param A pointer to arbitrary data passed as the ::OrtLoggingFunction `param` parameter to + * `logging_function`. + * \param[in] log_severity_level The log severity level. + * \param[in] logid The log identifier. + * \param[out] out Returned newly created OrtEnv. Must be freed with OrtApi::ReleaseEnv + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateEnvWithCustomLogger, OrtLoggingFunction logging_function, _In_opt_ void* logger_param, + OrtLoggingLevel log_severity_level, _In_ const char* logid, _Outptr_ OrtEnv** out); + + /** \brief Enable Telemetry + * + * \note Telemetry events are on by default since they are lightweight + * \param[in] env + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(EnableTelemetryEvents, _In_ const OrtEnv* env); + /** \brief Disable Telemetry + * + * \see OrtApi::EnableTelemetryEvents + * \param[in] env + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(DisableTelemetryEvents, _In_ const OrtEnv* env); + + /// @} + /// \name OrtSession + /// @{ + + /** \brief Create an OrtSession from a model file + * + * \param[in] env + * \param[in] model_path + * \param[in] options + * \param[out] out Returned newly created OrtSession. Must be freed with OrtApi::ReleaseSession + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + // TODO: document the path separator convention? '/' vs '\' + // TODO: should specify the access characteristics of model_path. Is this read only during the + // execution of CreateSession, or does the OrtSession retain a handle to the file/directory + // and continue to access throughout the OrtSession lifetime? + // What sort of access is needed to model_path : read or read/write? + ORT_API2_STATUS(CreateSession, _In_ const OrtEnv* env, _In_ const ORTCHAR_T* model_path, + _In_ const OrtSessionOptions* options, _Outptr_ OrtSession** out); + + /** \brief Create an OrtSession from memory + * + * \param[in] env + * \param[in] model_data + * \param[in] model_data_length + * \param[in] options + * \param[out] out Returned newly created OrtSession. Must be freed with OrtApi::ReleaseSession + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateSessionFromArray, _In_ const OrtEnv* env, _In_ const void* model_data, size_t model_data_length, + _In_ const OrtSessionOptions* options, _Outptr_ OrtSession** out); + + /** \brief Run the model in an ::OrtSession + * + * Will not return until the model run has completed. Multiple threads might be used to run the model based on + * the options in the ::OrtSession and settings used when creating the ::OrtEnv + * + * \param[in] session + * \param[in] run_options If nullptr, will use a default ::OrtRunOptions + * \param[in] input_names Array of null terminated UTF8 encoded strings of the input names + * \param[in] inputs Array of ::OrtValue%s of the input values + * \param[in] input_len Number of elements in the input_names and inputs arrays + * \param[in] output_names Array of null terminated UTF8 encoded strings of the output names + * \param[in] output_names_len Number of elements in the output_names and outputs array + * \param[out] outputs Array of ::OrtValue%s that the outputs are stored in. This can also be + * an array of nullptr values, in this case ::OrtValue objects will be allocated and pointers + * to them will be set into the `outputs` array. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(Run, _Inout_ OrtSession* session, _In_opt_ const OrtRunOptions* run_options, + _In_reads_(input_len) const char* const* input_names, + _In_reads_(input_len) const OrtValue* const* inputs, size_t input_len, + _In_reads_(output_names_len) const char* const* output_names, size_t output_names_len, + _Inout_updates_all_(output_names_len) OrtValue** outputs); + + /// @} + /// \name OrtSessionOptions + /// @{ + + /** \brief Create an ::OrtSessionOptions object + * + * To use additional providers, you must build ORT with the extra providers enabled. Then call one of these + * functions to enable them in the session:
+ * OrtSessionOptionsAppendExecutionProvider_CPU
+ * OrtSessionOptionsAppendExecutionProvider_CUDA
+ * OrtSessionOptionsAppendExecutionProvider_(remaining providers...)
+ * The order they are called indicates the preference order as well. In other words call this method + * on your most preferred execution provider first followed by the less preferred ones. + * If none are called Ort will use its internal CPU execution provider. + * + * \param[out] options The newly created OrtSessionOptions. Must be freed with OrtApi::ReleaseSessionOptions + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateSessionOptions, _Outptr_ OrtSessionOptions** options); + + /** \brief Set filepath to save optimized model after graph level transformations + * + * \param[in] options + * \param[in] optimized_model_filepath + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetOptimizedModelFilePath, _Inout_ OrtSessionOptions* options, + _In_ const ORTCHAR_T* optimized_model_filepath); + + /** \brief Create a copy of an existing ::OrtSessionOptions + * + * \param[in] in_options OrtSessionOptions to copy + * \param[out] out_options Returned newly created ::OrtSessionOptions. Must be freed with OrtApi::ReleaseSessionOptions + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CloneSessionOptions, _In_ const OrtSessionOptions* in_options, + _Outptr_ OrtSessionOptions** out_options); + + /** \brief Set execution mode + * + * Controls whether you want to execute operators in your graph sequentially or in parallel. Usually when the model + * has many branches, setting this option to ExecutionMode.ORT_PARALLEL will give you better performance. + * See [docs/ONNX_Runtime_Perf_Tuning.md] for more details. + * + * \param[in] options + * \param[in] execution_mode + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetSessionExecutionMode, _Inout_ OrtSessionOptions* options, ExecutionMode execution_mode); + + /** \brief Enable profiling for a session + * + * \param[in] options + * \param[in] profile_file_prefix + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(EnableProfiling, _Inout_ OrtSessionOptions* options, _In_ const ORTCHAR_T* profile_file_prefix); + + /** \brief Disable profiling for a session + * + * \param[in] options + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(DisableProfiling, _Inout_ OrtSessionOptions* options); + + /** \brief Enable the memory pattern optimization + * + * The idea is if the input shapes are the same, we could trace the internal memory allocation + * and generate a memory pattern for future request. So next time we could just do one allocation + * with a big chunk for all the internal memory allocation. + * \note Memory pattern optimization is only available when Sequential Execution mode is enabled (see OrtApi::SetSessionExecutionMode) + * + * \see OrtApi::DisableMemPattern + * + * \param[in] options + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(EnableMemPattern, _Inout_ OrtSessionOptions* options); + + /** \brief Disable the memory pattern optimization + * + * \see OrtApi::EnableMemPattern + * + * \param[in] options + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(DisableMemPattern, _Inout_ OrtSessionOptions* options); + + /** \brief Enable the memory arena on CPU + * + * Arena may pre-allocate memory for future usage. + * + * \param[in] options + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(EnableCpuMemArena, _Inout_ OrtSessionOptions* options); + + /** \brief Disable the memory arena on CPU + * + * \param[in] options + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(DisableCpuMemArena, _Inout_ OrtSessionOptions* options); + + /** \brief Set session log id + * + * \param[in] options + * \param[in] logid The log identifier. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetSessionLogId, _Inout_ OrtSessionOptions* options, const char* logid); + + /** \brief Set session log verbosity level + * + * Applies to session load, initialization, etc + * + * \param[in] options + * \param[in] session_log_verbosity_level \snippet{doc} snippets.dox Log Verbosity Level + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetSessionLogVerbosityLevel, _Inout_ OrtSessionOptions* options, int session_log_verbosity_level); + + /** \brief Set session log severity level + * + * \param[in] options + * \param[in] session_log_severity_level The log severity level (refer to ::OrtLoggingLevel for possible values). + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetSessionLogSeverityLevel, _Inout_ OrtSessionOptions* options, int session_log_severity_level); + + /** \brief Set the optimization level to apply when loading a graph + * + * Please see https://www.onnxruntime.ai/docs/resources/graph-optimizations.html for an in-depth explanation + * \param[in,out] options The session options object + * \param[in] graph_optimization_level The optimization level + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetSessionGraphOptimizationLevel, _Inout_ OrtSessionOptions* options, + GraphOptimizationLevel graph_optimization_level); + + /** \brief Sets the number of threads used to parallelize the execution within nodes + * + * When running a single node operation, ex. add, this sets the maximum number of threads to use. + * + * \note If built with OpenMP, this has no effect on the number of threads used. In this case + * use the OpenMP env variables to configure the number of intra op num threads. + * + * \param[in] options + * \param[in] intra_op_num_threads Number of threads to use
+ * A value of 0 will use the default number of threads
+ * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetIntraOpNumThreads, _Inout_ OrtSessionOptions* options, int intra_op_num_threads); + + /** \brief Sets the number of threads used to parallelize the execution of the graph + * + * If nodes can be run in parallel, this sets the maximum number of threads to use to run them in parallel. + * + * \note If sequential execution is enabled this value is ignored, it acts as if it was set to 1. + * + * \param[in] options + * \param[in] inter_op_num_threads Number of threads to use
+ * A value of 0 will use the default number of threads
+ * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetInterOpNumThreads, _Inout_ OrtSessionOptions* options, int inter_op_num_threads); + + /// @} + /// \name OrtCustomOpDomain + /// @{ + + /** \brief Create a custom op domain + * + * \param[in] domain + * \param[out] out Newly created domain. Must be freed with OrtApi::ReleaseCustomOpDomain + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateCustomOpDomain, _In_ const char* domain, _Outptr_ OrtCustomOpDomain** out); + + /** \brief Add a custom op to a custom op domain + * + * \note The OrtCustomOp* pointer must remain valid until the ::OrtCustomOpDomain using it is released + * + * \param[in] custom_op_domain + * \param[in] op + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CustomOpDomain_Add, _Inout_ OrtCustomOpDomain* custom_op_domain, _In_ const OrtCustomOp* op); + + /// @} + /// \name OrtSessionOptions + /// @{ + + /** \brief Add custom op domain to a session options + * + * \note The OrtCustomOpDomain* must not be deleted until all sessions using it are released + * + * \param[in] options + * \param[in] custom_op_domain + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(AddCustomOpDomain, _Inout_ OrtSessionOptions* options, _In_ OrtCustomOpDomain* custom_op_domain); + + /** \deprecated Use OrtApi::RegisterCustomOpsLibrary_V2. + * + * Registers custom ops from a shared library. + * + * Loads a shared library (dll on windows, so on linux, etc) named 'library_path' and looks for this entry point: + * OrtStatus* RegisterCustomOps(OrtSessionOptions * options, const OrtApiBase* api); + * It then passes in the provided session options to this function along with the api base. + * The handle to the loaded library is returned in library_handle. It can be freed by the caller after all sessions using the passed in + * session options are destroyed, or if an error occurs and it is non null. + * + * \param[in] options + * \param[in] library_path + * \param[out] library_handle OS specific handle to the loaded library (Use FreeLibrary on Windows, dlclose on Linux, etc.. to unload) + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(RegisterCustomOpsLibrary, _Inout_ OrtSessionOptions* options, _In_ const char* library_path, _Outptr_ void** library_handle); + + /// @} + /// \name OrtSession + /// @{ + + /** \brief Get input count for a session + * + * This number must also match the number of inputs passed to OrtApi::Run + * + * \see OrtApi::SessionGetInputTypeInfo, OrtApi::SessionGetInputName, OrtApi::Session + * + * \param[in] session + * \param[out] out Number of inputs + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionGetInputCount, _In_ const OrtSession* session, _Out_ size_t* out); + + /** \brief Get output count for a session + * + * This number must also match the number of outputs returned by OrtApi::Run + * + * \see OrtApi::SessionGetOutputTypeInfo, OrtApi::SessionGetOutputName, OrtApi::Session + * + * \param[in] session + * \param[out] out Number of outputs + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionGetOutputCount, _In_ const OrtSession* session, _Out_ size_t* out); + + /** \brief Get overridable initializer count + * + * \see OrtApi::SessionGetOverridableInitializerTypeInfo, OrtApi::SessionGetOverridableInitializerName + * + * \param[in] session + * \param[in] out + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionGetOverridableInitializerCount, _In_ const OrtSession* session, _Out_ size_t* out); + + /** \brief Get input type information + * + * \param[in] session + * \param[in] index Must be between 0 (inclusive) and what OrtApi::SessionGetInputCount returns (exclusive) + * \param[out] type_info Must be freed with OrtApi::ReleaseTypeInfo + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionGetInputTypeInfo, _In_ const OrtSession* session, size_t index, _Outptr_ OrtTypeInfo** type_info); + + /** \brief Get output type information + * + * \param[in] session + * \param[in] index Must be between 0 (inclusive) and what OrtApi::SessionGetOutputCount returns (exclusive) + * \param[out] type_info Must be freed with OrtApi::ReleaseTypeInfo + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionGetOutputTypeInfo, _In_ const OrtSession* session, size_t index, _Outptr_ OrtTypeInfo** type_info); + + /** \brief Get overridable initializer type information + * + * \param[in] session + * \param[in] index Must be between 0 (inclusive) and what OrtApi::SessionGetOverridableInitializerCount returns (exclusive) + * \param[out] type_info Must be freed with OrtApi::ReleaseTypeInfo + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionGetOverridableInitializerTypeInfo, _In_ const OrtSession* session, size_t index, _Outptr_ OrtTypeInfo** type_info); + + /** \brief Get input name + * + * \param[in] session + * \param[in] index Must be between 0 (inclusive) and what OrtApi::SessionGetInputCount returns (exclusive) + * \param[in] allocator + * \param[out] value Set to a null terminated UTF-8 encoded string allocated using `allocator`. Must be freed using `allocator`. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionGetInputName, _In_ const OrtSession* session, size_t index, _Inout_ OrtAllocator* allocator, _Outptr_ char** value); + + /** \brief Get output name + * + * \param[in] session + * \param[in] index Must be between 0 (inclusive) and what OrtApi::SessionGetOutputCount returns (exclusive) + * \param[in] allocator + * \param[out] value Set to a null terminated UTF-8 encoded string allocated using `allocator`. Must be freed using `allocator`. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionGetOutputName, _In_ const OrtSession* session, size_t index, _Inout_ OrtAllocator* allocator, _Outptr_ char** value); + + /** \brief Get overridable initializer name + * + * \param[in] session + * \param[in] index Must be between 0 (inclusive) and what OrtApi::SessionGetOverridableInitializerCount returns (exclusive) + * \param[in] allocator + * \param[out] value Set to a null terminated UTF-8 encoded string allocated using `allocator`. Must be freed using `allocator`. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionGetOverridableInitializerName, _In_ const OrtSession* session, size_t index, + _Inout_ OrtAllocator* allocator, _Outptr_ char** value); + + /// @} + /// \name OrtRunOptions + /// @{ + + /** \brief Create an OrtRunOptions + * + * \param[out] out Returned newly created ::OrtRunOptions. Must be freed with OrtApi::ReleaseRunOptions + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateRunOptions, _Outptr_ OrtRunOptions** out); + + /** \brief Set per-run log verbosity level + * + * \see OrtApi::RunOptionsGetRunLogVerbosityLevel + * + * \param[in] options + * \param[in] log_verbosity_level \snippet{doc} snippets.dox Log Verbosity Level + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(RunOptionsSetRunLogVerbosityLevel, _Inout_ OrtRunOptions* options, int log_verbosity_level); + + /** \brief Set per-run log severity level + * + * \see OrtApi::RunOptionsGetRunLogSeverityLevel + * + * \param[in] options + * \param[in] log_severity_level The log severity level (refer to ::OrtLoggingLevel for possible values). + */ + ORT_API2_STATUS(RunOptionsSetRunLogSeverityLevel, _Inout_ OrtRunOptions* options, int log_severity_level); + + /** \brief Set per-run tag + * + * This is used in a per-run log identifier. + * + * \see OrtApi::RunOptionsGetRunTag + * + * \param[in] options + * \param[in] run_tag The run tag. + */ + ORT_API2_STATUS(RunOptionsSetRunTag, _Inout_ OrtRunOptions* options, _In_ const char* run_tag); + + /** \brief Get per-run log verbosity level + * + * \see OrtApi::RunOptionsSetRunLogVerbosityLevel + * + * \param[in] options + * \param[out] log_verbosity_level \snippet{doc} snippets.dox Log Verbosity Level + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(RunOptionsGetRunLogVerbosityLevel, _In_ const OrtRunOptions* options, + _Out_ int* log_verbosity_level); + + /** \brief Get per-run log severity level + * + * \see OrtApi::RunOptionsSetRunLogSeverityLevel + * + * \param[in] options + * \param[out] log_severity_level The log severity level (refer to ::OrtLoggingLevel for possible values). + */ + ORT_API2_STATUS(RunOptionsGetRunLogSeverityLevel, _In_ const OrtRunOptions* options, _Out_ int* log_severity_level); + + /** \brief Get per-run tag + * + * This is used in a per-run log identifier. + * + * \see OrtApi::RunOptionsSetRunTag + * + * \param[in] options + * \param[out] run_tag The run tag. + * Do not free this value, it is owned by `options`. It will be invalidated if the run tag + * changes (i.e., with OrtApi::RunOptionsSetRunTag) or `options` is freed. + */ + ORT_API2_STATUS(RunOptionsGetRunTag, _In_ const OrtRunOptions* options, _Out_ const char** run_tag); + + /** \brief Set terminate flag + * + * If a currently executing session needs to be force terminated, this can be called from another thread to force it to fail with an error. + * + * \param[in] options + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(RunOptionsSetTerminate, _Inout_ OrtRunOptions* options); + + /** \brief Clears the terminate flag + * + * Used so the OrtRunOptions instance can be used in a new OrtApi::Run call without it instantly terminating + * + * \param[in] options + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(RunOptionsUnsetTerminate, _Inout_ OrtRunOptions* options); + + /// @} + /// \name OrtValue + /// @{ + + /** \brief Create a tensor + * + * Create a tensor using a supplied ::OrtAllocator + * + * \param[in] allocator + * \param[in] shape Pointer to the tensor shape dimensions. + * \param[in] shape_len The number of tensor shape dimensions. + * \param[in] type + * \param[out] out Returns newly created ::OrtValue. Must be freed with OrtApi::ReleaseValue + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateTensorAsOrtValue, _Inout_ OrtAllocator* allocator, _In_ const int64_t* shape, size_t shape_len, + ONNXTensorElementDataType type, _Outptr_ OrtValue** out); + + /** \brief Create a tensor backed by a user supplied buffer + * + * Create a tensor with user's buffer. You can fill the buffer either before calling this function or after. + * p_data is owned by caller. ReleaseValue won't release p_data. + * + * \param[in] info Memory description of where the p_data buffer resides (CPU vs GPU etc). + * \param[in] p_data Pointer to the data buffer. + * \param[in] p_data_len The number of bytes in the data buffer. + * \param[in] shape Pointer to the tensor shape dimensions. + * \param[in] shape_len The number of tensor shape dimensions. + * \param[in] type The data type. + * \param[out] out Returns newly created ::OrtValue. Must be freed with OrtApi::ReleaseValue + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateTensorWithDataAsOrtValue, _In_ const OrtMemoryInfo* info, _Inout_ void* p_data, + size_t p_data_len, _In_ const int64_t* shape, size_t shape_len, ONNXTensorElementDataType type, + _Outptr_ OrtValue** out); + + /** \brief Return if an ::OrtValue is a tensor type + * + * \param[in] value A tensor type (string tensors are not supported) + * \param[out] out Set to 1 iff ::OrtValue is a tensor, 0 otherwise + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(IsTensor, _In_ const OrtValue* value, _Out_ int* out); + + /** \brief Get a pointer to the raw data inside a tensor + * + * Used to read/write/modify the internal tensor data directly. + * \note The returned pointer is valid until the \p value is destroyed. + * + * \param[in] value A tensor type (string tensors are not supported) + * \param[out] out Filled in with a pointer to the internal storage + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetTensorMutableData, _In_ OrtValue* value, _Outptr_ void** out); + + /** \brief Set all strings at once in a string tensor + * + * \param[in,out] value A tensor of type ONNX_TENSOR_ELEMENT_DATA_TYPE_STRING + * \param[in] s An array of strings. Each string in this array must be null terminated. + * \param[in] s_len Count of strings in s (Must match the size of \p value's tensor shape) + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(FillStringTensor, _Inout_ OrtValue* value, _In_ const char* const* s, size_t s_len); + + /** \brief Get total byte length for all strings in a string tensor + * + * Typically used with OrtApi::GetStringTensorContent + * + * \param[in] value A tensor of type ONNX_TENSOR_ELEMENT_DATA_TYPE_STRING + * \param[out] len Total byte length of all strings (does not include trailing nulls) + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetStringTensorDataLength, _In_ const OrtValue* value, _Out_ size_t* len); + + /** \brief Get all strings from a string tensor + * + * An example of the results:
+ * Given \p value is a string tensor with the strings { "This" "is" "a" "test" }
+ * \p s must have a size of 11 bytes
+ * \p offsets must have 4 elements
+ * After the call, these values will be filled in:
+ * \p s will contain "Thisisatest"
+ * \p offsets will contain { 0, 4, 6, 7 }
+ * The length of the last string is just s_len - offsets[last] + * + * \param[in] value A tensor of type ONNX_TENSOR_ELEMENT_DATA_TYPE_STRING + * \param[in] s Buffer to sequentially write all tensor strings to. Each string is NOT null-terminated. + * \param[in] s_len Number of bytes of buffer pointed to by \p s (Get it from OrtApi::GetStringTensorDataLength) + * \param[out] offsets Array of start offsets into the strings written to \p s + * \param[in] offsets_len Number of elements in offsets + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetStringTensorContent, _In_ const OrtValue* value, _Out_writes_bytes_all_(s_len) void* s, + size_t s_len, _Out_writes_all_(offsets_len) size_t* offsets, size_t offsets_len); + + /// @} + /// \name OrtTypeInfo + /// @{ + + /** \brief Get ::OrtTensorTypeAndShapeInfo from an ::OrtTypeInfo + * + * \param[in] type_info + * \param[out] out Do not free this value, it will be valid until type_info is freed. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CastTypeInfoToTensorInfo, _In_ const OrtTypeInfo* type_info, + _Outptr_result_maybenull_ const OrtTensorTypeAndShapeInfo** out); + + /** \brief Get ::ONNXType from ::OrtTypeInfo + * + * \param[in] type_info + * \param[out] out + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetOnnxTypeFromTypeInfo, _In_ const OrtTypeInfo* type_info, _Out_ enum ONNXType* out); + + /// @} + /// \name OrtTensorTypeAndShapeInfo + /// @{ + + /** \brief Create an ::OrtTensorTypeAndShapeInfo object + * + * \param[out] out Returns newly created ::OrtTensorTypeAndShapeInfo. Must be freed with OrtApi::ReleaseTensorTypeAndShapeInfo + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateTensorTypeAndShapeInfo, _Outptr_ OrtTensorTypeAndShapeInfo** out); + + /** \brief Set element type in ::OrtTensorTypeAndShapeInfo + * + * \param[in] info + * \param[in] type + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetTensorElementType, _Inout_ OrtTensorTypeAndShapeInfo* info, enum ONNXTensorElementDataType type); + + /** \brief Set shape information in ::OrtTensorTypeAndShapeInfo + * + * \param[in] info + * \param[in] dim_values Array with `dim_count` elements. Can contain negative values. + * \param[in] dim_count Number of elements in `dim_values` + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetDimensions, OrtTensorTypeAndShapeInfo* info, _In_ const int64_t* dim_values, size_t dim_count); + + /** \brief Get element type in ::OrtTensorTypeAndShapeInfo + * + * \see OrtApi::SetTensorElementType + * + * \param[in] info + * \param[out] out + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetTensorElementType, _In_ const OrtTensorTypeAndShapeInfo* info, + _Out_ enum ONNXTensorElementDataType* out); + + /** \brief Get dimension count in ::OrtTensorTypeAndShapeInfo + * + * \see OrtApi::GetDimensions + * + * \param[in] info + * \param[out] out + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetDimensionsCount, _In_ const OrtTensorTypeAndShapeInfo* info, _Out_ size_t* out); + + /** \brief Get dimensions in ::OrtTensorTypeAndShapeInfo + * + * \param[in] info + * \param[out] dim_values Array with `dim_values_length` elements. On return, filled with the dimensions stored in the ::OrtTensorTypeAndShapeInfo + * \param[in] dim_values_length Number of elements in `dim_values`. Use OrtApi::GetDimensionsCount to get this value + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetDimensions, _In_ const OrtTensorTypeAndShapeInfo* info, _Out_ int64_t* dim_values, + size_t dim_values_length); + + /** \brief Get symbolic dimension names in ::OrtTensorTypeAndShapeInfo + * + * \param[in] info + * \param[in] dim_params Array with `dim_params_length` elements. On return filled with pointers to null terminated strings of the dimension names + * \param[in] dim_params_length Number of elements in `dim_params`. Use OrtApi::GetDimensionsCount to get this value + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetSymbolicDimensions, _In_ const OrtTensorTypeAndShapeInfo* info, + _Out_writes_all_(dim_params_length) const char* dim_params[], size_t dim_params_length); + + /** \brief Get total number of elements in a tensor shape from an ::OrtTensorTypeAndShapeInfo + * + * Return the number of elements specified by the tensor shape (all dimensions multiplied by each other). + * For 0 dimensions, 1 is returned. If any dimension is less than 0, the result is always -1. + * + * Examples:
+ * [] = 1
+ * [1,3,4] = 12
+ * [2,0,4] = 0
+ * [-1,3,4] = -1
+ * + * \param[in] info + * \param[out] out Number of elements + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetTensorShapeElementCount, _In_ const OrtTensorTypeAndShapeInfo* info, _Out_ size_t* out); + + /// @} + /// \name OrtValue + /// @{ + + /** \brief Get type and shape information from a tensor ::OrtValue + * + * \param[in] value Must be a tensor (not a map/sequence/etc) or will return failure + * \param[out] out Newly created ::OrtTensorTypeAndShapeInfo. Must be freed with OrtApi::ReleaseTensorTypeAndShapeInfo + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetTensorTypeAndShape, _In_ const OrtValue* value, _Outptr_ OrtTensorTypeAndShapeInfo** out); + + /** \brief Get type information of an OrtValue + * + * \param[in] value + * \param[out] out Newly created ::OrtTypeInfo. Must be freed with OrtApi::ReleaseTypeInfo + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetTypeInfo, _In_ const OrtValue* value, _Outptr_result_maybenull_ OrtTypeInfo** out); + + /** \brief Get ONNXType of an ::OrtValue + * + * \param[in] value + * \param[out] out + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetValueType, _In_ const OrtValue* value, _Out_ enum ONNXType* out); + + /// @} + /// \name OrtMemoryInfo + /// @{ + + /** \brief Create an ::OrtMemoryInfo + * + * \param[in] name + * \param[in] type + * \param[in] id + * \param[in] mem_type + * \param[out] out Newly created ::OrtMemoryInfo. Must be freed with OrtAPi::ReleaseMemoryInfo + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateMemoryInfo, _In_ const char* name, enum OrtAllocatorType type, int id, + enum OrtMemType mem_type, _Outptr_ OrtMemoryInfo** out); + + /** \brief Create an ::OrtMemoryInfo for CPU memory + * + * Special case version of OrtApi::CreateMemoryInfo for CPU based memory. Same as using OrtApi::CreateMemoryInfo with name = "Cpu" and id = 0. + * + * \param[in] type + * \param[in] mem_type + * \param[out] out + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateCpuMemoryInfo, enum OrtAllocatorType type, enum OrtMemType mem_type, + _Outptr_ OrtMemoryInfo** out); + + /** \brief Compare ::OrtMemoryInfo objects for equality + * + * Compares all settings of each ::OrtMemoryInfo for equality + * + * \param[in] info1 + * \param[in] info2 + * \param[out] out Set to 0 if equal, -1 if not equal + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CompareMemoryInfo, _In_ const OrtMemoryInfo* info1, _In_ const OrtMemoryInfo* info2, _Out_ int* out); + + /** \brief Get name from ::OrtMemoryInfo + * + * \param[in] ptr + * \param[out] out Writes null terminated string to this pointer. Do NOT free the returned pointer. It is valid for the lifetime of the ::OrtMemoryInfo + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(MemoryInfoGetName, _In_ const OrtMemoryInfo* ptr, _Out_ const char** out); + + /** \brief Get the id from ::OrtMemoryInfo + */ + ORT_API2_STATUS(MemoryInfoGetId, _In_ const OrtMemoryInfo* ptr, _Out_ int* out); + + /** \brief Get the ::OrtMemType from ::OrtMemoryInfo + */ + ORT_API2_STATUS(MemoryInfoGetMemType, _In_ const OrtMemoryInfo* ptr, _Out_ OrtMemType* out); + + /** \brief Get the ::OrtAllocatorType from ::OrtMemoryInfo + */ + ORT_API2_STATUS(MemoryInfoGetType, _In_ const OrtMemoryInfo* ptr, _Out_ OrtAllocatorType* out); + + /// @} + /// \name OrtAllocator + /// @{ + + /// \brief Calls OrtAllocator::Alloc function + ORT_API2_STATUS(AllocatorAlloc, _Inout_ OrtAllocator* ort_allocator, size_t size, _Outptr_ void** out); + /// \brief Calls OrtAllocator::Free function + ORT_API2_STATUS(AllocatorFree, _Inout_ OrtAllocator* ort_allocator, void* p); + /// \brief Calls OrtAllocator::Info function + ORT_API2_STATUS(AllocatorGetInfo, _In_ const OrtAllocator* ort_allocator, _Outptr_ const struct OrtMemoryInfo** out); + + /** \brief Get the default allocator + * + * The default allocator is a CPU based, non-arena. Always returns the same pointer to the same default allocator. + * + * \param[out] out Returned value should NOT be freed + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetAllocatorWithDefaultOptions, _Outptr_ OrtAllocator** out); + + /// @} + /// \name OrtSessionOptions + /// @{ + + /** \brief Override session symbolic dimensions + * + * Override symbolic dimensions (by specific denotation strings) with actual values if known at session initialization time to enable + * optimizations that can take advantage of fixed values (such as memory planning, etc) + * + * \param[in] options + * \param[in] dim_denotation + * \param[in] dim_value + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(AddFreeDimensionOverride, _Inout_ OrtSessionOptions* options, _In_ const char* dim_denotation, + _In_ int64_t dim_value); + + /// @} + /// \name OrtValue + /// @{ + + /* Internal information (not seen in Doxygen) + * + * APIs to support non-tensor types - map and sequence. + * Currently only the following types are supported + * Note: the following types should be kept in sync with data_types.h + * Map types + * ========= + * std::map + * std::map + * std::map + * std::map + * std::map + * std::map + * std::map + * std::map + * + * Sequence types + * ============== + * std::vector + * std::vector + * std::vector + * std::vector + * std::vector> + * std::vector + */ + + /** \brief Get non tensor data from an ::OrtValue + * + * If `value` is of type ONNX_TYPE_MAP, you need to retrieve the keys and values + * separately. Use index=0 to retrieve keys and index=1 to retrieve values. + * If `value` is of type ONNX_TYPE_SEQUENCE, use index to retrieve the index'th element + * of the sequence. + * + * \param[in] value + * \param[in] index See above for usage based on `value` type + * \param[in] allocator Allocator used to allocate ::OrtValue + * \param[out] out Created ::OrtValue that holds the element requested. Must be freed with OrtApi::ReleaseValue + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetValue, _In_ const OrtValue* value, int index, _Inout_ OrtAllocator* allocator, + _Outptr_ OrtValue** out); + + /** \brief Get non tensor value count from an ::OrtValue + * + * If `value` is of type ONNX_TYPE_MAP 2 will always be returned. For ONNX_TYPE_SEQUENCE + * the number of elements in the sequence will be returned + * + * \param[in] value + * \param[out] out + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetValueCount, _In_ const OrtValue* value, _Out_ size_t* out); + + /** \brief Create a map or sequence ::OrtValue + * + * To construct a map (ONNX_TYPE_MAP), use num_values = 2 and `in` should be an array of 2 ::OrtValue%s + * representing keys and values.
+ * + * To construct a sequence (ONNX_TYPE_SEQUENCE), use num_values = N where N is the number of the elements in the + * sequence. 'in' should be an array of N ::OrtValue%s. + * + * \param[in] in See above for details + * \param[in] num_values + * \param[in] value_type Must be either ONNX_TYPE_MAP or ONNX_TYPE_SEQUENCE + * \param[out] out Newly created ::OrtValue. Must be freed with OrtApi::ReleaseValue + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateValue, _In_reads_(num_values) const OrtValue* const* in, size_t num_values, + enum ONNXType value_type, _Outptr_ OrtValue** out); + + /** \brief Create an opaque (custom user defined type) ::OrtValue + * + * Constructs an ::OrtValue that contains a value of non-standard type created for + * experiments or while awaiting standardization. ::OrtValue in this case would contain + * an internal representation of the Opaque type. Opaque types are distinguished from + * each other by two strings 1) domain and 2) type name. The combination of the two + * must be unique, so the type representation is properly identified internally. The combination + * must be properly registered from within ORT at both compile/run time or by another API. + * + * To construct the ::OrtValue pass domain and type names, also a pointer to a data container + * the type of which must be known to both ORT and the client program. That data container may or may + * not match the internal representation of the Opaque type. The sizeof(data_container) is passed for + * verification purposes. + * + * \param[in] domain_name Null terminated string of the domain name + * \param[in] type_name Null terminated string of the type name + * \param[in] data_container User pointer Data to populate ::OrtValue + * \param[in] data_container_size Size in bytes of what `data_container` points to + * \param[out] out Newly created ::OrtValue. Must be freed with OrtApi::ReleaseValue + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateOpaqueValue, _In_z_ const char* domain_name, _In_z_ const char* type_name, + _In_ const void* data_container, size_t data_container_size, _Outptr_ OrtValue** out); + + /** \brief Get internal data from an opaque (custom user defined type) ::OrtValue + * + * Copies internal data from an opaque value into a user provided buffer + * + * \see OrtApi::CreateOpaqueValue + * + * \param[in] domain_name Null terminated string of the domain name + * \param[in] type_name Null terminated string of the type name + * \param[in] in The opaque ::OrtValue + * \param[out] data_container Buffer to copy data into + * \param[out] data_container_size Size in bytes of the buffer pointed to by data_container. Must match the size of the internal buffer. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetOpaqueValue, _In_ const char* domain_name, _In_ const char* type_name, _In_ const OrtValue* in, + _Out_ void* data_container, size_t data_container_size); + + /// @} + /// \name OrtKernelInfo + /// Custom operator APIs. + /// @{ + + /** \brief Get a float stored as an attribute in the graph node + * + * \param[in] info ::OrtKernelInfo instance + * \param[in] name Null terminated string of the name of the attribute + * \param[out] out Pointer to memory where the attribute will be stored + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(KernelInfoGetAttribute_float, _In_ const OrtKernelInfo* info, _In_ const char* name, + _Out_ float* out); + + /** \brief Fetch a 64-bit int stored as an attribute in the graph node + * + * \param[in] info ::OrtKernelInfo instance + * \param[in] name Null terminated string of the name of the attribute + * \param[out] out Pointer to memory where the attribute will be stored + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(KernelInfoGetAttribute_int64, _In_ const OrtKernelInfo* info, _In_ const char* name, + _Out_ int64_t* out); + + /** \brief Fetch a string stored as an attribute in the graph node + * + * If `out` is nullptr, the value of `size` is set to the true size of the string + * attribute, and a success status is returned. + * + * If the `size` parameter is greater than or equal to the actual string attribute's size, + * the value of `size` is set to the true size of the string attribute, the provided memory + * is filled with the attribute's contents, and a success status is returned. + * + * If the `size` parameter is less than the actual string attribute's size and `out` + * is not nullptr, the value of `size` is set to the true size of the string attribute + * and a failure status is returned.) + * + * \param[in] info ::OrtKernelInfo instance + * \param[in] name Null terminated string of the name of the attribute + * \param[out] out Pointer to memory where the attribute will be stored + * \param[in,out] size See above comments for details + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(KernelInfoGetAttribute_string, _In_ const OrtKernelInfo* info, _In_ const char* name, _Out_ char* out, + _Inout_ size_t* size); + + /// @} + /// \name OrtKernelContext + /// Custom operator APIs. + /// @{ + + /** \brief Used for custom operators, get the input count of a kernel + * + * \see ::OrtCustomOp + */ + ORT_API2_STATUS(KernelContext_GetInputCount, _In_ const OrtKernelContext* context, _Out_ size_t* out); + + /** \brief Used for custom operators, get the output count of a kernel + * + * \see ::OrtCustomOp + */ + ORT_API2_STATUS(KernelContext_GetOutputCount, _In_ const OrtKernelContext* context, _Out_ size_t* out); + + /** \brief Used for custom operators, get an input of a kernel + * + * \see ::OrtCustomOp + */ + ORT_API2_STATUS(KernelContext_GetInput, _In_ const OrtKernelContext* context, _In_ size_t index, + _Out_ const OrtValue** out); + + /** \brief Used for custom operators, get an output of a kernel + * + * \see ::OrtCustomOp + */ + ORT_API2_STATUS(KernelContext_GetOutput, _Inout_ OrtKernelContext* context, _In_ size_t index, + _In_ const int64_t* dim_values, size_t dim_count, _Outptr_ OrtValue** out); + + /// @} + /// \name OrtEnv + /// @{ + ORT_CLASS_RELEASE(Env); + /// @} + /// \name OrtStatus + /// @{ + ORT_CLASS_RELEASE(Status); + /// @} + /// \name OrtMemoryInfo + /// @{ + ORT_CLASS_RELEASE(MemoryInfo); + /// @} + /// \name OrtSession + /// @{ + ORT_CLASS_RELEASE(Session); // Don't call ReleaseSession from Dllmain (because session owns a thread pool) + /// @} + /// \name OrtValue + /// @{ + ORT_CLASS_RELEASE(Value); + /// @} + /// \name OrtRunOptions + /// @{ + ORT_CLASS_RELEASE(RunOptions); + /// @} + /// \name OrtTypeInfo + /// @{ + ORT_CLASS_RELEASE(TypeInfo); + /// @} + /// \name OrtTensorTypeAndShapeInfo + /// @{ + ORT_CLASS_RELEASE(TensorTypeAndShapeInfo); + /// @} + /// \name OrtSessionOptions + /// @{ + ORT_CLASS_RELEASE(SessionOptions); + /// @} + /// \name OrtCustomOpDomain + /// @{ + ORT_CLASS_RELEASE(CustomOpDomain); + + /// @} + /// \name OrtTypeInfo + /// @{ + + /** \brief Get denotation from type information + * + * Augments ::OrtTypeInfo to return denotations on the type. + * + * This is used by WinML to determine if an input/output is intended to be an Image or a Tensor. + * + * \param[in] type_info + * \param[out] denotation Pointer to the null terminated denotation string is written to this pointer. This pointer is valid until the object is destroyed or the name is changed, do not free. + * \param[out] len Length in bytes of the string returned in `denotation` + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetDenotationFromTypeInfo, _In_ const OrtTypeInfo* type_info, _Out_ const char** const denotation, + _Out_ size_t* len); + + /** \brief Get detailed map information from an ::OrtTypeInfo + * + * This augments ::OrtTypeInfo to return an ::OrtMapTypeInfo when the type is a map. + * The OrtMapTypeInfo has additional information about the map's key type and value type. + * + * This is used by WinML to support model reflection APIs. + * + * \param[out] type_info + * \param[out] out A pointer to the ::OrtMapTypeInfo. Do not free this value + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CastTypeInfoToMapTypeInfo, _In_ const OrtTypeInfo* type_info, + _Outptr_result_maybenull_ const OrtMapTypeInfo** out); + + /** \brief Cast ::OrtTypeInfo to an ::OrtSequenceTypeInfo + * + * This api augments ::OrtTypeInfo to return an ::OrtSequenceTypeInfo when the type is a sequence. + * The ::OrtSequenceTypeInfo has additional information about the sequence's element type. + * + * This is used by WinML to support model reflection APIs. + * + * \param[in] type_info + * \param[out] out A pointer to the OrtSequenceTypeInfo. Do not free this value + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CastTypeInfoToSequenceTypeInfo, _In_ const OrtTypeInfo* type_info, + _Outptr_result_maybenull_ const OrtSequenceTypeInfo** out); + + /// @} + /// \name OrtMapTypeInfo + /// @{ + + /** \brief Get key type from an ::OrtMapTypeInfo + * + * Key types are restricted to being scalar types. + * + * This is used by WinML to support model reflection APIs. + * + * \param[in] map_type_info + * \param[out] out + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetMapKeyType, _In_ const OrtMapTypeInfo* map_type_info, _Out_ enum ONNXTensorElementDataType* out); + + /** \brief Get the value type from an ::OrtMapTypeInfo + * + * \param[in] map_type_info + * \param[out] type_info + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetMapValueType, _In_ const OrtMapTypeInfo* map_type_info, _Outptr_ OrtTypeInfo** type_info); + + /// @} + /// \name OrtSequenceTypeInfo + /// @{ + + /** \brief Get element type from an ::OrtSequenceTypeInfo + * + * This is used by WinML to support model reflection APIs. + * + * \param[in] sequence_type_info + * \param[out] type_info + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetSequenceElementType, _In_ const OrtSequenceTypeInfo* sequence_type_info, + _Outptr_ OrtTypeInfo** type_info); + + /// @} + /// \name OrtMapTypeInfo + /// @{ + ORT_CLASS_RELEASE(MapTypeInfo); + /// @} + /// \name OrtSequenceTypeInfo + /// @{ + ORT_CLASS_RELEASE(SequenceTypeInfo); + + /// @} + /// \name OrtSession + /// @{ + + /** \brief End profiling and return filename of the profile data + * + * Profiling is turned on through OrtApi::EnableProfiling + * + * \param[in] session + * \param[in] allocator + * \param[out] out Null terminated string of the filename, allocated using `allocator`. Must be freed using `allocator` + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionEndProfiling, _In_ OrtSession* session, _Inout_ OrtAllocator* allocator, _Outptr_ char** out); + + /** \brief Get ::OrtModelMetadata from an ::OrtSession + * + * \param[in] session + * \param[out] out Newly created ::OrtModelMetadata. Must be freed using OrtApi::ReleaseModelMetadata + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionGetModelMetadata, _In_ const OrtSession* session, _Outptr_ OrtModelMetadata** out); + + /// @} + /// \name OrtModelMetadata + /// @{ + + /** \brief Get `producer name` from an ::OrtModelMetadata + * + * \param[in] model_metadata + * \param[in] allocator + * \param[out] value Set to a null terminated string allocated using `allocator`. Must be freed using `allocator` + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(ModelMetadataGetProducerName, _In_ const OrtModelMetadata* model_metadata, + _Inout_ OrtAllocator* allocator, _Outptr_ char** value); + + /** \brief Get `graph name` from an ::OrtModelMetadata + * + * \param[in] model_metadata + * \param[in] allocator + * \param[out] value Set to a null terminated string allocated using `allocator`. Must be freed using `allocator` + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(ModelMetadataGetGraphName, _In_ const OrtModelMetadata* model_metadata, + _Inout_ OrtAllocator* allocator, _Outptr_ char** value); + + /** \brief Get `domain` from an ::OrtModelMetadata + * + * \param[in] model_metadata + * \param[in] allocator + * \param[out] value Set to a null terminated string allocated using `allocator`. Must be freed using `allocator` + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(ModelMetadataGetDomain, _In_ const OrtModelMetadata* model_metadata, _Inout_ OrtAllocator* allocator, + _Outptr_ char** value); + + /** \brief Get `description` from an ::OrtModelMetadata + * + * \param[in] model_metadata + * \param[in] allocator + * \param[out] value Set to a null terminated string allocated using `allocator`. Must be freed using `allocator` + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(ModelMetadataGetDescription, _In_ const OrtModelMetadata* model_metadata, + _Inout_ OrtAllocator* allocator, _Outptr_ char** value); + + /** \brief Return data for a key in the custom metadata map in an ::OrtModelMetadata + * + * \param[in] model_metadata + * \param[in] allocator + * \param[in] key Null terminated string + * \param[out] value Set to a null terminated string allocated using `allocator`. Must be freed using `allocator` + * `value` will be set to nullptr if the given key is not found in the custom metadata map. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(ModelMetadataLookupCustomMetadataMap, _In_ const OrtModelMetadata* model_metadata, + _Inout_ OrtAllocator* allocator, _In_ const char* key, _Outptr_result_maybenull_ char** value); + + /** \brief Get version number from an ::OrtModelMetadata + * + * \param[in] model_metadata + * \param[out] value Set to the version number + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(ModelMetadataGetVersion, _In_ const OrtModelMetadata* model_metadata, _Out_ int64_t* value); + + ORT_CLASS_RELEASE(ModelMetadata); + + /// @} + /// \name OrtEnv + /// @{ + + /** \brief Create an OrtEnv + * + * Create an environment with global threadpools that will be shared across sessions. + * Use this in conjunction with OrtApi::DisablePerSessionThreads or else the session will use + * its own thread pools. + * + * \param[in] log_severity_level The log severity level. + * \param[in] logid The log identifier. + * \param[in] tp_options + * \param[out] out Returned newly created OrtEnv. Must be freed with OrtApi::ReleaseEnv + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateEnvWithGlobalThreadPools, OrtLoggingLevel log_severity_level, _In_ const char* logid, + _In_ const OrtThreadingOptions* tp_options, _Outptr_ OrtEnv** out); + + /// @} + /// \name OrtSessionOptions + /// @{ + + /** \brief Use global thread pool on a session + * + * Disable using per session thread pool and use the shared global threadpool. + * This should be used in conjunction with OrtApi::CreateEnvWithGlobalThreadPools. + * + * \param[in] options + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(DisablePerSessionThreads, _Inout_ OrtSessionOptions* options); + + /// @} + /// \name OrtThreadingOptions + /// @{ + + /** \brief Create an ::OrtThreadingOptions + * + * \param[out] out Newly created ::OrtThreadingOptions. Must be freed with OrtApi::ReleaseThreadingOptions + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateThreadingOptions, _Outptr_ OrtThreadingOptions** out); + + ORT_CLASS_RELEASE(ThreadingOptions); + + /// @} + /// \name OrtModelMetadata + /// @{ + + /** + * + * \param[in] model_metadata + * \param[in] allocator + * \param[out] keys Array of null terminated strings (array count = num_keys) allocated using `allocator`. + * The strings and the pointer array must be freed using `allocator` + * `keys` will be set to nullptr if the custom metadata map is empty. + * \param[out] num_keys Set to the number of elements in the `keys` array + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(ModelMetadataGetCustomMetadataMapKeys, _In_ const OrtModelMetadata* model_metadata, + _Inout_ OrtAllocator* allocator, _Outptr_result_buffer_maybenull_(*num_keys) char*** keys, _Out_ int64_t* num_keys); + + /// @} + /// \name OrtSessionOptions + /// @{ + + /** + * + * Override symbolic dimensions (by specific name strings) with actual values + * if known at session initialization time to enable optimizations that can + * take advantage of fixed values (such as memory planning, etc) + * + */ + ORT_API2_STATUS(AddFreeDimensionOverrideByName, + _Inout_ OrtSessionOptions* options, _In_ const char* dim_name, + _In_ int64_t dim_value); + + /// @} + /// \name Misc + /// @{ + + /** \brief Get the names of all available providers + * + * \note The providers in the list are not guaranteed to be usable. They may fail to load due to missing system dependencies. + * For example, if the CUDA/cuDNN libraries are not installed, the CUDA provider will report an error when it is added to the session options. + * + * \param[out] out_ptr Set to a pointer to an array of null terminated strings of the available providers. The entries and the + * array itself must be freed using OrtApi::ReleaseAvailableProviders + * \param[out] provider_length Set to the number of entries in the `out_ptr` array + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetAvailableProviders, _Outptr_ char*** out_ptr, _Out_ int* provider_length); + + /** \brief Release data from OrtApi::GetAvailableProviders + * + * \param[in] ptr The `out_ptr` result from OrtApi::GetAvailableProviders. + * \param[in] providers_length The `provider_length` result from OrtApi::GetAvailableProviders + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(ReleaseAvailableProviders, _In_ char** ptr, + _In_ int providers_length); + + /// @} + /// \name OrtValue + /// @{ + + /** \brief Get the length of a single string in a string tensor + * + * \param[in] value A string tensor + * \param[in] index Index of the string in the tensor + * \param[out] out Set to number of bytes of the string element + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetStringTensorElementLength, _In_ const OrtValue* value, size_t index, _Out_ size_t* out); + + /** \brief Get a single string from a string tensor + * + * \param[in] value A string tensor + * \param[in] s_len Number of bytes in the `s` buffer. Must match the value returned by OrtApi::GetStringTensorElementLength. + * \param[in] index Index of the string in the tensor + * \param[out] s The string element contents in UTF-8 encoding. The string is NOT null-terminated. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetStringTensorElement, _In_ const OrtValue* value, size_t s_len, size_t index, _Out_writes_bytes_all_(s_len) void* s); + + /** \brief Set a single string in a string tensor + * + * \param[in] value A string tensor + * \param[in] s A null terminated UTF-8 encoded string + * \param[in] index Index of the string in the tensor to set + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(FillStringTensorElement, _Inout_ OrtValue* value, _In_ const char* s, size_t index); + + /// @} + /// \name OrtSessionOptions + /// @{ + + /** \brief Set a session configuration entry as a pair of strings + * + * If a configuration with same key exists, this will overwrite the configuration with the given config_value. + * + * The config_key and the format of config_value are defined in onnxruntime_session_options_config_keys.h + * + * \param[in] options + * \param[in] config_key A null terminated string representation of the config key + * \param[in] config_value A null terminated string representation of the config value + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(AddSessionConfigEntry, _Inout_ OrtSessionOptions* options, + _In_z_ const char* config_key, _In_z_ const char* config_value); + + /// @} + /// \name OrtAllocator + /// @{ + + /** \brief Create an allocator for an ::OrtSession following an ::OrtMemoryInfo + * + * \param[in] session + * \param[in] mem_info valid ::OrtMemoryInfo instance + * \param[out] out Newly created ::OrtAllocator. Must be freed with OrtApi::ReleaseAllocator + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateAllocator, _In_ const OrtSession* session, _In_ const OrtMemoryInfo* mem_info, + _Outptr_ OrtAllocator** out); + + /** \brief Release an ::OrtAllocator obtained from OrtApi::CreateAllocator + */ + ORT_CLASS_RELEASE(Allocator); + + /// @} + /// \name OrtSession + /// @{ + + /** \brief Run a model using Io Bindings for the inputs & outputs + * + * \see OrtApi::Run + * + * \param[in] session + * \param[in] run_options + * \param[in] binding_ptr + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(RunWithBinding, _Inout_ OrtSession* session, _In_ const OrtRunOptions* run_options, _In_ const OrtIoBinding* binding_ptr); + + /** \brief Create an ::OrtIoBinding instance + * + * An IoBinding object allows one to bind pre-allocated ::OrtValue%s to input names. + * Thus if you want to use a raw on device buffer as input or output you can avoid + * extra copy during runtime. + * + * \param[in] session + * \param[out] out Newly created ::OrtIoBinding. Must be freed with OrtApi::ReleaseIoBinding + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateIoBinding, _Inout_ OrtSession* session, _Outptr_ OrtIoBinding** out); + + /// @} + /// \name OrtIoBinding + /// @{ + + /** \brief Release an ::OrtIoBinding obtained from OrtApi::CreateIoBinding + */ + ORT_CLASS_RELEASE(IoBinding); + + /** \brief Bind an ::OrtValue to an ::OrtIoBinding input + * + * When using OrtApi::RunWithBinding this value is used for the named input + * + * \param[in] binding_ptr + * \param[in] name Name for the model input + * \param[in] val_ptr ::OrtValue of Tensor type. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(BindInput, _Inout_ OrtIoBinding* binding_ptr, _In_ const char* name, _In_ const OrtValue* val_ptr); + + /** \brief Bind an ::OrtValue to an ::OrtIoBinding output + * + * When using OrtApi::RunWithBinding this value is used for the named output + * + * \param[in] binding_ptr + * \param[in] name Null terminated string of the model output name + * \param[in] val_ptr ::OrtValue of Tensor type. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(BindOutput, _Inout_ OrtIoBinding* binding_ptr, _In_ const char* name, _In_ const OrtValue* val_ptr); + + /** \brief Bind an ::OrtIoBinding output to a device + * + * Binds the ::OrtValue to a device which is specified by ::OrtMemoryInfo. + * You can either create an instance of ::OrtMemoryInfo with a device id or obtain one from the allocator that you have created/are using + * This is useful when one or more outputs have dynamic shapes and, it is hard to pre-allocate and bind a chunk of + * memory within ::OrtValue ahead of time. + * + * \see OrtApi::RunWithBinding + * + * \param[in] binding_ptr + * \param[in] name Null terminated string of the device name + * \param[in] mem_info_ptr + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(BindOutputToDevice, _Inout_ OrtIoBinding* binding_ptr, _In_ const char* name, _In_ const OrtMemoryInfo* mem_info_ptr); + + /** \brief Get the names of an ::OrtIoBinding's outputs + * + * Returns the names of the outputs in the order they were bound. This is useful after running the model + * with bound outputs because the returned names are in order in which output ::OrtValue are returned. This is useful if + * the order of outputs and their names is not known. + * + * \param[in] binding_ptr + * \param[in] allocator Allocator used to allocate continuous buffers for output strings and lengths. + * \param[out] buffer Returns an array of non-null terminated UTF-8 strings. The number of strings stored is returned in the count parameter. + * This buffer is allocated using `allocator` and must be freed using it. + * \param[out] lengths Returns an array of `count` lengths of the strings returned in `buffer` + * This buffer is allocated using `allocator` and must be freed using it. + * \param[out] count Number of strings returned. If `binding_ptr` has no bound outputs, zero is returned, + * no memory allocation is performed and buffer and lengths are set to nullptr. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetBoundOutputNames, _In_ const OrtIoBinding* binding_ptr, _In_ OrtAllocator* allocator, + _Out_ char** buffer, _Out_writes_all_(count) size_t** lengths, _Out_ size_t* count); + + /** \brief Get the output ::OrtValue objects from an ::OrtIoBinding + * + * Returns an array of pointers to individually allocated ::OrtValue%s that contain results of a model execution with OrtApi::RunWithBinding + * The array contains the same number of ::OrtValue%s and they are in the same order as they were bound with OrtApi::BindOutput + * or OrtApi::BindOutputToDevice. + * + * The returned ::OrtValue%s must be released using OrtApi::ReleaseValue after they are no longer needed. + * The array is allocated using the specified instance of the allocator and must be freed using the same allocator after + * all the ::OrtValue%s contained therein are individually released. + * + * \param[in] binding_ptr + * \param[in] allocator Allocator used to allocate output array + * \param[out] output Set to the allocated array of allocated ::OrtValue outputs. Set to nullptr if there are 0 outputs. + * \param[out] output_count Set to number of ::OrtValue%s returned + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetBoundOutputValues, _In_ const OrtIoBinding* binding_ptr, _In_ OrtAllocator* allocator, + _Out_writes_all_(output_count) OrtValue*** output, _Out_ size_t* output_count); + + /** \brief Clears any previously set Inputs for an ::OrtIoBinding + */ + void(ORT_API_CALL* ClearBoundInputs)(_Inout_ OrtIoBinding* binding_ptr) NO_EXCEPTION ORT_ALL_ARGS_NONNULL; + + /** \brief Clears any previously set Outputs for an ::OrtIoBinding + */ + void(ORT_API_CALL* ClearBoundOutputs)(_Inout_ OrtIoBinding* binding_ptr) NO_EXCEPTION ORT_ALL_ARGS_NONNULL; + + /// @} + /// \name OrtValue + /// @{ + + /** \brief Direct memory access to a specified tensor element + * + * For example, given a tensor with shape of [3,224,224], a pointer to the element at location [2,150,128] can be retrieved + * + * This function only works for numeric type tensors (No strings, etc). + * This is a no-copy method whose returned pointer is valid until the passed in ::OrtValue is free'd. + * + * \param[in] value + * \param[in] location_values Pointer to an array of index values that specify an element's location relative to its shape + * \param[in] location_values_count Number of elements in location_values. Must match the number of elements in the tensor's shape. + * \param[out] out Set to a pointer to the element specified + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(TensorAt, _Inout_ OrtValue* value, const int64_t* location_values, size_t location_values_count, _Outptr_ void** out); + + /// @} + /// \name OrtEnv + /// @{ + + /** \brief Create an allocator and register it with the ::OrtEnv + * + * Enables sharing the allocator between multiple sessions that use the same env instance. + * Lifetime of the created allocator will be valid for the duration of the environment. + * Returns an error if an allocator with the same ::OrtMemoryInfo is already registered. + * + * See https://onnxruntime.ai/docs/reference/api/c-api.html for details. + * + * \param[in] env ::OrtEnv instance + * \param[in] mem_info + * \param[in] arena_cfg Pass nullptr for defaults + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateAndRegisterAllocator, _Inout_ OrtEnv* env, _In_ const OrtMemoryInfo* mem_info, + _In_ const OrtArenaCfg* arena_cfg); + + /** \brief Set language projection + * + * Set the language projection for collecting telemetry data when Env is created. + * + * The default is ORT_PROJECTION_C, which means it will classify the language not in the list to C also. + * + * \param[in] ort_env + * \param[in] projection + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetLanguageProjection, _In_ const OrtEnv* ort_env, _In_ OrtLanguageProjection projection); + + /// @} + /// \name OrtSession + /// @{ + + /** \brief Return the time that profiling was started + * + * \note The timer precision varies per platform. On Windows and MacOS, the precision will be ~100ns + * + * \param[in] session + * \param[out] out nanoseconds of profiling's start time + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionGetProfilingStartTimeNs, _In_ const OrtSession* session, _Outptr_ uint64_t* out); + + /// @} + /// \name OrtThreadingOptions + /// @{ + + /** \brief Set global intra-op thread count + * + * This configures the global thread pool options to be used in the call to OrtApi::CreateEnvWithGlobalThreadPools + * + * \param[in] tp_options + * \param[in] intra_op_num_threads Number of threads, special values:
+ * 0 = Use default thread count
+ * 1 = The invoking thread will be used; no threads will be created in the thread pool. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetGlobalIntraOpNumThreads, _Inout_ OrtThreadingOptions* tp_options, int intra_op_num_threads); + + /** \brief Set global inter-op thread count + * + * This configures the global thread pool options to be used in the call to OrtApi::CreateEnvWithGlobalThreadPools + * + * \param[in] tp_options + * \param[in] inter_op_num_threads Number of threads, special values:
+ * 0 = Use default thread count
+ * 1 = The invoking thread will be used; no threads will be created in the thread pool. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetGlobalInterOpNumThreads, _Inout_ OrtThreadingOptions* tp_options, int inter_op_num_threads); + + /** \brief Set global spin control options + * + * This will configure the global thread pool options to be used in the call to OrtApi::CreateEnvWithGlobalThreadPools. + * Allow spinning of thread pools when their queues are empty. This will set the value for both + * inter_op and intra_op threadpools. + * + * \param[in] tp_options + * \param[in] allow_spinning Valid values are 0 or 1.
+ * 0 = It won't spin (recommended if CPU usage is high)
+ * 1 = Threadpool will spin to wait for queue to become non-empty + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetGlobalSpinControl, _Inout_ OrtThreadingOptions* tp_options, int allow_spinning); + + /// @} + /// \name OrtSessionOptions + /// @{ + + /** \brief Add a pre-allocated initializer to a session + * + * If a model contains an initializer with a name that is same as the name passed to this call, + * ORT will use this initializer instance instead of deserializing one from the model file. This + * is useful when you want to share the same initializer across sessions. + * + * \param[in] options + * \param[in] name Null terminated string of the initializer name + * \param[in] val ::OrtValue containing the initializer. Its lifetime and the underlying initializer buffer must be + * managed by the user (created using the OrtApi::CreateTensorWithDataAsOrtValue) and it must outlive the session object + * to which it is added. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(AddInitializer, _Inout_ OrtSessionOptions* options, _In_z_ const char* name, + _In_ const OrtValue* val); + + /// @} + /// \name OrtEnv + /// @{ + + /** + * Create a custom environment with global threadpools and logger that will be shared across sessions. + * Use this in conjunction with OrtApi::DisablePerSessionThreads or else the session will use + * its own thread pools. + * + * \param[in] logging_function A pointer to a logging function. + * \param[in] logger_param A pointer to arbitrary data passed as the ::OrtLoggingFunction `param` parameter to + * `logging_function`. + * \param[in] log_severity_level The log severity level. + * \param[in] logid The log identifier. + * \param[in] tp_options + * \param[out] out Newly created OrtEnv. Must be freed with OrtApi::ReleaseEnv + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateEnvWithCustomLoggerAndGlobalThreadPools, OrtLoggingFunction logging_function, _In_opt_ void* logger_param, OrtLoggingLevel log_severity_level, + _In_ const char* logid, _In_ const struct OrtThreadingOptions* tp_options, _Outptr_ OrtEnv** out); + + /// @} + /// \name OrtSessionOptions + /// @{ + + /** \brief Append CUDA provider to session options + * + * If CUDA is not available (due to a non CUDA enabled build, or if CUDA is not installed on the system), this function will return failure. + * + * \param[in] options + * \param[in] cuda_options + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionOptionsAppendExecutionProvider_CUDA, + _In_ OrtSessionOptions* options, _In_ const OrtCUDAProviderOptions* cuda_options); + + /** \brief Append ROCM execution provider to the session options + * + * If ROCM is not available (due to a non ROCM enabled build, or if ROCM is not installed on the system), this function will return failure. + * + * \param[in] options + * \param[in] rocm_options + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionOptionsAppendExecutionProvider_ROCM, + _In_ OrtSessionOptions* options, _In_ const OrtROCMProviderOptions* rocm_options); + + /** \brief Append OpenVINO execution provider to the session options + * + * If OpenVINO is not available (due to a non OpenVINO enabled build, or if OpenVINO is not installed on the system), this function will fail. + * + * \param[in] options + * \param[in] provider_options + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionOptionsAppendExecutionProvider_OpenVINO, + _In_ OrtSessionOptions* options, _In_ const OrtOpenVINOProviderOptions* provider_options); + + /// @} + /// \name OrtThreadingOptions + /// @{ + + /** \brief Set threading flush-to-zero and denormal-as-zero + * + * Sets global thread pool options to be used in the call to OrtApi::CreateEnvWithGlobalThreadPools. + * Flush-to-zero and denormal-as-zero are applied to threads in both intra and inter global thread pool. + * \note This option is not needed if the models used have no denormals. Having no denormals is recommended as this option may hurt model accuracy. + * + * \param[in] tp_options + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetGlobalDenormalAsZero, _Inout_ OrtThreadingOptions* tp_options); + + /// @} + /// \name OrtArenaCfg + /// @{ + + /** \deprecated Use OrtApi::CreateArenaCfgV2 + * + * This will create the configuration of an arena that can eventually be used to define an arena based allocator's behavior + * + * \param[in] max_mem Use 0 to allow ORT to choose the default + * \param[in] arena_extend_strategy Use -1 to allow ORT to choose the default, 0 = kNextPowerOfTwo, 1 = kSameAsRequested + * \param[in] initial_chunk_size_bytes Use -1 to allow ORT to choose the default + * \param[in] max_dead_bytes_per_chunk Use -1 to allow ORT to choose the default + * \param[in] out A pointer to an OrtArenaCfg instance + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateArenaCfg, _In_ size_t max_mem, int arena_extend_strategy, int initial_chunk_size_bytes, + int max_dead_bytes_per_chunk, _Outptr_ OrtArenaCfg** out); + + ORT_CLASS_RELEASE(ArenaCfg); + + /// @} + /// \name OrtModelMetadata + /// @{ + + /** + * Use this to obtain the description of the graph present in the model + * (doc_string field of the GraphProto message within the ModelProto message). + * If it doesn't exist, an empty string will be returned. + * + * \param[in] model_metadata An instance of ::OrtModelMetadata + * \param[in] allocator Allocator used to allocate the string that will be returned back + * \param[out] value Set to a null terminated string allocated using `allocator`. The caller is responsible for freeing it using `allocator` + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(ModelMetadataGetGraphDescription, _In_ const OrtModelMetadata* model_metadata, + _Inout_ OrtAllocator* allocator, _Outptr_ char** value); + + /// @} + /// \name OrtSessionOptions + /// @{ + + /** \brief Append TensorRT provider to session options + * + * If TensorRT is not available (due to a non TensorRT enabled build, or if TensorRT is not installed on the system), this function will return failure. + * + * \param[in] options + * \param[in] tensorrt_options + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionOptionsAppendExecutionProvider_TensorRT, + _In_ OrtSessionOptions* options, _In_ const OrtTensorRTProviderOptions* tensorrt_options); + + /// @} + /// \name Misc + /// @{ + + /** \brief Set current GPU device ID + * + * Set the current device id of the GPU execution provider (CUDA/tensorrt/rocm). The device id should be less + * than the total number of devices available. This is only useful when multiple-GPUs are installed and it is + * required to restrict execution to a single GPU. + * + * \param[in] device_id + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetCurrentGpuDeviceId, _In_ int device_id); + + /** \brief Get current GPU device ID + * + * Get the current device id of the GPU execution provider (CUDA/tensorrt/rocm). + * + * \see OrtApi::SetCurrentGpuDeviceId + * + * \param[out] device_id + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetCurrentGpuDeviceId, _In_ int* device_id); + + /// @} + /// \name OrtKernelInfo + /// Custom operator APIs. + /// @{ + + /** \brief Fetch an array of int64_t values stored as an attribute in the graph node + * + * + * If `out` is nullptr, the value of `size` is set to the true size of the attribute + * array's size, and a success status is returned. + * + * If the `size` parameter is greater than or equal to the actual attribute array's size, + * the value of `size` is set to the true size of the attribute array's size, + * the provided memory is filled with the attribute's contents, + * and a success status is returned. + * + * If the `size` parameter is less than the actual attribute array's size and `out` + * is not nullptr, the value of `size` is set to the true size of the attribute array's size + * and a failure status is returned.) + * + * \param[in] info instance + * \param[in] name name of the attribute to be parsed + * \param[out] out pointer to memory where the attribute's contents are to be stored + * \param[in, out] size actual size of attribute array + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(KernelInfoGetAttributeArray_float, _In_ const OrtKernelInfo* info, _In_ const char* name, + _Out_ float* out, _Inout_ size_t* size); + + /** \brief Fetch an array of int64_t values stored as an attribute in the graph node + * + * If `out` is nullptr, the value of `size` is set to the true size of the attribute + * array's size, and a success status is returned. + * + * If the `size` parameter is greater than or equal to the actual attribute array's size, + * the value of `size` is set to the true size of the attribute array's size, + * the provided memory is filled with the attribute's contents, + * and a success status is returned. + * + * If the `size` parameter is less than the actual attribute array's size and `out` + * is not nullptr, the value of `size` is set to the true size of the attribute array's size + * and a failure status is returned.) + * + * \param[in] info instance + * \param[in] name name of the attribute to be parsed + * \param[out] out pointer to memory where the attribute's contents are to be stored + * \param[in, out] size actual size of attribute array + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(KernelInfoGetAttributeArray_int64, _In_ const OrtKernelInfo* info, _In_ const char* name, + _Out_ int64_t* out, _Inout_ size_t* size); + + /// @} + /// \name OrtArenaCfg + /// @{ + + /** \brief Create an ::OrtArenaCfg + * + * Create the configuration of an arena that can eventually be used to define an arena based allocator's behavior. + * + * Supported keys are (See https://onnxruntime.ai/docs/reference/api/c-api.html for details on what the + * following parameters mean and how to choose these values.): + * "max_mem": Maximum memory that can be allocated by the arena based allocator. + * Use 0 for ORT to pick the best value. Default is 0. + * "arena_extend_strategy": 0 = kNextPowerOfTwo, 1 = kSameAsRequested. + * Use -1 to allow ORT to choose the default. + * "initial_chunk_size_bytes": (Possible) Size of the first allocation in the arena. + * Only relevant if arena strategy is `kNextPowerOfTwo`. Use -1 to allow ORT to choose the default. + * Ultimately, the first allocation size is determined by the allocation memory request. + * "max_dead_bytes_per_chunk": Threshold of unused memory in an allocated chunk of arena memory after + * crossing which the current chunk is chunked into 2. + * "initial_growth_chunk_size_bytes": (Possible) Size of the second allocation in the arena. + * Only relevant if arena strategy is `kNextPowerOfTwo`. Use -1 to allow ORT to choose the default. + * Ultimately, the allocation size is determined by the allocation memory request. + * Further allocation sizes are governed by the arena extend strategy. + * + * \param[in] arena_config_keys Keys to configure the arena + * \param[in] arena_config_values Values to configure the arena + * \param[in] num_keys Number of keys in `arena_config_keys` and `arena_config_values` + * \param[out] out Newly created ::OrtArenaCfg. Must be freed with OrtApi::ReleaseArenaCfg + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateArenaCfgV2, _In_reads_(num_keys) const char* const* arena_config_keys, + _In_reads_(num_keys) const size_t* arena_config_values, _In_ size_t num_keys, + _Outptr_ OrtArenaCfg** out); + + /// @} + /// \name OrtRunOptions + /// @{ + + /** \brief Set a single run configuration entry as a pair of strings + * + * If a configuration with same key exists, this will overwrite the configuration with the given config_value + * + * The config_key and the format of config_value are defined in onnxruntime_run_options_config_keys.h + * + * \param[in] options + * \param[in] config_key A null terminated string representation of the config key + * \param[in] config_value A null terminated string representation of the config value + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(AddRunConfigEntry, _Inout_ OrtRunOptions* options, + _In_z_ const char* config_key, _In_z_ const char* config_value); + + /// @} + /// \name OrtPrepackedWeightsContainer + /// @{ + + /** \brief Create an ::OrtPrepackedWeightsContainer + * + * This container will hold pre-packed buffers of shared initializers for sharing between sessions + * (i.e.) if there are shared initializers that can be shared between sessions, the pre-packed buffers + * of these (if any) may possibly be shared to provide memory footprint savings. Pass this container + * to sessions that you would like to share pre-packed buffers of shared initializers at session + * creation time. + * + * \param[out] out Newly created ::OrtPrepackedWeightsContainer. Must be freed with OrtApi::ReleasePrepackedWeightsContainer + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreatePrepackedWeightsContainer, _Outptr_ OrtPrepackedWeightsContainer** out); + + /** \brief Release OrtPrepackedWeightsContainer instance + * + * \note instance must not be released until the sessions using it are released + */ + ORT_CLASS_RELEASE(PrepackedWeightsContainer); + + /// @} + /// \name OrtSession + /// @{ + + /** \brief Create session with prepacked weights container + * + * Same functionality offered by OrtApi::CreateSession except that a container that contains + * pre-packed weights' buffers is written into/read from by the created session. + * This is useful when used in conjunction with OrtApi::AddInitializer which injects + * shared initializer info into sessions. Wherever possible, the pre-packed versions of these + * shared initializers are cached in this container so that multiple sessions can just re-use + * these instead of duplicating these in memory. + * + * \param[in] env OrtEnv instance instance + * \param[in] model_path Null terminated string of the path (wchar on Windows, char otherwise) + * \param[in] options + * \param[in] prepacked_weights_container + * \param[out] out Newly created ::OrtSession. Must be freed with OrtApi::ReleaseSession + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateSessionWithPrepackedWeightsContainer, _In_ const OrtEnv* env, _In_ const ORTCHAR_T* model_path, + _In_ const OrtSessionOptions* options, _Inout_ OrtPrepackedWeightsContainer* prepacked_weights_container, + _Outptr_ OrtSession** out); + + /** \brief Create session from memory with prepacked weights container + * + * Same functionality offered by OrtApi::CreateSessionFromArray except that a container that contains + * pre-packed weights' buffers is written into/read from by the created session. + * This is useful when used in conjunction with OrtApi::AddInitializer which injects + * shared initializer info into sessions. Wherever possible, the pre-packed versions of these + * shared initializers are cached in this container so that multiple sessions can just re-use + * these instead of duplicating these in memory. + * + * \param[in] env + * \param[in] model_data Array of bytes holding the model + * \param[in] model_data_length Number of bytes in `model_data_model` + * \param[in] options + * \param[in] prepacked_weights_container + * \param[out] out Newly created ::OrtSession. Must be freed with OrtApi::ReleaseSession + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateSessionFromArrayWithPrepackedWeightsContainer, _In_ const OrtEnv* env, + _In_ const void* model_data, size_t model_data_length, + _In_ const OrtSessionOptions* options, _Inout_ OrtPrepackedWeightsContainer* prepacked_weights_container, + _Outptr_ OrtSession** out); + + /// @} + /// \name OrtSessionOptions + /// @{ + + /** \brief Append TensorRT execution provider to the session options + * + * If TensorRT is not available (due to a non TensorRT enabled build), this function will return failure. + * + * This is slightly different from OrtApi::SessionOptionsAppendExecutionProvider_TensorRT, it takes an + * ::OrtTensorRTProviderOptions which is publicly defined. This takes an opaque ::OrtTensorRTProviderOptionsV2 + * which must be created with OrtApi::CreateTensorRTProviderOptions. + * + * For OrtApi::SessionOptionsAppendExecutionProvider_TensorRT, the user needs to instantiate ::OrtTensorRTProviderOptions + * as well as allocate/release buffers for some members of ::OrtTensorRTProviderOptions. + * Here, OrtApi::CreateTensorRTProviderOptions and Ortapi::ReleaseTensorRTProviderOptions will do the memory management for you. + * + * \param[in] options + * \param[in] tensorrt_options + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionOptionsAppendExecutionProvider_TensorRT_V2, + _In_ OrtSessionOptions* options, _In_ const OrtTensorRTProviderOptionsV2* tensorrt_options); + + /// @} + /// \name OrtTensorRTProviderOptionsV2 + /// @{ + + /** \brief Create an OrtTensorRTProviderOptionsV2 + * + * \param[out] out Newly created ::OrtTensorRTProviderOptionsV2. Must be released with OrtApi::ReleaseTensorRTProviderOptions + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateTensorRTProviderOptions, _Outptr_ OrtTensorRTProviderOptionsV2** out); + + /** \brief Set options in a TensorRT Execution Provider. + * + * Please refer to https://www.onnxruntime.ai/docs/reference/execution-providers/TensorRT-ExecutionProvider.html#c-api-example + * to know the available keys and values. Key should be in null terminated string format of the member of ::OrtTensorRTProviderOptionsV2 + * and value should be its related range. + * + * For example, key="trt_max_workspace_size" and value="2147483648" + * + * \param[in] tensorrt_options + * \param[in] provider_options_keys Array of UTF-8 null-terminated string for provider options keys + * \param[in] provider_options_values Array of UTF-8 null-terminated string for provider options values + * \param[in] num_keys Number of elements in the `provider_option_keys` and `provider_options_values` arrays + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(UpdateTensorRTProviderOptions, _Inout_ OrtTensorRTProviderOptionsV2* tensorrt_options, + _In_reads_(num_keys) const char* const* provider_options_keys, + _In_reads_(num_keys) const char* const* provider_options_values, + _In_ size_t num_keys); + + /** \brief Get serialized TensorRT provider options string. + * + * For example, "trt_max_workspace_size=2147483648;trt_max_partition_iterations=10;trt_int8_enable=1;......" + * + * \param tensorrt_options - OrTensorRTProviderOptionsV2 instance + * \param allocator - a ptr to an instance of OrtAllocator obtained with OrtApi::CreateAllocator or OrtApi::GetAllocatorWithDefaultOptions + * the specified allocator will be used to allocate continuous buffers for output strings and lengths. + * \param ptr - is a UTF-8 null terminated string allocated using 'allocator'. The caller is responsible for using the same allocator to free it. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetTensorRTProviderOptionsAsString, _In_ const OrtTensorRTProviderOptionsV2* tensorrt_options, _Inout_ OrtAllocator* allocator, _Outptr_ char** ptr); + + /** \brief Release an ::OrtTensorRTProviderOptionsV2 + * + * \note This is an exception in the naming convention of other Release* functions, as the name of the method does not have the V2 suffix, but the type does + */ + void(ORT_API_CALL* ReleaseTensorRTProviderOptions)(_Frees_ptr_opt_ OrtTensorRTProviderOptionsV2* input); + + /// @} + /// \name OrtSessionOptions + /// @{ + + /** \brief Enable custom operators + * + * See onnxruntime-extensions: https://github.com/microsoft/onnxruntime-extensions.git + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(EnableOrtCustomOps, _Inout_ OrtSessionOptions* options); + + /// @} + /// \name OrtAllocator + /// @{ + + /** \brief Register a custom allocator + * + * Enables sharing between multiple sessions that use the same env instance. + * Returns an error if an allocator with the same ::OrtMemoryInfo is already registered. + * + * The behavior of this is exactly the same as OrtApi::CreateAndRegisterAllocator except + * instead of ORT creating an allocator based on provided info, in this case + * ORT uses the user-provided custom allocator. + * See https://onnxruntime.ai/docs/reference/api/c-api.html for details. + * + * \param[in] env + * \param[in] allocator User provided allocator + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(RegisterAllocator, _Inout_ OrtEnv* env, _In_ OrtAllocator* allocator); + + /** \brief Unregister a custom allocator + * + * It is an error if you provide an ::OrtMemoryInfo not corresponding to any + * registered allocators for sharing. + * + * \param[in] env + * \param[in] mem_info + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(UnregisterAllocator, _Inout_ OrtEnv* env, + _In_ const OrtMemoryInfo* mem_info); + + /// @} + /// \name OrtValue + /// @{ + + /** \brief Sets *out to 1 iff an ::OrtValue is a SparseTensor, and 0 otherwise + * + * \param[in] value existing ::OrtValue + * \param[out] out unless an error occurs, contains 1 iff the value contains an instance + * of sparse tensor or 0 otherwise. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(IsSparseTensor, _In_ const OrtValue* value, _Out_ int* out); + + /** \brief Create an ::OrtValue with a sparse tensor that is empty. + * + * Use FillSparseTensor() functions to populate sparse tensor with non-zero values and + * format specific indices data. + * Use ReleaseValue to destroy the sparse tensor, this will also release the buffer inside the output value + * if any was allocated. + * \param[in,out] allocator allocator to use when performing an allocation. Allocation will be performed + * by FillSparseTensor() APIs. The lifespan of the allocator instance must eclipse the lifespan + * this sparse tensor instance as the same allocator will be used to free memory. + * \param[in] dense_shape shape of the original dense tensor + * \param[in] dense_shape_len number of shape dimensions being passed + * \param[in] type must be one of TENSOR_ELEMENT_DATA_TYPE_xxxx + * \param[out] out Should be freed by calling ReleaseValue + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateSparseTensorAsOrtValue, _Inout_ OrtAllocator* allocator, _In_ const int64_t* dense_shape, + size_t dense_shape_len, ONNXTensorElementDataType type, _Outptr_ OrtValue** out); + + /** + * This fills populates an empty tensor that was created using OrtApi::CreateSparseTensorAsOrtValue. + * This will allocate required memory and copy the supplied NNZ values and COO indices into that memory allocation. + * Memory allocation is performed using the allocator that was specified with OrtApi::CreateSparseTensorAsOrtValue. + * + * \param[in,out] ort_value ::OrtValue to populate with data + * \param[in] data_mem_info serves to identify the location of the data to be copied. If the allocator specified + * at the creation time has memory info that is not the same as mem_info argument to this function a X-device copy will be performed. + * String data is assumed to be on CPU and will only be copied into a CPU allocated buffer. + * \param[in] values_shape pointer to values shape array + * \param[in] values_shape_len length of the values_shape + * \param[in] values pointer to an array of values. For strings, pass const char**. + * \param[in] indices_data pointer to a location of COO indices + * \param[in] indices_num number of COO indices + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(FillSparseTensorCoo, _Inout_ OrtValue* ort_value, _In_ const OrtMemoryInfo* data_mem_info, + _In_ const int64_t* values_shape, size_t values_shape_len, _In_ const void* values, + _In_ const int64_t* indices_data, size_t indices_num); + + /** + * This fills populates an empty tensor that was created using OrtApi::CreateSparseTensorAsOrtValue. + * This will allocate required memory and copy the supplied NNZ values and CSR indices into that memory allocation. + * Memory allocation is performed using the allocator that was specified with OrtApi::CreateSparseTensorAsOrtValue. + * + * \param[in,out] ort_value ::OrtValue to populate with data + * \param[in] data_mem_info serves to identify the location of the data to be copied. If the allocator specified + * at the creation time has memory info that is not the same as mem_info argument to this function a X-device copy will be performed. + * String data is assumed to be on CPU and will only be copied into a CPU allocated buffer. + * \param[in] values_shape pointer to values shape array + * \param[in] values_shape_len length of the values_shape + * \param[in] values - pointer to an array of values. For strings, pass const char**. + * \param[in] inner_indices_data pointer to a location of CSR inner indices + * \param[in] inner_indices_num number of CSR inner indices + * \param[in] outer_indices_data pointer to a location of CSR outer indices + * \param[in] outer_indices_num number of CSR outer indices + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(FillSparseTensorCsr, _Inout_ OrtValue* ort_value, _In_ const OrtMemoryInfo* data_mem_info, + _In_ const int64_t* values_shape, size_t values_shape_len, _In_ const void* values, + _In_ const int64_t* inner_indices_data, size_t inner_indices_num, + _In_ const int64_t* outer_indices_data, size_t outer_indices_num); + + /** + * This fills populates an empty tensor that was created using OrtApi::CreateSparseTensorAsOrtValue. + * This will allocate required memory and copy the supplied NNZ values and BlockSparse indices into that memory allocation. + * Memory allocation is performed using the allocator that was specified with OrtApi::CreateSparseTensorAsOrtValue. + * + * \param[in,out] ort_value ::OrtValue to populate with data + * \param[in] data_mem_info serves to identify the location of the data to be copied. If the allocator specified + * at the creation time has memory info that is not the same as mem_info argument to this function a X-device copy will be performed. + * String data is assumed to be on CPU and will only be copied into a CPU allocated buffer. + * \param[in] values_shape + * \param[in] values_shape_len + * \param[in] values structure with values information + * \param[in] indices_shape_data pointer to a location of indices shape + * \param[in] indices_shape_len length of the block sparse indices shape + * \param[in] indices_data pointer to a location of indices data. Shape will determine the length of the indices data. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(FillSparseTensorBlockSparse, _Inout_ OrtValue* ort_value, _In_ const OrtMemoryInfo* data_mem_info, + _In_ const int64_t* values_shape, size_t values_shape_len, _In_ const void* values, + _In_ const int64_t* indices_shape_data, size_t indices_shape_len, + _In_ const int32_t* indices_data); + + /** + * Create an ::OrtValue with a sparse tensor. This is the first step. + * Next, use UseIndices() functions to supply sparse tensor with + * format specific indices data and set its sparse format to a specific enum value. + * This will not perform memory allocations. It will + * use supplied user buffer which should outlive the created sparse tensor. + * Use OrtApi::ReleaseValue to destroy the sparse tensor. It would not release the supplied values buffer. + * This function can not be used to map strings from the user allocated memory. Strings must always be copied + * and have UTF-8 encoding. Therefore, use OrtApi::CreateSparseTensorAsOrtValue above and then fill it with data + * using appropriate Make*() function. + * + * \param[in] info memory info where sparse values reside. + * \param[in,out] p_data pointer to a user allocated buffer with values. To create a full sparse tensor with no non-zero + * values, pass nullptr + * \param[in] dense_shape shape of the original dense tensor + * \param[in] dense_shape_len number of shape dimensions being passed + * \param[in] values_shape shape of the values data. To create a fully sparse tensor with no non-zero values, + * pass {0} shape. + * \param[in] values_shape_len number of values shape dimensions + * \param[in] type must be one of TENSOR_ELEMENT_DATA_TYPE_xxxx + * \param[out] out Should be freed by calling ReleaseValue + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(CreateSparseTensorWithValuesAsOrtValue, _In_ const OrtMemoryInfo* info, _Inout_ void* p_data, + _In_ const int64_t* dense_shape, size_t dense_shape_len, + _In_ const int64_t* values_shape, size_t values_shape_len, + ONNXTensorElementDataType type, _Outptr_ OrtValue** out); + + /** + * This assigns Coo format indices to the SparseTensor that was created by + * OrtApi::CreateSparseTensorWithValuesAsOrtValue above. It also sets OrtSparseFormat to + * ORT_SPARSE_COO. This will not allocate any additional memory for data. The life span of + * indices_data buffer should eclipse the life span of this ::OrtValue. + * + * \param[in,out] ort_value ::OrtValue instance constructed with OrtApi::CreateSparseTensorWithValuesAsOrtValue + * \param[in,out] indices_data pointer to a user pre-allocated buffer or nullptr for fully sparse tensors. + * \param[in] indices_num number of COO indices. Should either be 0 for fully sparse tensors, be equal + * to the number of nnz values specified to OrtApi::CreateSparseTensorWithValuesAsOrtValue for 1-D {nnz} indices or + * be twice as number of nnz values for a 2-D indices {nnz, 2} + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(UseCooIndices, _Inout_ OrtValue* ort_value, _Inout_ int64_t* indices_data, size_t indices_num); + + /** + * The assigns CSR format indices to the SparseTensor that was created by + * OrtApi::CreateSparseTensorWithValuesAsOrtValue above. It also sets OrtSparseFormat to + * ORT_SPARSE_CSRC. This will not allocate any additional memory for data. The life spans of + * inner_data and outer_data buffers should eclipse the life span of this ::OrtValue. + * + * \param[in,out] ort_value ::OrtValue instance constructed with OrtApi::CreateSparseTensorWithValuesAsOrtValue + * \param[in,out] inner_data pointer to a user pre-allocated buffer or nullptr for fully sparse tensors. + * \param[in] inner_num number of inner CSR indices. Should either be 0 for fully sparse tensors or be equal + * to the number of nnz values specified to OrtApi::CreateSparseTensorWithValuesAsOrtValue. + * \param[in,out] outer_data pointer to user pre-allocated buffer or nullptr for fully sparse tensors. + * \param[in] outer_num number of CSR outer indices. Should either be 0 for fully sparse tensors or + * equal to rows + 1 of the dense shape. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(UseCsrIndices, _Inout_ OrtValue* ort_value, _Inout_ int64_t* inner_data, size_t inner_num, + _Inout_ int64_t* outer_data, size_t outer_num); + + /** + * The assigns BlockSparse format indices to the SparseTensor that was created by + * OrtApi::CreateSparseTensorWithValuesAsOrtValue above. It also sets OrtSparseFormat to + * ORT_SPARSE_BLOCK_SPARSE. This will not allocate any additional memory for data. The life span of + * indices_data buffer must eclipse the lifespan of this ::OrtValue. + * + * \param[in,out] ort_value OrtValue instance constructed with OrtApi::CreateSparseTensorWithValuesAsOrtValue + * \param[in] indices_shape pointer to indices shape. Use {0} for fully sparse tensors + * \param[in] indices_shape_len length of the indices shape + * \param[in,out] indices_data pointer to user pre-allocated buffer or nullptr for fully sparse tensors. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(UseBlockSparseIndices, _Inout_ OrtValue* ort_value, const int64_t* indices_shape, size_t indices_shape_len, _Inout_ int32_t* indices_data); + + /** \brief Returns sparse tensor format enum iff a given ort value contains an instance of sparse tensor. + * + * \param[in] ort_value ::OrtValue that contains an instance of sparse tensor + * \param[out] out pointer to out parameter + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetSparseTensorFormat, _In_ const OrtValue* ort_value, _Out_ enum OrtSparseFormat* out); + + /** \brief Returns data type and shape of sparse tensor values (nnz) iff ::OrtValue contains a SparseTensor. + * + * \param[in] ort_value An ::OrtValue that contains a fully constructed sparse tensor + * \param[out] out Must be freed by OrtApi::ReleaseTensorTypeAndShapeInfo + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetSparseTensorValuesTypeAndShape, _In_ const OrtValue* ort_value, _Outptr_ OrtTensorTypeAndShapeInfo** out); + + /** \brief Returns numeric data for sparse tensor values (nnz). For string values use GetStringTensor*(). + * + * \param[in] ort_value an instance of ::OrtValue containing sparse tensor + * \param[out] out returns a pointer to values data. Do not attempt to free this ptr. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetSparseTensorValues, _In_ const OrtValue* ort_value, _Outptr_ const void** out); + + /** \brief Returns data type, shape for the type of indices specified by indices_format. + * + * \param[in] ort_value ::OrtValue containing sparse tensor. + * \param[in] indices_format One of the indices formats. It is an error to request a format that the sparse + * tensor does not contain. + * \param[out] out an instance of ::OrtTensorTypeAndShapeInfo. Must be freed by OrtApi::ReleaseTensorTypeAndShapeInfo + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetSparseTensorIndicesTypeShape, _In_ const OrtValue* ort_value, enum OrtSparseIndicesFormat indices_format, _Outptr_ OrtTensorTypeAndShapeInfo** out); + + /** \brief Returns indices data for the type of the indices specified by indices_format + * + * \param[in] ort_value ::OrtValue containing sparse tensor. + * \param[in] indices_format One of the indices formats. It is an error to request a format that the sparse tensor does not contain. + * \param[out] num_indices Pointer to where the number of indices entries is returned + * \param[out] indices Returned pointer to the indices data. Do not free the returned pointer as it refers to internal data owned by the ::OrtValue + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetSparseTensorIndices, _In_ const OrtValue* ort_value, enum OrtSparseIndicesFormat indices_format, _Out_ size_t* num_indices, _Outptr_ const void** indices); + /// @} + /// \name OrtSessionOptions + /// @{ + + /** + * \brief Sets out to 1 iff an optional type OrtValue has an element, 0 otherwise (OrtValue is None) + * Use this API to find if the optional type OrtValue is None or not. + * If the optional type OrtValue is not None, use the OrtValue just like any other OrtValue. + * For example, if you get an OrtValue that corresponds to Optional(tensor) and + * if HasValue() returns true, use it as tensor and so on. + + * \param[in] value Input OrtValue. + * \param[out] out indicating if the input OrtValue contains data (1) or if it is a None (0) + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(HasValue, _In_ const OrtValue* value, _Out_ int* out); + + /// @} + /// \name OrtKernelContext + /// Custom operator APIs. + /// @{ + + /** \brief Used for custom operators, gets the GPU compute stream to use to launch the custom a GPU kernel + * \see ::OrtCustomOp + * \param[in] context OrtKernelContext instance + * \param[out] out Returns pointer to a GPU compute stream that can be used to launch the custom GPU kernel. + * If retrieving the GPU compute stream is not relevant (GPU not enabled in the build, kernel partitioned to + * some other EP), then a nullptr is returned as the output param. + * Do not free or mutate the returned pointer as it refers to internal data owned by the underlying session. + * Only use it for custom kernel launching. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(KernelContext_GetGPUComputeStream, _In_ const OrtKernelContext* context, _Outptr_ void** out); + + /// @} + /// \name GetTensorMemoryInfo + /// @{ + /** \brief Returns a pointer to the ::OrtMemoryInfo of a Tensor + * \param[in] value ::OrtValue containing tensor. + * \param[out] mem_info ::OrtMemoryInfo of the tensor. Do NOT free the returned pointer. It is valid for the lifetime of the ::OrtValue + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetTensorMemoryInfo, _In_ const OrtValue* value, _Out_ const OrtMemoryInfo** mem_info); + + /// @} + /// \name GetExecutionProviderApi + /// @{ + /** \brief Get a pointer to the requested version of the Execution Provider specific + * API extensions to the OrtApi + * \param[in] provider_name The name of the execution provider name. Currently only the following + * values are supported: "DML". + * \param[in] version Must be ::ORT_API_VERSION. + * \param[out] provider_api A void pointer containing a reference to the execution provider versioned api structure. + * For example, the provider_api pointer can be cast to the OrtDmlApi* when the provider_name is "DML". + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(GetExecutionProviderApi, _In_ const char* provider_name, _In_ uint32_t version, _Outptr_ const void** provider_api); + + /// @} + + /// \name SessionOptions + /// @{ + /** \brief Set custom thread creation function + * + * \param[in] options Session options + * \param[in] ort_custom_create_thread_fn Custom thread creation function + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionOptionsSetCustomCreateThreadFn, _Inout_ OrtSessionOptions* options, _In_ OrtCustomCreateThreadFn ort_custom_create_thread_fn); + + /** \brief Set creation options for custom thread + * + * \param[in] options Session options + * \param[in] ort_custom_thread_creation_options Custom thread creation options (can be nullptr) + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionOptionsSetCustomThreadCreationOptions, _Inout_ OrtSessionOptions* options, _In_ void* ort_custom_thread_creation_options); + + /** \brief Set custom thread join function + * + * \param[in] options Session options + * \param[in] ort_custom_join_thread_fn Custom join thread function, must not be nullptr when ort_custom_create_thread_fn is set + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SessionOptionsSetCustomJoinThreadFn, _Inout_ OrtSessionOptions* options, _In_ OrtCustomJoinThreadFn ort_custom_join_thread_fn); + /// @} + + /// \name OrtThreadingOptions + /// @{ + /** \brief Set custom thread creation function for global thread pools + * + * \param[inout] tp_options + * \param[in] ort_custom_create_thread_fn Custom thread creation function + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetGlobalCustomCreateThreadFn, _Inout_ OrtThreadingOptions* tp_options, _In_ OrtCustomCreateThreadFn ort_custom_create_thread_fn); + + /** \brief Set custom thread creation options for global thread pools + * + * \param[inout] tp_options + * \param[in] ort_custom_thread_creation_options Custom thread creation options (can be nullptr) + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetGlobalCustomThreadCreationOptions, _Inout_ OrtThreadingOptions* tp_options, _In_ void* ort_custom_thread_creation_options); + + /** \brief Set custom thread join function for global thread pools + * + * \param[inout] tp_options + * \param[in] ort_custom_join_thread_fn Custom thread join function, must not be nullptr when global ort_custom_create_thread_fn is set + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SetGlobalCustomJoinThreadFn, _Inout_ OrtThreadingOptions* tp_options, _In_ OrtCustomJoinThreadFn ort_custom_join_thread_fn); + /// @} + + /** \brief Synchronize bound inputs. The call may be necessary for some providers, such as cuda, + * in case the system that allocated bound memory operated on a different stream. However, the + * operation is provider specific and could be a no-op. + * + * \param[inout] binding_ptr + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SynchronizeBoundInputs, _Inout_ OrtIoBinding* binding_ptr); + + /** \brief Synchronize bound outputs. The call may be necessary for some providers, such as cuda, + * in case the system that allocated bound memory operated on a different stream. However, the + * operation is provider specific and could be a no-op. + * + * \param[inout] binding_ptr + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(SynchronizeBoundOutputs, _Inout_ OrtIoBinding* binding_ptr); + + /// \name OrtSessionOptions + /// @{ + + /** \brief Append CUDA execution provider to the session options + * + * If CUDA is not available (due to a non CUDA enabled build), this function will return failure. + * + * This is slightly different from OrtApi::SessionOptionsAppendExecutionProvider_CUDA, it takes an + * ::OrtCUDAProviderOptions which is publicly defined. This takes an opaque ::OrtCUDAProviderOptionsV2 + * which must be created with OrtApi::CreateCUDAProviderOptions. + * + * For OrtApi::SessionOptionsAppendExecutionProvider_CUDA, the user needs to instantiate ::OrtCUDAProviderOptions + * as well as allocate/release buffers for some members of ::OrtCUDAProviderOptions. + * Here, OrtApi::CreateCUDAProviderOptions and Ortapi::ReleaseCUDAProviderOptions will do the memory management for you. + * + * \param[in] options + * \param[in] cuda_options + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * + * \since Version 1.11. + */ + ORT_API2_STATUS(SessionOptionsAppendExecutionProvider_CUDA_V2, + _In_ OrtSessionOptions* options, _In_ const OrtCUDAProviderOptionsV2* cuda_options); + + /// @} + /// \name OrtCUDAProviderOptionsV2 + /// @{ + + /** \brief Create an OrtCUDAProviderOptionsV2 + * + * \param[out] out Newly created ::OrtCUDAProviderOptionsV2. Must be released with OrtApi::ReleaseCudaProviderOptions + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * + * \since Version 1.11. + */ + ORT_API2_STATUS(CreateCUDAProviderOptions, _Outptr_ OrtCUDAProviderOptionsV2** out); + + /** \brief Set options in a CUDA Execution Provider. + * + * Please refer to https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#configuration-options + * to know the available keys and values. Key should be in null terminated string format of the member of ::OrtCUDAProviderOptionsV2 + * and value should be its related range. + * + * For example, key="device_id" and value="0" + * + * \param[in] cuda_options + * \param[in] provider_options_keys Array of UTF-8 null-terminated string for provider options keys + * \param[in] provider_options_values Array of UTF-8 null-terminated string for provider options values + * \param[in] num_keys Number of elements in the `provider_option_keys` and `provider_options_values` arrays + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * + * \since Version 1.11. + */ + ORT_API2_STATUS(UpdateCUDAProviderOptions, _Inout_ OrtCUDAProviderOptionsV2* cuda_options, + _In_reads_(num_keys) const char* const* provider_options_keys, + _In_reads_(num_keys) const char* const* provider_options_values, + _In_ size_t num_keys); + + /** + * Get serialized CUDA provider options string. + * + * For example, "device_id=0;arena_extend_strategy=0;......" + * + * \param cuda_options - OrtCUDAProviderOptionsV2 instance + * \param allocator - a ptr to an instance of OrtAllocator obtained with CreateAllocator() or GetAllocatorWithDefaultOptions() + * the specified allocator will be used to allocate continuous buffers for output strings and lengths. + * \param ptr - is a UTF-8 null terminated string allocated using 'allocator'. The caller is responsible for using the same allocator to free it. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * + * \since Version 1.11. + */ + ORT_API2_STATUS(GetCUDAProviderOptionsAsString, _In_ const OrtCUDAProviderOptionsV2* cuda_options, _Inout_ OrtAllocator* allocator, _Outptr_ char** ptr); + + /** \brief Release an ::OrtCUDAProviderOptionsV2 + * + * \note This is an exception in the naming convention of other Release* functions, as the name of the method does not have the V2 suffix, but the type does + * + * \since Version 1.11. + */ + void(ORT_API_CALL* ReleaseCUDAProviderOptions)(_Frees_ptr_opt_ OrtCUDAProviderOptionsV2* input); + + /// @} + + /** \brief Append MIGraphX provider to session options + * + * If MIGraphX is not available (due to a non MIGraphX enabled build, or if MIGraphX is not installed on the system), this function will return failure. + * + * \param[in] options + * \param[in] migraphx_options + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * + * \since Version 1.11. + */ + ORT_API2_STATUS(SessionOptionsAppendExecutionProvider_MIGraphX, + _In_ OrtSessionOptions* options, _In_ const OrtMIGraphXProviderOptions* migraphx_options); + + /** \brief Replace initialized Tensors with external data with the data provided in initializers. + * + * The function will find the initialized TensorProtos with external data in the graph with the provided names and + * replace them with the provided tensors. The API verifies that the TensorProto being replaced + * has an external data reference and has the same name, dimensions and data type as its replacement. The replacement + * will occur before any of the optimizations take place. The data will be copied into the graph + * since TensorProto can't refer to the user provided buffers. + * + * Once the model has been loaded, the OrtValue(s) added to SessionOptions instance will be removed + * from the internal SessionOptions copy to save memory, the user provided buffers can then be deallocated + * and the SessionOptions instance that refers to them can be destroyed. + * + * \param[in] options + * \param[in] initializer_names Array of null terminated UTF-8 encoded strings of the initializers names. + * \param[in] initializers Array of ::OrtValue type + * \param[in] initializers_num Number of elements in the initializer_names and initializers + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * + * \since Version 1.12. + */ + ORT_API2_STATUS(AddExternalInitializers, _In_ OrtSessionOptions* options, + _In_reads_(input_len) const char* const* initializer_names, + _In_reads_(input_len) const OrtValue* const* initializers, size_t initializers_num); + + /** \brief: Create attribute of onnxruntime operator + * + * \param[in] name Name of the attribute + * \param[in] data Data content of the attribute + * \param[in] len Number of bytes stored in data + * \param[in] type Data type + * \param[out] op_attr Attribute that has been created, which must be released by OrtApi::ReleaseOpAttr + * + * \since Version 1.12. + */ + ORT_API2_STATUS(CreateOpAttr, + _In_ const char* name, + _In_ const void* data, + _In_ int len, + _In_ OrtOpAttrType type, + _Outptr_ OrtOpAttr** op_attr); + + /* \brief: Release op attribute + * + * \param[in] opAttr Attribute created by OrtApi::CreateOpAttr + * + * \since Version 1.12. + */ + ORT_CLASS_RELEASE(OpAttr); + + /** \brief: Create onnxruntime native operator + * + * \param[in] info Kernel info + * \param[in] op_name Operator name + * \param[in] domain Operator domain + * \param[in] version Operator opset version + * \param[in] type_constraint_names Name of the type contraints, such as "T" or "T1" + * \param[in] type_constraint_values Type of each contraints + * \param[in] type_constraint_count Number of contraints + * \param[in] attr_values Attributes used to initialize the operator + * \param[in] attr_count Number of the attributes + * \param[in] input_count Number of inputs + * \param[in] output_count Number of outputs + * \param[out] ort_op Operator that has been created + * + * \since Version 1.12. + */ + ORT_API2_STATUS(CreateOp, + _In_ const OrtKernelInfo* info, + _In_ const char* op_name, + _In_ const char* domain, + _In_ int version, + _In_opt_ const char** type_constraint_names, + _In_opt_ const ONNXTensorElementDataType* type_constraint_values, + _In_opt_ int type_constraint_count, + _In_opt_ const OrtOpAttr* const* attr_values, + _In_opt_ int attr_count, + _In_ int input_count, + _In_ int output_count, + _Outptr_ OrtOp** ort_op); + + /** \brief: Invoke the operator created by OrtApi::CreateOp + * The inputs must follow the order as specified in onnx specification + * + * \param[in] context Kernel context + * \param[in] ort_op Operator that has been created + * \param[in] input_values Array of inputs + * \param[in] input_count Number of inputs + * \param[in] output_values Array of outputs + * \param[in] output_count Number of outputs + * + * \since Version 1.12. + */ + ORT_API2_STATUS(InvokeOp, + _In_ const OrtKernelContext* context, + _In_ const OrtOp* ort_op, + _In_ const OrtValue* const* input_values, + _In_ int input_count, + _Inout_ OrtValue* const* output_values, + _In_ int output_count); + + /* \brief: Release an onnxruntime operator + * + * \param[in] Op Operator created by OrtApi::CreateOp + * + * \since Version 1.12. + */ + ORT_CLASS_RELEASE(Op); + + /** \brief: Append execution provider to the session options. + * \param[in] options + * \param[in] provider_name - provider to add. + * \param[in] provider_options_keys - keys to configure the provider options + * \param[in] provider_options_values - values to configure the provider options + * \param[in] num_keys - number of keys passed in + * + * Currently supported providers: + * SNPE + * XNNPACK + * + * Note: If an execution provider has a dedicated SessionOptionsAppendExecutionProvider_ function + * that should be used to add it. + * + * SNPE supported keys: + * "runtime": SNPE runtime engine, options: "CPU", "CPU_FLOAT32", "GPU", "GPU_FLOAT32_16_HYBRID", "GPU_FLOAT16", + * "DSP", "DSP_FIXED8_TF", "AIP_FIXED_TF", "AIP_FIXED8_TF". + * Mapping to SNPE Runtime_t definition: CPU, CPU_FLOAT32 => zdl::DlSystem::Runtime_t::CPU; + * GPU, GPU_FLOAT32_16_HYBRID => zdl::DlSystem::Runtime_t::GPU; + * GPU_FLOAT16 => zdl::DlSystem::Runtime_t::GPU_FLOAT16; + * DSP, DSP_FIXED8_TF => zdl::DlSystem::Runtime_t::DSP. + * AIP_FIXED_TF, AIP_FIXED8_TF => zdl::DlSystem::Runtime_t::AIP_FIXED_TF. + * "priority": execution priority, options: "low", "normal". + * "buffer_type": ITensor or user buffers, options: "ITENSOR", user buffer with different types - "TF8", "TF16", "UINT8", "FLOAT". + * "ITENSOR" -- default, ITensor which is float only. + * "TF8" -- quantized model required, "FLOAT" -- for both quantized or non-quantized model + * If SNPE is not available (due to a non Snpe enabled build or its dependencies not being installed), this function will fail. + * + * XNNPACK supported keys: + * "intra_op_num_threads": number of thread-pool size to use for XNNPACK execution provider. + * default value is 0, which means to use the session thread-pool size. + * + * \since Version 1.12. + */ + ORT_API2_STATUS(SessionOptionsAppendExecutionProvider, _In_ OrtSessionOptions* options, + _In_ const char* provider_name, + _In_reads_(num_keys) const char* const* provider_options_keys, + _In_reads_(num_keys) const char* const* provider_options_values, + _In_ size_t num_keys); + + /* \brief: Get a copy of kernel info + * + * \param[in] info Kernel info + * \param[out] info_copy Copy of kernel info + * + * \since Version 1.12. + */ + ORT_API2_STATUS(CopyKernelInfo, + _In_ const OrtKernelInfo* info, + _Outptr_ OrtKernelInfo** info_copy); + + /* \brief: Release kernel info + * + * \param[in] KernelInfo A copy of kernel info returned by CopyKernelInfo + * + * \since Version 1.12. + */ + ORT_CLASS_RELEASE(KernelInfo); + + /* \brief: Get the training C Api + * + * \since Version 1.13 + */ + const OrtTrainingApi*(ORT_API_CALL* GetTrainingApi)(uint32_t version)NO_EXCEPTION; + + /** \brief Append CANN provider to session options + * + * If CANN is not available (due to a non CANN enabled build, or if CANN is not installed on the system), this function will return failure. + * + * \param[in] options + * \param[in] cann_options + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * + * \since Version 1.13. + */ + ORT_API2_STATUS(SessionOptionsAppendExecutionProvider_CANN, + _In_ OrtSessionOptions* options, _In_ const OrtCANNProviderOptions* cann_options); + + /** \brief Create an OrtCANNProviderOptions + * + * \param[out] out created ::OrtCANNProviderOptions. Must be released with OrtApi::ReleaseCANNProviderOptions + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * + * \since Version 1.13. + */ + ORT_API2_STATUS(CreateCANNProviderOptions, _Outptr_ OrtCANNProviderOptions** out); + + /** \brief Set options in a CANN Execution Provider. + * + * \param[in] cann_options + * \param[in] provider_options_keys Array of UTF-8 null-terminated string for provider options keys + * \param[in] provider_options_values Array of UTF-8 null-terminated string for provider options values + * \param[in] num_keys Number of elements in the `provider_option_keys` and `provider_options_values` arrays + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * + * \since Version 1.13. + */ + ORT_API2_STATUS(UpdateCANNProviderOptions, _Inout_ OrtCANNProviderOptions* cann_options, + _In_reads_(num_keys) const char* const* provider_options_keys, + _In_reads_(num_keys) const char* const* provider_options_values, + _In_ size_t num_keys); + + /** \brief Get serialized CANN provider options string. + * + * \param[in] cann_options OrtCANNProviderOptions instance + * \param[in] allocator a ptr to an instance of OrtAllocator obtained with CreateAllocator() + * or GetAllocatorWithDefaultOptions(), the specified allocator will be used to allocate + * continuous buffers for output strings and lengths. + * \param[out] ptr is a UTF-8 null terminated string allocated using 'allocator'. + * The caller is responsible for using the same allocator to free it. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * + * \since Version 1.13. + */ + ORT_API2_STATUS(GetCANNProviderOptionsAsString, _In_ const OrtCANNProviderOptions* cann_options, + _Inout_ OrtAllocator* allocator, _Outptr_ char** ptr); + + /** \brief Release an OrtCANNProviderOptions + * + * \param[in] the pointer of OrtCANNProviderOptions which will been deleted + * + * \since Version 1.13. + */ + void(ORT_API_CALL* ReleaseCANNProviderOptions)(_Frees_ptr_opt_ OrtCANNProviderOptions* input); + + /* \brief Get OrtDevice type from MemoryInfo + * + * \since Version 1.14 + */ + void(ORT_API_CALL* MemoryInfoGetDeviceType)(_In_ const OrtMemoryInfo* ptr, _Out_ OrtMemoryInfoDeviceType* out); + + /* \brief Update the OrtEnv instance with custom log severity level + * + * \param[in] ort_env The OrtEnv instance being used + * \param[in] log_severity_level The log severity level. + * + * \since Version 1.14. + */ + ORT_API2_STATUS(UpdateEnvWithCustomLogLevel, _In_ OrtEnv* ort_env, OrtLoggingLevel log_severity_level); + + /* \brief Set affinities for intra op threads + * + * Affinity string follows format: + * logical_processor_id,logical_processor_id;logical_processor_id,logical_processor_id + * Semicolon isolates configurations among threads, while comma split processors where ith thread expected to attach to. + * e.g. 1,2,3;4,5 + * specifies affinities for two threads, with the 1st thread attach to the 1st, 2nd, and 3rd processor, and 2nd thread to the 4th and 5th. + * To ease the configuration, an "interval" is also allowed: + * e.g. 1-8;8-16;17-24 + * orders that the 1st thread runs on first eight processors, 2nd thread runs on next eight processors, and so forth. + * Note: + * 1. Once set, the number of thread affinities must equal to intra_op_num_threads - 1, + * ort does not set affinity on the main thread which is started and managed by the calling app; + * 2. For windows, ort will infer the group id from a logical processor id, for example, assuming there are two groups with each has 64 logical processors, + * an id of 64 will be inferred as the last processor of the 1st group, while 65 will be interpreted as the 1st processor of the second group. + * Hence 64-65 is an invalid configuration, because a windows thread cannot be attached to processors across group boundary. + * + * \since Version 1.14 + */ + ORT_API2_STATUS(SetGlobalIntraOpThreadAffinity, _Inout_ OrtThreadingOptions* tp_options, const char* affinity_string); + + /** \brief Register custom ops from a shared library. + * + * Loads a shared library (.dll on windows, .so on linux, etc) named 'library_name' and looks for this entry point: + * OrtStatus* RegisterCustomOps(OrtSessionOptions * options, const OrtApiBase* api); + * It then passes in the provided session options to this function along with the api base. + * + * The handle to the loaded library is automatically released by ORT when the last OrtSession that references the + * library handle is released. If no OrtSession is created, then the library handle is released when the provided + * OrtSessionOptions is released. + * + * \param[in] options The session options. + * \param[in] library_name The name of the shared library to load and register. Refer to OS-specific dynamic library + * loading utilities (e.g., LoadLibraryEx on Windows or dlopen on Linux/MacOS) for information + * on the format of library names and search paths. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * \since Version 1.14 + */ + ORT_API2_STATUS(RegisterCustomOpsLibrary_V2, _Inout_ OrtSessionOptions* options, _In_ const ORTCHAR_T* library_name); + + /** \brief Register custom ops by calling a RegisterCustomOpsFn function. + * + * Searches for registration_func_name and if found calls it. + * + * The library containing the function must either be linked against or previously loaded by the executable. + * + * If you want ONNX Runtime to load the library and manage its lifetime, use RegisterCustomOpsLibrary_V2. + * + * RegisterCustomOpsUsingFunction can be used in scenarios where it may not be possible for ONNX Runtime to load + * the library from a path. e.g. mobile platforms where the library must be linked into the app. + * + * The registration function must have the signature of RegisterCustomOpsFn: + * OrtStatus* (*fn)(OrtSessionOptions* options, const OrtApiBase* api); + * + * See https://onnxruntime.ai/docs/reference/operators/add-custom-op.html for details on how the registration + * function should be implemented. + * + * \param[in] options OrtSessionOptions that is passed through as the first argument in the call to the + * registration function. + * \param[in] registration_func_name Name of registration function to use. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * \since Version 1.14 + */ + ORT_API2_STATUS(RegisterCustomOpsUsingFunction, _Inout_ OrtSessionOptions* options, + _In_ const char* registration_func_name); + + /// @} + /// \name OrtKernelInfo + /// Custom operator APIs. + /// @{ + + /** \brief Get the number of inputs from ::OrtKernelInfo. + * + * Used in the CreateKernel callback of an OrtCustomOp to query the number of inputs + * during kernel/session creation. + * + * \param[in] info Instance of ::OrtKernelInfo. + * \param[out] out Pointer to variable assigned with the result on success. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * \since Version 1.14 + */ + ORT_API2_STATUS(KernelInfo_GetInputCount, _In_ const OrtKernelInfo* info, _Out_ size_t* out); + + /** \brief Get the number of outputs from ::OrtKernelInfo. + * + * Used in the CreateKernel callback of an OrtCustomOp to query the number of outputs + * during kernel/session creation. + * + * \param[in] info Instance of ::OrtKernelInfo. + * \param[out] out Pointer to variable assigned with the result on success. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * \since Version 1.14 + */ + ORT_API2_STATUS(KernelInfo_GetOutputCount, _In_ const OrtKernelInfo* info, _Out_ size_t* out); + + /** \brief Get the name of a ::OrtKernelInfo's input. + * + * Used in the CreateKernel callback of an OrtCustomOp to query an input's name + * during kernel/session creation. + * + * If `out` is nullptr, the value of `size` is set to the size of the name + * string (including null-terminator), and a success status is returned. + * + * If the `size` parameter is greater than or equal to the name string's size, + * the value of `size` is set to the true size of the string (including null-terminator), + * the provided memory is filled with the string's contents, and a success status is returned. + * + * If the `size` parameter is less than the actual string's size and `out` + * is not nullptr, the value of `size` is set to the true size of the string + * and a failure status is returned. + * + * \param[in] info An instance of ::OrtKernelInfo. + * \param[in] index The index of the input name to get. Returns a failure status if out-of-bounds. + * \param[out] out Memory location into which to write the UTF-8 null-terminated string representing the input's name. + * \param[in,out] size Pointer to the size of the `out` buffer. See above comments for details. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * \since Version 1.14 + */ + ORT_API2_STATUS(KernelInfo_GetInputName, _In_ const OrtKernelInfo* info, size_t index, _Out_ char* out, + _Inout_ size_t* size); + + /** \brief Get the name of a ::OrtKernelInfo's output. + * + * Used in the CreateKernel callback of an OrtCustomOp to query an output's name + * during kernel/session creation. + * + * If `out` is nullptr, the value of `size` is set to the size of the name + * string (including null-terminator), and a success status is returned. + * + * If the `size` parameter is greater than or equal to the name string's size, + * the value of `size` is set to the true size of the string (including null-terminator), + * the provided memory is filled with the string's contents, and a success status is returned. + * + * If the `size` parameter is less than the actual string's size and `out` + * is not nullptr, the value of `size` is set to the true size of the string + * and a failure status is returned. + * + * \param[in] info An instance of ::OrtKernelInfo. + * \param[in] index The index of the output name to get. Returns a failure status if out-of-bounds. + * \param[out] out Memory location into which to write the UTF-8 null-terminated string representing the output's + * name. + * \param[in,out] size Pointer to the size of the `out` buffer. See above comments for details. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * \since Version 1.14 + */ + ORT_API2_STATUS(KernelInfo_GetOutputName, _In_ const OrtKernelInfo* info, size_t index, _Out_ char* out, + _Inout_ size_t* size); + + /** \brief Get the type information for a ::OrtKernelInfo's input. + * + * Used in the CreateKernel callback of an OrtCustomOp to query the shape and type information + * of an input during kernel/session creation. + * + * \param[in] info An instance of ::OrtKernelInfo. + * \param[out] type_info Pointer set to the resulting ::OrtTypeInfo. Must be freed with OrtApi::ReleaseTypeInfo. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * \since Version 1.14 + */ + ORT_API2_STATUS(KernelInfo_GetInputTypeInfo, _In_ const OrtKernelInfo* info, size_t index, + _Outptr_ OrtTypeInfo** type_info); + + /** \brief Get the type information for a ::OrtKernelInfo's output. + * + * Used in the CreateKernel callback of an OrtCustomOp to query the shape and type information + * of an output during kernel/session creation. + * + * \param[in] info An instance of ::OrtKernelInfo. + * \param[out] type_info Pointer set to the resulting ::OrtTypeInfo. Must be freed with OrtApi::ReleaseTypeInfo. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * \since Version 1.14 + */ + ORT_API2_STATUS(KernelInfo_GetOutputTypeInfo, _In_ const OrtKernelInfo* info, size_t index, + _Outptr_ OrtTypeInfo** type_info); + + /** \brief Get a ::OrtValue tensor stored as an attribute in the graph node. + * + * Used in the CreateKernel callback of an OrtCustomOp to get a tensor attribute. + * + * \param[in] info ::OrtKernelInfo instance. + * \param[in] name UTF-8 null-terminated string representing the attribute's name. + * \param[in] allocator Allocator used to allocate the internal tensor state. + * \param[out] out Returns newly created ::OrtValue. Must be freed with OrtApi::ReleaseValue, + * which will also free internal tensor state allocated with the provided allocator. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + */ + ORT_API2_STATUS(KernelInfoGetAttribute_tensor, _In_ const OrtKernelInfo* info, _In_z_ const char* name, + _Inout_ OrtAllocator* allocator, _Outptr_ OrtValue** out); + + /// @} + /// \name OrtSessionOptions + /// Custom operator APIs + /// @{ + + /** \brief Checks if the given session configuration entry exists. + * + * The config_key formats are defined in onnxruntime_session_options_config_keys.h + * + * Can be used in a custom operator library to check for session configuration entries + * that target one or more custom operators in the library. Example: The config entry + * custom_op.myop.some_key targets a custom op named "myop". + * + * \param[in] options The ::OrtSessionOptions instance. + * \param[in] config_key A null-terminated UTF-8 string representation of the configuration key. + * \param[out] out Pointer set to 1 if the entry exists and 0 otherwise. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * \since Version 1.14 + */ + ORT_API2_STATUS(HasSessionConfigEntry, _In_ const OrtSessionOptions* options, + _In_z_ const char* config_key, _Out_ int* out); + + /** \brief Get a session configuration value. + * + * Returns a failure status if the configuration key does not exist. + * The config_key and the format of config_value are defined in onnxruntime_session_options_config_keys.h + * + * If `config_value` is nullptr, the value of `size` is set to the true size of the string + * value (including null-terminator), and a success status is returned. + * + * If the `size` parameter is greater than or equal to the actual string value's size, + * the value of `size` is set to the true size of the string value, the provided memory + * is filled with the value's contents, and a success status is returned. + * + * If the `size` parameter is less than the actual string value's size and `config_value` + * is not nullptr, the value of `size` is set to the true size of the string value + * and a failure status is returned. + * + * Can be used in a custom operator library to get session configuration entries + * that target one or more custom operators in the library. Example: The config entry + * custom_op.myop.some_key targets a custom op named "myop". + * + * \param[in] options The session options. + * \param[in] config_key A null-terminated UTF-8 string representation of the config key. + * \param[in] config_value Pointer to memory where the null-terminated UTF-8 string value will be stored. + * \param[in,out] size Pointer to the size of the `config_value` buffer. See above comments for details. + * + * \snippet{doc} snippets.dox OrtStatus Return Value + * \since Version 1.14 + */ + ORT_API2_STATUS(GetSessionConfigEntry, _In_ const OrtSessionOptions* options, + _In_z_ const char* config_key, _Out_ char* config_value, _Inout_ size_t* size); + + /// @} + +#ifdef __cplusplus + OrtApi(const OrtApi&) = delete; // Prevent users from accidentally copying the API structure, it should always be passed as a pointer +#endif +}; + +/* + * Steps to use a custom op: + * 1 Create an OrtCustomOpDomain with the domain name used by the custom ops + * 2 Create an OrtCustomOp structure for each op and add them to the domain + * 3 Call OrtAddCustomOpDomain to add the custom domain of ops to the session options + */ + +// Specifies some characteristics of inputs/outputs of custom ops: +// Specify if the inputs/outputs are one of: +// 1) Non-optional (input/output must be present in the node) +// 2) Optional (input/output may be absent in the node) +// 3) Variadic: A variadic input or output specifies N (i.e., the minimum arity) or more operands. +// Only the last input or output of a custom op may be marked as variadic. +// The homogeneity of the variadic input or output determines whether all operands must be of the same +// tensor element type. +typedef enum OrtCustomOpInputOutputCharacteristic { + INPUT_OUTPUT_REQUIRED = 0, + INPUT_OUTPUT_OPTIONAL, + INPUT_OUTPUT_VARIADIC, +} OrtCustomOpInputOutputCharacteristic; + +/* + * The OrtCustomOp structure defines a custom op's schema and its kernel callbacks. The callbacks are filled in by + * the implementor of the custom op. + */ +struct OrtCustomOp { + uint32_t version; // Must be initialized to ORT_API_VERSION + + // This callback creates the kernel, which is a user defined parameter that is passed to the Kernel* callbacks below. + void*(ORT_API_CALL* CreateKernel)(_In_ const struct OrtCustomOp* op, _In_ const OrtApi* api, + _In_ const OrtKernelInfo* info); + + // Returns the name of the op + const char*(ORT_API_CALL* GetName)(_In_ const struct OrtCustomOp* op); + + // Returns the type of the execution provider, return nullptr to use CPU execution provider + const char*(ORT_API_CALL* GetExecutionProviderType)(_In_ const struct OrtCustomOp* op); + + // Returns the count and types of the input & output tensors + ONNXTensorElementDataType(ORT_API_CALL* GetInputType)(_In_ const struct OrtCustomOp* op, _In_ size_t index); + size_t(ORT_API_CALL* GetInputTypeCount)(_In_ const struct OrtCustomOp* op); + ONNXTensorElementDataType(ORT_API_CALL* GetOutputType)(_In_ const struct OrtCustomOp* op, _In_ size_t index); + size_t(ORT_API_CALL* GetOutputTypeCount)(_In_ const struct OrtCustomOp* op); + + // Op kernel callbacks + void(ORT_API_CALL* KernelCompute)(_In_ void* op_kernel, _In_ OrtKernelContext* context); + void(ORT_API_CALL* KernelDestroy)(_In_ void* op_kernel); + + // Returns the characteristics of the input & output tensors + OrtCustomOpInputOutputCharacteristic(ORT_API_CALL* GetInputCharacteristic)(_In_ const struct OrtCustomOp* op, _In_ size_t index); + OrtCustomOpInputOutputCharacteristic(ORT_API_CALL* GetOutputCharacteristic)(_In_ const struct OrtCustomOp* op, _In_ size_t index); + + // Returns the memory type of the input tensors. This API allows the custom op + // to place the inputs on specific devices. By default, it returns + // OrtMemTypeDefault, which means the input is placed on the default device for + // the execution provider. If the inputs need to be with different memory tyeps, + // this function can be overridden to return the specific memory types. + OrtMemType(ORT_API_CALL* GetInputMemoryType)(_In_ const struct OrtCustomOp* op, _In_ size_t index); + + // Returns the minimum number of input arguments expected for the variadic input. + // Applicable only for custom ops that have a variadic input. + int(ORT_API_CALL* GetVariadicInputMinArity)(_In_ const struct OrtCustomOp* op); + + // Returns true (non-zero) if all arguments of a variadic input have to be of the same type (homogeneous), + // and false (zero) otherwise. + // Applicable only for custom ops that have a variadic input. + int(ORT_API_CALL* GetVariadicInputHomogeneity)(_In_ const struct OrtCustomOp* op); + + // Returns the minimum number of output values expected for the variadic output. + // Applicable only for custom ops that have a variadic output. + int(ORT_API_CALL* GetVariadicOutputMinArity)(_In_ const struct OrtCustomOp* op); + + // Returns true (non-zero) if all outputs values of a variadic output have to be of the same type (homogeneous), + // and false (zero) otherwise. + // Applicable only for custom ops that have a variadic output. + int(ORT_API_CALL* GetVariadicOutputHomogeneity)(_In_ const struct OrtCustomOp* op); +}; + +/* + * This is the old way to add the CUDA provider to the session, please use SessionOptionsAppendExecutionProvider_CUDA above to access the latest functionality + * This function always exists, but will only succeed if Onnxruntime was built with CUDA support and the CUDA provider shared library exists + * + * \param device_id CUDA device id, starts from zero. + */ +ORT_API_STATUS(OrtSessionOptionsAppendExecutionProvider_CUDA, _In_ OrtSessionOptions* options, int device_id); + +/* + * This is the old way to add the MIGraphX provider to the session, please use + * SessionOptionsAppendExecutionProvider_MIGraphX above to access the latest functionality + * This function always exists, but will only succeed if Onnxruntime was built with + * HIP support and the MIGraphX provider shared library exists + * + * \param device_id HIP device id, starts from zero. + */ +ORT_API_STATUS(OrtSessionOptionsAppendExecutionProvider_MIGraphX, _In_ OrtSessionOptions* options, int device_id); + +#ifdef __cplusplus +} +#endif + +//! @} diff --git a/funasr/runtime/onnxruntime/win/include/onnxruntime_cxx_api.h b/funasr/runtime/onnxruntime/win/include/onnxruntime_cxx_api.h new file mode 100644 index 000000000..97b2aa484 --- /dev/null +++ b/funasr/runtime/onnxruntime/win/include/onnxruntime_cxx_api.h @@ -0,0 +1,1876 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +// Summary: The Ort C++ API is a header only wrapper around the Ort C API. +// +// The C++ API simplifies usage by returning values directly instead of error codes, throwing exceptions on errors +// and automatically releasing resources in the destructors. The primary purpose of C++ API is exception safety so +// all the resources follow RAII and do not leak memory. +// +// Each of the C++ wrapper classes holds only a pointer to the C internal object. Treat them like smart pointers. +// To create an empty object, pass 'nullptr' to the constructor (for example, Env e{nullptr};). However, you can't use them +// until you assign an instance that actually holds an underlying object. +// +// For Ort objects only move assignment between objects is allowed, there are no copy constructors. +// Some objects have explicit 'Clone' methods for this purpose. +// +// ConstXXXX types are copyable since they do not own the underlying C object, so you can pass them to functions as arguments +// by value or by reference. ConstXXXX types are restricted to const only interfaces. +// +// UnownedXXXX are similar to ConstXXXX but also allow non-const interfaces. +// +// The lifetime of the corresponding owning object must eclipse the lifetimes of the ConstXXXX/UnownedXXXX types. They exists so you do not +// have to fallback to C types and the API with the usual pitfalls. In general, do not use C API from your C++ code. + +#pragma once +#include "onnxruntime_c_api.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef ORT_NO_EXCEPTIONS +#include +#endif + +/** \brief All C++ Onnxruntime APIs are defined inside this namespace + * + */ +namespace Ort { + +/** \brief All C++ methods that can fail will throw an exception of this type + * + * If ORT_NO_EXCEPTIONS is defined, then any error will result in a call to abort() + */ +struct Exception : std::exception { + Exception(std::string&& string, OrtErrorCode code) : message_{std::move(string)}, code_{code} {} + + OrtErrorCode GetOrtErrorCode() const { return code_; } + const char* what() const noexcept override { return message_.c_str(); } + + private: + std::string message_; + OrtErrorCode code_; +}; + +#ifdef ORT_NO_EXCEPTIONS +// The #ifndef is for the very special case where the user of this library wants to define their own way of handling errors. +// NOTE: This header expects control flow to not continue after calling ORT_CXX_API_THROW +#ifndef ORT_CXX_API_THROW +#define ORT_CXX_API_THROW(string, code) \ + do { \ + std::cerr << Ort::Exception(string, code) \ + .what() \ + << std::endl; \ + abort(); \ + } while (false) +#endif +#else +#define ORT_CXX_API_THROW(string, code) \ + throw Ort::Exception(string, code) +#endif + +// This is used internally by the C++ API. This class holds the global variable that points to the OrtApi, +// it's in a template so that we can define a global variable in a header and make +// it transparent to the users of the API. +template +struct Global { + static const OrtApi* api_; +}; + +// If macro ORT_API_MANUAL_INIT is defined, no static initialization will be performed. Instead, user must call InitApi() before using it. +template +#ifdef ORT_API_MANUAL_INIT +const OrtApi* Global::api_{}; +inline void InitApi() { Global::api_ = OrtGetApiBase()->GetApi(ORT_API_VERSION); } + +// Used by custom operator libraries that are not linked to onnxruntime. Sets the global API object, which is +// required by C++ APIs. +// +// Example mycustomop.cc: +// +// #define ORT_API_MANUAL_INIT +// #include +// #undef ORT_API_MANUAL_INIT +// +// OrtStatus* ORT_API_CALL RegisterCustomOps(OrtSessionOptions* options, const OrtApiBase* api_base) { +// Ort::InitApi(api_base->GetApi(ORT_API_VERSION)); +// // ... +// } +// +inline void InitApi(const OrtApi* api) { Global::api_ = api; } +#else +#if defined(_MSC_VER) && !defined(__clang__) +#pragma warning(push) +// "Global initializer calls a non-constexpr function." Therefore you can't use ORT APIs in the other global initializers. +// Please define ORT_API_MANUAL_INIT if it conerns you. +#pragma warning(disable : 26426) +#endif +const OrtApi* Global::api_ = OrtGetApiBase()->GetApi(ORT_API_VERSION); +#if defined(_MSC_VER) && !defined(__clang__) +#pragma warning(pop) +#endif +#endif + +/// This returns a reference to the OrtApi interface in use +inline const OrtApi& GetApi() { return *Global::api_; } + +/// +/// This is a C++ wrapper for OrtApi::GetAvailableProviders() and +/// returns a vector of strings representing the available execution providers. +/// +/// vector of strings +std::vector GetAvailableProviders(); + +/** \brief IEEE 754 half-precision floating point data type + * \details It is necessary for type dispatching to make use of C++ API + * The type is implicitly convertible to/from uint16_t. + * The size of the structure should align with uint16_t and one can freely cast + * uint16_t buffers to/from Ort::Float16_t to feed and retrieve data. + * + * Generally, you can feed any of your types as float16/blfoat16 data to create a tensor + * on top of it, providing it can form a continuous buffer with 16-bit elements with no padding. + * And you can also feed a array of uint16_t elements directly. For example, + * + * \code{.unparsed} + * uint16_t values[] = { 15360, 16384, 16896, 17408, 17664}; + * constexpr size_t values_length = sizeof(values) / sizeof(values[0]); + * std::vector dims = {values_length}; // one dimensional example + * Ort::MemoryInfo info("Cpu", OrtDeviceAllocator, 0, OrtMemTypeDefault); + * // Note we are passing bytes count in this api, not number of elements -> sizeof(values) + * auto float16_tensor = Ort::Value::CreateTensor(info, values, sizeof(values), + * dims.data(), dims.size(), ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT16); + * \endcode + * + * Here is another example, a little bit more elaborate. Let's assume that you use your own float16 type and you want to use + * a templated version of the API above so the type is automatically set based on your type. You will need to supply an extra + * template specialization. + * + * \code{.unparsed} + * namespace yours { struct half {}; } // assume this is your type, define this: + * namespace Ort { + * template<> + * struct TypeToTensorType { static constexpr ONNXTensorElementDataType type = ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT16; }; + * } //namespace Ort + * + * std::vector values; + * std::vector dims = {values.size()}; // one dimensional example + * Ort::MemoryInfo info("Cpu", OrtDeviceAllocator, 0, OrtMemTypeDefault); + * // Here we are passing element count -> values.size() + * auto float16_tensor = Ort::Value::CreateTensor(info, values.data(), values.size(), dims.data(), dims.size()); + * + * \endcode + */ +struct Float16_t { + uint16_t value; + constexpr Float16_t() noexcept : value(0) {} + constexpr Float16_t(uint16_t v) noexcept : value(v) {} + constexpr operator uint16_t() const noexcept { return value; } + constexpr bool operator==(const Float16_t& rhs) const noexcept { return value == rhs.value; }; + constexpr bool operator!=(const Float16_t& rhs) const noexcept { return value != rhs.value; }; +}; + +static_assert(sizeof(Float16_t) == sizeof(uint16_t), "Sizes must match"); + +/** \brief bfloat16 (Brain Floating Point) data type + * \details It is necessary for type dispatching to make use of C++ API + * The type is implicitly convertible to/from uint16_t. + * The size of the structure should align with uint16_t and one can freely cast + * uint16_t buffers to/from Ort::BFloat16_t to feed and retrieve data. + * + * See also code examples for Float16_t above. + */ +struct BFloat16_t { + uint16_t value; + constexpr BFloat16_t() noexcept : value(0) {} + constexpr BFloat16_t(uint16_t v) noexcept : value(v) {} + constexpr operator uint16_t() const noexcept { return value; } + constexpr bool operator==(const BFloat16_t& rhs) const noexcept { return value == rhs.value; }; + constexpr bool operator!=(const BFloat16_t& rhs) const noexcept { return value != rhs.value; }; +}; + +static_assert(sizeof(BFloat16_t) == sizeof(uint16_t), "Sizes must match"); + +namespace detail { +// This is used internally by the C++ API. This macro is to make it easy to generate overloaded methods for all of the various OrtRelease* functions for every Ort* type +// This can't be done in the C API since C doesn't have function overloading. +#define ORT_DEFINE_RELEASE(NAME) \ + inline void OrtRelease(Ort##NAME* ptr) { GetApi().Release##NAME(ptr); } + +ORT_DEFINE_RELEASE(Allocator); +ORT_DEFINE_RELEASE(MemoryInfo); +ORT_DEFINE_RELEASE(CustomOpDomain); +ORT_DEFINE_RELEASE(ThreadingOptions); +ORT_DEFINE_RELEASE(Env); +ORT_DEFINE_RELEASE(RunOptions); +ORT_DEFINE_RELEASE(Session); +ORT_DEFINE_RELEASE(SessionOptions); +ORT_DEFINE_RELEASE(TensorTypeAndShapeInfo); +ORT_DEFINE_RELEASE(SequenceTypeInfo); +ORT_DEFINE_RELEASE(MapTypeInfo); +ORT_DEFINE_RELEASE(TypeInfo); +ORT_DEFINE_RELEASE(Value); +ORT_DEFINE_RELEASE(ModelMetadata); +ORT_DEFINE_RELEASE(IoBinding); +ORT_DEFINE_RELEASE(ArenaCfg); +ORT_DEFINE_RELEASE(Status); +ORT_DEFINE_RELEASE(OpAttr); +ORT_DEFINE_RELEASE(Op); +ORT_DEFINE_RELEASE(KernelInfo); + +#undef ORT_DEFINE_RELEASE + +/** \brief This is a tagging template type. Use it with Base to indicate that the C++ interface object + * has no ownership of the underlying C object. + */ +template +struct Unowned { + using Type = T; +}; + +/** \brief Used internally by the C++ API. C++ wrapper types inherit from this. + * This is a zero cost abstraction to wrap the C API objects and delete them on destruction. + * + * All of the C++ classes + * a) serve as containers for pointers to objects that are created by the underlying C API. + * Their size is just a pointer size, no need to dynamically allocate them. Use them by value. + * b) Each of struct XXXX, XXX instances function as smart pointers to the underlying C API objects. + * they would release objects owned automatically when going out of scope, they are move-only. + * c) ConstXXXX and UnownedXXX structs function as non-owning, copyable containers for the above pointers. + * ConstXXXX allow calling const interfaces only. They give access to objects that are owned by somebody else + * such as Onnxruntime or instances of XXXX classes. + * d) serve convenient interfaces that return C++ objects and further enhance exception and type safety so they can be used + * in C++ code. + * + */ + +/// +/// This is a non-const pointer holder that is move-only. Disposes of the pointer on destruction. +/// +template +struct Base { + using contained_type = T; + + constexpr Base() = default; + constexpr explicit Base(contained_type* p) noexcept : p_{p} {} + ~Base() { OrtRelease(p_); } + + Base(const Base&) = delete; + Base& operator=(const Base&) = delete; + + Base(Base&& v) noexcept : p_{v.p_} { v.p_ = nullptr; } + Base& operator=(Base&& v) noexcept { + OrtRelease(p_); + p_ = v.release(); + return *this; + } + + constexpr operator contained_type*() const noexcept { return p_; } + + /// \brief Relinquishes ownership of the contained C object pointer + /// The underlying object is not destroyed + contained_type* release() { + T* p = p_; + p_ = nullptr; + return p; + } + + protected: + contained_type* p_{}; +}; + +// Undefined. For const types use Base> +template +struct Base; + +/// +/// Covers unowned pointers owned by either the ORT +/// or some other instance of CPP wrappers. +/// Used for ConstXXX and UnownedXXXX types that are copyable. +/// Also convenient to wrap raw OrtXX pointers . +/// +/// +template +struct Base> { + using contained_type = typename Unowned::Type; + + constexpr Base() = default; + constexpr explicit Base(contained_type* p) noexcept : p_{p} {} + + ~Base() = default; + + Base(const Base&) = default; + Base& operator=(const Base&) = default; + + Base(Base&& v) noexcept : p_{v.p_} { v.p_ = nullptr; } + Base& operator=(Base&& v) noexcept { + p_ = nullptr; + std::swap(p_, v.p_); + return *this; + } + + constexpr operator contained_type*() const noexcept { return p_; } + + protected: + contained_type* p_{}; +}; + +// Light functor to release memory with OrtAllocator +struct AllocatedFree { + OrtAllocator* allocator_; + explicit AllocatedFree(OrtAllocator* allocator) + : allocator_(allocator) {} + void operator()(void* ptr) const { + if (ptr) allocator_->Free(allocator_, ptr); + } +}; + +} // namespace detail + +struct AllocatorWithDefaultOptions; +struct Env; +struct TypeInfo; +struct Value; +struct ModelMetadata; + +/** \brief unique_ptr typedef used to own strings allocated by OrtAllocators + * and release them at the end of the scope. The lifespan of the given allocator + * must eclipse the lifespan of AllocatedStringPtr instance + */ +using AllocatedStringPtr = std::unique_ptr; + +/** \brief The Status that holds ownership of OrtStatus received from C API + * Use it to safely destroy OrtStatus* returned from the C API. Use appropriate + * constructors to construct an instance of a Status object from exceptions. + */ +struct Status : detail::Base { + explicit Status(std::nullptr_t) {} ///< Create an empty object, must be assigned a valid one to be used + explicit Status(OrtStatus* status); ///< Takes ownership of OrtStatus instance returned from the C API. Must be non-null + explicit Status(const Exception&); ///< Creates status instance out of exception + explicit Status(const std::exception&); ///< Creates status instance out of exception + std::string GetErrorMessage() const; + OrtErrorCode GetErrorCode() const; +}; + +/** \brief The ThreadingOptions + * + * The ThreadingOptions used for set global threadpools' options of The Env. + */ +struct ThreadingOptions : detail::Base { + /// \brief Wraps OrtApi::CreateThreadingOptions + ThreadingOptions(); + + /// \brief Wraps OrtApi::SetGlobalIntraOpNumThreads + ThreadingOptions& SetGlobalIntraOpNumThreads(int intra_op_num_threads); + + /// \brief Wraps OrtApi::SetGlobalInterOpNumThreads + ThreadingOptions& SetGlobalInterOpNumThreads(int inter_op_num_threads); + + /// \brief Wraps OrtApi::SetGlobalSpinControl + ThreadingOptions& SetGlobalSpinControl(int allow_spinning); + + /// \brief Wraps OrtApi::SetGlobalDenormalAsZero + ThreadingOptions& SetGlobalDenormalAsZero(); + + /// \brief Wraps OrtApi::SetGlobalCustomCreateThreadFn + ThreadingOptions& SetGlobalCustomCreateThreadFn(OrtCustomCreateThreadFn ort_custom_create_thread_fn); + + /// \brief Wraps OrtApi::SetGlobalCustomThreadCreationOptions + ThreadingOptions& SetGlobalCustomThreadCreationOptions(void* ort_custom_thread_creation_options); + + /// \brief Wraps OrtApi::SetGlobalCustomJoinThreadFn + ThreadingOptions& SetGlobalCustomJoinThreadFn(OrtCustomJoinThreadFn ort_custom_join_thread_fn); +}; + +/** \brief The Env (Environment) + * + * The Env holds the logging state used by all other objects. + * Note: One Env must be created before using any other Onnxruntime functionality + */ +struct Env : detail::Base { + explicit Env(std::nullptr_t) {} ///< Create an empty Env object, must be assigned a valid one to be used + + /// \brief Wraps OrtApi::CreateEnv + Env(OrtLoggingLevel logging_level = ORT_LOGGING_LEVEL_WARNING, _In_ const char* logid = ""); + + /// \brief Wraps OrtApi::CreateEnvWithCustomLogger + Env(OrtLoggingLevel logging_level, const char* logid, OrtLoggingFunction logging_function, void* logger_param); + + /// \brief Wraps OrtApi::CreateEnvWithGlobalThreadPools + Env(const OrtThreadingOptions* tp_options, OrtLoggingLevel logging_level = ORT_LOGGING_LEVEL_WARNING, _In_ const char* logid = ""); + + /// \brief Wraps OrtApi::CreateEnvWithCustomLoggerAndGlobalThreadPools + Env(const OrtThreadingOptions* tp_options, OrtLoggingFunction logging_function, void* logger_param, + OrtLoggingLevel logging_level = ORT_LOGGING_LEVEL_WARNING, _In_ const char* logid = ""); + + /// \brief C Interop Helper + explicit Env(OrtEnv* p) : Base{p} {} + + Env& EnableTelemetryEvents(); ///< Wraps OrtApi::EnableTelemetryEvents + Env& DisableTelemetryEvents(); ///< Wraps OrtApi::DisableTelemetryEvents + + Env& UpdateEnvWithCustomLogLevel(OrtLoggingLevel log_severity_level); ///< Wraps OrtApi::UpdateEnvWithCustomLogLevel + + Env& CreateAndRegisterAllocator(const OrtMemoryInfo* mem_info, const OrtArenaCfg* arena_cfg); ///< Wraps OrtApi::CreateAndRegisterAllocator +}; + +/** \brief Custom Op Domain + * + */ +struct CustomOpDomain : detail::Base { + explicit CustomOpDomain(std::nullptr_t) {} ///< Create an empty CustomOpDomain object, must be assigned a valid one to be used + + /// \brief Wraps OrtApi::CreateCustomOpDomain + explicit CustomOpDomain(const char* domain); + + // This does not take ownership of the op, simply registers it. + void Add(const OrtCustomOp* op); ///< Wraps CustomOpDomain_Add +}; + +/** \brief RunOptions + * + */ +struct RunOptions : detail::Base { + explicit RunOptions(std::nullptr_t) {} ///< Create an empty RunOptions object, must be assigned a valid one to be used + RunOptions(); ///< Wraps OrtApi::CreateRunOptions + + RunOptions& SetRunLogVerbosityLevel(int); ///< Wraps OrtApi::RunOptionsSetRunLogVerbosityLevel + int GetRunLogVerbosityLevel() const; ///< Wraps OrtApi::RunOptionsGetRunLogVerbosityLevel + + RunOptions& SetRunLogSeverityLevel(int); ///< Wraps OrtApi::RunOptionsSetRunLogSeverityLevel + int GetRunLogSeverityLevel() const; ///< Wraps OrtApi::RunOptionsGetRunLogSeverityLevel + + RunOptions& SetRunTag(const char* run_tag); ///< wraps OrtApi::RunOptionsSetRunTag + const char* GetRunTag() const; ///< Wraps OrtApi::RunOptionsGetRunTag + + RunOptions& AddConfigEntry(const char* config_key, const char* config_value); ///< Wraps OrtApi::AddRunConfigEntry + + /** \brief Terminates all currently executing Session::Run calls that were made using this RunOptions instance + * + * If a currently executing session needs to be force terminated, this can be called from another thread to force it to fail with an error + * Wraps OrtApi::RunOptionsSetTerminate + */ + RunOptions& SetTerminate(); + + /** \brief Clears the terminate flag so this RunOptions instance can be used in a new Session::Run call without it instantly terminating + * + * Wraps OrtApi::RunOptionsUnsetTerminate + */ + RunOptions& UnsetTerminate(); +}; + + +namespace detail { +// Utility function that returns a SessionOption config entry key for a specific custom operator. +// Ex: custom_op.[custom_op_name].[config] +std::string MakeCustomOpConfigEntryKey(const char* custom_op_name, const char* config); +} // namespace detail + +/// +/// Class that represents session configuration entries for one or more custom operators. +/// +/// Example: +/// Ort::CustomOpConfigs op_configs; +/// op_configs.AddConfig("my_custom_op", "device_type", "CPU"); +/// +/// Passed to Ort::SessionOptions::RegisterCustomOpsLibrary. +/// +struct CustomOpConfigs { + CustomOpConfigs() = default; + ~CustomOpConfigs() = default; + CustomOpConfigs(const CustomOpConfigs&) = default; + CustomOpConfigs& operator=(const CustomOpConfigs&) = default; + CustomOpConfigs(CustomOpConfigs&& o) = default; + CustomOpConfigs& operator=(CustomOpConfigs&& o) = default; + + /** \brief Adds a session configuration entry/value for a specific custom operator. + * + * \param custom_op_name The name of the custom operator for which to add a configuration entry. + * Must match the name returned by the CustomOp's GetName() method. + * \param config_key The name of the configuration entry. + * \param config_value The value of the configuration entry. + * \return A reference to this object to enable call chaining. + */ + CustomOpConfigs& AddConfig(const char* custom_op_name, const char* config_key, const char* config_value); + + /** \brief Returns a flattened map of custom operator configuration entries and their values. + * + * The keys has been flattened to include both the custom operator name and the configuration entry key name. + * For example, a prior call to AddConfig("my_op", "key", "value") corresponds to the flattened key/value pair + * {"my_op.key", "value"}. + * + * \return An unordered map of flattened configurations. + */ + const std::unordered_map& GetFlattenedConfigs() const; + + private: + std::unordered_map flat_configs_; +}; + +/** \brief Options object used when creating a new Session object + * + * Wraps ::OrtSessionOptions object and methods + */ + +struct SessionOptions; + +namespace detail { +// we separate const-only methods because passing const ptr to non-const methods +// is only discovered when inline methods are compiled which is counter-intuitive +template +struct ConstSessionOptionsImpl : Base { + using B = Base; + using B::B; + + SessionOptions Clone() const; ///< Creates and returns a copy of this SessionOptions object. Wraps OrtApi::CloneSessionOptions + + std::string GetConfigEntry(const char* config_key) const; ///< Wraps OrtApi::GetSessionConfigEntry + bool HasConfigEntry(const char* config_key) const; ///< Wraps OrtApi::HasSessionConfigEntry + std::string GetConfigEntryOrDefault(const char* config_key, const std::string& def); +}; + +template +struct SessionOptionsImpl : ConstSessionOptionsImpl { + using B = ConstSessionOptionsImpl; + using B::B; + + SessionOptionsImpl& SetIntraOpNumThreads(int intra_op_num_threads); ///< Wraps OrtApi::SetIntraOpNumThreads + SessionOptionsImpl& SetInterOpNumThreads(int inter_op_num_threads); ///< Wraps OrtApi::SetInterOpNumThreads + SessionOptionsImpl& SetGraphOptimizationLevel(GraphOptimizationLevel graph_optimization_level); ///< Wraps OrtApi::SetSessionGraphOptimizationLevel + + SessionOptionsImpl& EnableCpuMemArena(); ///< Wraps OrtApi::EnableCpuMemArena + SessionOptionsImpl& DisableCpuMemArena(); ///< Wraps OrtApi::DisableCpuMemArena + + SessionOptionsImpl& SetOptimizedModelFilePath(const ORTCHAR_T* optimized_model_file); ///< Wraps OrtApi::SetOptimizedModelFilePath + + SessionOptionsImpl& EnableProfiling(const ORTCHAR_T* profile_file_prefix); ///< Wraps OrtApi::EnableProfiling + SessionOptionsImpl& DisableProfiling(); ///< Wraps OrtApi::DisableProfiling + + SessionOptionsImpl& EnableOrtCustomOps(); ///< Wraps OrtApi::EnableOrtCustomOps + + SessionOptionsImpl& EnableMemPattern(); ///< Wraps OrtApi::EnableMemPattern + SessionOptionsImpl& DisableMemPattern(); ///< Wraps OrtApi::DisableMemPattern + + SessionOptionsImpl& SetExecutionMode(ExecutionMode execution_mode); ///< Wraps OrtApi::SetSessionExecutionMode + + SessionOptionsImpl& SetLogId(const char* logid); ///< Wraps OrtApi::SetSessionLogId + SessionOptionsImpl& SetLogSeverityLevel(int level); ///< Wraps OrtApi::SetSessionLogSeverityLevel + + SessionOptionsImpl& Add(OrtCustomOpDomain* custom_op_domain); ///< Wraps OrtApi::AddCustomOpDomain + + SessionOptionsImpl& DisablePerSessionThreads(); ///< Wraps OrtApi::DisablePerSessionThreads + + SessionOptionsImpl& AddConfigEntry(const char* config_key, const char* config_value); ///< Wraps OrtApi::AddSessionConfigEntry + + SessionOptionsImpl& AddInitializer(const char* name, const OrtValue* ort_val); ///< Wraps OrtApi::AddInitializer + SessionOptionsImpl& AddExternalInitializers(const std::vector& names, const std::vector& ort_values); ///< Wraps OrtApi::AddExternalInitializers + + SessionOptionsImpl& AppendExecutionProvider_CUDA(const OrtCUDAProviderOptions& provider_options); ///< Wraps OrtApi::SessionOptionsAppendExecutionProvider_CUDA + SessionOptionsImpl& AppendExecutionProvider_CUDA_V2(const OrtCUDAProviderOptionsV2& provider_options); ///< Wraps OrtApi::SessionOptionsAppendExecutionProvider_CUDA_V2 + SessionOptionsImpl& AppendExecutionProvider_ROCM(const OrtROCMProviderOptions& provider_options); ///< Wraps OrtApi::SessionOptionsAppendExecutionProvider_ROCM + SessionOptionsImpl& AppendExecutionProvider_OpenVINO(const OrtOpenVINOProviderOptions& provider_options); ///< Wraps OrtApi::SessionOptionsAppendExecutionProvider_OpenVINO + SessionOptionsImpl& AppendExecutionProvider_TensorRT(const OrtTensorRTProviderOptions& provider_options); ///< Wraps OrtApi::SessionOptionsAppendExecutionProvider_TensorRT + SessionOptionsImpl& AppendExecutionProvider_TensorRT_V2(const OrtTensorRTProviderOptionsV2& provider_options); ///< Wraps OrtApi::SessionOptionsAppendExecutionProvider_TensorRT + SessionOptionsImpl& AppendExecutionProvider_MIGraphX(const OrtMIGraphXProviderOptions& provider_options); ///< Wraps OrtApi::SessionOptionsAppendExecutionProvider_MIGraphX + ///< Wraps OrtApi::SessionOptionsAppendExecutionProvider_CANN + SessionOptionsImpl& AppendExecutionProvider_CANN(const OrtCANNProviderOptions& provider_options); + /// Wraps OrtApi::SessionOptionsAppendExecutionProvider. Currently supports SNPE and XNNPACK. + SessionOptionsImpl& AppendExecutionProvider(const std::string& provider_name, + const std::unordered_map& provider_options = {}); + + SessionOptionsImpl& SetCustomCreateThreadFn(OrtCustomCreateThreadFn ort_custom_create_thread_fn); ///< Wraps OrtApi::SessionOptionsSetCustomCreateThreadFn + SessionOptionsImpl& SetCustomThreadCreationOptions(void* ort_custom_thread_creation_options); ///< Wraps OrtApi::SessionOptionsSetCustomThreadCreationOptions + SessionOptionsImpl& SetCustomJoinThreadFn(OrtCustomJoinThreadFn ort_custom_join_thread_fn); ///< Wraps OrtApi::SessionOptionsSetCustomJoinThreadFn + + ///< Registers the custom operator from the specified shared library via OrtApi::RegisterCustomOpsLibrary_V2. + ///< The custom operator configurations are optional. If provided, custom operator configs are set via + ///< OrtApi::AddSessionConfigEntry. + SessionOptionsImpl& RegisterCustomOpsLibrary(const ORTCHAR_T* library_name, const CustomOpConfigs& custom_op_configs = {}); + + SessionOptionsImpl& RegisterCustomOpsUsingFunction(const char* function_name); ///< Wraps OrtApi::RegisterCustomOpsUsingFunction +}; +} // namespace detail + +using UnownedSessionOptions = detail::SessionOptionsImpl>; +using ConstSessionOptions = detail::ConstSessionOptionsImpl>; + +/** \brief Wrapper around ::OrtSessionOptions + * + */ +struct SessionOptions : detail::SessionOptionsImpl { + explicit SessionOptions(std::nullptr_t) {} ///< Create an empty SessionOptions object, must be assigned a valid one to be used + SessionOptions(); ///< Wraps OrtApi::CreateSessionOptions + explicit SessionOptions(OrtSessionOptions* p) : SessionOptionsImpl{p} {} ///< Used for interop with the C API + UnownedSessionOptions GetUnowned() const { return UnownedSessionOptions{this->p_}; } + ConstSessionOptions GetConst() const { return ConstSessionOptions{this->p_}; } +}; + +/** \brief Wrapper around ::OrtModelMetadata + * + */ +struct ModelMetadata : detail::Base { + explicit ModelMetadata(std::nullptr_t) {} ///< Create an empty ModelMetadata object, must be assigned a valid one to be used + explicit ModelMetadata(OrtModelMetadata* p) : Base{p} {} ///< Used for interop with the C API + + /** \brief Returns a copy of the producer name. + * + * \param allocator to allocate memory for the copy of the name returned + * \return a instance of smart pointer that would deallocate the buffer when out of scope. + * The OrtAllocator instances must be valid at the point of memory release. + */ + AllocatedStringPtr GetProducerNameAllocated(OrtAllocator* allocator) const; ///< Wraps OrtApi::ModelMetadataGetProducerName + + /** \brief Returns a copy of the graph name. + * + * \param allocator to allocate memory for the copy of the name returned + * \return a instance of smart pointer that would deallocate the buffer when out of scope. + * The OrtAllocator instances must be valid at the point of memory release. + */ + AllocatedStringPtr GetGraphNameAllocated(OrtAllocator* allocator) const; ///< Wraps OrtApi::ModelMetadataGetGraphName + + /** \brief Returns a copy of the domain name. + * + * \param allocator to allocate memory for the copy of the name returned + * \return a instance of smart pointer that would deallocate the buffer when out of scope. + * The OrtAllocator instances must be valid at the point of memory release. + */ + AllocatedStringPtr GetDomainAllocated(OrtAllocator* allocator) const; ///< Wraps OrtApi::ModelMetadataGetDomain + + /** \brief Returns a copy of the description. + * + * \param allocator to allocate memory for the copy of the string returned + * \return a instance of smart pointer that would deallocate the buffer when out of scope. + * The OrtAllocator instances must be valid at the point of memory release. + */ + AllocatedStringPtr GetDescriptionAllocated(OrtAllocator* allocator) const; ///< Wraps OrtApi::ModelMetadataGetDescription + + /** \brief Returns a copy of the graph description. + * + * \param allocator to allocate memory for the copy of the string returned + * \return a instance of smart pointer that would deallocate the buffer when out of scope. + * The OrtAllocator instances must be valid at the point of memory release. + */ + AllocatedStringPtr GetGraphDescriptionAllocated(OrtAllocator* allocator) const; ///< Wraps OrtApi::ModelMetadataGetGraphDescription + + /** \brief Returns a vector of copies of the custom metadata keys. + * + * \param allocator to allocate memory for the copy of the string returned + * \return a instance std::vector of smart pointers that would deallocate the buffers when out of scope. + * The OrtAllocator instance must be valid at the point of memory release. + */ + std::vector GetCustomMetadataMapKeysAllocated(OrtAllocator* allocator) const; ///< Wraps OrtApi::ModelMetadataGetCustomMetadataMapKeys + + /** \brief Looks up a value by a key in the Custom Metadata map + * + * \param key zero terminated string key to lookup + * \param allocator to allocate memory for the copy of the string returned + * \return a instance of smart pointer that would deallocate the buffer when out of scope. + * maybe nullptr if key is not found. + * + * The OrtAllocator instances must be valid at the point of memory release. + */ + AllocatedStringPtr LookupCustomMetadataMapAllocated(const char* key, OrtAllocator* allocator) const; ///< Wraps OrtApi::ModelMetadataLookupCustomMetadataMap + + int64_t GetVersion() const; ///< Wraps OrtApi::ModelMetadataGetVersion +}; + +struct IoBinding; + +namespace detail { + +// we separate const-only methods because passing const ptr to non-const methods +// is only discovered when inline methods are compiled which is counter-intuitive +template +struct ConstSessionImpl : Base { + using B = Base; + using B::B; + + size_t GetInputCount() const; ///< Returns the number of model inputs + size_t GetOutputCount() const; ///< Returns the number of model outputs + size_t GetOverridableInitializerCount() const; ///< Returns the number of inputs that have defaults that can be overridden + + /** \brief Returns a copy of input name at the specified index. + * + * \param index must less than the value returned by GetInputCount() + * \param allocator to allocate memory for the copy of the name returned + * \return a instance of smart pointer that would deallocate the buffer when out of scope. + * The OrtAllocator instances must be valid at the point of memory release. + */ + AllocatedStringPtr GetInputNameAllocated(size_t index, OrtAllocator* allocator) const; + + /** \brief Returns a copy of output name at then specified index. + * + * \param index must less than the value returned by GetOutputCount() + * \param allocator to allocate memory for the copy of the name returned + * \return a instance of smart pointer that would deallocate the buffer when out of scope. + * The OrtAllocator instances must be valid at the point of memory release. + */ + AllocatedStringPtr GetOutputNameAllocated(size_t index, OrtAllocator* allocator) const; + + /** \brief Returns a copy of the overridable initializer name at then specified index. + * + * \param index must less than the value returned by GetOverridableInitializerCount() + * \param allocator to allocate memory for the copy of the name returned + * \return a instance of smart pointer that would deallocate the buffer when out of scope. + * The OrtAllocator instances must be valid at the point of memory release. + */ + AllocatedStringPtr GetOverridableInitializerNameAllocated(size_t index, OrtAllocator* allocator) const; ///< Wraps OrtApi::SessionGetOverridableInitializerName + + uint64_t GetProfilingStartTimeNs() const; ///< Wraps OrtApi::SessionGetProfilingStartTimeNs + ModelMetadata GetModelMetadata() const; ///< Wraps OrtApi::SessionGetModelMetadata + + TypeInfo GetInputTypeInfo(size_t index) const; ///< Wraps OrtApi::SessionGetInputTypeInfo + TypeInfo GetOutputTypeInfo(size_t index) const; ///< Wraps OrtApi::SessionGetOutputTypeInfo + TypeInfo GetOverridableInitializerTypeInfo(size_t index) const; ///< Wraps OrtApi::SessionGetOverridableInitializerTypeInfo +}; + +template +struct SessionImpl : ConstSessionImpl { + using B = ConstSessionImpl; + using B::B; + + /** \brief Run the model returning results in an Ort allocated vector. + * + * Wraps OrtApi::Run + * + * The caller provides a list of inputs and a list of the desired outputs to return. + * + * See the output logs for more information on warnings/errors that occur while processing the model. + * Common errors are.. (TODO) + * + * \param[in] run_options + * \param[in] input_names Array of null terminated strings of length input_count that is the list of input names + * \param[in] input_values Array of Value objects of length input_count that is the list of input values + * \param[in] input_count Number of inputs (the size of the input_names & input_values arrays) + * \param[in] output_names Array of C style strings of length output_count that is the list of output names + * \param[in] output_count Number of outputs (the size of the output_names array) + * \return A std::vector of Value objects that directly maps to the output_names array (eg. output_name[0] is the first entry of the returned vector) + */ + std::vector Run(const RunOptions& run_options, const char* const* input_names, const Value* input_values, size_t input_count, + const char* const* output_names, size_t output_count); + + /** \brief Run the model returning results in user provided outputs + * Same as Run(const RunOptions&, const char* const*, const Value*, size_t,const char* const*, size_t) + */ + void Run(const RunOptions& run_options, const char* const* input_names, const Value* input_values, size_t input_count, + const char* const* output_names, Value* output_values, size_t output_count); + + void Run(const RunOptions& run_options, const IoBinding&); ///< Wraps OrtApi::RunWithBinding + + /** \brief End profiling and return a copy of the profiling file name. + * + * \param allocator to allocate memory for the copy of the string returned + * \return a instance of smart pointer that would deallocate the buffer when out of scope. + * The OrtAllocator instances must be valid at the point of memory release. + */ + AllocatedStringPtr EndProfilingAllocated(OrtAllocator* allocator); ///< Wraps OrtApi::SessionEndProfiling +}; + +} // namespace detail + +using ConstSession = detail::ConstSessionImpl>; +using UnownedSession = detail::SessionImpl>; + +/** \brief Wrapper around ::OrtSession + * + */ +struct Session : detail::SessionImpl { + explicit Session(std::nullptr_t) {} ///< Create an empty Session object, must be assigned a valid one to be used + Session(const Env& env, const ORTCHAR_T* model_path, const SessionOptions& options); ///< Wraps OrtApi::CreateSession + Session(const Env& env, const ORTCHAR_T* model_path, const SessionOptions& options, + OrtPrepackedWeightsContainer* prepacked_weights_container); ///< Wraps OrtApi::CreateSessionWithPrepackedWeightsContainer + Session(const Env& env, const void* model_data, size_t model_data_length, const SessionOptions& options); ///< Wraps OrtApi::CreateSessionFromArray + Session(const Env& env, const void* model_data, size_t model_data_length, const SessionOptions& options, + OrtPrepackedWeightsContainer* prepacked_weights_container); ///< Wraps OrtApi::CreateSessionFromArrayWithPrepackedWeightsContainer + + ConstSession GetConst() const { return ConstSession{this->p_}; } + UnownedSession GetUnowned() const { return UnownedSession{this->p_}; } +}; + +namespace detail { +template +struct MemoryInfoImpl : Base { + using B = Base; + using B::B; + + std::string GetAllocatorName() const; + OrtAllocatorType GetAllocatorType() const; + int GetDeviceId() const; + OrtMemoryInfoDeviceType GetDeviceType() const; + OrtMemType GetMemoryType() const; + + template + bool operator==(const MemoryInfoImpl& o) const; +}; +} // namespace detail + +// Const object holder that does not own the underlying object +using ConstMemoryInfo = detail::MemoryInfoImpl>; + +/** \brief Wrapper around ::OrtMemoryInfo + * + */ +struct MemoryInfo : detail::MemoryInfoImpl { + static MemoryInfo CreateCpu(OrtAllocatorType type, OrtMemType mem_type1); + explicit MemoryInfo(std::nullptr_t) {} ///< No instance is created + explicit MemoryInfo(OrtMemoryInfo* p) : MemoryInfoImpl{p} {} ///< Take ownership of a pointer created by C Api + MemoryInfo(const char* name, OrtAllocatorType type, int id, OrtMemType mem_type); + ConstMemoryInfo GetConst() const { return ConstMemoryInfo{this->p_}; } +}; + +namespace detail { +template +struct TensorTypeAndShapeInfoImpl : Base { + using B = Base; + using B::B; + + ONNXTensorElementDataType GetElementType() const; ///< Wraps OrtApi::GetTensorElementType + size_t GetElementCount() const; ///< Wraps OrtApi::GetTensorShapeElementCount + + size_t GetDimensionsCount() const; ///< Wraps OrtApi::GetDimensionsCount + + /** \deprecated use GetShape() returning std::vector + * [[deprecated]] + * This interface is unsafe to use + */ + [[deprecated("use GetShape()")]] void GetDimensions(int64_t* values, size_t values_count) const; ///< Wraps OrtApi::GetDimensions + + void GetSymbolicDimensions(const char** values, size_t values_count) const; ///< Wraps OrtApi::GetSymbolicDimensions + + std::vector GetShape() const; ///< Uses GetDimensionsCount & GetDimensions to return a std::vector of the shape +}; + +} // namespace detail + +using ConstTensorTypeAndShapeInfo = detail::TensorTypeAndShapeInfoImpl>; + +/** \brief Wrapper around ::OrtTensorTypeAndShapeInfo + * + */ +struct TensorTypeAndShapeInfo : detail::TensorTypeAndShapeInfoImpl { + explicit TensorTypeAndShapeInfo(std::nullptr_t) {} ///< Create an empty TensorTypeAndShapeInfo object, must be assigned a valid one to be used + explicit TensorTypeAndShapeInfo(OrtTensorTypeAndShapeInfo* p) : TensorTypeAndShapeInfoImpl{p} {} ///< Used for interop with the C API + ConstTensorTypeAndShapeInfo GetConst() const { return ConstTensorTypeAndShapeInfo{this->p_}; } +}; + +namespace detail { +template +struct SequenceTypeInfoImpl : Base { + using B = Base; + using B::B; + TypeInfo GetSequenceElementType() const; ///< Wraps OrtApi::GetSequenceElementType +}; + +} // namespace detail + +using ConstSequenceTypeInfo = detail::SequenceTypeInfoImpl>; + +/** \brief Wrapper around ::OrtSequenceTypeInfo + * + */ +struct SequenceTypeInfo : detail::SequenceTypeInfoImpl { + explicit SequenceTypeInfo(std::nullptr_t) {} ///< Create an empty SequenceTypeInfo object, must be assigned a valid one to be used + explicit SequenceTypeInfo(OrtSequenceTypeInfo* p) : SequenceTypeInfoImpl{p} {} ///< Used for interop with the C API + ConstSequenceTypeInfo GetConst() const { return ConstSequenceTypeInfo{this->p_}; } +}; + +namespace detail { +template +struct MapTypeInfoImpl : detail::Base { + using B = Base; + using B::B; + ONNXTensorElementDataType GetMapKeyType() const; ///< Wraps OrtApi::GetMapKeyType + TypeInfo GetMapValueType() const; ///< Wraps OrtApi::GetMapValueType +}; + +} // namespace detail + +using ConstMapTypeInfo = detail::MapTypeInfoImpl>; + +/** \brief Wrapper around ::OrtMapTypeInfo + * + */ +struct MapTypeInfo : detail::MapTypeInfoImpl { + explicit MapTypeInfo(std::nullptr_t) {} ///< Create an empty MapTypeInfo object, must be assigned a valid one to be used + explicit MapTypeInfo(OrtMapTypeInfo* p) : MapTypeInfoImpl{p} {} ///< Used for interop with the C API + ConstMapTypeInfo GetConst() const { return ConstMapTypeInfo{this->p_}; } +}; + +namespace detail { +template +struct TypeInfoImpl : detail::Base { + using B = Base; + using B::B; + + ConstTensorTypeAndShapeInfo GetTensorTypeAndShapeInfo() const; ///< Wraps OrtApi::CastTypeInfoToTensorInfo + ConstSequenceTypeInfo GetSequenceTypeInfo() const; ///< Wraps OrtApi::CastTypeInfoToSequenceTypeInfo + ConstMapTypeInfo GetMapTypeInfo() const; ///< Wraps OrtApi::CastTypeInfoToMapTypeInfo + + ONNXType GetONNXType() const; +}; +} // namespace detail + +/// +/// Contains a constant, unowned OrtTypeInfo that can be copied and passed around by value. +/// Provides access to const OrtTypeInfo APIs. +/// +using ConstTypeInfo = detail::TypeInfoImpl>; + +/// +/// Type information that may contain either TensorTypeAndShapeInfo or +/// the information about contained sequence or map depending on the ONNXType. +/// +struct TypeInfo : detail::TypeInfoImpl { + explicit TypeInfo(std::nullptr_t) {} ///< Create an empty TypeInfo object, must be assigned a valid one to be used + explicit TypeInfo(OrtTypeInfo* p) : TypeInfoImpl{p} {} ///< C API Interop + + ConstTypeInfo GetConst() const { return ConstTypeInfo{this->p_}; } +}; + +namespace detail { +// This structure is used to feed sparse tensor values +// information for use with FillSparseTensor() API +// if the data type for the sparse tensor values is numeric +// use data.p_data, otherwise, use data.str pointer to feed +// values. data.str is an array of const char* that are zero terminated. +// number of strings in the array must match shape size. +// For fully sparse tensors use shape {0} and set p_data/str +// to nullptr. +struct OrtSparseValuesParam { + const int64_t* values_shape; + size_t values_shape_len; + union { + const void* p_data; + const char** str; + } data; +}; + +// Provides a way to pass shape in a single +// argument +struct Shape { + const int64_t* shape; + size_t shape_len; +}; + +template +struct ConstValueImpl : Base { + using B = Base; + using B::B; + + /// + /// Obtains a pointer to a user defined data for experimental purposes + /// + template + void GetOpaqueData(const char* domain, const char* type_name, R&) const; ///< Wraps OrtApi::GetOpaqueValue + + bool IsTensor() const; ///< Returns true if Value is a tensor, false for other types like map/sequence/etc + bool HasValue() const; /// < Return true if OrtValue contains data and returns false if the OrtValue is a None + + size_t GetCount() const; // If a non tensor, returns 2 for map and N for sequence, where N is the number of elements + Value GetValue(int index, OrtAllocator* allocator) const; + + /// + /// This API returns a full length of string data contained within either a tensor or a sparse Tensor. + /// For sparse tensor it returns a full length of stored non-empty strings (values). The API is useful + /// for allocating necessary memory and calling GetStringTensorContent(). + /// + /// total length of UTF-8 encoded bytes contained. No zero terminators counted. + size_t GetStringTensorDataLength() const; + + /// + /// The API copies all of the UTF-8 encoded string data contained within a tensor or a sparse tensor + /// into a supplied buffer. Use GetStringTensorDataLength() to find out the length of the buffer to allocate. + /// The user must also allocate offsets buffer with the number of entries equal to that of the contained + /// strings. + /// + /// Strings are always assumed to be on CPU, no X-device copy. + /// + /// user allocated buffer + /// length in bytes of the allocated buffer + /// a pointer to the offsets user allocated buffer + /// count of offsets, must be equal to the number of strings contained. + /// that can be obtained from the shape of the tensor or from GetSparseTensorValuesTypeAndShapeInfo() + /// for sparse tensors + void GetStringTensorContent(void* buffer, size_t buffer_length, size_t* offsets, size_t offsets_count) const; + + /// + /// Returns a const typed pointer to the tensor contained data. + /// No type checking is performed, the caller must ensure the type matches the tensor type. + /// + /// + /// const pointer to data, no copies made + template + const R* GetTensorData() const; ///< Wraps OrtApi::GetTensorMutableData ///
+ + /// + /// Returns a non-typed pointer to a tensor contained data. + /// + /// const pointer to data, no copies made + const void* GetTensorRawData() const; + + /// + /// The API returns type information for data contained in a tensor. For sparse + /// tensors it returns type information for contained non-zero values. + /// It returns dense shape for sparse tensors. + /// + /// TypeInfo + TypeInfo GetTypeInfo() const; + + /// + /// The API returns type information for data contained in a tensor. For sparse + /// tensors it returns type information for contained non-zero values. + /// It returns dense shape for sparse tensors. + /// + /// TensorTypeAndShapeInfo + TensorTypeAndShapeInfo GetTensorTypeAndShapeInfo() const; + + /// + /// This API returns information about the memory allocation used to hold data. + /// + /// Non owning instance of MemoryInfo + ConstMemoryInfo GetTensorMemoryInfo() const; + + /// + /// The API copies UTF-8 encoded bytes for the requested string element + /// contained within a tensor or a sparse tensor into a provided buffer. + /// Use GetStringTensorElementLength() to obtain the length of the buffer to allocate. + /// + /// + /// + /// + void GetStringTensorElement(size_t buffer_length, size_t element_index, void* buffer) const; + + /// + /// The API returns a byte length of UTF-8 encoded string element + /// contained in either a tensor or a spare tensor values. + /// + /// + /// byte length for the specified string element + size_t GetStringTensorElementLength(size_t element_index) const; + +#if !defined(DISABLE_SPARSE_TENSORS) + /// + /// The API returns the sparse data format this OrtValue holds in a sparse tensor. + /// If the sparse tensor was not fully constructed, i.e. Use*() or Fill*() API were not used + /// the value returned is ORT_SPARSE_UNDEFINED. + /// + /// Format enum + OrtSparseFormat GetSparseFormat() const; + + /// + /// The API returns type and shape information for stored non-zero values of the + /// sparse tensor. Use GetSparseTensorValues() to obtain values buffer pointer. + /// + /// TensorTypeAndShapeInfo values information + TensorTypeAndShapeInfo GetSparseTensorValuesTypeAndShapeInfo() const; + + /// + /// The API returns type and shape information for the specified indices. Each supported + /// indices have their own enum values even if a give format has more than one kind of indices. + /// Use GetSparseTensorIndicesData() to obtain pointer to indices buffer. + /// + /// enum requested + /// type and shape information + TensorTypeAndShapeInfo GetSparseTensorIndicesTypeShapeInfo(OrtSparseIndicesFormat format) const; + + /// + /// The API retrieves a pointer to the internal indices buffer. The API merely performs + /// a convenience data type casting on the return type pointer. Make sure you are requesting + /// the right type, use GetSparseTensorIndicesTypeShapeInfo(); + /// + /// type to cast to + /// requested indices kind + /// number of indices entries + /// Pinter to the internal sparse tensor buffer containing indices. Do not free this pointer. + template + const R* GetSparseTensorIndicesData(OrtSparseIndicesFormat indices_format, size_t& num_indices) const; + + /// + /// Returns true if the OrtValue contains a sparse tensor + /// + /// + bool IsSparseTensor() const; + + /// + /// The API returns a pointer to an internal buffer of the sparse tensor + /// containing non-zero values. The API merely does casting. Make sure you + /// are requesting the right data type by calling GetSparseTensorValuesTypeAndShapeInfo() + /// first. + /// + /// numeric data types only. Use GetStringTensor*() to retrieve strings. + /// a pointer to the internal values buffer. Do not free this pointer. + template + const R* GetSparseTensorValues() const; + +#endif +}; + +template +struct ValueImpl : ConstValueImpl { + using B = ConstValueImpl; + using B::B; + + /// + /// Returns a non-const typed pointer to an OrtValue/Tensor contained buffer + /// No type checking is performed, the caller must ensure the type matches the tensor type. + /// + /// non-const pointer to data, no copies made + template + R* GetTensorMutableData(); + + /// + /// Returns a non-typed non-const pointer to a tensor contained data. + /// + /// pointer to data, no copies made + void* GetTensorMutableRawData(); + + /// + // Obtain a reference to an element of data at the location specified + /// by the vector of dims. + /// + /// + /// [in] expressed by a vecotr of dimensions offsets + /// + template + R& At(const std::vector& location); + + /// + /// Set all strings at once in a string tensor + /// + /// [in] An array of strings. Each string in this array must be null terminated. + /// [in] Count of strings in s (Must match the size of \p value's tensor shape) + void FillStringTensor(const char* const* s, size_t s_len); + + /// + /// Set a single string in a string tensor + /// + /// [in] A null terminated UTF-8 encoded string + /// [in] Index of the string in the tensor to set + void FillStringTensorElement(const char* s, size_t index); + +#if !defined(DISABLE_SPARSE_TENSORS) + /// + /// Supplies COO format specific indices and marks the contained sparse tensor as being a COO format tensor. + /// Values are supplied with a CreateSparseTensor() API. The supplied indices are not copied and the user + /// allocated buffers lifespan must eclipse that of the OrtValue. + /// The location of the indices is assumed to be the same as specified by OrtMemoryInfo argument at the creation time. + /// + /// pointer to the user allocated buffer with indices. Use nullptr for fully sparse tensors. + /// number of indices entries. Use 0 for fully sparse tensors + void UseCooIndices(int64_t* indices_data, size_t indices_num); + + /// + /// Supplies CSR format specific indices and marks the contained sparse tensor as being a CSR format tensor. + /// Values are supplied with a CreateSparseTensor() API. The supplied indices are not copied and the user + /// allocated buffers lifespan must eclipse that of the OrtValue. + /// The location of the indices is assumed to be the same as specified by OrtMemoryInfo argument at the creation time. + /// + /// pointer to the user allocated buffer with inner indices or nullptr for fully sparse tensors + /// number of csr inner indices or 0 for fully sparse tensors + /// pointer to the user allocated buffer with outer indices or nullptr for fully sparse tensors + /// number of csr outer indices or 0 for fully sparse tensors + void UseCsrIndices(int64_t* inner_data, size_t inner_num, int64_t* outer_data, size_t outer_num); + + /// + /// Supplies BlockSparse format specific indices and marks the contained sparse tensor as being a BlockSparse format tensor. + /// Values are supplied with a CreateSparseTensor() API. The supplied indices are not copied and the user + /// allocated buffers lifespan must eclipse that of the OrtValue. + /// The location of the indices is assumed to be the same as specified by OrtMemoryInfo argument at the creation time. + /// + /// indices shape or a {0} for fully sparse + /// user allocated buffer with indices or nullptr for fully spare tensors + void UseBlockSparseIndices(const Shape& indices_shape, int32_t* indices_data); + + /// + /// The API will allocate memory using the allocator instance supplied to the CreateSparseTensor() API + /// and copy the values and COO indices into it. If data_mem_info specifies that the data is located + /// at difference device than the allocator, a X-device copy will be performed if possible. + /// + /// specified buffer memory description + /// values buffer information. + /// coo indices buffer or nullptr for fully sparse data + /// number of COO indices or 0 for fully sparse data + void FillSparseTensorCoo(const OrtMemoryInfo* data_mem_info, const OrtSparseValuesParam& values_param, + const int64_t* indices_data, size_t indices_num); + + /// + /// The API will allocate memory using the allocator instance supplied to the CreateSparseTensor() API + /// and copy the values and CSR indices into it. If data_mem_info specifies that the data is located + /// at difference device than the allocator, a X-device copy will be performed if possible. + /// + /// specified buffer memory description + /// values buffer information + /// csr inner indices pointer or nullptr for fully sparse tensors + /// number of csr inner indices or 0 for fully sparse tensors + /// pointer to csr indices data or nullptr for fully sparse tensors + /// number of csr outer indices or 0 + void FillSparseTensorCsr(const OrtMemoryInfo* data_mem_info, + const OrtSparseValuesParam& values, + const int64_t* inner_indices_data, size_t inner_indices_num, + const int64_t* outer_indices_data, size_t outer_indices_num); + + /// + /// The API will allocate memory using the allocator instance supplied to the CreateSparseTensor() API + /// and copy the values and BlockSparse indices into it. If data_mem_info specifies that the data is located + /// at difference device than the allocator, a X-device copy will be performed if possible. + /// + /// specified buffer memory description + /// values buffer information + /// indices shape. use {0} for fully sparse tensors + /// pointer to indices data or nullptr for fully sparse tensors + void FillSparseTensorBlockSparse(const OrtMemoryInfo* data_mem_info, + const OrtSparseValuesParam& values, + const Shape& indices_shape, + const int32_t* indices_data); + +#endif +}; + +} // namespace detail + +using ConstValue = detail::ConstValueImpl>; +using UnownedValue = detail::ValueImpl>; + +/** \brief Wrapper around ::OrtValue + * + */ +struct Value : detail::ValueImpl { + using Base = detail::ValueImpl; + using OrtSparseValuesParam = detail::OrtSparseValuesParam; + using Shape = detail::Shape; + + explicit Value(std::nullptr_t) {} ///< Create an empty Value object, must be assigned a valid one to be used + explicit Value(OrtValue* p) : Base{p} {} ///< Used for interop with the C API + Value(Value&&) = default; + Value& operator=(Value&&) = default; + + ConstValue GetConst() const { return ConstValue{this->p_}; } + UnownedValue GetUnowned() const { return UnownedValue{this->p_}; } + + /** \brief Creates a tensor with a user supplied buffer. Wraps OrtApi::CreateTensorWithDataAsOrtValue. + * \tparam T The numeric datatype. This API is not suitable for strings. + * \param info Memory description of where the p_data buffer resides (CPU vs GPU etc). + * \param p_data Pointer to the data buffer. + * \param p_data_element_count The number of elements in the data buffer. + * \param shape Pointer to the tensor shape dimensions. + * \param shape_len The number of tensor shape dimensions. + */ + template + static Value CreateTensor(const OrtMemoryInfo* info, T* p_data, size_t p_data_element_count, const int64_t* shape, size_t shape_len); + + /** \brief Creates a tensor with a user supplied buffer. Wraps OrtApi::CreateTensorWithDataAsOrtValue. + * \param info Memory description of where the p_data buffer resides (CPU vs GPU etc). + * \param p_data Pointer to the data buffer. + * \param p_data_byte_count The number of bytes in the data buffer. + * \param shape Pointer to the tensor shape dimensions. + * \param shape_len The number of tensor shape dimensions. + * \param type The data type. + */ + static Value CreateTensor(const OrtMemoryInfo* info, void* p_data, size_t p_data_byte_count, const int64_t* shape, size_t shape_len, + ONNXTensorElementDataType type); + + /** \brief Creates a tensor using a supplied OrtAllocator. Wraps OrtApi::CreateTensorAsOrtValue. + * \tparam T The numeric datatype. This API is not suitable for strings. + * \param allocator The allocator to use. + * \param shape Pointer to the tensor shape dimensions. + * \param shape_len The number of tensor shape dimensions. + */ + template + static Value CreateTensor(OrtAllocator* allocator, const int64_t* shape, size_t shape_len); + + /** \brief Creates a tensor using a supplied OrtAllocator. Wraps OrtApi::CreateTensorAsOrtValue. + * \param allocator The allocator to use. + * \param shape Pointer to the tensor shape dimensions. + * \param shape_len The number of tensor shape dimensions. + * \param type The data type. + */ + static Value CreateTensor(OrtAllocator* allocator, const int64_t* shape, size_t shape_len, ONNXTensorElementDataType type); + + static Value CreateMap(Value& keys, Value& values); ///< Wraps OrtApi::CreateValue + static Value CreateSequence(std::vector& values); ///< Wraps OrtApi::CreateValue + + template + static Value CreateOpaque(const char* domain, const char* type_name, const T&); ///< Wraps OrtApi::CreateOpaqueValue + +#if !defined(DISABLE_SPARSE_TENSORS) + /// + /// This is a simple forwarding method to the other overload that helps deducing + /// data type enum value from the type of the buffer. + /// + /// numeric datatype. This API is not suitable for strings. + /// Memory description where the user buffers reside (CPU vs GPU etc) + /// pointer to the user supplied buffer, use nullptr for fully sparse tensors + /// a would be dense shape of the tensor + /// non zero values shape. Use a single 0 shape for fully sparse tensors. + /// + template + static Value CreateSparseTensor(const OrtMemoryInfo* info, T* p_data, const Shape& dense_shape, + const Shape& values_shape); + + /// + /// Creates an OrtValue instance containing SparseTensor. This constructs + /// a sparse tensor that makes use of user allocated buffers. It does not make copies + /// of the user provided data and does not modify it. The lifespan of user provided buffers should + /// eclipse the life span of the resulting OrtValue. This call constructs an instance that only contain + /// a pointer to non-zero values. To fully populate the sparse tensor call UseIndices() API below + /// to supply a sparse format specific indices. + /// This API is not suitable for string data. Use CreateSparseTensor() with allocator specified so strings + /// can be properly copied into the allocated buffer. + /// + /// Memory description where the user buffers reside (CPU vs GPU etc) + /// pointer to the user supplied buffer, use nullptr for fully sparse tensors + /// a would be dense shape of the tensor + /// non zero values shape. Use a single 0 shape for fully sparse tensors. + /// data type + /// Ort::Value instance containing SparseTensor + static Value CreateSparseTensor(const OrtMemoryInfo* info, void* p_data, const Shape& dense_shape, + const Shape& values_shape, ONNXTensorElementDataType type); + + /// + /// This is a simple forwarding method to the below CreateSparseTensor. + /// This helps to specify data type enum in terms of C++ data type. + /// Use CreateSparseTensor + /// + /// numeric data type only. String data enum must be specified explicitly. + /// allocator to use + /// a would be dense shape of the tensor + /// Ort::Value + template + static Value CreateSparseTensor(OrtAllocator* allocator, const Shape& dense_shape); + + /// + /// Creates an instance of OrtValue containing sparse tensor. The created instance has no data. + /// The data must be supplied by on of the FillSparseTensor() methods that take both non-zero values + /// and indices. The data will be copied into a buffer that would be allocated using the supplied allocator. + /// Use this API to create OrtValues that contain sparse tensors with all supported data types including + /// strings. + /// + /// allocator to use. The allocator lifespan must eclipse that of the resulting OrtValue + /// a would be dense shape of the tensor + /// data type + /// an instance of Ort::Value + static Value CreateSparseTensor(OrtAllocator* allocator, const Shape& dense_shape, ONNXTensorElementDataType type); + +#endif // !defined(DISABLE_SPARSE_TENSORS) +}; + +/// +/// Represents native memory allocation coming from one of the +/// OrtAllocators registered with OnnxRuntime. +/// Use it to wrap an allocation made by an allocator +/// so it can be automatically released when no longer needed. +/// +struct MemoryAllocation { + MemoryAllocation(OrtAllocator* allocator, void* p, size_t size); + ~MemoryAllocation(); + MemoryAllocation(const MemoryAllocation&) = delete; + MemoryAllocation& operator=(const MemoryAllocation&) = delete; + MemoryAllocation(MemoryAllocation&&) noexcept; + MemoryAllocation& operator=(MemoryAllocation&&) noexcept; + + void* get() { return p_; } + size_t size() const { return size_; } + + private: + OrtAllocator* allocator_; + void* p_; + size_t size_; +}; + +namespace detail { +template +struct AllocatorImpl : Base { + using B = Base; + using B::B; + + void* Alloc(size_t size); + MemoryAllocation GetAllocation(size_t size); + void Free(void* p); + ConstMemoryInfo GetInfo() const; +}; + +} // namespace detail + +/** \brief Wrapper around ::OrtAllocator default instance that is owned by Onnxruntime + * + */ +struct AllocatorWithDefaultOptions : detail::AllocatorImpl> { + explicit AllocatorWithDefaultOptions(std::nullptr_t) {} ///< Convenience to create a class member and then replace with an instance + AllocatorWithDefaultOptions(); +}; + +/** \brief Wrapper around ::OrtAllocator + * + */ +struct Allocator : detail::AllocatorImpl { + explicit Allocator(std::nullptr_t) {} ///< Convenience to create a class member and then replace with an instance + Allocator(const Session& session, const OrtMemoryInfo*); +}; + +using UnownedAllocator = detail::AllocatorImpl>; + +namespace detail { +namespace binding_utils { +// Bring these out of template +std::vector GetOutputNamesHelper(const OrtIoBinding* binding, OrtAllocator*); +std::vector GetOutputValuesHelper(const OrtIoBinding* binding, OrtAllocator*); +} // namespace binding_utils + +template +struct ConstIoBindingImpl : Base { + using B = Base; + using B::B; + + std::vector GetOutputNames() const; + std::vector GetOutputNames(OrtAllocator*) const; + std::vector GetOutputValues() const; + std::vector GetOutputValues(OrtAllocator*) const; +}; + +template +struct IoBindingImpl : ConstIoBindingImpl { + using B = ConstIoBindingImpl; + using B::B; + + void BindInput(const char* name, const Value&); + void BindOutput(const char* name, const Value&); + void BindOutput(const char* name, const OrtMemoryInfo*); + void ClearBoundInputs(); + void ClearBoundOutputs(); + void SynchronizeInputs(); + void SynchronizeOutputs(); +}; + +} // namespace detail + +using ConstIoBinding = detail::ConstIoBindingImpl>; +using UnownedIoBinding = detail::IoBindingImpl>; + +/** \brief Wrapper around ::OrtIoBinding + * + */ +struct IoBinding : detail::IoBindingImpl { + explicit IoBinding(std::nullptr_t) {} ///< Create an empty object for convenience. Sometimes, we want to initialize members later. + explicit IoBinding(Session& session); + ConstIoBinding GetConst() const { return ConstIoBinding{this->p_}; } + UnownedIoBinding GetUnowned() const { return UnownedIoBinding{this->p_}; } +}; + +/*! \struct Ort::ArenaCfg + * \brief it is a structure that represents the configuration of an arena based allocator + * \details Please see docs/C_API.md for details + */ +struct ArenaCfg : detail::Base { + explicit ArenaCfg(std::nullptr_t) {} ///< Create an empty ArenaCfg object, must be assigned a valid one to be used + /** + * Wraps OrtApi::CreateArenaCfg + * \param max_mem - use 0 to allow ORT to choose the default + * \param arena_extend_strategy - use -1 to allow ORT to choose the default, 0 = kNextPowerOfTwo, 1 = kSameAsRequested + * \param initial_chunk_size_bytes - use -1 to allow ORT to choose the default + * \param max_dead_bytes_per_chunk - use -1 to allow ORT to choose the default + * See docs/C_API.md for details on what the following parameters mean and how to choose these values + */ + ArenaCfg(size_t max_mem, int arena_extend_strategy, int initial_chunk_size_bytes, int max_dead_bytes_per_chunk); +}; + +// +// Custom OPs (only needed to implement custom OPs) +// + +/// +/// This struct provides life time management for custom op attribute +/// +struct OpAttr : detail::Base { + OpAttr(const char* name, const void* data, int len, OrtOpAttrType type); +}; + +/// +/// This class wraps a raw pointer OrtKernelContext* that is being passed +/// to the custom kernel Compute() method. Use it to safely access context +/// attributes, input and output parameters with exception safety guarantees. +/// See usage example in onnxruntime/test/testdata/custom_op_library/custom_op_library.cc +/// +struct KernelContext { + explicit KernelContext(OrtKernelContext* context); + size_t GetInputCount() const; + size_t GetOutputCount() const; + ConstValue GetInput(size_t index) const; + UnownedValue GetOutput(size_t index, const int64_t* dim_values, size_t dim_count) const; + UnownedValue GetOutput(size_t index, const std::vector& dims) const; + void* GetGPUComputeStream() const; + + private: + OrtKernelContext* ctx_; +}; + +struct KernelInfo; + +namespace detail { +namespace attr_utils { +void GetAttr(const OrtKernelInfo* p, const char* name, float&); +void GetAttr(const OrtKernelInfo* p, const char* name, int64_t&); +void GetAttr(const OrtKernelInfo* p, const char* name, std::string&); +void GetAttrs(const OrtKernelInfo* p, const char* name, std::vector&); +void GetAttrs(const OrtKernelInfo* p, const char* name, std::vector&); +} // namespace attr_utils + +template +struct KernelInfoImpl : Base { + using B = Base; + using B::B; + + KernelInfo Copy() const; + + template // R is only implemented for float, int64_t, and string + R GetAttribute(const char* name) const { + R val; + attr_utils::GetAttr(this->p_, name, val); + return val; + } + + template // R is only implemented for std::vector, std::vector + std::vector GetAttributes(const char* name) const { + std::vector result; + attr_utils::GetAttrs(this->p_, name, result); + return result; + } + + Value GetTensorAttribute(const char* name, OrtAllocator* allocator) const; + + size_t GetInputCount() const; + size_t GetOutputCount() const; + + std::string GetInputName(size_t index) const; + std::string GetOutputName(size_t index) const; + + TypeInfo GetInputTypeInfo(size_t index) const; + TypeInfo GetOutputTypeInfo(size_t index) const; +}; + +} // namespace detail + +using ConstKernelInfo = detail::KernelInfoImpl>; + +/// +/// This struct owns the OrtKernInfo* pointer when a copy is made. +/// For convenient wrapping of OrtKernelInfo* passed to kernel constructor +/// and query attributes, warp the pointer with Ort::Unowned instance +/// so it does not destroy the pointer the kernel does not own. +/// +struct KernelInfo : detail::KernelInfoImpl { + explicit KernelInfo(std::nullptr_t) {} ///< Create an empty instance to initialize later + explicit KernelInfo(OrtKernelInfo* info); ///< Take ownership of the instance + ConstKernelInfo GetConst() const { return ConstKernelInfo{this->p_}; } +}; + +/// +/// Create and own custom defined operation. +/// +struct Op : detail::Base { + explicit Op(std::nullptr_t) {} ///< Create an empty Operator object, must be assigned a valid one to be used + + explicit Op(OrtOp*); ///< Take ownership of the OrtOp + + static Op Create(const OrtKernelInfo* info, const char* op_name, const char* domain, + int version, const char** type_constraint_names, + const ONNXTensorElementDataType* type_constraint_values, + size_t type_constraint_count, + const OpAttr* attr_values, + size_t attr_count, + size_t input_count, size_t output_count); + + void Invoke(const OrtKernelContext* context, + const Value* input_values, + size_t input_count, + Value* output_values, + size_t output_count); + + // For easier refactoring + void Invoke(const OrtKernelContext* context, + const OrtValue* const* input_values, + size_t input_count, + OrtValue* const* output_values, + size_t output_count); +}; + +/// +/// This entire structure is deprecated, but we not marking +/// it as a whole yet since we want to preserve for the next release. +/// +struct CustomOpApi { + CustomOpApi(const OrtApi& api) : api_(api) {} + + /** \deprecated use Ort::Value::GetTensorTypeAndShape() + * [[deprecated]] + * This interface produces a pointer that must be released. Not exception safe. + */ + [[deprecated("use Ort::Value::GetTensorTypeAndShape()")]] OrtTensorTypeAndShapeInfo* GetTensorTypeAndShape(_In_ const OrtValue* value); + + /** \deprecated use Ort::TensorTypeAndShapeInfo::GetElementCount() + * [[deprecated]] + * This interface is redundant. + */ + [[deprecated("use Ort::TensorTypeAndShapeInfo::GetElementCount()")]] size_t GetTensorShapeElementCount(_In_ const OrtTensorTypeAndShapeInfo* info); + + /** \deprecated use Ort::TensorTypeAndShapeInfo::GetElementType() + * [[deprecated]] + * This interface is redundant. + */ + [[deprecated("use Ort::TensorTypeAndShapeInfo::GetElementType()")]] ONNXTensorElementDataType GetTensorElementType(const OrtTensorTypeAndShapeInfo* info); + + /** \deprecated use Ort::TensorTypeAndShapeInfo::GetDimensionsCount() + * [[deprecated]] + * This interface is redundant. + */ + [[deprecated("use Ort::TensorTypeAndShapeInfo::GetDimensionsCount()")]] size_t GetDimensionsCount(_In_ const OrtTensorTypeAndShapeInfo* info); + + /** \deprecated use Ort::TensorTypeAndShapeInfo::GetShape() + * [[deprecated]] + * This interface is redundant. + */ + [[deprecated("use Ort::TensorTypeAndShapeInfo::GetShape()")]] void GetDimensions(_In_ const OrtTensorTypeAndShapeInfo* info, _Out_ int64_t* dim_values, size_t dim_values_length); + + /** \deprecated + * [[deprecated]] + * This interface sets dimensions to TensorTypeAndShapeInfo, but has no effect on the OrtValue. + */ + [[deprecated("Do not use")]] void SetDimensions(OrtTensorTypeAndShapeInfo* info, _In_ const int64_t* dim_values, size_t dim_count); + + /** \deprecated use Ort::Value::GetTensorMutableData() + * [[deprecated]] + * This interface is redundant. + */ + template + [[deprecated("use Ort::Value::GetTensorMutableData()")]] T* GetTensorMutableData(_Inout_ OrtValue* value); + + /** \deprecated use Ort::Value::GetTensorData() + * [[deprecated]] + * This interface is redundant. + */ + template + [[deprecated("use Ort::Value::GetTensorData()")]] const T* GetTensorData(_Inout_ const OrtValue* value); + + /** \deprecated use Ort::Value::GetTensorMemoryInfo() + * [[deprecated]] + * This interface is redundant. + */ + [[deprecated("use Ort::Value::GetTensorMemoryInfo()")]] const OrtMemoryInfo* GetTensorMemoryInfo(_In_ const OrtValue* value); + + /** \deprecated use Ort::TensorTypeAndShapeInfo::GetShape() + * [[deprecated]] + * This interface is redundant. + */ + [[deprecated("use Ort::TensorTypeAndShapeInfo::GetShape()")]] std::vector GetTensorShape(const OrtTensorTypeAndShapeInfo* info); + + /** \deprecated use TensorTypeAndShapeInfo instances for automatic ownership. + * [[deprecated]] + * This interface is not exception safe. + */ + [[deprecated("use TensorTypeAndShapeInfo")]] void ReleaseTensorTypeAndShapeInfo(OrtTensorTypeAndShapeInfo* input); + + /** \deprecated use Ort::KernelContext::GetInputCount + * [[deprecated]] + * This interface is redundant. + */ + [[deprecated("use Ort::KernelContext::GetInputCount")]] size_t KernelContext_GetInputCount(const OrtKernelContext* context); + + /** \deprecated use Ort::KernelContext::GetInput + * [[deprecated]] + * This interface is redundant. + */ + [[deprecated("use Ort::KernelContext::GetInput")]] const OrtValue* KernelContext_GetInput(const OrtKernelContext* context, _In_ size_t index); + + /** \deprecated use Ort::KernelContext::GetOutputCount + * [[deprecated]] + * This interface is redundant. + */ + [[deprecated("use Ort::KernelContext::GetOutputCount")]] size_t KernelContext_GetOutputCount(const OrtKernelContext* context); + + /** \deprecated use Ort::KernelContext::GetOutput + * [[deprecated]] + * This interface is redundant. + */ + [[deprecated("use Ort::KernelContext::GetOutput")]] OrtValue* KernelContext_GetOutput(OrtKernelContext* context, _In_ size_t index, _In_ const int64_t* dim_values, size_t dim_count); + + /** \deprecated use Ort::KernelContext::GetGPUComputeStream + * [[deprecated]] + * This interface is redundant. + */ + [[deprecated("use Ort::KernelContext::GetGPUComputeStream")]] void* KernelContext_GetGPUComputeStream(const OrtKernelContext* context); + + /** \deprecated use Ort::ThrowOnError() + * [[deprecated]] + * This interface is redundant. + */ + [[deprecated("use Ort::ThrowOnError()")]] void ThrowOnError(OrtStatus* result); + + /** \deprecated use Ort::OpAttr + * [[deprecated]] + * This interface is not exception safe. + */ + [[deprecated("use Ort::OpAttr")]] OrtOpAttr* CreateOpAttr(_In_ const char* name, + _In_ const void* data, + _In_ int len, + _In_ OrtOpAttrType type); + + /** \deprecated use Ort::OpAttr + * [[deprecated]] + * This interface is not exception safe. + */ + [[deprecated("use Ort::OpAttr")]] void ReleaseOpAttr(_Frees_ptr_opt_ OrtOpAttr* op_attr); + + /** \deprecated use Ort::Op + * [[deprecated]] + * This interface is not exception safe. + */ + [[deprecated("use Ort::Op")]] OrtOp* CreateOp(_In_ const OrtKernelInfo* info, + _In_ const char* op_name, + _In_ const char* domain, + _In_ int version, + _In_opt_ const char** type_constraint_names, + _In_opt_ const ONNXTensorElementDataType* type_constraint_values, + _In_opt_ int type_constraint_count, + _In_opt_ const OrtOpAttr* const* attr_values, + _In_opt_ int attr_count, + _In_ int input_count, + _In_ int output_count); + + /** \deprecated use Ort::Op::Invoke + * [[deprecated]] + * This interface is redundant + */ + [[deprecated("use Ort::Op::Invoke")]] void InvokeOp(_In_ const OrtKernelContext* context, + _In_ const OrtOp* ort_op, + _In_ const OrtValue* const* input_values, + _In_ int input_count, + _Inout_ OrtValue* const* output_values, + _In_ int output_count); + + /** \deprecated use Ort::Op for automatic lifespan management. + * [[deprecated]] + * This interface is not exception safe. + */ + [[deprecated("use Ort::Op")]] void ReleaseOp(_Frees_ptr_opt_ OrtOp* ort_op); + + /** \deprecated use Ort::KernelInfo for automatic lifespan management or for + * querying attributes + * [[deprecated]] + * This interface is redundant + */ + template // T is only implemented for std::vector, std::vector, float, int64_t, and string + [[deprecated("use Ort::KernelInfo::GetAttribute")]] T KernelInfoGetAttribute(_In_ const OrtKernelInfo* info, _In_ const char* name); + + /** \deprecated use Ort::KernelInfo::Copy + * querying attributes + * [[deprecated]] + * This interface is not exception safe + */ + [[deprecated("use Ort::KernelInfo::Copy")]] OrtKernelInfo* CopyKernelInfo(_In_ const OrtKernelInfo* info); + + /** \deprecated use Ort::KernelInfo for lifespan management + * querying attributes + * [[deprecated]] + * This interface is not exception safe + */ + [[deprecated("use Ort::KernelInfo")]] void ReleaseKernelInfo(_Frees_ptr_opt_ OrtKernelInfo* info_copy); + + private: + const OrtApi& api_; +}; + +template +struct CustomOpBase : OrtCustomOp { + CustomOpBase() { + OrtCustomOp::version = ORT_API_VERSION; + OrtCustomOp::CreateKernel = [](const OrtCustomOp* this_, const OrtApi* api, const OrtKernelInfo* info) { return static_cast(this_)->CreateKernel(*api, info); }; + OrtCustomOp::GetName = [](const OrtCustomOp* this_) { return static_cast(this_)->GetName(); }; + + OrtCustomOp::GetExecutionProviderType = [](const OrtCustomOp* this_) { return static_cast(this_)->GetExecutionProviderType(); }; + + OrtCustomOp::GetInputTypeCount = [](const OrtCustomOp* this_) { return static_cast(this_)->GetInputTypeCount(); }; + OrtCustomOp::GetInputType = [](const OrtCustomOp* this_, size_t index) { return static_cast(this_)->GetInputType(index); }; + OrtCustomOp::GetInputMemoryType = [](const OrtCustomOp* this_, size_t index) { return static_cast(this_)->GetInputMemoryType(index); }; + + OrtCustomOp::GetOutputTypeCount = [](const OrtCustomOp* this_) { return static_cast(this_)->GetOutputTypeCount(); }; + OrtCustomOp::GetOutputType = [](const OrtCustomOp* this_, size_t index) { return static_cast(this_)->GetOutputType(index); }; + + OrtCustomOp::KernelCompute = [](void* op_kernel, OrtKernelContext* context) { static_cast(op_kernel)->Compute(context); }; +#if defined(_MSC_VER) && !defined(__clang__) +#pragma warning(push) +#pragma warning(disable : 26409) +#endif + OrtCustomOp::KernelDestroy = [](void* op_kernel) { delete static_cast(op_kernel); }; +#if defined(_MSC_VER) && !defined(__clang__) +#pragma warning(pop) +#endif + OrtCustomOp::GetInputCharacteristic = [](const OrtCustomOp* this_, size_t index) { return static_cast(this_)->GetInputCharacteristic(index); }; + OrtCustomOp::GetOutputCharacteristic = [](const OrtCustomOp* this_, size_t index) { return static_cast(this_)->GetOutputCharacteristic(index); }; + + OrtCustomOp::GetVariadicInputMinArity = [](const OrtCustomOp* this_) { return static_cast(this_)->GetVariadicInputMinArity(); }; + OrtCustomOp::GetVariadicInputHomogeneity = [](const OrtCustomOp* this_) { return static_cast(static_cast(this_)->GetVariadicInputHomogeneity()); }; + OrtCustomOp::GetVariadicOutputMinArity = [](const OrtCustomOp* this_) { return static_cast(this_)->GetVariadicOutputMinArity(); }; + OrtCustomOp::GetVariadicOutputHomogeneity = [](const OrtCustomOp* this_) { return static_cast(static_cast(this_)->GetVariadicOutputHomogeneity()); }; + } + + // Default implementation of GetExecutionProviderType that returns nullptr to default to the CPU provider + const char* GetExecutionProviderType() const { return nullptr; } + + // Default implementations of GetInputCharacteristic() and GetOutputCharacteristic() below + // (inputs and outputs are required by default) + OrtCustomOpInputOutputCharacteristic GetInputCharacteristic(size_t /*index*/) const { + return OrtCustomOpInputOutputCharacteristic::INPUT_OUTPUT_REQUIRED; + } + + OrtCustomOpInputOutputCharacteristic GetOutputCharacteristic(size_t /*index*/) const { + return OrtCustomOpInputOutputCharacteristic::INPUT_OUTPUT_REQUIRED; + } + + // Default implemention of GetInputMemoryType() that returns OrtMemTypeDefault + OrtMemType GetInputMemoryType(size_t /*index*/) const { + return OrtMemTypeDefault; + } + + // Default implementation of GetVariadicInputMinArity() returns 1 to specify that a variadic input + // should expect at least 1 argument. + int GetVariadicInputMinArity() const { + return 1; + } + + // Default implementation of GetVariadicInputHomegeneity() returns true to specify that all arguments + // to a variadic input should be of the same type. + bool GetVariadicInputHomogeneity() const { + return true; + } + + // Default implementation of GetVariadicOutputMinArity() returns 1 to specify that a variadic output + // should produce at least 1 output value. + int GetVariadicOutputMinArity() const { + return 1; + } + + // Default implementation of GetVariadicOutputHomegeneity() returns true to specify that all output values + // produced by a variadic output should be of the same type. + bool GetVariadicOutputHomogeneity() const { + return true; + } + + // Declare list of session config entries used by this Custom Op. + // Implement this function in order to get configs from CustomOpBase::GetSessionConfigs(). + // This default implementation returns an empty vector of config entries. + std::vector GetSessionConfigKeys() const { + return std::vector{}; + } + + protected: + // Helper function that returns a map of session config entries specified by CustomOpBase::GetSessionConfigKeys. + void GetSessionConfigs(std::unordered_map& out, ConstSessionOptions options) const; +}; + +} // namespace Ort + +#include "onnxruntime_cxx_inline.h" diff --git a/funasr/runtime/onnxruntime/win/include/onnxruntime_cxx_inline.h b/funasr/runtime/onnxruntime/win/include/onnxruntime_cxx_inline.h new file mode 100644 index 000000000..6d391ad0f --- /dev/null +++ b/funasr/runtime/onnxruntime/win/include/onnxruntime_cxx_inline.h @@ -0,0 +1,1874 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +// Do not include this file directly. Please include "onnxruntime_cxx_api.h" instead. +// If interested in trying out features of the new experimental C++ API, include "experimental_onnxruntime_cxx_api.h" instead. +// +// These are the inline implementations of the C++ header APIs. They're in this separate file as to not clutter +// the main C++ file with implementation details. + +namespace Ort { + +namespace detail { +inline void ThrowStatus(const Status& st) { + std::string error_message = st.GetErrorMessage(); + OrtErrorCode error_code = st.GetErrorCode(); + ORT_CXX_API_THROW(std::move(error_message), error_code); +} +} // namespace detail + +inline void ThrowOnError(OrtStatus* ort_status) { + if (ort_status) { + Ort::Status st(ort_status); + detail::ThrowStatus(st); + } +} + +inline void ThrowOnError(const Status& st) { + if (st) { + detail::ThrowStatus(st); + } +} + +inline Status::Status(OrtStatus* status) : Base{status} { +} + +inline Status::Status(const std::exception& e) { + p_ = GetApi().CreateStatus(ORT_FAIL, e.what()); +} + +inline Status::Status(const Exception& e) { + p_ = GetApi().CreateStatus(e.GetOrtErrorCode(), e.what()); +} + +inline std::string Status::GetErrorMessage() const { + std::string message(GetApi().GetErrorMessage(p_)); + return message; +} + +inline OrtErrorCode Status::GetErrorCode() const { + return GetApi().GetErrorCode(p_); +} + +// This template converts a C++ type into it's ONNXTensorElementDataType +template +struct TypeToTensorType; +template <> +struct TypeToTensorType { + static constexpr ONNXTensorElementDataType type = ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT; +}; +template <> +struct TypeToTensorType { + static constexpr ONNXTensorElementDataType type = ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT16; +}; +template <> +struct TypeToTensorType { + static constexpr ONNXTensorElementDataType type = ONNX_TENSOR_ELEMENT_DATA_TYPE_BFLOAT16; +}; +template <> +struct TypeToTensorType { + static constexpr ONNXTensorElementDataType type = ONNX_TENSOR_ELEMENT_DATA_TYPE_DOUBLE; +}; +template <> +struct TypeToTensorType { + static constexpr ONNXTensorElementDataType type = ONNX_TENSOR_ELEMENT_DATA_TYPE_INT8; +}; +template <> +struct TypeToTensorType { + static constexpr ONNXTensorElementDataType type = ONNX_TENSOR_ELEMENT_DATA_TYPE_INT16; +}; +template <> +struct TypeToTensorType { + static constexpr ONNXTensorElementDataType type = ONNX_TENSOR_ELEMENT_DATA_TYPE_INT32; +}; +template <> +struct TypeToTensorType { + static constexpr ONNXTensorElementDataType type = ONNX_TENSOR_ELEMENT_DATA_TYPE_INT64; +}; +template <> +struct TypeToTensorType { + static constexpr ONNXTensorElementDataType type = ONNX_TENSOR_ELEMENT_DATA_TYPE_UINT8; +}; +template <> +struct TypeToTensorType { + static constexpr ONNXTensorElementDataType type = ONNX_TENSOR_ELEMENT_DATA_TYPE_UINT16; +}; +template <> +struct TypeToTensorType { + static constexpr ONNXTensorElementDataType type = ONNX_TENSOR_ELEMENT_DATA_TYPE_UINT32; +}; +template <> +struct TypeToTensorType { + static constexpr ONNXTensorElementDataType type = ONNX_TENSOR_ELEMENT_DATA_TYPE_UINT64; +}; +template <> +struct TypeToTensorType { + static constexpr ONNXTensorElementDataType type = ONNX_TENSOR_ELEMENT_DATA_TYPE_BOOL; +}; + +inline MemoryAllocation::MemoryAllocation(OrtAllocator* allocator, void* p, size_t size) + : allocator_(allocator), p_(p), size_(size) { +} + +inline MemoryAllocation::~MemoryAllocation() { + if (p_ != nullptr) { + // We do not throw out of destructor + auto ret = GetApi().AllocatorFree(allocator_, p_); + static_cast(ret); + } +} + +inline MemoryAllocation::MemoryAllocation(MemoryAllocation&& o) noexcept : allocator_(nullptr), p_(nullptr), size_(0) { + *this = std::move(o); +} + +inline MemoryAllocation& MemoryAllocation::operator=(MemoryAllocation&& o) noexcept { + OrtAllocator* alloc = nullptr; + void* p = nullptr; + size_t sz = 0; + + // Swap out this + std::swap(alloc, allocator_); + std::swap(p, p_); + std::swap(sz, size_); + + // Swap with incoming + std::swap(allocator_, o.allocator_); + std::swap(p_, o.p_); + std::swap(size_, o.size_); + + // Destroy this instance if needed + MemoryAllocation this_alloc(alloc, p, sz); + return *this; +} + +namespace detail { + +template +inline void* AllocatorImpl::Alloc(size_t size) { + void* out; + ThrowOnError(GetApi().AllocatorAlloc(this->p_, size, &out)); + return out; +} + +template +inline MemoryAllocation AllocatorImpl::GetAllocation(size_t size) { + void* out; + ThrowOnError(GetApi().AllocatorAlloc(this->p_, size, &out)); + MemoryAllocation result(this->p_, out, size); + return result; +} + +template +inline void AllocatorImpl::Free(void* p) { + ThrowOnError(GetApi().AllocatorFree(this->p_, p)); +} + +template +inline ConstMemoryInfo AllocatorImpl::GetInfo() const { + const OrtMemoryInfo* out; + ThrowOnError(GetApi().AllocatorGetInfo(this->p_, &out)); + return ConstMemoryInfo{out}; +} + +} // namespace detail + +inline AllocatorWithDefaultOptions::AllocatorWithDefaultOptions() { + ThrowOnError(GetApi().GetAllocatorWithDefaultOptions(&this->p_)); +} + +inline Allocator::Allocator(const Session& sess, const OrtMemoryInfo* mem_info) { + ThrowOnError(GetApi().CreateAllocator(sess, mem_info, &this->p_)); +} + +namespace detail { + +template +inline std::string MemoryInfoImpl::GetAllocatorName() const { + const char* name = nullptr; + ThrowOnError(GetApi().MemoryInfoGetName(this->p_, &name)); + return std::string(name); +} + +template +inline OrtAllocatorType MemoryInfoImpl::GetAllocatorType() const { + OrtAllocatorType type; + ThrowOnError(GetApi().MemoryInfoGetType(this->p_, &type)); + return type; +} + +template +inline int MemoryInfoImpl::GetDeviceId() const { + int id = 0; + ThrowOnError(GetApi().MemoryInfoGetId(this->p_, &id)); + return id; +} + +template +inline OrtMemoryInfoDeviceType MemoryInfoImpl::GetDeviceType() const { + OrtMemoryInfoDeviceType type; + GetApi().MemoryInfoGetDeviceType(this->p_, &type); + return type; +} + +template +inline OrtMemType MemoryInfoImpl::GetMemoryType() const { + OrtMemType type; + ThrowOnError(GetApi().MemoryInfoGetMemType(this->p_, &type)); + return type; +} + +template +template +inline bool MemoryInfoImpl::operator==(const MemoryInfoImpl& o) const { + int comp_result = 0; + ThrowOnError(Ort::GetApi().CompareMemoryInfo(this->p_, o, &comp_result)); + return comp_result == 0; +} + +} // namespace detail + +inline MemoryInfo MemoryInfo::CreateCpu(OrtAllocatorType type, OrtMemType mem_type) { + OrtMemoryInfo* p; + ThrowOnError(GetApi().CreateCpuMemoryInfo(type, mem_type, &p)); + return MemoryInfo(p); +} + +inline MemoryInfo::MemoryInfo(const char* name, OrtAllocatorType type, int id, OrtMemType mem_type) { + ThrowOnError(GetApi().CreateMemoryInfo(name, type, id, mem_type, &this->p_)); +} + +namespace detail { +template +inline std::vector ConstIoBindingImpl::GetOutputNames() const { + AllocatorWithDefaultOptions allocator; + return binding_utils::GetOutputNamesHelper(this->p_, allocator); +} + +template +inline std::vector ConstIoBindingImpl::GetOutputNames(OrtAllocator* allocator) const { + return binding_utils::GetOutputNamesHelper(this->p_, allocator); +} + +template +inline std::vector ConstIoBindingImpl::GetOutputValues() const { + AllocatorWithDefaultOptions allocator; + return binding_utils::GetOutputValuesHelper(this->p_, allocator); +} + +template +inline std::vector ConstIoBindingImpl::GetOutputValues(OrtAllocator* allocator) const { + return binding_utils::GetOutputValuesHelper(this->p_, allocator); +} + +template +inline void IoBindingImpl::BindInput(const char* name, const Value& value) { + ThrowOnError(GetApi().BindInput(this->p_, name, value)); +} + +template +inline void IoBindingImpl::BindOutput(const char* name, const Value& value) { + ThrowOnError(GetApi().BindOutput(this->p_, name, value)); +} + +template +inline void IoBindingImpl::BindOutput(const char* name, const OrtMemoryInfo* mem_info) { + ThrowOnError(GetApi().BindOutputToDevice(this->p_, name, mem_info)); +} + +template +inline void IoBindingImpl::ClearBoundInputs() { + GetApi().ClearBoundInputs(this->p_); +} + +template +inline void IoBindingImpl::ClearBoundOutputs() { + GetApi().ClearBoundOutputs(this->p_); +} + +template +inline void IoBindingImpl::SynchronizeInputs() { + ThrowOnError(GetApi().SynchronizeBoundInputs(this->p_)); +} + +template +inline void IoBindingImpl::SynchronizeOutputs() { + ThrowOnError(GetApi().SynchronizeBoundOutputs(this->p_)); +} + +namespace binding_utils { +inline std::vector GetOutputNamesHelper(const OrtIoBinding* binding, OrtAllocator* allocator) { + std::vector result; + auto free_fn = detail::AllocatedFree(allocator); + using Ptr = std::unique_ptr; + + char* buffer = nullptr; + size_t* lengths = nullptr; + size_t count = 0; + ThrowOnError(GetApi().GetBoundOutputNames(binding, allocator, &buffer, &lengths, &count)); + + if (count == 0) { + return result; + } + + Ptr buffer_g(buffer, free_fn); + Ptr lengths_g(lengths, free_fn); + + result.reserve(count); + for (size_t i = 0; i < count; ++i) { + auto sz = *lengths; + result.emplace_back(buffer, sz); + buffer += sz; + ++lengths; + } + return result; +} + +inline std::vector GetOutputValuesHelper(const OrtIoBinding* binding, OrtAllocator* allocator) { + std::vector result; + size_t owned = 0; + size_t output_count = 0; + // Lambda to release the buffer when no longer needed and + // make sure that we destroy all instances on exception + auto free_fn = [&owned, &output_count, allocator](OrtValue** buffer) { + if (buffer) { + while (owned < output_count) { + auto* p = buffer + owned++; + GetApi().ReleaseValue(*p); + } + allocator->Free(allocator, buffer); + } + }; + using Ptr = std::unique_ptr; + + OrtValue** output_buffer = nullptr; + ThrowOnError(GetApi().GetBoundOutputValues(binding, allocator, &output_buffer, &output_count)); + if (output_count == 0) { + return result; + } + + Ptr buffer_g(output_buffer, free_fn); + + result.reserve(output_count); + for (size_t i = 0; i < output_count; ++i) { + result.emplace_back(output_buffer[i]); + ++owned; + } + return result; +} + +} // namespace binding_utils +} // namespace detail + +inline IoBinding::IoBinding(Session& session) { + ThrowOnError(GetApi().CreateIoBinding(session, &this->p_)); +} + +inline ArenaCfg::ArenaCfg(size_t max_mem, int arena_extend_strategy, int initial_chunk_size_bytes, int max_dead_bytes_per_chunk) { + ThrowOnError(GetApi().CreateArenaCfg(max_mem, arena_extend_strategy, initial_chunk_size_bytes, max_dead_bytes_per_chunk, &p_)); +} + +inline ThreadingOptions::ThreadingOptions() { + ThrowOnError(GetApi().CreateThreadingOptions(&p_)); +} + +inline ThreadingOptions& ThreadingOptions::SetGlobalIntraOpNumThreads(int intra_op_num_threads) { + ThrowOnError(GetApi().SetGlobalIntraOpNumThreads(p_, intra_op_num_threads)); + return *this; +} + +inline ThreadingOptions& ThreadingOptions::SetGlobalInterOpNumThreads(int inter_op_num_threads) { + ThrowOnError(GetApi().SetGlobalInterOpNumThreads(p_, inter_op_num_threads)); + return *this; +} + +inline ThreadingOptions& ThreadingOptions::SetGlobalSpinControl(int allow_spinning) { + ThrowOnError(GetApi().SetGlobalSpinControl(p_, allow_spinning)); + return *this; +} + +inline ThreadingOptions& ThreadingOptions::SetGlobalDenormalAsZero() { + ThrowOnError(GetApi().SetGlobalDenormalAsZero(p_)); + return *this; +} + +inline ThreadingOptions& ThreadingOptions::SetGlobalCustomCreateThreadFn(OrtCustomCreateThreadFn ort_custom_create_thread_fn) { + ThrowOnError(GetApi().SetGlobalCustomCreateThreadFn(p_, ort_custom_create_thread_fn)); + return *this; +} + +inline ThreadingOptions& ThreadingOptions::SetGlobalCustomThreadCreationOptions(void* ort_custom_thread_creation_options) { + ThrowOnError(GetApi().SetGlobalCustomThreadCreationOptions(p_, ort_custom_thread_creation_options)); + return *this; +} + +inline ThreadingOptions& ThreadingOptions::SetGlobalCustomJoinThreadFn(OrtCustomJoinThreadFn ort_custom_join_thread_fn) { + ThrowOnError(GetApi().SetGlobalCustomJoinThreadFn(p_, ort_custom_join_thread_fn)); + return *this; +} + +inline Env::Env(OrtLoggingLevel logging_level, _In_ const char* logid) { + ThrowOnError(GetApi().CreateEnv(logging_level, logid, &p_)); + if (strcmp(logid, "onnxruntime-node") == 0) { + ThrowOnError(GetApi().SetLanguageProjection(p_, OrtLanguageProjection::ORT_PROJECTION_NODEJS)); + } else { + ThrowOnError(GetApi().SetLanguageProjection(p_, OrtLanguageProjection::ORT_PROJECTION_CPLUSPLUS)); + } +} + +inline Env::Env(OrtLoggingLevel logging_level, const char* logid, OrtLoggingFunction logging_function, void* logger_param) { + ThrowOnError(GetApi().CreateEnvWithCustomLogger(logging_function, logger_param, logging_level, logid, &p_)); + if (strcmp(logid, "onnxruntime-node") == 0) { + ThrowOnError(GetApi().SetLanguageProjection(p_, OrtLanguageProjection::ORT_PROJECTION_NODEJS)); + } else { + ThrowOnError(GetApi().SetLanguageProjection(p_, OrtLanguageProjection::ORT_PROJECTION_CPLUSPLUS)); + } +} + +inline Env::Env(const OrtThreadingOptions* tp_options, OrtLoggingLevel logging_level, _In_ const char* logid) { + ThrowOnError(GetApi().CreateEnvWithGlobalThreadPools(logging_level, logid, tp_options, &p_)); + if (strcmp(logid, "onnxruntime-node") == 0) { + ThrowOnError(GetApi().SetLanguageProjection(p_, OrtLanguageProjection::ORT_PROJECTION_NODEJS)); + } else { + ThrowOnError(GetApi().SetLanguageProjection(p_, OrtLanguageProjection::ORT_PROJECTION_CPLUSPLUS)); + } +} + +inline Env::Env(const OrtThreadingOptions* tp_options, OrtLoggingFunction logging_function, void* logger_param, + OrtLoggingLevel logging_level, _In_ const char* logid) { + ThrowOnError(GetApi().CreateEnvWithCustomLoggerAndGlobalThreadPools(logging_function, logger_param, logging_level, logid, tp_options, &p_)); + if (strcmp(logid, "onnxruntime-node") == 0) { + ThrowOnError(GetApi().SetLanguageProjection(p_, OrtLanguageProjection::ORT_PROJECTION_NODEJS)); + } else { + ThrowOnError(GetApi().SetLanguageProjection(p_, OrtLanguageProjection::ORT_PROJECTION_CPLUSPLUS)); + } +} + +inline Env& Env::EnableTelemetryEvents() { + ThrowOnError(GetApi().EnableTelemetryEvents(p_)); + return *this; +} + +inline Env& Env::DisableTelemetryEvents() { + ThrowOnError(GetApi().DisableTelemetryEvents(p_)); + return *this; +} + +inline Env& Env::UpdateEnvWithCustomLogLevel(OrtLoggingLevel log_severity_level) { + ThrowOnError(GetApi().UpdateEnvWithCustomLogLevel(p_, log_severity_level)); + return *this; +} + +inline Env& Env::CreateAndRegisterAllocator(const OrtMemoryInfo* mem_info, const OrtArenaCfg* arena_cfg) { + ThrowOnError(GetApi().CreateAndRegisterAllocator(p_, mem_info, arena_cfg)); + return *this; +} + +inline CustomOpDomain::CustomOpDomain(const char* domain) { + ThrowOnError(GetApi().CreateCustomOpDomain(domain, &p_)); +} + +inline void CustomOpDomain::Add(const OrtCustomOp* op) { + ThrowOnError(GetApi().CustomOpDomain_Add(p_, op)); +} + +inline RunOptions::RunOptions() { + ThrowOnError(GetApi().CreateRunOptions(&p_)); +} + +inline RunOptions& RunOptions::SetRunLogVerbosityLevel(int level) { + ThrowOnError(GetApi().RunOptionsSetRunLogVerbosityLevel(p_, level)); + return *this; +} + +inline RunOptions& RunOptions::SetRunLogSeverityLevel(int level) { + ThrowOnError(GetApi().RunOptionsSetRunLogSeverityLevel(p_, level)); + return *this; +} + +inline int RunOptions::GetRunLogVerbosityLevel() const { + int out; + ThrowOnError(GetApi().RunOptionsGetRunLogVerbosityLevel(p_, &out)); + return out; +} + +inline int RunOptions::GetRunLogSeverityLevel() const { + int out; + ThrowOnError(GetApi().RunOptionsGetRunLogSeverityLevel(p_, &out)); + return out; +} + +inline RunOptions& RunOptions::SetRunTag(const char* run_tag) { + ThrowOnError(GetApi().RunOptionsSetRunTag(p_, run_tag)); + return *this; +} + +inline const char* RunOptions::GetRunTag() const { + const char* out; + ThrowOnError(GetApi().RunOptionsGetRunTag(p_, &out)); + return out; +} + +inline RunOptions& RunOptions::AddConfigEntry(const char* config_key, const char* config_value) { + ThrowOnError(GetApi().AddRunConfigEntry(p_, config_key, config_value)); + return *this; +} + +inline RunOptions& RunOptions::SetTerminate() { + ThrowOnError(GetApi().RunOptionsSetTerminate(p_)); + return *this; +} + +inline RunOptions& RunOptions::UnsetTerminate() { + ThrowOnError(GetApi().RunOptionsUnsetTerminate(p_)); + return *this; +} + +namespace detail { + +template +inline Ort::SessionOptions ConstSessionOptionsImpl::Clone() const { + OrtSessionOptions* out; + ThrowOnError(GetApi().CloneSessionOptions(this->p_, &out)); + return SessionOptions{out}; +} + +template +inline std::string ConstSessionOptionsImpl::GetConfigEntry(const char* config_key) const { + size_t size = 0; + // Feed nullptr for the data buffer to query the true size of the string value + Ort::ThrowOnError(GetApi().GetSessionConfigEntry(this->p_, config_key, nullptr, &size)); + + std::string out; + out.resize(size); + Ort::ThrowOnError(GetApi().GetSessionConfigEntry(this->p_, config_key, &out[0], &size)); + out.resize(size - 1); // remove the terminating character '\0' + + return out; +} + +template +inline bool ConstSessionOptionsImpl::HasConfigEntry(const char* config_key) const { + int out = 0; + Ort::ThrowOnError(GetApi().HasSessionConfigEntry(this->p_, config_key, &out)); + return static_cast(out); +} + +template +inline std::string ConstSessionOptionsImpl::GetConfigEntryOrDefault(const char* config_key, const std::string& def) { + if (!this->HasConfigEntry(config_key)) { + return def; + } + + return this->GetConfigEntry(config_key); +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::SetIntraOpNumThreads(int intra_op_num_threads) { + ThrowOnError(GetApi().SetIntraOpNumThreads(this->p_, intra_op_num_threads)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::SetInterOpNumThreads(int inter_op_num_threads) { + ThrowOnError(GetApi().SetInterOpNumThreads(this->p_, inter_op_num_threads)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::SetGraphOptimizationLevel(GraphOptimizationLevel graph_optimization_level) { + ThrowOnError(GetApi().SetSessionGraphOptimizationLevel(this->p_, graph_optimization_level)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::SetOptimizedModelFilePath(const ORTCHAR_T* optimized_model_filepath) { + ThrowOnError(GetApi().SetOptimizedModelFilePath(this->p_, optimized_model_filepath)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::EnableProfiling(const ORTCHAR_T* profile_file_prefix) { + ThrowOnError(GetApi().EnableProfiling(this->p_, profile_file_prefix)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::DisableProfiling() { + ThrowOnError(GetApi().DisableProfiling(this->p_)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::EnableOrtCustomOps() { + ThrowOnError(GetApi().EnableOrtCustomOps(this->p_)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::EnableMemPattern() { + ThrowOnError(GetApi().EnableMemPattern(this->p_)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::DisableMemPattern() { + ThrowOnError(GetApi().DisableMemPattern(this->p_)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::EnableCpuMemArena() { + ThrowOnError(GetApi().EnableCpuMemArena(this->p_)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::DisableCpuMemArena() { + ThrowOnError(GetApi().DisableCpuMemArena(this->p_)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::SetExecutionMode(ExecutionMode execution_mode) { + ThrowOnError(GetApi().SetSessionExecutionMode(this->p_, execution_mode)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::SetLogId(const char* logid) { + ThrowOnError(GetApi().SetSessionLogId(this->p_, logid)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::SetLogSeverityLevel(int level) { + ThrowOnError(GetApi().SetSessionLogSeverityLevel(this->p_, level)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::Add(OrtCustomOpDomain* custom_op_domain) { + ThrowOnError(GetApi().AddCustomOpDomain(this->p_, custom_op_domain)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::AddConfigEntry(const char* config_key, const char* config_value) { + ThrowOnError(GetApi().AddSessionConfigEntry(this->p_, config_key, config_value)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::AddInitializer(const char* name, const OrtValue* ort_val) { + ThrowOnError(GetApi().AddInitializer(this->p_, name, ort_val)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::DisablePerSessionThreads() { + ThrowOnError(GetApi().DisablePerSessionThreads(this->p_)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::AddExternalInitializers(const std::vector& names, + const std::vector& ort_values) { + const size_t inputs_num = names.size(); + if (inputs_num != ort_values.size()) { + ORT_CXX_API_THROW("Expecting names and ort_values to have the same length", ORT_INVALID_ARGUMENT); + } + std::vector names_ptr; + std::vector ort_values_ptrs; + names_ptr.reserve(inputs_num); + ort_values_ptrs.reserve(inputs_num); + for (size_t i = 0; i < inputs_num; ++i) { + names_ptr.push_back(names[i].c_str()); + ort_values_ptrs.push_back(ort_values[i]); + } + ThrowOnError(GetApi().AddExternalInitializers(this->p_, names_ptr.data(), ort_values_ptrs.data(), inputs_num)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::AppendExecutionProvider_CUDA(const OrtCUDAProviderOptions& provider_options) { + ThrowOnError(GetApi().SessionOptionsAppendExecutionProvider_CUDA(this->p_, &provider_options)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::AppendExecutionProvider_CUDA_V2(const OrtCUDAProviderOptionsV2& provider_options) { + ThrowOnError(GetApi().SessionOptionsAppendExecutionProvider_CUDA_V2(this->p_, &provider_options)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::AppendExecutionProvider_ROCM(const OrtROCMProviderOptions& provider_options) { + ThrowOnError(GetApi().SessionOptionsAppendExecutionProvider_ROCM(this->p_, &provider_options)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::AppendExecutionProvider_TensorRT(const OrtTensorRTProviderOptions& provider_options) { + ThrowOnError(GetApi().SessionOptionsAppendExecutionProvider_TensorRT(this->p_, &provider_options)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::AppendExecutionProvider_TensorRT_V2(const OrtTensorRTProviderOptionsV2& provider_options) { + ThrowOnError(GetApi().SessionOptionsAppendExecutionProvider_TensorRT_V2(this->p_, &provider_options)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::AppendExecutionProvider_MIGraphX(const OrtMIGraphXProviderOptions& provider_options) { + ThrowOnError(GetApi().SessionOptionsAppendExecutionProvider_MIGraphX(this->p_, &provider_options)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::AppendExecutionProvider_CANN(const OrtCANNProviderOptions& provider_options) { + ThrowOnError(GetApi().SessionOptionsAppendExecutionProvider_CANN(this->p_, &provider_options)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::AppendExecutionProvider( + const std::string& provider_name, + const std::unordered_map& provider_options) { + auto num_entries = provider_options.size(); + std::vector keys, values; + if (num_entries > 0) { + keys.reserve(num_entries); + values.reserve(num_entries); + + for (const auto& entry : provider_options) { + keys.push_back(entry.first.c_str()); + values.push_back(entry.second.c_str()); + } + } + + ThrowOnError(GetApi().SessionOptionsAppendExecutionProvider(this->p_, provider_name.c_str(), + keys.data(), values.data(), num_entries)); + + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::SetCustomCreateThreadFn(OrtCustomCreateThreadFn ort_custom_create_thread_fn) { + ThrowOnError(GetApi().SessionOptionsSetCustomCreateThreadFn(this->p_, ort_custom_create_thread_fn)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::SetCustomThreadCreationOptions(void* ort_custom_thread_creation_options) { + ThrowOnError(GetApi().SessionOptionsSetCustomThreadCreationOptions(this->p_, ort_custom_thread_creation_options)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::SetCustomJoinThreadFn(OrtCustomJoinThreadFn ort_custom_join_thread_fn) { + ThrowOnError(GetApi().SessionOptionsSetCustomJoinThreadFn(this->p_, ort_custom_join_thread_fn)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::AppendExecutionProvider_OpenVINO(const OrtOpenVINOProviderOptions& provider_options) { + ThrowOnError(GetApi().SessionOptionsAppendExecutionProvider_OpenVINO(this->p_, &provider_options)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::RegisterCustomOpsLibrary(const ORTCHAR_T* library_name, + const CustomOpConfigs& custom_op_configs) { + // Add custom op config entries before registering the custom op library. Otherwise, the config entries _may_ be ignored by + // the custom op library. + for (const auto& config_iter : custom_op_configs.GetFlattenedConfigs()) { + AddConfigEntry(config_iter.first.c_str(), config_iter.second.c_str()); + } + + ThrowOnError(GetApi().RegisterCustomOpsLibrary_V2(this->p_, library_name)); + return *this; +} + +template +inline SessionOptionsImpl& SessionOptionsImpl::RegisterCustomOpsUsingFunction(const char* registration_function_name) { + ThrowOnError(GetApi().RegisterCustomOpsUsingFunction(this->p_, registration_function_name)); + return *this; +} + +/// Session +template +inline size_t ConstSessionImpl::GetInputCount() const { + size_t out; + ThrowOnError(GetApi().SessionGetInputCount(this->p_, &out)); + return out; +} + +template +inline size_t ConstSessionImpl::GetOutputCount() const { + size_t out; + ThrowOnError(GetApi().SessionGetOutputCount(this->p_, &out)); + return out; +} + +template +inline size_t ConstSessionImpl::GetOverridableInitializerCount() const { + size_t out; + ThrowOnError(GetApi().SessionGetOverridableInitializerCount(this->p_, &out)); + return out; +} + +template +inline AllocatedStringPtr ConstSessionImpl::GetInputNameAllocated(size_t index, OrtAllocator* allocator) const { + char* out; + ThrowOnError(GetApi().SessionGetInputName(this->p_, index, allocator, &out)); + return AllocatedStringPtr(out, detail::AllocatedFree(allocator)); +} + +template +inline AllocatedStringPtr ConstSessionImpl::GetOutputNameAllocated(size_t index, OrtAllocator* allocator) const { + char* out; + ThrowOnError(GetApi().SessionGetOutputName(this->p_, index, allocator, &out)); + return AllocatedStringPtr(out, detail::AllocatedFree(allocator)); +} + +template +inline AllocatedStringPtr ConstSessionImpl::GetOverridableInitializerNameAllocated(size_t index, OrtAllocator* allocator) const { + char* out; + ThrowOnError(GetApi().SessionGetOverridableInitializerName(this->p_, index, allocator, &out)); + return AllocatedStringPtr(out, detail::AllocatedFree(allocator)); +} + +template +inline uint64_t ConstSessionImpl::GetProfilingStartTimeNs() const { + uint64_t out; + ThrowOnError(GetApi().SessionGetProfilingStartTimeNs(this->p_, &out)); + return out; +} + +template +inline ModelMetadata ConstSessionImpl::GetModelMetadata() const { + OrtModelMetadata* out; + ThrowOnError(GetApi().SessionGetModelMetadata(this->p_, &out)); + return ModelMetadata{out}; +} + +template +inline TypeInfo ConstSessionImpl::GetInputTypeInfo(size_t index) const { + OrtTypeInfo* out; + ThrowOnError(GetApi().SessionGetInputTypeInfo(this->p_, index, &out)); + return TypeInfo{out}; +} + +template +inline TypeInfo ConstSessionImpl::GetOutputTypeInfo(size_t index) const { + OrtTypeInfo* out; + ThrowOnError(GetApi().SessionGetOutputTypeInfo(this->p_, index, &out)); + return TypeInfo{out}; +} + +template +inline TypeInfo ConstSessionImpl::GetOverridableInitializerTypeInfo(size_t index) const { + OrtTypeInfo* out; + ThrowOnError(GetApi().SessionGetOverridableInitializerTypeInfo(this->p_, index, &out)); + return TypeInfo{out}; +} + +template +inline std::vector SessionImpl::Run(const RunOptions& run_options, const char* const* input_names, const Value* input_values, size_t input_count, + const char* const* output_names, size_t output_count) { + std::vector output_values; + output_values.reserve(output_count); + for (size_t i = 0; i < output_count; i++) + output_values.emplace_back(nullptr); + Run(run_options, input_names, input_values, input_count, output_names, output_values.data(), output_count); + return output_values; +} + +template +inline void SessionImpl::Run(const RunOptions& run_options, const char* const* input_names, const Value* input_values, size_t input_count, + const char* const* output_names, Value* output_values, size_t output_count) { + static_assert(sizeof(Value) == sizeof(OrtValue*), "Value is really just an array of OrtValue* in memory, so we can reinterpret_cast safely"); + auto ort_input_values = reinterpret_cast(input_values); + auto ort_output_values = reinterpret_cast(output_values); + ThrowOnError(GetApi().Run(this->p_, run_options, input_names, ort_input_values, input_count, output_names, output_count, ort_output_values)); +} + +template +inline void SessionImpl::Run(const RunOptions& run_options, const IoBinding& io_binding) { + ThrowOnError(GetApi().RunWithBinding(this->p_, run_options, io_binding)); +} + +template +inline AllocatedStringPtr SessionImpl::EndProfilingAllocated(OrtAllocator* allocator) { + char* out = nullptr; + ThrowOnError(GetApi().SessionEndProfiling(this->p_, allocator, &out)); + return AllocatedStringPtr(out, detail::AllocatedFree(allocator)); +} + +} // namespace detail + +inline SessionOptions::SessionOptions() { + ThrowOnError(GetApi().CreateSessionOptions(&this->p_)); +} + +/// CustomOpConfigs +inline std::string detail::MakeCustomOpConfigEntryKey(const char* custom_op_name, const char* config) { + std::string config_key = "custom_op."; + + config_key += custom_op_name; + config_key += "."; + config_key += config; + + return config_key; +} + +inline CustomOpConfigs& CustomOpConfigs::AddConfig(const char* custom_op_name, const char* config_key, const char* config_value) { + const std::string full_flat_key = detail::MakeCustomOpConfigEntryKey(custom_op_name, config_key); + flat_configs_[full_flat_key] = config_value; + return *this; +} + +inline const std::unordered_map& CustomOpConfigs::GetFlattenedConfigs() const { + return flat_configs_; +} + +inline Session::Session(const Env& env, const ORTCHAR_T* model_path, const SessionOptions& options) { + ThrowOnError(GetApi().CreateSession(env, model_path, options, &this->p_)); +} + +inline Session::Session(const Env& env, const ORTCHAR_T* model_path, const SessionOptions& options, + OrtPrepackedWeightsContainer* prepacked_weights_container) { + ThrowOnError(GetApi().CreateSessionWithPrepackedWeightsContainer(env, model_path, options, prepacked_weights_container, &this->p_)); +} + +inline Session::Session(const Env& env, const void* model_data, size_t model_data_length, const SessionOptions& options) { + ThrowOnError(GetApi().CreateSessionFromArray(env, model_data, model_data_length, options, &this->p_)); +} + +inline Session::Session(const Env& env, const void* model_data, size_t model_data_length, + const SessionOptions& options, OrtPrepackedWeightsContainer* prepacked_weights_container) { + ThrowOnError(GetApi().CreateSessionFromArrayWithPrepackedWeightsContainer(env, model_data, model_data_length, options, + prepacked_weights_container, &this->p_)); +} + +inline AllocatedStringPtr ModelMetadata::GetProducerNameAllocated(OrtAllocator* allocator) const { + char* out; + ThrowOnError(GetApi().ModelMetadataGetProducerName(p_, allocator, &out)); + return AllocatedStringPtr(out, detail::AllocatedFree(allocator)); +} + +inline AllocatedStringPtr ModelMetadata::GetGraphNameAllocated(OrtAllocator* allocator) const { + char* out; + ThrowOnError(GetApi().ModelMetadataGetGraphName(p_, allocator, &out)); + return AllocatedStringPtr(out, detail::AllocatedFree(allocator)); +} + +inline AllocatedStringPtr ModelMetadata::GetDomainAllocated(OrtAllocator* allocator) const { + char* out; + ThrowOnError(GetApi().ModelMetadataGetDomain(p_, allocator, &out)); + return AllocatedStringPtr(out, detail::AllocatedFree(allocator)); +} + +inline AllocatedStringPtr Ort::ModelMetadata::GetDescriptionAllocated(OrtAllocator* allocator) const { + char* out; + ThrowOnError(GetApi().ModelMetadataGetDescription(p_, allocator, &out)); + return AllocatedStringPtr(out, detail::AllocatedFree(allocator)); +} + +inline AllocatedStringPtr ModelMetadata::GetGraphDescriptionAllocated(OrtAllocator* allocator) const { + char* out; + ThrowOnError(GetApi().ModelMetadataGetGraphDescription(p_, allocator, &out)); + return AllocatedStringPtr(out, detail::AllocatedFree(allocator)); +} + +inline AllocatedStringPtr ModelMetadata::LookupCustomMetadataMapAllocated(const char* key, OrtAllocator* allocator) const { + char* out; + ThrowOnError(GetApi().ModelMetadataLookupCustomMetadataMap(p_, allocator, key, &out)); + return AllocatedStringPtr(out, detail::AllocatedFree(allocator)); +} + +inline std::vector ModelMetadata::GetCustomMetadataMapKeysAllocated(OrtAllocator* allocator) const { + auto deletor = detail::AllocatedFree(allocator); + std::vector result; + + char** out = nullptr; + int64_t num_keys = 0; + ThrowOnError(GetApi().ModelMetadataGetCustomMetadataMapKeys(p_, allocator, &out, &num_keys)); + if (num_keys <= 0) { + return result; + } + + // array of pointers will be freed + std::unique_ptr array_guard(out, deletor); + // reserve may throw + auto strings_deletor = [&deletor, num_keys](char** out) { for(int64_t i = 0; i < num_keys; ++i) deletor(out[i]); }; + std::unique_ptr strings_guard(out, strings_deletor); + result.reserve(static_cast(num_keys)); + strings_guard.release(); + for (int64_t i = 0; i < num_keys; ++i) { + result.push_back(AllocatedStringPtr(out[i], deletor)); + } + + return result; +} + +inline int64_t ModelMetadata::GetVersion() const { + int64_t out; + ThrowOnError(GetApi().ModelMetadataGetVersion(p_, &out)); + return out; +} + +namespace detail { + +template +inline ONNXTensorElementDataType TensorTypeAndShapeInfoImpl::GetElementType() const { + ONNXTensorElementDataType out; + ThrowOnError(GetApi().GetTensorElementType(this->p_, &out)); + return out; +} + +template +inline size_t TensorTypeAndShapeInfoImpl::GetElementCount() const { + size_t out; + ThrowOnError(GetApi().GetTensorShapeElementCount(this->p_, &out)); + return static_cast(out); +} + +template +inline size_t TensorTypeAndShapeInfoImpl::GetDimensionsCount() const { + size_t out; + ThrowOnError(GetApi().GetDimensionsCount(this->p_, &out)); + return out; +} + +template +inline void TensorTypeAndShapeInfoImpl::GetDimensions(int64_t* values, size_t values_count) const { + ThrowOnError(GetApi().GetDimensions(this->p_, values, values_count)); +} + +template +inline void TensorTypeAndShapeInfoImpl::GetSymbolicDimensions(const char** values, size_t values_count) const { + ThrowOnError(GetApi().GetSymbolicDimensions(this->p_, values, values_count)); +} + +template +inline std::vector TensorTypeAndShapeInfoImpl::GetShape() const { + std::vector out(GetDimensionsCount(), 0); + ThrowOnError(GetApi().GetDimensions(this->p_, out.data(), out.size())); + return out; +} + +} // namespace detail + +namespace detail { +template +inline ConstTensorTypeAndShapeInfo TypeInfoImpl::GetTensorTypeAndShapeInfo() const { + const OrtTensorTypeAndShapeInfo* out; + ThrowOnError(GetApi().CastTypeInfoToTensorInfo(this->p_, &out)); + return ConstTensorTypeAndShapeInfo{out}; +} + +template +inline ConstSequenceTypeInfo TypeInfoImpl::GetSequenceTypeInfo() const { + const OrtSequenceTypeInfo* out; + ThrowOnError(GetApi().CastTypeInfoToSequenceTypeInfo(this->p_, &out)); + return ConstSequenceTypeInfo{out}; +} + +template +inline ConstMapTypeInfo TypeInfoImpl::GetMapTypeInfo() const { + const OrtMapTypeInfo* out; + ThrowOnError(GetApi().CastTypeInfoToMapTypeInfo(this->p_, &out)); + return ConstMapTypeInfo{out}; +} + +template +inline ONNXType TypeInfoImpl::GetONNXType() const { + ONNXType out; + ThrowOnError(GetApi().GetOnnxTypeFromTypeInfo(this->p_, &out)); + return out; +} + +} // namespace detail + +namespace detail { +template +inline TypeInfo SequenceTypeInfoImpl::GetSequenceElementType() const { + OrtTypeInfo* output; + ThrowOnError(GetApi().GetSequenceElementType(this->p_, &output)); + return TypeInfo{output}; +} + +} // namespace detail + +namespace detail { +template +inline ONNXTensorElementDataType MapTypeInfoImpl::GetMapKeyType() const { + ONNXTensorElementDataType out; + ThrowOnError(GetApi().GetMapKeyType(this->p_, &out)); + return out; +} + +template +inline TypeInfo MapTypeInfoImpl::GetMapValueType() const { + OrtTypeInfo* output; + ThrowOnError(GetApi().GetMapValueType(this->p_, &output)); + return TypeInfo{output}; +} +} // namespace detail + +namespace detail { + +template +template +inline void ConstValueImpl::GetOpaqueData(const char* domain, const char* type_name, R& out) const { + ThrowOnError(GetApi().GetOpaqueValue(domain, type_name, this->p_, &out, sizeof(R))); +} + +template +inline bool ConstValueImpl::IsTensor() const { + int out; + ThrowOnError(GetApi().IsTensor(this->p_, &out)); + return out != 0; +} + +template +inline bool ConstValueImpl::HasValue() const { + int out; + ThrowOnError(GetApi().HasValue(this->p_, &out)); + return out != 0; +} + +template +inline size_t ConstValueImpl::GetCount() const { + size_t out; + ThrowOnError(GetApi().GetValueCount(this->p_, &out)); + return out; +} + +template +inline Value ConstValueImpl::GetValue(int index, OrtAllocator* allocator) const { + OrtValue* out; + ThrowOnError(GetApi().GetValue(this->p_, index, allocator, &out)); + return Value{out}; +} + +template +inline size_t ConstValueImpl::GetStringTensorDataLength() const { + size_t out; + ThrowOnError(GetApi().GetStringTensorDataLength(this->p_, &out)); + return out; +} + +template +inline size_t ConstValueImpl::GetStringTensorElementLength(size_t element_index) const { + size_t out; + ThrowOnError(GetApi().GetStringTensorElementLength(this->p_, element_index, &out)); + return out; +} + +template +template +inline const R* ConstValueImpl::GetTensorData() const { + R* out; + ThrowOnError(GetApi().GetTensorMutableData(const_cast(this->p_), (void**)&out)); + return out; +} + +template +inline const void* ConstValueImpl::GetTensorRawData() const { + void* out; + ThrowOnError(GetApi().GetTensorMutableData(const_cast(this->p_), &out)); + return out; +} + +template +inline TypeInfo ConstValueImpl::GetTypeInfo() const { + OrtTypeInfo* output; + ThrowOnError(GetApi().GetTypeInfo(this->p_, &output)); + return TypeInfo{output}; +} + +template +inline TensorTypeAndShapeInfo ConstValueImpl::GetTensorTypeAndShapeInfo() const { + OrtTensorTypeAndShapeInfo* output; + ThrowOnError(GetApi().GetTensorTypeAndShape(this->p_, &output)); + return TensorTypeAndShapeInfo{output}; +} + +template +inline ConstMemoryInfo ConstValueImpl::GetTensorMemoryInfo() const { + const OrtMemoryInfo* mem_info; + ThrowOnError(GetApi().GetTensorMemoryInfo(this->p_, &mem_info)); + return ConstMemoryInfo(mem_info); +} + +template +inline void ConstValueImpl::GetStringTensorElement(size_t buffer_length, size_t element_index, void* buffer) const { + ThrowOnError(GetApi().GetStringTensorElement(this->p_, buffer_length, element_index, buffer)); +} + +template +inline void ConstValueImpl::GetStringTensorContent(void* buffer, size_t buffer_length, size_t* offsets, size_t offsets_count) const { + ThrowOnError(GetApi().GetStringTensorContent(this->p_, buffer, buffer_length, offsets, offsets_count)); +} + +#if !defined(DISABLE_SPARSE_TENSORS) +template +inline OrtSparseFormat ConstValueImpl::GetSparseFormat() const { + OrtSparseFormat format; + ThrowOnError(GetApi().GetSparseTensorFormat(this->p_, &format)); + return format; +} + +template +inline TensorTypeAndShapeInfo ConstValueImpl::GetSparseTensorValuesTypeAndShapeInfo() const { + OrtTensorTypeAndShapeInfo* output; + ThrowOnError(GetApi().GetSparseTensorValuesTypeAndShape(this->p_, &output)); + return TensorTypeAndShapeInfo{output}; +} + +template +inline TensorTypeAndShapeInfo ConstValueImpl::GetSparseTensorIndicesTypeShapeInfo(OrtSparseIndicesFormat indices_format) const { + OrtTensorTypeAndShapeInfo* output; + ThrowOnError(GetApi().GetSparseTensorIndicesTypeShape(this->p_, indices_format, &output)); + return TensorTypeAndShapeInfo{output}; +} + +template +template +inline const R* ConstValueImpl::GetSparseTensorIndicesData(OrtSparseIndicesFormat indices_format, size_t& num_indices) const { + const void* out; + ThrowOnError(GetApi().GetSparseTensorIndices(this->p_, indices_format, &num_indices, &out)); + return reinterpret_cast(out); +} + +template +inline bool ConstValueImpl::IsSparseTensor() const { + int out; + ThrowOnError(GetApi().IsSparseTensor(this->p_, &out)); + return out != 0; +} + +template +template +inline const R* ConstValueImpl::GetSparseTensorValues() const { + const void* out; + ThrowOnError(GetApi().GetSparseTensorValues(this->p_, &out)); + return reinterpret_cast(out); +} + +#endif + +template +void ValueImpl::FillStringTensor(const char* const* s, size_t s_len) { + ThrowOnError(GetApi().FillStringTensor(this->p_, s, s_len)); +} + +template +void ValueImpl::FillStringTensorElement(const char* s, size_t index) { + ThrowOnError(GetApi().FillStringTensorElement(this->p_, s, index)); +} + +template +void* ValueImpl::GetTensorMutableRawData() { + void* out; + ThrowOnError(GetApi().GetTensorMutableData(this->p_, &out)); + return out; +} + +template +template +R* ValueImpl::GetTensorMutableData() { + R* out; + ThrowOnError(GetApi().GetTensorMutableData(this->p_, (void**)&out)); + return out; +} + +template +template +R& ValueImpl::At(const std::vector& location) { + static_assert(!std::is_same::value, "this api does not support std::string"); + R* out; + ThrowOnError(GetApi().TensorAt(this->p_, location.data(), location.size(), (void**)&out)); + return *out; +} + +#if !defined(DISABLE_SPARSE_TENSORS) +template +void ValueImpl::UseCooIndices(int64_t* indices_data, size_t indices_num) { + ThrowOnError(GetApi().UseCooIndices(this->p_, indices_data, indices_num)); +} + +template +void ValueImpl::UseCsrIndices(int64_t* inner_data, size_t inner_num, int64_t* outer_data, size_t outer_num) { + ThrowOnError(GetApi().UseCsrIndices(this->p_, inner_data, inner_num, outer_data, outer_num)); +} + +template +void ValueImpl::UseBlockSparseIndices(const Shape& indices_shape, int32_t* indices_data) { + ThrowOnError(GetApi().UseBlockSparseIndices(this->p_, indices_shape.shape, indices_shape.shape_len, indices_data)); +} + +template +void ValueImpl::FillSparseTensorCoo(const OrtMemoryInfo* mem_info, const OrtSparseValuesParam& values_param, + const int64_t* indices_data, size_t indices_num) { + ThrowOnError(GetApi().FillSparseTensorCoo(this->p_, mem_info, values_param.values_shape, + values_param.values_shape_len, values_param.data.p_data, + indices_data, indices_num)); +} + +template +void ValueImpl::FillSparseTensorCsr(const OrtMemoryInfo* data_mem_info, + const OrtSparseValuesParam& values, + const int64_t* inner_indices_data, size_t inner_indices_num, + const int64_t* outer_indices_data, size_t outer_indices_num) { + ThrowOnError(GetApi().FillSparseTensorCsr(this->p_, data_mem_info, values.values_shape, values.values_shape_len, values.data.p_data, + inner_indices_data, inner_indices_num, + outer_indices_data, outer_indices_num)); +} + +template +void ValueImpl::FillSparseTensorBlockSparse(const OrtMemoryInfo* data_mem_info, + const OrtSparseValuesParam& values, + const Shape& indices_shape, + const int32_t* indices_data) { + ThrowOnError(GetApi().FillSparseTensorBlockSparse(this->p_, data_mem_info, values.values_shape, values.values_shape_len, values.data.p_data, + indices_shape.shape, indices_shape.shape_len, + indices_data)); +} + +#endif // !defined(DISABLE_SPARSE_TENSORS) + +} // namespace detail + +template +inline Value Value::CreateTensor(const OrtMemoryInfo* info, T* p_data, size_t p_data_element_count, const int64_t* shape, size_t shape_len) { + return CreateTensor(info, p_data, p_data_element_count * sizeof(T), shape, shape_len, TypeToTensorType::type); +} + +inline Value Value::CreateTensor(const OrtMemoryInfo* info, void* p_data, size_t p_data_byte_count, const int64_t* shape, size_t shape_len, + ONNXTensorElementDataType type) { + OrtValue* out; + ThrowOnError(GetApi().CreateTensorWithDataAsOrtValue(info, p_data, p_data_byte_count, shape, shape_len, type, &out)); + return Value{out}; +} + +template +inline Value Value::CreateTensor(OrtAllocator* allocator, const int64_t* shape, size_t shape_len) { + return CreateTensor(allocator, shape, shape_len, TypeToTensorType::type); +} + +inline Value Value::CreateTensor(OrtAllocator* allocator, const int64_t* shape, size_t shape_len, ONNXTensorElementDataType type) { + OrtValue* out; + ThrowOnError(GetApi().CreateTensorAsOrtValue(allocator, shape, shape_len, type, &out)); + return Value{out}; +} + +#if !defined(DISABLE_SPARSE_TENSORS) + +template +inline Value Value::CreateSparseTensor(const OrtMemoryInfo* info, T* p_data, const Shape& dense_shape, + const Shape& values_shape) { + return CreateSparseTensor(info, p_data, dense_shape, values_shape, TypeToTensorType::type); +} + +inline Value Value::CreateSparseTensor(const OrtMemoryInfo* info, void* p_data, const Shape& dense_shape, + const Shape& values_shape, ONNXTensorElementDataType type) { + OrtValue* out; + ThrowOnError(GetApi().CreateSparseTensorWithValuesAsOrtValue(info, p_data, dense_shape.shape, dense_shape.shape_len, + values_shape.shape, values_shape.shape_len, type, &out)); + return Value{out}; +} + +template +inline Value Value::CreateSparseTensor(OrtAllocator* allocator, const Shape& dense_shape) { + return CreateSparseTensor(allocator, dense_shape, TypeToTensorType::type); +} + +inline Value Value::CreateSparseTensor(OrtAllocator* allocator, const Shape& dense_shape, + ONNXTensorElementDataType type) { + OrtValue* out; + ThrowOnError(GetApi().CreateSparseTensorAsOrtValue(allocator, dense_shape.shape, dense_shape.shape_len, type, &out)); + return Value{out}; +} +#endif // !defined(DISABLE_SPARSE_TENSORS) + +inline Value Value::CreateMap(Value& keys, Value& values) { + OrtValue* out; + OrtValue* inputs[2] = {keys, values}; + ThrowOnError(GetApi().CreateValue(inputs, 2, ONNX_TYPE_MAP, &out)); + return Value{out}; +} + +inline Value Value::CreateSequence(std::vector& values) { + OrtValue* out; + std::vector values_ort{values.data(), values.data() + values.size()}; + ThrowOnError(GetApi().CreateValue(values_ort.data(), values_ort.size(), ONNX_TYPE_SEQUENCE, &out)); + return Value{out}; +} + +template +inline Value Value::CreateOpaque(const char* domain, const char* type_name, const T& data_container) { + OrtValue* out; + ThrowOnError(GetApi().CreateOpaqueValue(domain, type_name, &data_container, sizeof(T), &out)); + return Value{out}; +} + +// +// Custom OP Inlines +// +inline KernelContext::KernelContext(OrtKernelContext* context) : ctx_(context) { +} + +inline size_t KernelContext::GetInputCount() const { + size_t out = 0; + Ort::ThrowOnError(GetApi().KernelContext_GetInputCount(ctx_, &out)); + return out; +} + +inline size_t KernelContext::GetOutputCount() const { + size_t out = 0; + Ort::ThrowOnError(GetApi().KernelContext_GetOutputCount(ctx_, &out)); + return out; +} + +inline ConstValue KernelContext::GetInput(size_t index) const { + const OrtValue* out = nullptr; + Ort::ThrowOnError(GetApi().KernelContext_GetInput(ctx_, index, &out)); + return ConstValue{out}; +} + +inline UnownedValue KernelContext::GetOutput(size_t index, const int64_t* dim_values, size_t dim_count) const { + OrtValue* out = nullptr; + Ort::ThrowOnError(GetApi().KernelContext_GetOutput(ctx_, index, dim_values, dim_count, &out)); + return UnownedValue(out); +} + +inline UnownedValue KernelContext::GetOutput(size_t index, const std::vector& dims) const { + OrtValue* out = nullptr; + Ort::ThrowOnError(GetApi().KernelContext_GetOutput(ctx_, index, dims.data(), dims.size(), &out)); + return UnownedValue(out); +} + +inline void* KernelContext::GetGPUComputeStream() const { + void* out = nullptr; + Ort::ThrowOnError(GetApi().KernelContext_GetGPUComputeStream(ctx_, &out)); + return out; +} + +inline OpAttr::OpAttr(const char* name, const void* data, int len, OrtOpAttrType type) { + Ort::ThrowOnError(GetApi().CreateOpAttr(name, data, len, type, &p_)); +} + +namespace detail { +template +inline KernelInfo KernelInfoImpl::Copy() const { + OrtKernelInfo* info_copy = nullptr; + Ort::ThrowOnError(GetApi().CopyKernelInfo(this->p_, &info_copy)); + return KernelInfo{info_copy}; +} + +template +inline size_t KernelInfoImpl::GetInputCount() const { + size_t out = 0; + ThrowOnError(GetApi().KernelInfo_GetInputCount(this->p_, &out)); + return out; +} + +template +inline size_t KernelInfoImpl::GetOutputCount() const { + size_t out = 0; + ThrowOnError(GetApi().KernelInfo_GetOutputCount(this->p_, &out)); + return out; +} + +template +inline std::string KernelInfoImpl::GetInputName(size_t index) const { + size_t size = 0; + + // Feed nullptr for the data buffer to query the true size of the string value + Ort::ThrowOnError(GetApi().KernelInfo_GetInputName(this->p_, index, nullptr, &size)); + + std::string out; + out.resize(size); + Ort::ThrowOnError(GetApi().KernelInfo_GetInputName(this->p_, index, &out[0], &size)); + out.resize(size - 1); // remove the terminating character '\0' + + return out; +} + +template +inline std::string KernelInfoImpl::GetOutputName(size_t index) const { + size_t size = 0; + + // Feed nullptr for the data buffer to query the true size of the string value + Ort::ThrowOnError(GetApi().KernelInfo_GetOutputName(this->p_, index, nullptr, &size)); + + std::string out; + out.resize(size); + Ort::ThrowOnError(GetApi().KernelInfo_GetOutputName(this->p_, index, &out[0], &size)); + out.resize(size - 1); // remove the terminating character '\0' + + return out; +} + +template +inline TypeInfo KernelInfoImpl::GetInputTypeInfo(size_t index) const { + OrtTypeInfo* out = nullptr; + ThrowOnError(GetApi().KernelInfo_GetInputTypeInfo(this->p_, index, &out)); + return TypeInfo{out}; +} + +template +inline TypeInfo KernelInfoImpl::GetOutputTypeInfo(size_t index) const { + OrtTypeInfo* out = nullptr; + ThrowOnError(GetApi().KernelInfo_GetOutputTypeInfo(this->p_, index, &out)); + return TypeInfo{out}; +} + +template +inline Value KernelInfoImpl::GetTensorAttribute(const char* name, OrtAllocator* allocator) const { + OrtValue* out = nullptr; + ThrowOnError(GetApi().KernelInfoGetAttribute_tensor(this->p_, name, allocator, &out)); + return Value{out}; +} + +inline void attr_utils::GetAttr(const OrtKernelInfo* p, const char* name, float& out) { + Ort::ThrowOnError(GetApi().KernelInfoGetAttribute_float(p, name, &out)); +} + +inline void attr_utils::GetAttr(const OrtKernelInfo* p, const char* name, int64_t& out) { + Ort::ThrowOnError(GetApi().KernelInfoGetAttribute_int64(p, name, &out)); +} + +inline void attr_utils::GetAttr(const OrtKernelInfo* p, const char* name, std::string& result) { + size_t size = 0; + // Feed nullptr for the data buffer to query the true size of the string attribute + Ort::ThrowOnError(GetApi().KernelInfoGetAttribute_string(p, name, nullptr, &size)); + + std::string out; + out.resize(size); + Ort::ThrowOnError(GetApi().KernelInfoGetAttribute_string(p, name, &out[0], &size)); + out.resize(size - 1); // remove the terminating character '\0' + out.swap(result); +} + +inline void attr_utils::GetAttrs(const OrtKernelInfo* p, const char* name, std::vector& result) { + size_t size = 0; + // Feed nullptr for the data buffer to query the true size of the attribute + Ort::ThrowOnError(GetApi().KernelInfoGetAttributeArray_float(p, name, nullptr, &size)); + + std::vector out; + out.resize(size); + Ort::ThrowOnError(GetApi().KernelInfoGetAttributeArray_float(p, name, out.data(), &size)); + out.swap(result); +} + +inline void attr_utils::GetAttrs(const OrtKernelInfo* p, const char* name, std::vector& result) { + size_t size = 0; + + // Feed nullptr for the data buffer to query the true size of the attribute + Ort::ThrowOnError(GetApi().KernelInfoGetAttributeArray_int64(p, name, nullptr, &size)); + + std::vector out; + out.resize(size); + Ort::ThrowOnError(GetApi().KernelInfoGetAttributeArray_int64(p, name, out.data(), &size)); + out.swap(result); +} +} // namespace detail + +inline KernelInfo::KernelInfo(OrtKernelInfo* info) : detail::KernelInfoImpl{info} {} + +inline Op::Op(OrtOp* p) : Base(p) {} + +inline Op Op::Create(const OrtKernelInfo* info, const char* op_name, const char* domain, int version, + const char** type_constraint_names, + const ONNXTensorElementDataType* type_constraint_values, + size_t type_constraint_count, + const OpAttr* attr_values, size_t attr_count, + size_t input_count, size_t output_count) { + static_assert(sizeof(OpAttr) == sizeof(OrtOpAttr*), + "OpAttr's is expected to be just an array of OrtOpAttr in memory so we can reinterpret safely"); + auto attr_input_values = reinterpret_cast(attr_values); + OrtOp* op; + Ort::ThrowOnError(GetApi().CreateOp(info, op_name, domain, version, type_constraint_names, type_constraint_values, + static_cast(type_constraint_count), + attr_input_values, + static_cast(attr_count), + static_cast(input_count), + static_cast(output_count), &op)); + return Op{op}; +} + +inline void Op::Invoke(const OrtKernelContext* context, + const Value* input_values, + size_t input_count, + Value* output_values, + size_t output_count) { + static_assert(sizeof(Value) == sizeof(OrtValue*), + "Value is really just an array of OrtValue* in memory, so we can reinterpret_cast safely"); + auto ort_input_values = reinterpret_cast(input_values); + auto ort_output_values = reinterpret_cast(output_values); + Ort::ThrowOnError(GetApi().InvokeOp(context, p_, ort_input_values, static_cast(input_count), + ort_output_values, static_cast(output_count))); +} + +inline void Op::Invoke(const OrtKernelContext* context, + const OrtValue* const* input_values, + size_t input_count, + OrtValue* const* output_values, + size_t output_count) { + Ort::ThrowOnError(GetApi().InvokeOp(context, p_, input_values, static_cast(input_count), + output_values, static_cast(output_count))); +} + +inline void CustomOpApi::ThrowOnError(OrtStatus* status) { + Ort::ThrowOnError(status); +} + +template <> +inline float CustomOpApi::KernelInfoGetAttribute(_In_ const OrtKernelInfo* info, _In_ const char* name) { + float out; + Ort::ThrowOnError(api_.KernelInfoGetAttribute_float(info, name, &out)); + return out; +} + +template <> +inline int64_t CustomOpApi::KernelInfoGetAttribute(_In_ const OrtKernelInfo* info, _In_ const char* name) { + int64_t out; + Ort::ThrowOnError(api_.KernelInfoGetAttribute_int64(info, name, &out)); + return out; +} + +template <> +inline std::string CustomOpApi::KernelInfoGetAttribute(_In_ const OrtKernelInfo* info, _In_ const char* name) { + size_t size = 0; + std::string out; + + // Feed nullptr for the data buffer to query the true size of the string attribute + OrtStatus* status = api_.KernelInfoGetAttribute_string(info, name, nullptr, &size); + + if (status == nullptr) { + out.resize(size); + Ort::ThrowOnError(api_.KernelInfoGetAttribute_string(info, name, &out[0], &size)); + out.resize(size - 1); // remove the terminating character '\0' + } else { + Ort::ThrowOnError(status); + } + return out; +} + +template <> +inline std::vector CustomOpApi::KernelInfoGetAttribute(_In_ const OrtKernelInfo* info, _In_ const char* name) { + size_t size = 0; + std::vector out; + + // Feed nullptr for the data buffer to query the true size of the attribute + OrtStatus* status = api_.KernelInfoGetAttributeArray_float(info, name, nullptr, &size); + + if (status == nullptr) { + out.resize(size); + Ort::ThrowOnError(api_.KernelInfoGetAttributeArray_float(info, name, out.data(), &size)); + } else { + Ort::ThrowOnError(status); + } + return out; +} + +template <> +inline std::vector CustomOpApi::KernelInfoGetAttribute(_In_ const OrtKernelInfo* info, _In_ const char* name) { + size_t size = 0; + std::vector out; + + // Feed nullptr for the data buffer to query the true size of the attribute + OrtStatus* status = api_.KernelInfoGetAttributeArray_int64(info, name, nullptr, &size); + + if (status == nullptr) { + out.resize(size); + Ort::ThrowOnError(api_.KernelInfoGetAttributeArray_int64(info, name, out.data(), &size)); + } else { + Ort::ThrowOnError(status); + } + return out; +} +inline OrtTensorTypeAndShapeInfo* CustomOpApi::GetTensorTypeAndShape(_In_ const OrtValue* value) { + OrtTensorTypeAndShapeInfo* out; + Ort::ThrowOnError(api_.GetTensorTypeAndShape(value, &out)); + return out; +} + +inline size_t CustomOpApi::GetTensorShapeElementCount(_In_ const OrtTensorTypeAndShapeInfo* info) { + size_t out; + Ort::ThrowOnError(api_.GetTensorShapeElementCount(info, &out)); + return out; +} + +inline ONNXTensorElementDataType CustomOpApi::GetTensorElementType(const OrtTensorTypeAndShapeInfo* info) { + ONNXTensorElementDataType out; + Ort::ThrowOnError(api_.GetTensorElementType(info, &out)); + return out; +} + +inline size_t CustomOpApi::GetDimensionsCount(_In_ const OrtTensorTypeAndShapeInfo* info) { + size_t out; + Ort::ThrowOnError(api_.GetDimensionsCount(info, &out)); + return out; +} + +inline void CustomOpApi::GetDimensions(_In_ const OrtTensorTypeAndShapeInfo* info, _Out_ int64_t* dim_values, size_t dim_values_length) { + Ort::ThrowOnError(api_.GetDimensions(info, dim_values, dim_values_length)); +} + +inline void CustomOpApi::SetDimensions(OrtTensorTypeAndShapeInfo* info, _In_ const int64_t* dim_values, size_t dim_count) { + Ort::ThrowOnError(api_.SetDimensions(info, dim_values, dim_count)); +} + +template +inline T* CustomOpApi::GetTensorMutableData(_Inout_ OrtValue* value) { + T* data; + Ort::ThrowOnError(api_.GetTensorMutableData(value, reinterpret_cast(&data))); + return data; +} + +inline const OrtMemoryInfo* CustomOpApi::GetTensorMemoryInfo(_In_ const OrtValue* value) { + const OrtMemoryInfo* mem_info; + Ort::ThrowOnError(api_.GetTensorMemoryInfo(value, &mem_info)); + return mem_info; +} + +template +inline const T* CustomOpApi::GetTensorData(_Inout_ const OrtValue* value) { + T* data = nullptr; + Ort::ThrowOnError(api_.GetTensorMutableData(const_cast(value), reinterpret_cast(&data))); + return data; +} + +inline std::vector CustomOpApi::GetTensorShape(const OrtTensorTypeAndShapeInfo* info) { + size_t out; + Ort::ThrowOnError(api_.GetDimensionsCount(info, &out)); + std::vector output(out); + Ort::ThrowOnError(api_.GetDimensions(info, output.data(), out)); + return output; +} + +inline void CustomOpApi::ReleaseTensorTypeAndShapeInfo(OrtTensorTypeAndShapeInfo* input) { + api_.ReleaseTensorTypeAndShapeInfo(input); +} + +inline size_t CustomOpApi::KernelContext_GetInputCount(const OrtKernelContext* context) { + size_t out; + Ort::ThrowOnError(api_.KernelContext_GetInputCount(context, &out)); + return out; +} + +inline const OrtValue* CustomOpApi::KernelContext_GetInput(const OrtKernelContext* context, _In_ size_t index) { + const OrtValue* out; + Ort::ThrowOnError(api_.KernelContext_GetInput(context, index, &out)); + return out; +} + +inline size_t CustomOpApi::KernelContext_GetOutputCount(const OrtKernelContext* context) { + size_t out; + Ort::ThrowOnError(api_.KernelContext_GetOutputCount(context, &out)); + return out; +} + +inline OrtValue* CustomOpApi::KernelContext_GetOutput(OrtKernelContext* context, _In_ size_t index, + _In_ const int64_t* dim_values, size_t dim_count) { + OrtValue* out; + Ort::ThrowOnError(api_.KernelContext_GetOutput(context, index, dim_values, dim_count, &out)); + return out; +} + +inline void* CustomOpApi::KernelContext_GetGPUComputeStream(const OrtKernelContext* context) { + void* out; + Ort::ThrowOnError(api_.KernelContext_GetGPUComputeStream(context, &out)); + return out; +} + +inline OrtOpAttr* CustomOpApi::CreateOpAttr(_In_ const char* name, + _In_ const void* data, + _In_ int len, + _In_ OrtOpAttrType type) { + OrtOpAttr* op_attr{}; + Ort::ThrowOnError(api_.CreateOpAttr(name, data, len, type, &op_attr)); + return op_attr; +} + +inline void CustomOpApi::ReleaseOpAttr(_Frees_ptr_opt_ OrtOpAttr* op_attr) { + api_.ReleaseOpAttr(op_attr); +} + +inline OrtOp* CustomOpApi::CreateOp(_In_ const OrtKernelInfo* info, + _In_ const char* op_name, + _In_ const char* domain, + _In_ int version, + _In_opt_ const char** type_constraint_names, + _In_opt_ const ONNXTensorElementDataType* type_constraint_values, + _In_opt_ int type_constraint_count, + _In_opt_ const OrtOpAttr* const* attr_values, + _In_opt_ int attr_count, + _In_ int input_count, + _In_ int output_count) { + OrtOp* ort_op{}; + Ort::ThrowOnError(api_.CreateOp(info, op_name, domain, version, type_constraint_names, type_constraint_values, + type_constraint_count, attr_values, attr_count, input_count, output_count, &ort_op)); + return ort_op; +} + +inline void CustomOpApi::InvokeOp(_In_ const OrtKernelContext* context, + _In_ const OrtOp* ort_op, + _In_ const OrtValue* const* input_values, + _In_ int input_count, + _Inout_ OrtValue* const* output_values, + _In_ int output_count) { + Ort::ThrowOnError(api_.InvokeOp(context, ort_op, input_values, input_count, output_values, output_count)); +} + +inline void CustomOpApi::ReleaseOp(_Frees_ptr_opt_ OrtOp* ort_op) { + api_.ReleaseOp(ort_op); +} + +inline OrtKernelInfo* CustomOpApi::CopyKernelInfo(_In_ const OrtKernelInfo* info) { + OrtKernelInfo* info_copy{}; + Ort::ThrowOnError(api_.CopyKernelInfo(info, &info_copy)); + return info_copy; +} + +inline void CustomOpApi::ReleaseKernelInfo(_Frees_ptr_opt_ OrtKernelInfo* info_copy) { + api_.ReleaseKernelInfo(info_copy); +} + +inline std::vector GetAvailableProviders() { + int len; + char** providers; + ThrowOnError(GetApi().GetAvailableProviders(&providers, &len)); + std::vector available_providers(providers, providers + len); + ThrowOnError(GetApi().ReleaseAvailableProviders(providers, len)); + return available_providers; +} + +SessionOptions& AddInitializer(const char* name, const OrtValue* ort_val); + +template +void CustomOpBase::GetSessionConfigs(std::unordered_map& out, + ConstSessionOptions options) const { + const TOp* derived = static_cast(this); + std::vector keys = derived->GetSessionConfigKeys(); + + out.reserve(keys.size()); + + std::string config_entry_key = detail::MakeCustomOpConfigEntryKey(derived->GetName(), ""); + const size_t prefix_size = config_entry_key.length(); + + for (const auto& key : keys) { + config_entry_key.resize(prefix_size); + config_entry_key.append(key); + out[key] = options.GetConfigEntryOrDefault(config_entry_key.c_str(), ""); + } +} + +} // namespace Ort diff --git a/funasr/runtime/onnxruntime/win/include/onnxruntime_run_options_config_keys.h b/funasr/runtime/onnxruntime/win/include/onnxruntime_run_options_config_keys.h new file mode 100644 index 000000000..1f5fcd50e --- /dev/null +++ b/funasr/runtime/onnxruntime/win/include/onnxruntime_run_options_config_keys.h @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#pragma once + +/* + * This file defines RunOptions Config Keys and format of the Config Values. + * + * The Naming Convention for a RunOptions Config Key, + * "[Area][.[SubArea1].[SubArea2]...].[Keyname]" + * Such as "ep.cuda.use_arena" + * The Config Key cannot be empty + * The maximum length of the Config Key is 128 + * + * The string format of a RunOptions Config Value is defined individually for each Config. + * The maximum length of the Config Value is 1024 + */ + +// Key for enabling shrinkages of user listed device memory arenas. +// Expects a list of semi-colon separated key value pairs separated by colon in the following format: +// "device_0:device_id_0;device_1:device_id_1" +// No white-spaces allowed in the provided list string. +// Currently, the only supported devices are : "cpu", "gpu" (case sensitive). +// If "cpu" is included in the list, DisableCpuMemArena() API must not be called (i.e.) arena for cpu should be enabled. +// Example usage: "cpu:0;gpu:0" (or) "gpu:0" +// By default, the value for this key is empty (i.e.) no memory arenas are shrunk +static const char* const kOrtRunOptionsConfigEnableMemoryArenaShrinkage = "memory.enable_memory_arena_shrinkage"; + +// Set to '1' to not synchronize execution providers with CPU at the end of session run. +// Per default it will be set to '0' +// Taking CUDA EP as an example, it omit triggering cudaStreamSynchronize on the compute stream. +static const char* const kOrtRunOptionsConfigDisableSynchronizeExecutionProviders = "disable_synchronize_execution_providers"; diff --git a/funasr/runtime/onnxruntime/win/include/onnxruntime_session_options_config_keys.h b/funasr/runtime/onnxruntime/win/include/onnxruntime_session_options_config_keys.h new file mode 100644 index 000000000..92482d71f --- /dev/null +++ b/funasr/runtime/onnxruntime/win/include/onnxruntime_session_options_config_keys.h @@ -0,0 +1,186 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#pragma once + +/* + * This file defines SessionOptions Config Keys and format of the Config Values. + * + * The Naming Convention for a SessionOptions Config Key, + * "[Area][.[SubArea1].[SubArea2]...].[Keyname]" + * Such as "ep.cuda.use_arena" + * The Config Key cannot be empty + * The maximum length of the Config Key is 128 + * + * The string format of a SessionOptions Config Value is defined individually for each Config. + * The maximum length of the Config Value is 1024 + */ + +// Key for disable PrePacking, +// If the config value is set to "1" then the prepacking is disabled, otherwise prepacking is enabled (default value) +static const char* const kOrtSessionOptionsConfigDisablePrepacking = "session.disable_prepacking"; + +// A value of "1" means allocators registered in the env will be used. "0" means the allocators created in the session +// will be used. Use this to override the usage of env allocators on a per session level. +static const char* const kOrtSessionOptionsConfigUseEnvAllocators = "session.use_env_allocators"; + +// Set to 'ORT' (case sensitive) to load an ORT format model. +// If unset, model type will default to ONNX unless inferred from filename ('.ort' == ORT format) or bytes to be ORT +static const char* const kOrtSessionOptionsConfigLoadModelFormat = "session.load_model_format"; + +// Set to 'ORT' (case sensitive) to save optimized model in ORT format when SessionOptions.optimized_model_path is set. +// If unset, format will default to ONNX unless optimized_model_filepath ends in '.ort'. +static const char* const kOrtSessionOptionsConfigSaveModelFormat = "session.save_model_format"; + +// If a value is "1", flush-to-zero and denormal-as-zero are applied. The default is "0". +// When multiple sessions are created, a main thread doesn't override changes from succeeding session options, +// but threads in session thread pools follow option changes. +// When ORT runs with OpenMP, the same rule is applied, i.e. the first session option to flush-to-zero and +// denormal-as-zero is only applied to global OpenMP thread pool, which doesn't support per-session thread pool. +// Note that an alternative way not using this option at runtime is to train and export a model without denormals +// and that's recommended because turning this option on may hurt model accuracy. +static const char* const kOrtSessionOptionsConfigSetDenormalAsZero = "session.set_denormal_as_zero"; + +// It controls to run quantization model in QDQ (QuantizelinearDeQuantizelinear) format or not. +// "0": enable. ORT does fusion logic for QDQ format. +// "1": disable. ORT doesn't do fusion logic for QDQ format. +// Its default value is "0" +static const char* const kOrtSessionOptionsDisableQuantQDQ = "session.disable_quant_qdq"; + +// It controls whether to enable Double QDQ remover and Identical Children Consolidation +// "0": not to disable. ORT does remove the middle 2 Nodes from a Q->(QD->Q)->QD pairs +// "1": disable. ORT doesn't remove the middle 2 Nodes from a Q->(QD->Q)->QD pairs +// Its default value is "0" +static const char* const kOrtSessionOptionsDisableDoubleQDQRemover = "session.disable_double_qdq_remover"; + +// If set to "1", enables the removal of QuantizeLinear/DequantizeLinear node pairs once all QDQ handling has been +// completed. e.g. If after all QDQ handling has completed and we have -> FloatOp -> Q -> DQ -> FloatOp -> the +// Q -> DQ could potentially be removed. This will provide a performance benefit by avoiding going from float to +// 8-bit and back to float, but could impact accuracy. The impact on accuracy will be model specific and depend on +// other factors like whether the model was created using Quantization Aware Training or Post Training Quantization. +// As such, it's best to test to determine if enabling this works well for your scenario. +// The default value is "0" +// Available since version 1.11. +static const char* const kOrtSessionOptionsEnableQuantQDQCleanup = "session.enable_quant_qdq_cleanup"; + +// Enable or disable gelu approximation in graph optimization. "0": disable; "1": enable. The default is "0". +// GeluApproximation has side effects which may change the inference results. It is disabled by default due to this. +static const char* const kOrtSessionOptionsEnableGeluApproximation = "optimization.enable_gelu_approximation"; + +#ifdef ENABLE_TRAINING +// Specifies a list of op types for memory footprint reduction. +// The value should be a ","-delimited list of pair of +// . +// For example, "Gelu+Cast+:1:0,Dropout+:1:1". +// A valid "subgraph string" should be one subgraph representation output by ORT graph transformations. +// "optimization strategy" currently has valid values: 0 - disabled, 1 - recompute. +// "number of subgraph to apply" is used to control how many subgraphs to apply optimization, to avoid "oversaving" +// the memory. +static const char* const kOrtSessionOptionsMemoryOptimizerEnabler = "optimization.enable_memory_optimizer"; + +// Specifies the level for detecting subgraphs for memory footprint reduction. +// The value should be an integer. The default value is 0. +static const char* const kOrtSessionOptionsMemoryOptimizerProbeLevel = "optimization.enable_memory_probe_recompute_level"; +#endif + +// Enable or disable using device allocator for allocating initialized tensor memory. "1": enable; "0": disable. The default is "0". +// Using device allocators means the memory allocation is made using malloc/new. +static const char* const kOrtSessionOptionsUseDeviceAllocatorForInitializers = "session.use_device_allocator_for_initializers"; + +// Configure whether to allow the inter_op/intra_op threads spinning a number of times before blocking +// "0": thread will block if found no job to run +// "1": default, thread will spin a number of times before blocking +static const char* const kOrtSessionOptionsConfigAllowInterOpSpinning = "session.inter_op.allow_spinning"; +static const char* const kOrtSessionOptionsConfigAllowIntraOpSpinning = "session.intra_op.allow_spinning"; + +// Key for using model bytes directly for ORT format +// If a session is created using an input byte array contains the ORT format model data, +// By default we will copy the model bytes at the time of session creation to ensure the model bytes +// buffer is valid. +// Setting this option to "1" will disable copy the model bytes, and use the model bytes directly. The caller +// has to guarantee that the model bytes are valid until the ORT session using the model bytes is destroyed. +static const char* const kOrtSessionOptionsConfigUseORTModelBytesDirectly = "session.use_ort_model_bytes_directly"; + +/// +/// Key for using the ORT format model flatbuffer bytes directly for initializers. +/// This avoids copying the bytes and reduces peak memory usage during model loading and initialization. +/// Requires `session.use_ort_model_bytes_directly` to be true. +/// If set, the flatbuffer bytes provided when creating the InferenceSession MUST remain valid for the entire +/// duration of the InferenceSession. +/// +static const char* const kOrtSessionOptionsConfigUseORTModelBytesForInitializers = + "session.use_ort_model_bytes_for_initializers"; + +// This should only be specified when exporting an ORT format model for use on a different platform. +// If the ORT format model will be used on ARM platforms set to "1". For other platforms set to "0" +// Available since version 1.11. +static const char* const kOrtSessionOptionsQDQIsInt8Allowed = "session.qdqisint8allowed"; + +// x64 SSE4.1/AVX2/AVX512(with no VNNI) has overflow problem with quantizied matrix multiplication with U8S8. +// To avoid this we need to use slower U8U8 matrix multiplication instead. This option, if +// turned on, use slower U8U8 matrix multiplications. Only effective with AVX2 or AVX512 +// platforms. +static const char* const kOrtSessionOptionsAvx2PrecisionMode = "session.x64quantprecision"; + +// Specifies how minimal build graph optimizations are handled in a full build. +// These optimizations are at the extended level or higher. +// Possible values and their effects are: +// "save": Save runtime optimizations when saving an ORT format model. +// "apply": Only apply optimizations available in a minimal build. +// ""/: Apply optimizations available in a full build. +// Available since version 1.11. +static const char* const kOrtSessionOptionsConfigMinimalBuildOptimizations = + "optimization.minimal_build_optimizations"; + +// Note: The options specific to an EP should be specified prior to appending that EP to the session options object in +// order for them to take effect. + +// Specifies a list of stop op types. Nodes of a type in the stop op types and nodes downstream from them will not be +// run by the NNAPI EP. +// The value should be a ","-delimited list of op types. For example, "Add,Sub". +// If not specified, the default set of stop ops is used. To specify an empty stop ops types list and disable stop op +// exclusion, set the value to "". +static const char* const kOrtSessionOptionsConfigNnapiEpPartitioningStopOps = "ep.nnapi.partitioning_stop_ops"; + +// Enabling dynamic block-sizing for multithreading. +// With a positive value, thread pool will split a task of N iterations to blocks of size starting from: +// N / (num_of_threads * dynamic_block_base) +// As execution progresses, the size will decrease according to the diminishing residual of N, +// meaning the task will be distributed in smaller granularity for better parallelism. +// For some models, it helps to reduce the variance of E2E inference latency and boost performance. +// The feature will not function by default, specify any positive integer, e.g. "4", to enable it. +// Available since version 1.11. +static const char* const kOrtSessionOptionsConfigDynamicBlockBase = "session.dynamic_block_base"; + +// This option allows to decrease CPU usage between infrequent +// requests and forces any TP threads spinning stop immediately when the last of +// concurrent Run() call returns. +// Spinning is restarted on the next Run() call. +// Applies only to internal thread-pools +static const char* const kOrtSessionOptionsConfigForceSpinningStop = "session.force_spinning_stop"; + +// "1": all inconsistencies encountered during shape and type inference +// will result in failures. +// "0": in some cases warnings will be logged but processing will continue. The default. +// May be useful to expose bugs in models. +static const char* const kOrtSessionOptionsConfigStrictShapeTypeInference = "session.strict_shape_type_inference"; + +// The file saves configuration for partitioning node among logic streams +static const char* const kNodePartitionConfigFile = "session.node_partition_config_file"; + +// This Option allows setting affinities for intra op threads. +// Affinity string follows format: +// logical_processor_id,logical_processor_id;logical_processor_id,logical_processor_id +// Semicolon isolates configurations among threads, while comma split processors where ith thread expected to attach to. +// e.g.1,2,3;4,5 +// specifies affinities for two threads, with the 1st thread attach to the 1st, 2nd, and 3rd processor, and 2nd thread to the 4th and 5th. +// To ease the configuration, an "interval" is also allowed: +// e.g. 1-8;8-16;17-24 +// orders that the 1st thread runs on first eight processors, 2nd thread runs on next eight processors, and so forth. +// Note: +// 1. Once set, the number of thread affinities must equal to intra_op_num_threads - 1, since ort does not set affinity on the main thread which +// is started and managed by the calling app; +// 2. For windows, ort will infer the group id from a logical processor id, for example, assuming there are two groups with each has 64 logical processors, +// an id of 64 will be inferred as the last processor of the 1st group, while 65 will be interpreted as the 1st processor of the second group. +// Hence 64-65 is an invalid configuration, because a windows thread cannot be attached to processors across group boundary. +static const char* const kOrtSessionOptionsConfigIntraOpThreadAffinities = "session.intra_op_thread_affinities"; diff --git a/funasr/runtime/onnxruntime/win/include/provider_options.h b/funasr/runtime/onnxruntime/win/include/provider_options.h new file mode 100644 index 000000000..aab13e808 --- /dev/null +++ b/funasr/runtime/onnxruntime/win/include/provider_options.h @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#pragma once + +#include +#include +#include + +namespace onnxruntime { + +// data types for execution provider options + +using ProviderOptions = std::unordered_map; +using ProviderOptionsVector = std::vector; +using ProviderOptionsMap = std::unordered_map; + +} // namespace onnxruntime diff --git a/funasr/runtime/onnxruntime/win/include/tensorrt_provider_factory.h b/funasr/runtime/onnxruntime/win/include/tensorrt_provider_factory.h new file mode 100644 index 000000000..44debc901 --- /dev/null +++ b/funasr/runtime/onnxruntime/win/include/tensorrt_provider_factory.h @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#include "onnxruntime_c_api.h" + +#ifdef __cplusplus +extern "C" { +#endif + +ORT_API_STATUS(OrtSessionOptionsAppendExecutionProvider_Tensorrt, _In_ OrtSessionOptions* options, int device_id); + +#ifdef __cplusplus +} +#endif diff --git a/funasr/runtime/onnxruntime/win/lib/x64/libfftw3-3.def b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3-3.def new file mode 100644 index 000000000..4b50ecd41 --- /dev/null +++ b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3-3.def @@ -0,0 +1,1017 @@ +LIBRARY libfftw3-3.dll +EXPORTS +dfftw_cleanup_ +dfftw_cleanup__ +dfftw_cleanup_threads_ +dfftw_cleanup_threads__ +dfftw_cost_ +dfftw_cost__ +dfftw_destroy_plan_ +dfftw_destroy_plan__ +dfftw_estimate_cost_ +dfftw_estimate_cost__ +dfftw_execute_ +dfftw_execute__ +dfftw_execute_dft_ +dfftw_execute_dft__ +dfftw_execute_dft_c2r_ +dfftw_execute_dft_c2r__ +dfftw_execute_dft_r2c_ +dfftw_execute_dft_r2c__ +dfftw_execute_r2r_ +dfftw_execute_r2r__ +dfftw_execute_split_dft_ +dfftw_execute_split_dft__ +dfftw_execute_split_dft_c2r_ +dfftw_execute_split_dft_c2r__ +dfftw_execute_split_dft_r2c_ +dfftw_execute_split_dft_r2c__ +dfftw_export_wisdom_ +dfftw_export_wisdom__ +dfftw_flops_ +dfftw_flops__ +dfftw_forget_wisdom_ +dfftw_forget_wisdom__ +dfftw_import_system_wisdom_ +dfftw_import_system_wisdom__ +dfftw_import_wisdom_ +dfftw_import_wisdom__ +dfftw_init_threads_ +dfftw_init_threads__ +dfftw_plan_dft_ +dfftw_plan_dft__ +dfftw_plan_dft_1d_ +dfftw_plan_dft_1d__ +dfftw_plan_dft_2d_ +dfftw_plan_dft_2d__ +dfftw_plan_dft_3d_ +dfftw_plan_dft_3d__ +dfftw_plan_dft_c2r_ +dfftw_plan_dft_c2r__ +dfftw_plan_dft_c2r_1d_ +dfftw_plan_dft_c2r_1d__ +dfftw_plan_dft_c2r_2d_ +dfftw_plan_dft_c2r_2d__ +dfftw_plan_dft_c2r_3d_ +dfftw_plan_dft_c2r_3d__ +dfftw_plan_dft_r2c_ +dfftw_plan_dft_r2c__ +dfftw_plan_dft_r2c_1d_ +dfftw_plan_dft_r2c_1d__ +dfftw_plan_dft_r2c_2d_ +dfftw_plan_dft_r2c_2d__ +dfftw_plan_dft_r2c_3d_ +dfftw_plan_dft_r2c_3d__ +dfftw_plan_guru_dft_ +dfftw_plan_guru_dft__ +dfftw_plan_guru_dft_c2r_ +dfftw_plan_guru_dft_c2r__ +dfftw_plan_guru_dft_r2c_ +dfftw_plan_guru_dft_r2c__ +dfftw_plan_guru_r2r_ +dfftw_plan_guru_r2r__ +dfftw_plan_guru_split_dft_ +dfftw_plan_guru_split_dft__ +dfftw_plan_guru_split_dft_c2r_ +dfftw_plan_guru_split_dft_c2r__ +dfftw_plan_guru_split_dft_r2c_ +dfftw_plan_guru_split_dft_r2c__ +dfftw_plan_many_dft_ +dfftw_plan_many_dft__ +dfftw_plan_many_dft_c2r_ +dfftw_plan_many_dft_c2r__ +dfftw_plan_many_dft_r2c_ +dfftw_plan_many_dft_r2c__ +dfftw_plan_many_r2r_ +dfftw_plan_many_r2r__ +dfftw_plan_r2r_ +dfftw_plan_r2r__ +dfftw_plan_r2r_1d_ +dfftw_plan_r2r_1d__ +dfftw_plan_r2r_2d_ +dfftw_plan_r2r_2d__ +dfftw_plan_r2r_3d_ +dfftw_plan_r2r_3d__ +dfftw_plan_with_nthreads_ +dfftw_plan_with_nthreads__ +dfftw_print_plan_ +dfftw_print_plan__ +dfftw_set_timelimit_ +dfftw_set_timelimit__ +fftw_alignment_of +fftw_alloc_complex +fftw_alloc_real +fftw_assertion_failed +fftw_bufdist +fftw_check_alignment_of_sse2_pm +fftw_choose_radix +fftw_cleanup +fftw_cleanup_threads +fftw_codelet_e01_8 +fftw_codelet_e10_8 +fftw_codelet_hb_10 +fftw_codelet_hb_12 +fftw_codelet_hb_15 +fftw_codelet_hb_16 +fftw_codelet_hb_2 +fftw_codelet_hb_20 +fftw_codelet_hb2_16 +fftw_codelet_hb2_20 +fftw_codelet_hb2_25 +fftw_codelet_hb2_32 +fftw_codelet_hb2_4 +fftw_codelet_hb_25 +fftw_codelet_hb2_5 +fftw_codelet_hb2_8 +fftw_codelet_hb_3 +fftw_codelet_hb_32 +fftw_codelet_hb_4 +fftw_codelet_hb_5 +fftw_codelet_hb_6 +fftw_codelet_hb_64 +fftw_codelet_hb_7 +fftw_codelet_hb_8 +fftw_codelet_hb_9 +fftw_codelet_hc2cb_10 +fftw_codelet_hc2cb_12 +fftw_codelet_hc2cb_16 +fftw_codelet_hc2cb_2 +fftw_codelet_hc2cb_20 +fftw_codelet_hc2cb2_16 +fftw_codelet_hc2cb2_20 +fftw_codelet_hc2cb2_32 +fftw_codelet_hc2cb2_4 +fftw_codelet_hc2cb2_8 +fftw_codelet_hc2cb_32 +fftw_codelet_hc2cb_4 +fftw_codelet_hc2cb_6 +fftw_codelet_hc2cb_8 +fftw_codelet_hc2cbdft_10 +fftw_codelet_hc2cbdft_12 +fftw_codelet_hc2cbdft_16 +fftw_codelet_hc2cbdft_2 +fftw_codelet_hc2cbdft_20 +fftw_codelet_hc2cbdft2_16 +fftw_codelet_hc2cbdft2_20 +fftw_codelet_hc2cbdft2_32 +fftw_codelet_hc2cbdft2_4 +fftw_codelet_hc2cbdft2_8 +fftw_codelet_hc2cbdft_32 +fftw_codelet_hc2cbdft_4 +fftw_codelet_hc2cbdft_6 +fftw_codelet_hc2cbdft_8 +fftw_codelet_hc2cbdftv_10_avx +fftw_codelet_hc2cbdftv_10_sse2 +fftw_codelet_hc2cbdftv_12_avx +fftw_codelet_hc2cbdftv_12_sse2 +fftw_codelet_hc2cbdftv_16_avx +fftw_codelet_hc2cbdftv_16_sse2 +fftw_codelet_hc2cbdftv_20_avx +fftw_codelet_hc2cbdftv_20_sse2 +fftw_codelet_hc2cbdftv_2_avx +fftw_codelet_hc2cbdftv_2_sse2 +fftw_codelet_hc2cbdftv_32_avx +fftw_codelet_hc2cbdftv_32_sse2 +fftw_codelet_hc2cbdftv_4_avx +fftw_codelet_hc2cbdftv_4_sse2 +fftw_codelet_hc2cbdftv_6_avx +fftw_codelet_hc2cbdftv_6_sse2 +fftw_codelet_hc2cbdftv_8_avx +fftw_codelet_hc2cbdftv_8_sse2 +fftw_codelet_hc2cf_10 +fftw_codelet_hc2cf_12 +fftw_codelet_hc2cf_16 +fftw_codelet_hc2cf_2 +fftw_codelet_hc2cf_20 +fftw_codelet_hc2cf2_16 +fftw_codelet_hc2cf2_20 +fftw_codelet_hc2cf2_32 +fftw_codelet_hc2cf2_4 +fftw_codelet_hc2cf2_8 +fftw_codelet_hc2cf_32 +fftw_codelet_hc2cf_4 +fftw_codelet_hc2cf_6 +fftw_codelet_hc2cf_8 +fftw_codelet_hc2cfdft_10 +fftw_codelet_hc2cfdft_12 +fftw_codelet_hc2cfdft_16 +fftw_codelet_hc2cfdft_2 +fftw_codelet_hc2cfdft_20 +fftw_codelet_hc2cfdft2_16 +fftw_codelet_hc2cfdft2_20 +fftw_codelet_hc2cfdft2_32 +fftw_codelet_hc2cfdft2_4 +fftw_codelet_hc2cfdft2_8 +fftw_codelet_hc2cfdft_32 +fftw_codelet_hc2cfdft_4 +fftw_codelet_hc2cfdft_6 +fftw_codelet_hc2cfdft_8 +fftw_codelet_hc2cfdftv_10_avx +fftw_codelet_hc2cfdftv_10_sse2 +fftw_codelet_hc2cfdftv_12_avx +fftw_codelet_hc2cfdftv_12_sse2 +fftw_codelet_hc2cfdftv_16_avx +fftw_codelet_hc2cfdftv_16_sse2 +fftw_codelet_hc2cfdftv_20_avx +fftw_codelet_hc2cfdftv_20_sse2 +fftw_codelet_hc2cfdftv_2_avx +fftw_codelet_hc2cfdftv_2_sse2 +fftw_codelet_hc2cfdftv_32_avx +fftw_codelet_hc2cfdftv_32_sse2 +fftw_codelet_hc2cfdftv_4_avx +fftw_codelet_hc2cfdftv_4_sse2 +fftw_codelet_hc2cfdftv_6_avx +fftw_codelet_hc2cfdftv_6_sse2 +fftw_codelet_hc2cfdftv_8_avx +fftw_codelet_hc2cfdftv_8_sse2 +fftw_codelet_hf_10 +fftw_codelet_hf_12 +fftw_codelet_hf_15 +fftw_codelet_hf_16 +fftw_codelet_hf_2 +fftw_codelet_hf_20 +fftw_codelet_hf2_16 +fftw_codelet_hf2_20 +fftw_codelet_hf2_25 +fftw_codelet_hf2_32 +fftw_codelet_hf2_4 +fftw_codelet_hf_25 +fftw_codelet_hf2_5 +fftw_codelet_hf2_8 +fftw_codelet_hf_3 +fftw_codelet_hf_32 +fftw_codelet_hf_4 +fftw_codelet_hf_5 +fftw_codelet_hf_6 +fftw_codelet_hf_64 +fftw_codelet_hf_7 +fftw_codelet_hf_8 +fftw_codelet_hf_9 +fftw_codelet_n1_10 +fftw_codelet_n1_11 +fftw_codelet_n1_12 +fftw_codelet_n1_13 +fftw_codelet_n1_14 +fftw_codelet_n1_15 +fftw_codelet_n1_16 +fftw_codelet_n1_2 +fftw_codelet_n1_20 +fftw_codelet_n1_25 +fftw_codelet_n1_3 +fftw_codelet_n1_32 +fftw_codelet_n1_4 +fftw_codelet_n1_5 +fftw_codelet_n1_6 +fftw_codelet_n1_64 +fftw_codelet_n1_7 +fftw_codelet_n1_8 +fftw_codelet_n1_9 +fftw_codelet_n1bv_10_avx +fftw_codelet_n1bv_10_sse2 +fftw_codelet_n1bv_11_avx +fftw_codelet_n1bv_11_sse2 +fftw_codelet_n1bv_128_avx +fftw_codelet_n1bv_128_sse2 +fftw_codelet_n1bv_12_avx +fftw_codelet_n1bv_12_sse2 +fftw_codelet_n1bv_13_avx +fftw_codelet_n1bv_13_sse2 +fftw_codelet_n1bv_14_avx +fftw_codelet_n1bv_14_sse2 +fftw_codelet_n1bv_15_avx +fftw_codelet_n1bv_15_sse2 +fftw_codelet_n1bv_16_avx +fftw_codelet_n1bv_16_sse2 +fftw_codelet_n1bv_20_avx +fftw_codelet_n1bv_20_sse2 +fftw_codelet_n1bv_25_avx +fftw_codelet_n1bv_25_sse2 +fftw_codelet_n1bv_2_avx +fftw_codelet_n1bv_2_sse2 +fftw_codelet_n1bv_32_avx +fftw_codelet_n1bv_32_sse2 +fftw_codelet_n1bv_3_avx +fftw_codelet_n1bv_3_sse2 +fftw_codelet_n1bv_4_avx +fftw_codelet_n1bv_4_sse2 +fftw_codelet_n1bv_5_avx +fftw_codelet_n1bv_5_sse2 +fftw_codelet_n1bv_64_avx +fftw_codelet_n1bv_64_sse2 +fftw_codelet_n1bv_6_avx +fftw_codelet_n1bv_6_sse2 +fftw_codelet_n1bv_7_avx +fftw_codelet_n1bv_7_sse2 +fftw_codelet_n1bv_8_avx +fftw_codelet_n1bv_8_sse2 +fftw_codelet_n1bv_9_avx +fftw_codelet_n1bv_9_sse2 +fftw_codelet_n1fv_10_avx +fftw_codelet_n1fv_10_sse2 +fftw_codelet_n1fv_11_avx +fftw_codelet_n1fv_11_sse2 +fftw_codelet_n1fv_128_avx +fftw_codelet_n1fv_128_sse2 +fftw_codelet_n1fv_12_avx +fftw_codelet_n1fv_12_sse2 +fftw_codelet_n1fv_13_avx +fftw_codelet_n1fv_13_sse2 +fftw_codelet_n1fv_14_avx +fftw_codelet_n1fv_14_sse2 +fftw_codelet_n1fv_15_avx +fftw_codelet_n1fv_15_sse2 +fftw_codelet_n1fv_16_avx +fftw_codelet_n1fv_16_sse2 +fftw_codelet_n1fv_20_avx +fftw_codelet_n1fv_20_sse2 +fftw_codelet_n1fv_25_avx +fftw_codelet_n1fv_25_sse2 +fftw_codelet_n1fv_2_avx +fftw_codelet_n1fv_2_sse2 +fftw_codelet_n1fv_32_avx +fftw_codelet_n1fv_32_sse2 +fftw_codelet_n1fv_3_avx +fftw_codelet_n1fv_3_sse2 +fftw_codelet_n1fv_4_avx +fftw_codelet_n1fv_4_sse2 +fftw_codelet_n1fv_5_avx +fftw_codelet_n1fv_5_sse2 +fftw_codelet_n1fv_64_avx +fftw_codelet_n1fv_64_sse2 +fftw_codelet_n1fv_6_avx +fftw_codelet_n1fv_6_sse2 +fftw_codelet_n1fv_7_avx +fftw_codelet_n1fv_7_sse2 +fftw_codelet_n1fv_8_avx +fftw_codelet_n1fv_8_sse2 +fftw_codelet_n1fv_9_avx +fftw_codelet_n1fv_9_sse2 +fftw_codelet_n2bv_10_avx +fftw_codelet_n2bv_10_sse2 +fftw_codelet_n2bv_12_avx +fftw_codelet_n2bv_12_sse2 +fftw_codelet_n2bv_14_avx +fftw_codelet_n2bv_14_sse2 +fftw_codelet_n2bv_16_avx +fftw_codelet_n2bv_16_sse2 +fftw_codelet_n2bv_20_avx +fftw_codelet_n2bv_20_sse2 +fftw_codelet_n2bv_2_avx +fftw_codelet_n2bv_2_sse2 +fftw_codelet_n2bv_32_avx +fftw_codelet_n2bv_32_sse2 +fftw_codelet_n2bv_4_avx +fftw_codelet_n2bv_4_sse2 +fftw_codelet_n2bv_64_avx +fftw_codelet_n2bv_64_sse2 +fftw_codelet_n2bv_6_avx +fftw_codelet_n2bv_6_sse2 +fftw_codelet_n2bv_8_avx +fftw_codelet_n2bv_8_sse2 +fftw_codelet_n2fv_10_avx +fftw_codelet_n2fv_10_sse2 +fftw_codelet_n2fv_12_avx +fftw_codelet_n2fv_12_sse2 +fftw_codelet_n2fv_14_avx +fftw_codelet_n2fv_14_sse2 +fftw_codelet_n2fv_16_avx +fftw_codelet_n2fv_16_sse2 +fftw_codelet_n2fv_20_avx +fftw_codelet_n2fv_20_sse2 +fftw_codelet_n2fv_2_avx +fftw_codelet_n2fv_2_sse2 +fftw_codelet_n2fv_32_avx +fftw_codelet_n2fv_32_sse2 +fftw_codelet_n2fv_4_avx +fftw_codelet_n2fv_4_sse2 +fftw_codelet_n2fv_64_avx +fftw_codelet_n2fv_64_sse2 +fftw_codelet_n2fv_6_avx +fftw_codelet_n2fv_6_sse2 +fftw_codelet_n2fv_8_avx +fftw_codelet_n2fv_8_sse2 +fftw_codelet_n2sv_16_avx +fftw_codelet_n2sv_16_sse2 +fftw_codelet_n2sv_32_avx +fftw_codelet_n2sv_32_sse2 +fftw_codelet_n2sv_4_avx +fftw_codelet_n2sv_4_sse2 +fftw_codelet_n2sv_64_avx +fftw_codelet_n2sv_64_sse2 +fftw_codelet_n2sv_8_avx +fftw_codelet_n2sv_8_sse2 +fftw_codelet_q1_2 +fftw_codelet_q1_3 +fftw_codelet_q1_4 +fftw_codelet_q1_5 +fftw_codelet_q1_6 +fftw_codelet_q1_8 +fftw_codelet_q1bv_2_avx +fftw_codelet_q1bv_2_sse2 +fftw_codelet_q1bv_4_avx +fftw_codelet_q1bv_4_sse2 +fftw_codelet_q1bv_5_avx +fftw_codelet_q1bv_5_sse2 +fftw_codelet_q1bv_8_avx +fftw_codelet_q1bv_8_sse2 +fftw_codelet_q1fv_2_avx +fftw_codelet_q1fv_2_sse2 +fftw_codelet_q1fv_4_avx +fftw_codelet_q1fv_4_sse2 +fftw_codelet_q1fv_5_avx +fftw_codelet_q1fv_5_sse2 +fftw_codelet_q1fv_8_avx +fftw_codelet_q1fv_8_sse2 +fftw_codelet_r2cb_10 +fftw_codelet_r2cb_11 +fftw_codelet_r2cb_12 +fftw_codelet_r2cb_128 +fftw_codelet_r2cb_13 +fftw_codelet_r2cb_14 +fftw_codelet_r2cb_15 +fftw_codelet_r2cb_16 +fftw_codelet_r2cb_2 +fftw_codelet_r2cb_20 +fftw_codelet_r2cb_25 +fftw_codelet_r2cb_3 +fftw_codelet_r2cb_32 +fftw_codelet_r2cb_4 +fftw_codelet_r2cb_5 +fftw_codelet_r2cb_6 +fftw_codelet_r2cb_64 +fftw_codelet_r2cb_7 +fftw_codelet_r2cb_8 +fftw_codelet_r2cb_9 +fftw_codelet_r2cbIII_10 +fftw_codelet_r2cbIII_12 +fftw_codelet_r2cbIII_15 +fftw_codelet_r2cbIII_16 +fftw_codelet_r2cbIII_2 +fftw_codelet_r2cbIII_20 +fftw_codelet_r2cbIII_25 +fftw_codelet_r2cbIII_3 +fftw_codelet_r2cbIII_32 +fftw_codelet_r2cbIII_4 +fftw_codelet_r2cbIII_5 +fftw_codelet_r2cbIII_6 +fftw_codelet_r2cbIII_64 +fftw_codelet_r2cbIII_7 +fftw_codelet_r2cbIII_8 +fftw_codelet_r2cbIII_9 +fftw_codelet_r2cf_10 +fftw_codelet_r2cf_11 +fftw_codelet_r2cf_12 +fftw_codelet_r2cf_128 +fftw_codelet_r2cf_13 +fftw_codelet_r2cf_14 +fftw_codelet_r2cf_15 +fftw_codelet_r2cf_16 +fftw_codelet_r2cf_2 +fftw_codelet_r2cf_20 +fftw_codelet_r2cf_25 +fftw_codelet_r2cf_3 +fftw_codelet_r2cf_32 +fftw_codelet_r2cf_4 +fftw_codelet_r2cf_5 +fftw_codelet_r2cf_6 +fftw_codelet_r2cf_64 +fftw_codelet_r2cf_7 +fftw_codelet_r2cf_8 +fftw_codelet_r2cf_9 +fftw_codelet_r2cfII_10 +fftw_codelet_r2cfII_12 +fftw_codelet_r2cfII_15 +fftw_codelet_r2cfII_16 +fftw_codelet_r2cfII_2 +fftw_codelet_r2cfII_20 +fftw_codelet_r2cfII_25 +fftw_codelet_r2cfII_3 +fftw_codelet_r2cfII_32 +fftw_codelet_r2cfII_4 +fftw_codelet_r2cfII_5 +fftw_codelet_r2cfII_6 +fftw_codelet_r2cfII_64 +fftw_codelet_r2cfII_7 +fftw_codelet_r2cfII_8 +fftw_codelet_r2cfII_9 +fftw_codelet_t1_10 +fftw_codelet_t1_12 +fftw_codelet_t1_15 +fftw_codelet_t1_16 +fftw_codelet_t1_2 +fftw_codelet_t1_20 +fftw_codelet_t1_25 +fftw_codelet_t1_3 +fftw_codelet_t1_32 +fftw_codelet_t1_4 +fftw_codelet_t1_5 +fftw_codelet_t1_6 +fftw_codelet_t1_64 +fftw_codelet_t1_7 +fftw_codelet_t1_8 +fftw_codelet_t1_9 +fftw_codelet_t1buv_10_avx +fftw_codelet_t1buv_10_sse2 +fftw_codelet_t1buv_2_avx +fftw_codelet_t1buv_2_sse2 +fftw_codelet_t1buv_3_avx +fftw_codelet_t1buv_3_sse2 +fftw_codelet_t1buv_4_avx +fftw_codelet_t1buv_4_sse2 +fftw_codelet_t1buv_5_avx +fftw_codelet_t1buv_5_sse2 +fftw_codelet_t1buv_6_avx +fftw_codelet_t1buv_6_sse2 +fftw_codelet_t1buv_7_avx +fftw_codelet_t1buv_7_sse2 +fftw_codelet_t1buv_8_avx +fftw_codelet_t1buv_8_sse2 +fftw_codelet_t1buv_9_avx +fftw_codelet_t1buv_9_sse2 +fftw_codelet_t1bv_10_avx +fftw_codelet_t1bv_10_sse2 +fftw_codelet_t1bv_12_avx +fftw_codelet_t1bv_12_sse2 +fftw_codelet_t1bv_15_avx +fftw_codelet_t1bv_15_sse2 +fftw_codelet_t1bv_16_avx +fftw_codelet_t1bv_16_sse2 +fftw_codelet_t1bv_20_avx +fftw_codelet_t1bv_20_sse2 +fftw_codelet_t1bv_25_avx +fftw_codelet_t1bv_25_sse2 +fftw_codelet_t1bv_2_avx +fftw_codelet_t1bv_2_sse2 +fftw_codelet_t1bv_32_avx +fftw_codelet_t1bv_32_sse2 +fftw_codelet_t1bv_3_avx +fftw_codelet_t1bv_3_sse2 +fftw_codelet_t1bv_4_avx +fftw_codelet_t1bv_4_sse2 +fftw_codelet_t1bv_5_avx +fftw_codelet_t1bv_5_sse2 +fftw_codelet_t1bv_64_avx +fftw_codelet_t1bv_64_sse2 +fftw_codelet_t1bv_6_avx +fftw_codelet_t1bv_6_sse2 +fftw_codelet_t1bv_7_avx +fftw_codelet_t1bv_7_sse2 +fftw_codelet_t1bv_8_avx +fftw_codelet_t1bv_8_sse2 +fftw_codelet_t1bv_9_avx +fftw_codelet_t1bv_9_sse2 +fftw_codelet_t1fuv_10_avx +fftw_codelet_t1fuv_10_sse2 +fftw_codelet_t1fuv_2_avx +fftw_codelet_t1fuv_2_sse2 +fftw_codelet_t1fuv_3_avx +fftw_codelet_t1fuv_3_sse2 +fftw_codelet_t1fuv_4_avx +fftw_codelet_t1fuv_4_sse2 +fftw_codelet_t1fuv_5_avx +fftw_codelet_t1fuv_5_sse2 +fftw_codelet_t1fuv_6_avx +fftw_codelet_t1fuv_6_sse2 +fftw_codelet_t1fuv_7_avx +fftw_codelet_t1fuv_7_sse2 +fftw_codelet_t1fuv_8_avx +fftw_codelet_t1fuv_8_sse2 +fftw_codelet_t1fuv_9_avx +fftw_codelet_t1fuv_9_sse2 +fftw_codelet_t1fv_10_avx +fftw_codelet_t1fv_10_sse2 +fftw_codelet_t1fv_12_avx +fftw_codelet_t1fv_12_sse2 +fftw_codelet_t1fv_15_avx +fftw_codelet_t1fv_15_sse2 +fftw_codelet_t1fv_16_avx +fftw_codelet_t1fv_16_sse2 +fftw_codelet_t1fv_20_avx +fftw_codelet_t1fv_20_sse2 +fftw_codelet_t1fv_25_avx +fftw_codelet_t1fv_25_sse2 +fftw_codelet_t1fv_2_avx +fftw_codelet_t1fv_2_sse2 +fftw_codelet_t1fv_32_avx +fftw_codelet_t1fv_32_sse2 +fftw_codelet_t1fv_3_avx +fftw_codelet_t1fv_3_sse2 +fftw_codelet_t1fv_4_avx +fftw_codelet_t1fv_4_sse2 +fftw_codelet_t1fv_5_avx +fftw_codelet_t1fv_5_sse2 +fftw_codelet_t1fv_64_avx +fftw_codelet_t1fv_64_sse2 +fftw_codelet_t1fv_6_avx +fftw_codelet_t1fv_6_sse2 +fftw_codelet_t1fv_7_avx +fftw_codelet_t1fv_7_sse2 +fftw_codelet_t1fv_8_avx +fftw_codelet_t1fv_8_sse2 +fftw_codelet_t1fv_9_avx +fftw_codelet_t1fv_9_sse2 +fftw_codelet_t1sv_16_avx +fftw_codelet_t1sv_16_sse2 +fftw_codelet_t1sv_2_avx +fftw_codelet_t1sv_2_sse2 +fftw_codelet_t1sv_32_avx +fftw_codelet_t1sv_32_sse2 +fftw_codelet_t1sv_4_avx +fftw_codelet_t1sv_4_sse2 +fftw_codelet_t1sv_8_avx +fftw_codelet_t1sv_8_sse2 +fftw_codelet_t2_10 +fftw_codelet_t2_16 +fftw_codelet_t2_20 +fftw_codelet_t2_25 +fftw_codelet_t2_32 +fftw_codelet_t2_4 +fftw_codelet_t2_5 +fftw_codelet_t2_64 +fftw_codelet_t2_8 +fftw_codelet_t2bv_10_avx +fftw_codelet_t2bv_10_sse2 +fftw_codelet_t2bv_16_avx +fftw_codelet_t2bv_16_sse2 +fftw_codelet_t2bv_20_avx +fftw_codelet_t2bv_20_sse2 +fftw_codelet_t2bv_25_avx +fftw_codelet_t2bv_25_sse2 +fftw_codelet_t2bv_2_avx +fftw_codelet_t2bv_2_sse2 +fftw_codelet_t2bv_32_avx +fftw_codelet_t2bv_32_sse2 +fftw_codelet_t2bv_4_avx +fftw_codelet_t2bv_4_sse2 +fftw_codelet_t2bv_5_avx +fftw_codelet_t2bv_5_sse2 +fftw_codelet_t2bv_64_avx +fftw_codelet_t2bv_64_sse2 +fftw_codelet_t2bv_8_avx +fftw_codelet_t2bv_8_sse2 +fftw_codelet_t2fv_10_avx +fftw_codelet_t2fv_10_sse2 +fftw_codelet_t2fv_16_avx +fftw_codelet_t2fv_16_sse2 +fftw_codelet_t2fv_20_avx +fftw_codelet_t2fv_20_sse2 +fftw_codelet_t2fv_25_avx +fftw_codelet_t2fv_25_sse2 +fftw_codelet_t2fv_2_avx +fftw_codelet_t2fv_2_sse2 +fftw_codelet_t2fv_32_avx +fftw_codelet_t2fv_32_sse2 +fftw_codelet_t2fv_4_avx +fftw_codelet_t2fv_4_sse2 +fftw_codelet_t2fv_5_avx +fftw_codelet_t2fv_5_sse2 +fftw_codelet_t2fv_64_avx +fftw_codelet_t2fv_64_sse2 +fftw_codelet_t2fv_8_avx +fftw_codelet_t2fv_8_sse2 +fftw_codelet_t2sv_16_avx +fftw_codelet_t2sv_16_sse2 +fftw_codelet_t2sv_32_avx +fftw_codelet_t2sv_32_sse2 +fftw_codelet_t2sv_4_avx +fftw_codelet_t2sv_4_sse2 +fftw_codelet_t2sv_8_avx +fftw_codelet_t2sv_8_sse2 +fftw_codelet_t3bv_10_avx +fftw_codelet_t3bv_10_sse2 +fftw_codelet_t3bv_16_avx +fftw_codelet_t3bv_16_sse2 +fftw_codelet_t3bv_20_avx +fftw_codelet_t3bv_20_sse2 +fftw_codelet_t3bv_25_avx +fftw_codelet_t3bv_25_sse2 +fftw_codelet_t3bv_32_avx +fftw_codelet_t3bv_32_sse2 +fftw_codelet_t3bv_4_avx +fftw_codelet_t3bv_4_sse2 +fftw_codelet_t3bv_5_avx +fftw_codelet_t3bv_5_sse2 +fftw_codelet_t3bv_8_avx +fftw_codelet_t3bv_8_sse2 +fftw_codelet_t3fv_10_avx +fftw_codelet_t3fv_10_sse2 +fftw_codelet_t3fv_16_avx +fftw_codelet_t3fv_16_sse2 +fftw_codelet_t3fv_20_avx +fftw_codelet_t3fv_20_sse2 +fftw_codelet_t3fv_25_avx +fftw_codelet_t3fv_25_sse2 +fftw_codelet_t3fv_32_avx +fftw_codelet_t3fv_32_sse2 +fftw_codelet_t3fv_4_avx +fftw_codelet_t3fv_4_sse2 +fftw_codelet_t3fv_5_avx +fftw_codelet_t3fv_5_sse2 +fftw_codelet_t3fv_8_avx +fftw_codelet_t3fv_8_sse2 +fftw_compute_tilesz +fftw_configure_planner +fftw_cost +fftw_cpy1d +fftw_cpy2d +fftw_cpy2d_ci +fftw_cpy2d_co +fftw_cpy2d_pair +fftw_cpy2d_pair_ci +fftw_cpy2d_pair_co +fftw_cpy2d_tiled +fftw_cpy2d_tiledbuf +fftw_ct_applicable +fftw_ct_genericbuf_register +fftw_ct_generic_register +fftw_ct_uglyp +fftw_destroy_plan +fftw_dft_bluestein_register +fftw_dft_buffered_register +fftw_dft_conf_standard +fftw_dft_generic_register +fftw_dft_indirect_register +fftw_dft_indirect_transpose_register +fftw_dft_nop_register +fftw_dft_r2hc_register +fftw_dft_rader_register +fftw_dft_rank_geq2_register +fftw_dft_solve +fftw_dft_thr_vrank_geq1_register +fftw_dft_vrank_geq1_register +fftw_dft_zerotens +fftw_dht_r2hc_register +fftw_dht_rader_register +fftw_dimcmp +fftw_elapsed_since +fftw_estimate_cost +fftw_execute +fftw_execute_dft +fftw_execute_dft_c2r +fftw_execute_dft_r2c +fftw_execute_r2r +fftw_execute_split_dft +fftw_execute_split_dft_c2r +fftw_execute_split_dft_r2c +fftw_export_wisdom +fftw_export_wisdom_to_file +fftw_export_wisdom_to_filename +fftw_export_wisdom_to_string +fftw_extract_reim +fftw_factors_into +fftw_factors_into_small_primes +fftw_find_generator +fftw_first_divisor +fftw_flops +fftw_forget_wisdom +fftw_fprint_plan +fftw_free +fftw_get_crude_time +fftw_guru64_kosherp +fftw_guru_kosherp +fftw_hash +fftw_have_simd_avx +fftw_have_simd_sse2 +fftw_hc2hc_applicable +fftw_hc2hc_generic_register +fftw_iabs +fftw_ialignment_of +fftw_iestimate_cost +fftw_ifree +fftw_ifree0 +fftw_imax +fftw_imin +fftw_import_system_wisdom +fftw_import_wisdom +fftw_import_wisdom_from_file +fftw_import_wisdom_from_filename +fftw_import_wisdom_from_string +fftw_init_threads +fftw_is_prime +fftw_isqrt +fftw_ithreads_init +fftw_join_taint +fftw_kdft_dif_register +fftw_kdft_difsq_register +fftw_kdft_dit_register +fftw_kdft_register +fftw_kernel_free +fftw_kernel_malloc +fftw_khc2c_register +fftw_khc2hc_register +fftw_kr2c_register +fftw_kr2r_register +fftw_make_planner_thread_safe +fftw_malloc +fftw_malloc_plain +fftw_many_kosherp +fftw_mapflags +fftw_map_r2r_kind +fftw_md5begin +fftw_md5end +fftw_md5int +fftw_md5INT +fftw_md5putb +fftw_md5putc +fftw_md5puts +fftw_md5unsigned +fftw_measure_execution_time +fftw_mkapiplan +fftw_mkplan +fftw_mkplan_d +fftw_mkplan_dft +fftw_mkplan_dftw +fftw_mkplan_f_d +fftw_mkplan_hc2c +fftw_mkplan_hc2hc +fftw_mkplanner +fftw_mkplan_rdft +fftw_mkplan_rdft2 +fftw_mkprinter +fftw_mkprinter_cnt +fftw_mkprinter_file +fftw_mkprinter_str +fftw_mkproblem +fftw_mkproblem_dft +fftw_mkproblem_dft_d +fftw_mkproblem_rdft +fftw_mkproblem_rdft_0_d +fftw_mkproblem_rdft_1 +fftw_mkproblem_rdft_1_d +fftw_mkproblem_rdft2 +fftw_mkproblem_rdft2_d +fftw_mkproblem_rdft2_d_3pointers +fftw_mkproblem_rdft_d +fftw_mkproblem_unsolvable +fftw_mkscanner +fftw_mksolver +fftw_mksolver_ct +fftw_mksolver_ct_threads +fftw_mksolver_dft_direct +fftw_mksolver_dft_directbuf +fftw_mksolver_hc2c +fftw_mksolver_hc2hc +fftw_mksolver_hc2hc_threads +fftw_mksolver_rdft2_direct +fftw_mksolver_rdft_r2c_direct +fftw_mksolver_rdft_r2c_directbuf +fftw_mksolver_rdft_r2r_direct +fftw_mkstride +fftw_mktensor +fftw_mktensor_0d +fftw_mktensor_1d +fftw_mktensor_2d +fftw_mktensor_3d +fftw_mktensor_4d +fftw_mktensor_5d +fftw_mktensor_iodims +fftw_mktensor_iodims64 +fftw_mktensor_rowmajor +fftw_mktriggen +fftw_modulo +fftw_nbuf +fftw_nbuf_redundant +fftw_next_prime +fftw_null_awake +fftw_ops_add +fftw_ops_add2 +fftw_ops_cpy +fftw_ops_madd +fftw_ops_madd2 +fftw_ops_other +fftw_ops_zero +fftw_pickdim +fftw_plan_awake +fftw_plan_destroy_internal +fftw_plan_dft +fftw_plan_dft_1d +fftw_plan_dft_2d +fftw_plan_dft_3d +fftw_plan_dft_c2r +fftw_plan_dft_c2r_1d +fftw_plan_dft_c2r_2d +fftw_plan_dft_c2r_3d +fftw_plan_dft_r2c +fftw_plan_dft_r2c_1d +fftw_plan_dft_r2c_2d +fftw_plan_dft_r2c_3d +fftw_plan_guru64_dft +fftw_plan_guru64_dft_c2r +fftw_plan_guru64_dft_r2c +fftw_plan_guru64_r2r +fftw_plan_guru64_split_dft +fftw_plan_guru64_split_dft_c2r +fftw_plan_guru64_split_dft_r2c +fftw_plan_guru_dft +fftw_plan_guru_dft_c2r +fftw_plan_guru_dft_r2c +fftw_plan_guru_r2r +fftw_plan_guru_split_dft +fftw_plan_guru_split_dft_c2r +fftw_plan_guru_split_dft_r2c +fftw_plan_many_dft +fftw_plan_many_dft_c2r +fftw_plan_many_dft_r2c +fftw_plan_many_r2r +fftw_planner_destroy +fftw_plan_null_destroy +fftw_plan_r2r +fftw_plan_r2r_1d +fftw_plan_r2r_2d +fftw_plan_r2r_3d +fftw_plan_with_nthreads +fftw_power_mod +fftw_printer_destroy +fftw_print_plan +fftw_problem_destroy +fftw_rader_tl_delete +fftw_rader_tl_find +fftw_rader_tl_insert +fftw_rdft2_buffered_register +fftw_rdft2_complex_n +fftw_rdft2_inplace_strides +fftw_rdft2_nop_register +fftw_rdft2_pad +fftw_rdft2_rank0_register +fftw_rdft2_rank_geq2_register +fftw_rdft2_rdft_register +fftw_rdft2_solve +fftw_rdft2_strides +fftw_rdft2_tensor_max_index +fftw_rdft2_thr_vrank_geq1_register +fftw_rdft2_vrank_geq1_register +fftw_rdft_buffered_register +fftw_rdft_conf_standard +fftw_rdft_dht_register +fftw_rdft_generic_register +fftw_rdft_indirect_register +fftw_rdft_kind_str +fftw_rdft_nop_register +fftw_rdft_rank0_register +fftw_rdft_rank_geq2_register +fftw_rdft_solve +fftw_rdft_thr_vrank_geq1_register +fftw_rdft_vrank3_transpose_register +fftw_rdft_vrank_geq1_register +fftw_rdft_zerotens +fftw_redft00e_r2hc_pad_register +fftw_regsolver_ct_directw +fftw_regsolver_ct_directwsq +fftw_regsolver_hc2c_direct +fftw_regsolver_hc2hc_direct +fftw_reodft00e_splitradix_register +fftw_reodft010e_r2hc_register +fftw_reodft11e_r2hc_odd_register +fftw_reodft11e_radix2_r2hc_register +fftw_reodft_conf_standard +fftw_rodft00e_r2hc_pad_register +fftw_safe_mulmod +fftw_scanner_destroy +fftw_set_planner_hooks +fftw_set_timelimit +fftw_solver_destroy +fftw_solver_register +fftw_solver_use +fftw_solvtab_exec +fftw_spawn_loop +fftw_sprint_plan +fftw_stride_destroy +fftw_taint +fftw_tensor_append +fftw_tensor_compress +fftw_tensor_compress_contiguous +fftw_tensor_copy +fftw_tensor_copy_except +fftw_tensor_copy_inplace +fftw_tensor_copy_sub +fftw_tensor_destroy +fftw_tensor_destroy2 +fftw_tensor_destroy4 +fftw_tensor_equal +fftw_tensor_inplace_locations +fftw_tensor_inplace_strides +fftw_tensor_inplace_strides2 +fftw_tensor_kosherp +fftw_tensor_max_index +fftw_tensor_md5 +fftw_tensor_min_istride +fftw_tensor_min_ostride +fftw_tensor_min_stride +fftw_tensor_print +fftw_tensor_split +fftw_tensor_strides_decrease +fftw_tensor_sz +fftw_tensor_tornk1 +fftw_the_planner +fftw_threads_cleanup +fftw_threads_conf_standard +fftw_threads_register_planner_hooks +fftw_tile2d +fftw_toobig +fftw_transpose +fftw_transpose_tiled +fftw_transpose_tiledbuf +fftw_triggen_destroy +fftw_twiddle_awake +fftw_twiddle_length +fftw_zero1d_pair diff --git a/funasr/runtime/onnxruntime/win/lib/x64/libfftw3-3.exp b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3-3.exp new file mode 100644 index 000000000..9ab00ba19 Binary files /dev/null and b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3-3.exp differ diff --git a/funasr/runtime/onnxruntime/win/lib/x64/libfftw3-3.lib b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3-3.lib new file mode 100644 index 000000000..48c4af947 Binary files /dev/null and b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3-3.lib differ diff --git a/funasr/runtime/onnxruntime/win/lib/x64/libfftw3f-3.def b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3f-3.def new file mode 100644 index 000000000..d61a2c36c --- /dev/null +++ b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3f-3.def @@ -0,0 +1,1017 @@ +LIBRARY libfftw3f-3.dll +EXPORTS +fftwf_alignment_of +fftwf_alloc_complex +fftwf_alloc_real +fftwf_assertion_failed +fftwf_bufdist +fftwf_check_alignment_of_sse2_pm +fftwf_choose_radix +fftwf_cleanup +fftwf_cleanup_threads +fftwf_codelet_e01_8 +fftwf_codelet_e10_8 +fftwf_codelet_hb_10 +fftwf_codelet_hb_12 +fftwf_codelet_hb_15 +fftwf_codelet_hb_16 +fftwf_codelet_hb_2 +fftwf_codelet_hb_20 +fftwf_codelet_hb2_16 +fftwf_codelet_hb2_20 +fftwf_codelet_hb2_25 +fftwf_codelet_hb2_32 +fftwf_codelet_hb2_4 +fftwf_codelet_hb_25 +fftwf_codelet_hb2_5 +fftwf_codelet_hb2_8 +fftwf_codelet_hb_3 +fftwf_codelet_hb_32 +fftwf_codelet_hb_4 +fftwf_codelet_hb_5 +fftwf_codelet_hb_6 +fftwf_codelet_hb_64 +fftwf_codelet_hb_7 +fftwf_codelet_hb_8 +fftwf_codelet_hb_9 +fftwf_codelet_hc2cb_10 +fftwf_codelet_hc2cb_12 +fftwf_codelet_hc2cb_16 +fftwf_codelet_hc2cb_2 +fftwf_codelet_hc2cb_20 +fftwf_codelet_hc2cb2_16 +fftwf_codelet_hc2cb2_20 +fftwf_codelet_hc2cb2_32 +fftwf_codelet_hc2cb2_4 +fftwf_codelet_hc2cb2_8 +fftwf_codelet_hc2cb_32 +fftwf_codelet_hc2cb_4 +fftwf_codelet_hc2cb_6 +fftwf_codelet_hc2cb_8 +fftwf_codelet_hc2cbdft_10 +fftwf_codelet_hc2cbdft_12 +fftwf_codelet_hc2cbdft_16 +fftwf_codelet_hc2cbdft_2 +fftwf_codelet_hc2cbdft_20 +fftwf_codelet_hc2cbdft2_16 +fftwf_codelet_hc2cbdft2_20 +fftwf_codelet_hc2cbdft2_32 +fftwf_codelet_hc2cbdft2_4 +fftwf_codelet_hc2cbdft2_8 +fftwf_codelet_hc2cbdft_32 +fftwf_codelet_hc2cbdft_4 +fftwf_codelet_hc2cbdft_6 +fftwf_codelet_hc2cbdft_8 +fftwf_codelet_hc2cbdftv_10_avx +fftwf_codelet_hc2cbdftv_10_sse2 +fftwf_codelet_hc2cbdftv_12_avx +fftwf_codelet_hc2cbdftv_12_sse2 +fftwf_codelet_hc2cbdftv_16_avx +fftwf_codelet_hc2cbdftv_16_sse2 +fftwf_codelet_hc2cbdftv_20_avx +fftwf_codelet_hc2cbdftv_20_sse2 +fftwf_codelet_hc2cbdftv_2_avx +fftwf_codelet_hc2cbdftv_2_sse2 +fftwf_codelet_hc2cbdftv_32_avx +fftwf_codelet_hc2cbdftv_32_sse2 +fftwf_codelet_hc2cbdftv_4_avx +fftwf_codelet_hc2cbdftv_4_sse2 +fftwf_codelet_hc2cbdftv_6_avx +fftwf_codelet_hc2cbdftv_6_sse2 +fftwf_codelet_hc2cbdftv_8_avx +fftwf_codelet_hc2cbdftv_8_sse2 +fftwf_codelet_hc2cf_10 +fftwf_codelet_hc2cf_12 +fftwf_codelet_hc2cf_16 +fftwf_codelet_hc2cf_2 +fftwf_codelet_hc2cf_20 +fftwf_codelet_hc2cf2_16 +fftwf_codelet_hc2cf2_20 +fftwf_codelet_hc2cf2_32 +fftwf_codelet_hc2cf2_4 +fftwf_codelet_hc2cf2_8 +fftwf_codelet_hc2cf_32 +fftwf_codelet_hc2cf_4 +fftwf_codelet_hc2cf_6 +fftwf_codelet_hc2cf_8 +fftwf_codelet_hc2cfdft_10 +fftwf_codelet_hc2cfdft_12 +fftwf_codelet_hc2cfdft_16 +fftwf_codelet_hc2cfdft_2 +fftwf_codelet_hc2cfdft_20 +fftwf_codelet_hc2cfdft2_16 +fftwf_codelet_hc2cfdft2_20 +fftwf_codelet_hc2cfdft2_32 +fftwf_codelet_hc2cfdft2_4 +fftwf_codelet_hc2cfdft2_8 +fftwf_codelet_hc2cfdft_32 +fftwf_codelet_hc2cfdft_4 +fftwf_codelet_hc2cfdft_6 +fftwf_codelet_hc2cfdft_8 +fftwf_codelet_hc2cfdftv_10_avx +fftwf_codelet_hc2cfdftv_10_sse2 +fftwf_codelet_hc2cfdftv_12_avx +fftwf_codelet_hc2cfdftv_12_sse2 +fftwf_codelet_hc2cfdftv_16_avx +fftwf_codelet_hc2cfdftv_16_sse2 +fftwf_codelet_hc2cfdftv_20_avx +fftwf_codelet_hc2cfdftv_20_sse2 +fftwf_codelet_hc2cfdftv_2_avx +fftwf_codelet_hc2cfdftv_2_sse2 +fftwf_codelet_hc2cfdftv_32_avx +fftwf_codelet_hc2cfdftv_32_sse2 +fftwf_codelet_hc2cfdftv_4_avx +fftwf_codelet_hc2cfdftv_4_sse2 +fftwf_codelet_hc2cfdftv_6_avx +fftwf_codelet_hc2cfdftv_6_sse2 +fftwf_codelet_hc2cfdftv_8_avx +fftwf_codelet_hc2cfdftv_8_sse2 +fftwf_codelet_hf_10 +fftwf_codelet_hf_12 +fftwf_codelet_hf_15 +fftwf_codelet_hf_16 +fftwf_codelet_hf_2 +fftwf_codelet_hf_20 +fftwf_codelet_hf2_16 +fftwf_codelet_hf2_20 +fftwf_codelet_hf2_25 +fftwf_codelet_hf2_32 +fftwf_codelet_hf2_4 +fftwf_codelet_hf_25 +fftwf_codelet_hf2_5 +fftwf_codelet_hf2_8 +fftwf_codelet_hf_3 +fftwf_codelet_hf_32 +fftwf_codelet_hf_4 +fftwf_codelet_hf_5 +fftwf_codelet_hf_6 +fftwf_codelet_hf_64 +fftwf_codelet_hf_7 +fftwf_codelet_hf_8 +fftwf_codelet_hf_9 +fftwf_codelet_n1_10 +fftwf_codelet_n1_11 +fftwf_codelet_n1_12 +fftwf_codelet_n1_13 +fftwf_codelet_n1_14 +fftwf_codelet_n1_15 +fftwf_codelet_n1_16 +fftwf_codelet_n1_2 +fftwf_codelet_n1_20 +fftwf_codelet_n1_25 +fftwf_codelet_n1_3 +fftwf_codelet_n1_32 +fftwf_codelet_n1_4 +fftwf_codelet_n1_5 +fftwf_codelet_n1_6 +fftwf_codelet_n1_64 +fftwf_codelet_n1_7 +fftwf_codelet_n1_8 +fftwf_codelet_n1_9 +fftwf_codelet_n1bv_10_avx +fftwf_codelet_n1bv_10_sse2 +fftwf_codelet_n1bv_11_avx +fftwf_codelet_n1bv_11_sse2 +fftwf_codelet_n1bv_128_avx +fftwf_codelet_n1bv_128_sse2 +fftwf_codelet_n1bv_12_avx +fftwf_codelet_n1bv_12_sse2 +fftwf_codelet_n1bv_13_avx +fftwf_codelet_n1bv_13_sse2 +fftwf_codelet_n1bv_14_avx +fftwf_codelet_n1bv_14_sse2 +fftwf_codelet_n1bv_15_avx +fftwf_codelet_n1bv_15_sse2 +fftwf_codelet_n1bv_16_avx +fftwf_codelet_n1bv_16_sse2 +fftwf_codelet_n1bv_20_avx +fftwf_codelet_n1bv_20_sse2 +fftwf_codelet_n1bv_25_avx +fftwf_codelet_n1bv_25_sse2 +fftwf_codelet_n1bv_2_avx +fftwf_codelet_n1bv_2_sse2 +fftwf_codelet_n1bv_32_avx +fftwf_codelet_n1bv_32_sse2 +fftwf_codelet_n1bv_3_avx +fftwf_codelet_n1bv_3_sse2 +fftwf_codelet_n1bv_4_avx +fftwf_codelet_n1bv_4_sse2 +fftwf_codelet_n1bv_5_avx +fftwf_codelet_n1bv_5_sse2 +fftwf_codelet_n1bv_64_avx +fftwf_codelet_n1bv_64_sse2 +fftwf_codelet_n1bv_6_avx +fftwf_codelet_n1bv_6_sse2 +fftwf_codelet_n1bv_7_avx +fftwf_codelet_n1bv_7_sse2 +fftwf_codelet_n1bv_8_avx +fftwf_codelet_n1bv_8_sse2 +fftwf_codelet_n1bv_9_avx +fftwf_codelet_n1bv_9_sse2 +fftwf_codelet_n1fv_10_avx +fftwf_codelet_n1fv_10_sse2 +fftwf_codelet_n1fv_11_avx +fftwf_codelet_n1fv_11_sse2 +fftwf_codelet_n1fv_128_avx +fftwf_codelet_n1fv_128_sse2 +fftwf_codelet_n1fv_12_avx +fftwf_codelet_n1fv_12_sse2 +fftwf_codelet_n1fv_13_avx +fftwf_codelet_n1fv_13_sse2 +fftwf_codelet_n1fv_14_avx +fftwf_codelet_n1fv_14_sse2 +fftwf_codelet_n1fv_15_avx +fftwf_codelet_n1fv_15_sse2 +fftwf_codelet_n1fv_16_avx +fftwf_codelet_n1fv_16_sse2 +fftwf_codelet_n1fv_20_avx +fftwf_codelet_n1fv_20_sse2 +fftwf_codelet_n1fv_25_avx +fftwf_codelet_n1fv_25_sse2 +fftwf_codelet_n1fv_2_avx +fftwf_codelet_n1fv_2_sse2 +fftwf_codelet_n1fv_32_avx +fftwf_codelet_n1fv_32_sse2 +fftwf_codelet_n1fv_3_avx +fftwf_codelet_n1fv_3_sse2 +fftwf_codelet_n1fv_4_avx +fftwf_codelet_n1fv_4_sse2 +fftwf_codelet_n1fv_5_avx +fftwf_codelet_n1fv_5_sse2 +fftwf_codelet_n1fv_64_avx +fftwf_codelet_n1fv_64_sse2 +fftwf_codelet_n1fv_6_avx +fftwf_codelet_n1fv_6_sse2 +fftwf_codelet_n1fv_7_avx +fftwf_codelet_n1fv_7_sse2 +fftwf_codelet_n1fv_8_avx +fftwf_codelet_n1fv_8_sse2 +fftwf_codelet_n1fv_9_avx +fftwf_codelet_n1fv_9_sse2 +fftwf_codelet_n2bv_10_avx +fftwf_codelet_n2bv_10_sse2 +fftwf_codelet_n2bv_12_avx +fftwf_codelet_n2bv_12_sse2 +fftwf_codelet_n2bv_14_avx +fftwf_codelet_n2bv_14_sse2 +fftwf_codelet_n2bv_16_avx +fftwf_codelet_n2bv_16_sse2 +fftwf_codelet_n2bv_20_avx +fftwf_codelet_n2bv_20_sse2 +fftwf_codelet_n2bv_2_avx +fftwf_codelet_n2bv_2_sse2 +fftwf_codelet_n2bv_32_avx +fftwf_codelet_n2bv_32_sse2 +fftwf_codelet_n2bv_4_avx +fftwf_codelet_n2bv_4_sse2 +fftwf_codelet_n2bv_64_avx +fftwf_codelet_n2bv_64_sse2 +fftwf_codelet_n2bv_6_avx +fftwf_codelet_n2bv_6_sse2 +fftwf_codelet_n2bv_8_avx +fftwf_codelet_n2bv_8_sse2 +fftwf_codelet_n2fv_10_avx +fftwf_codelet_n2fv_10_sse2 +fftwf_codelet_n2fv_12_avx +fftwf_codelet_n2fv_12_sse2 +fftwf_codelet_n2fv_14_avx +fftwf_codelet_n2fv_14_sse2 +fftwf_codelet_n2fv_16_avx +fftwf_codelet_n2fv_16_sse2 +fftwf_codelet_n2fv_20_avx +fftwf_codelet_n2fv_20_sse2 +fftwf_codelet_n2fv_2_avx +fftwf_codelet_n2fv_2_sse2 +fftwf_codelet_n2fv_32_avx +fftwf_codelet_n2fv_32_sse2 +fftwf_codelet_n2fv_4_avx +fftwf_codelet_n2fv_4_sse2 +fftwf_codelet_n2fv_64_avx +fftwf_codelet_n2fv_64_sse2 +fftwf_codelet_n2fv_6_avx +fftwf_codelet_n2fv_6_sse2 +fftwf_codelet_n2fv_8_avx +fftwf_codelet_n2fv_8_sse2 +fftwf_codelet_n2sv_16_avx +fftwf_codelet_n2sv_16_sse2 +fftwf_codelet_n2sv_32_avx +fftwf_codelet_n2sv_32_sse2 +fftwf_codelet_n2sv_4_avx +fftwf_codelet_n2sv_4_sse2 +fftwf_codelet_n2sv_64_avx +fftwf_codelet_n2sv_64_sse2 +fftwf_codelet_n2sv_8_avx +fftwf_codelet_n2sv_8_sse2 +fftwf_codelet_q1_2 +fftwf_codelet_q1_3 +fftwf_codelet_q1_4 +fftwf_codelet_q1_5 +fftwf_codelet_q1_6 +fftwf_codelet_q1_8 +fftwf_codelet_q1bv_2_avx +fftwf_codelet_q1bv_2_sse2 +fftwf_codelet_q1bv_4_avx +fftwf_codelet_q1bv_4_sse2 +fftwf_codelet_q1bv_5_avx +fftwf_codelet_q1bv_5_sse2 +fftwf_codelet_q1bv_8_avx +fftwf_codelet_q1bv_8_sse2 +fftwf_codelet_q1fv_2_avx +fftwf_codelet_q1fv_2_sse2 +fftwf_codelet_q1fv_4_avx +fftwf_codelet_q1fv_4_sse2 +fftwf_codelet_q1fv_5_avx +fftwf_codelet_q1fv_5_sse2 +fftwf_codelet_q1fv_8_avx +fftwf_codelet_q1fv_8_sse2 +fftwf_codelet_r2cb_10 +fftwf_codelet_r2cb_11 +fftwf_codelet_r2cb_12 +fftwf_codelet_r2cb_128 +fftwf_codelet_r2cb_13 +fftwf_codelet_r2cb_14 +fftwf_codelet_r2cb_15 +fftwf_codelet_r2cb_16 +fftwf_codelet_r2cb_2 +fftwf_codelet_r2cb_20 +fftwf_codelet_r2cb_25 +fftwf_codelet_r2cb_3 +fftwf_codelet_r2cb_32 +fftwf_codelet_r2cb_4 +fftwf_codelet_r2cb_5 +fftwf_codelet_r2cb_6 +fftwf_codelet_r2cb_64 +fftwf_codelet_r2cb_7 +fftwf_codelet_r2cb_8 +fftwf_codelet_r2cb_9 +fftwf_codelet_r2cbIII_10 +fftwf_codelet_r2cbIII_12 +fftwf_codelet_r2cbIII_15 +fftwf_codelet_r2cbIII_16 +fftwf_codelet_r2cbIII_2 +fftwf_codelet_r2cbIII_20 +fftwf_codelet_r2cbIII_25 +fftwf_codelet_r2cbIII_3 +fftwf_codelet_r2cbIII_32 +fftwf_codelet_r2cbIII_4 +fftwf_codelet_r2cbIII_5 +fftwf_codelet_r2cbIII_6 +fftwf_codelet_r2cbIII_64 +fftwf_codelet_r2cbIII_7 +fftwf_codelet_r2cbIII_8 +fftwf_codelet_r2cbIII_9 +fftwf_codelet_r2cf_10 +fftwf_codelet_r2cf_11 +fftwf_codelet_r2cf_12 +fftwf_codelet_r2cf_128 +fftwf_codelet_r2cf_13 +fftwf_codelet_r2cf_14 +fftwf_codelet_r2cf_15 +fftwf_codelet_r2cf_16 +fftwf_codelet_r2cf_2 +fftwf_codelet_r2cf_20 +fftwf_codelet_r2cf_25 +fftwf_codelet_r2cf_3 +fftwf_codelet_r2cf_32 +fftwf_codelet_r2cf_4 +fftwf_codelet_r2cf_5 +fftwf_codelet_r2cf_6 +fftwf_codelet_r2cf_64 +fftwf_codelet_r2cf_7 +fftwf_codelet_r2cf_8 +fftwf_codelet_r2cf_9 +fftwf_codelet_r2cfII_10 +fftwf_codelet_r2cfII_12 +fftwf_codelet_r2cfII_15 +fftwf_codelet_r2cfII_16 +fftwf_codelet_r2cfII_2 +fftwf_codelet_r2cfII_20 +fftwf_codelet_r2cfII_25 +fftwf_codelet_r2cfII_3 +fftwf_codelet_r2cfII_32 +fftwf_codelet_r2cfII_4 +fftwf_codelet_r2cfII_5 +fftwf_codelet_r2cfII_6 +fftwf_codelet_r2cfII_64 +fftwf_codelet_r2cfII_7 +fftwf_codelet_r2cfII_8 +fftwf_codelet_r2cfII_9 +fftwf_codelet_t1_10 +fftwf_codelet_t1_12 +fftwf_codelet_t1_15 +fftwf_codelet_t1_16 +fftwf_codelet_t1_2 +fftwf_codelet_t1_20 +fftwf_codelet_t1_25 +fftwf_codelet_t1_3 +fftwf_codelet_t1_32 +fftwf_codelet_t1_4 +fftwf_codelet_t1_5 +fftwf_codelet_t1_6 +fftwf_codelet_t1_64 +fftwf_codelet_t1_7 +fftwf_codelet_t1_8 +fftwf_codelet_t1_9 +fftwf_codelet_t1buv_10_avx +fftwf_codelet_t1buv_10_sse2 +fftwf_codelet_t1buv_2_avx +fftwf_codelet_t1buv_2_sse2 +fftwf_codelet_t1buv_3_avx +fftwf_codelet_t1buv_3_sse2 +fftwf_codelet_t1buv_4_avx +fftwf_codelet_t1buv_4_sse2 +fftwf_codelet_t1buv_5_avx +fftwf_codelet_t1buv_5_sse2 +fftwf_codelet_t1buv_6_avx +fftwf_codelet_t1buv_6_sse2 +fftwf_codelet_t1buv_7_avx +fftwf_codelet_t1buv_7_sse2 +fftwf_codelet_t1buv_8_avx +fftwf_codelet_t1buv_8_sse2 +fftwf_codelet_t1buv_9_avx +fftwf_codelet_t1buv_9_sse2 +fftwf_codelet_t1bv_10_avx +fftwf_codelet_t1bv_10_sse2 +fftwf_codelet_t1bv_12_avx +fftwf_codelet_t1bv_12_sse2 +fftwf_codelet_t1bv_15_avx +fftwf_codelet_t1bv_15_sse2 +fftwf_codelet_t1bv_16_avx +fftwf_codelet_t1bv_16_sse2 +fftwf_codelet_t1bv_20_avx +fftwf_codelet_t1bv_20_sse2 +fftwf_codelet_t1bv_25_avx +fftwf_codelet_t1bv_25_sse2 +fftwf_codelet_t1bv_2_avx +fftwf_codelet_t1bv_2_sse2 +fftwf_codelet_t1bv_32_avx +fftwf_codelet_t1bv_32_sse2 +fftwf_codelet_t1bv_3_avx +fftwf_codelet_t1bv_3_sse2 +fftwf_codelet_t1bv_4_avx +fftwf_codelet_t1bv_4_sse2 +fftwf_codelet_t1bv_5_avx +fftwf_codelet_t1bv_5_sse2 +fftwf_codelet_t1bv_64_avx +fftwf_codelet_t1bv_64_sse2 +fftwf_codelet_t1bv_6_avx +fftwf_codelet_t1bv_6_sse2 +fftwf_codelet_t1bv_7_avx +fftwf_codelet_t1bv_7_sse2 +fftwf_codelet_t1bv_8_avx +fftwf_codelet_t1bv_8_sse2 +fftwf_codelet_t1bv_9_avx +fftwf_codelet_t1bv_9_sse2 +fftwf_codelet_t1fuv_10_avx +fftwf_codelet_t1fuv_10_sse2 +fftwf_codelet_t1fuv_2_avx +fftwf_codelet_t1fuv_2_sse2 +fftwf_codelet_t1fuv_3_avx +fftwf_codelet_t1fuv_3_sse2 +fftwf_codelet_t1fuv_4_avx +fftwf_codelet_t1fuv_4_sse2 +fftwf_codelet_t1fuv_5_avx +fftwf_codelet_t1fuv_5_sse2 +fftwf_codelet_t1fuv_6_avx +fftwf_codelet_t1fuv_6_sse2 +fftwf_codelet_t1fuv_7_avx +fftwf_codelet_t1fuv_7_sse2 +fftwf_codelet_t1fuv_8_avx +fftwf_codelet_t1fuv_8_sse2 +fftwf_codelet_t1fuv_9_avx +fftwf_codelet_t1fuv_9_sse2 +fftwf_codelet_t1fv_10_avx +fftwf_codelet_t1fv_10_sse2 +fftwf_codelet_t1fv_12_avx +fftwf_codelet_t1fv_12_sse2 +fftwf_codelet_t1fv_15_avx +fftwf_codelet_t1fv_15_sse2 +fftwf_codelet_t1fv_16_avx +fftwf_codelet_t1fv_16_sse2 +fftwf_codelet_t1fv_20_avx +fftwf_codelet_t1fv_20_sse2 +fftwf_codelet_t1fv_25_avx +fftwf_codelet_t1fv_25_sse2 +fftwf_codelet_t1fv_2_avx +fftwf_codelet_t1fv_2_sse2 +fftwf_codelet_t1fv_32_avx +fftwf_codelet_t1fv_32_sse2 +fftwf_codelet_t1fv_3_avx +fftwf_codelet_t1fv_3_sse2 +fftwf_codelet_t1fv_4_avx +fftwf_codelet_t1fv_4_sse2 +fftwf_codelet_t1fv_5_avx +fftwf_codelet_t1fv_5_sse2 +fftwf_codelet_t1fv_64_avx +fftwf_codelet_t1fv_64_sse2 +fftwf_codelet_t1fv_6_avx +fftwf_codelet_t1fv_6_sse2 +fftwf_codelet_t1fv_7_avx +fftwf_codelet_t1fv_7_sse2 +fftwf_codelet_t1fv_8_avx +fftwf_codelet_t1fv_8_sse2 +fftwf_codelet_t1fv_9_avx +fftwf_codelet_t1fv_9_sse2 +fftwf_codelet_t1sv_16_avx +fftwf_codelet_t1sv_16_sse2 +fftwf_codelet_t1sv_2_avx +fftwf_codelet_t1sv_2_sse2 +fftwf_codelet_t1sv_32_avx +fftwf_codelet_t1sv_32_sse2 +fftwf_codelet_t1sv_4_avx +fftwf_codelet_t1sv_4_sse2 +fftwf_codelet_t1sv_8_avx +fftwf_codelet_t1sv_8_sse2 +fftwf_codelet_t2_10 +fftwf_codelet_t2_16 +fftwf_codelet_t2_20 +fftwf_codelet_t2_25 +fftwf_codelet_t2_32 +fftwf_codelet_t2_4 +fftwf_codelet_t2_5 +fftwf_codelet_t2_64 +fftwf_codelet_t2_8 +fftwf_codelet_t2bv_10_avx +fftwf_codelet_t2bv_10_sse2 +fftwf_codelet_t2bv_16_avx +fftwf_codelet_t2bv_16_sse2 +fftwf_codelet_t2bv_20_avx +fftwf_codelet_t2bv_20_sse2 +fftwf_codelet_t2bv_25_avx +fftwf_codelet_t2bv_25_sse2 +fftwf_codelet_t2bv_2_avx +fftwf_codelet_t2bv_2_sse2 +fftwf_codelet_t2bv_32_avx +fftwf_codelet_t2bv_32_sse2 +fftwf_codelet_t2bv_4_avx +fftwf_codelet_t2bv_4_sse2 +fftwf_codelet_t2bv_5_avx +fftwf_codelet_t2bv_5_sse2 +fftwf_codelet_t2bv_64_avx +fftwf_codelet_t2bv_64_sse2 +fftwf_codelet_t2bv_8_avx +fftwf_codelet_t2bv_8_sse2 +fftwf_codelet_t2fv_10_avx +fftwf_codelet_t2fv_10_sse2 +fftwf_codelet_t2fv_16_avx +fftwf_codelet_t2fv_16_sse2 +fftwf_codelet_t2fv_20_avx +fftwf_codelet_t2fv_20_sse2 +fftwf_codelet_t2fv_25_avx +fftwf_codelet_t2fv_25_sse2 +fftwf_codelet_t2fv_2_avx +fftwf_codelet_t2fv_2_sse2 +fftwf_codelet_t2fv_32_avx +fftwf_codelet_t2fv_32_sse2 +fftwf_codelet_t2fv_4_avx +fftwf_codelet_t2fv_4_sse2 +fftwf_codelet_t2fv_5_avx +fftwf_codelet_t2fv_5_sse2 +fftwf_codelet_t2fv_64_avx +fftwf_codelet_t2fv_64_sse2 +fftwf_codelet_t2fv_8_avx +fftwf_codelet_t2fv_8_sse2 +fftwf_codelet_t2sv_16_avx +fftwf_codelet_t2sv_16_sse2 +fftwf_codelet_t2sv_32_avx +fftwf_codelet_t2sv_32_sse2 +fftwf_codelet_t2sv_4_avx +fftwf_codelet_t2sv_4_sse2 +fftwf_codelet_t2sv_8_avx +fftwf_codelet_t2sv_8_sse2 +fftwf_codelet_t3bv_10_avx +fftwf_codelet_t3bv_10_sse2 +fftwf_codelet_t3bv_16_avx +fftwf_codelet_t3bv_16_sse2 +fftwf_codelet_t3bv_20_avx +fftwf_codelet_t3bv_20_sse2 +fftwf_codelet_t3bv_25_avx +fftwf_codelet_t3bv_25_sse2 +fftwf_codelet_t3bv_32_avx +fftwf_codelet_t3bv_32_sse2 +fftwf_codelet_t3bv_4_avx +fftwf_codelet_t3bv_4_sse2 +fftwf_codelet_t3bv_5_avx +fftwf_codelet_t3bv_5_sse2 +fftwf_codelet_t3bv_8_avx +fftwf_codelet_t3bv_8_sse2 +fftwf_codelet_t3fv_10_avx +fftwf_codelet_t3fv_10_sse2 +fftwf_codelet_t3fv_16_avx +fftwf_codelet_t3fv_16_sse2 +fftwf_codelet_t3fv_20_avx +fftwf_codelet_t3fv_20_sse2 +fftwf_codelet_t3fv_25_avx +fftwf_codelet_t3fv_25_sse2 +fftwf_codelet_t3fv_32_avx +fftwf_codelet_t3fv_32_sse2 +fftwf_codelet_t3fv_4_avx +fftwf_codelet_t3fv_4_sse2 +fftwf_codelet_t3fv_5_avx +fftwf_codelet_t3fv_5_sse2 +fftwf_codelet_t3fv_8_avx +fftwf_codelet_t3fv_8_sse2 +fftwf_compute_tilesz +fftwf_configure_planner +fftwf_cost +fftwf_cpy1d +fftwf_cpy2d +fftwf_cpy2d_ci +fftwf_cpy2d_co +fftwf_cpy2d_pair +fftwf_cpy2d_pair_ci +fftwf_cpy2d_pair_co +fftwf_cpy2d_tiled +fftwf_cpy2d_tiledbuf +fftwf_ct_applicable +fftwf_ct_genericbuf_register +fftwf_ct_generic_register +fftwf_ct_uglyp +fftwf_destroy_plan +fftwf_dft_bluestein_register +fftwf_dft_buffered_register +fftwf_dft_conf_standard +fftwf_dft_generic_register +fftwf_dft_indirect_register +fftwf_dft_indirect_transpose_register +fftwf_dft_nop_register +fftwf_dft_r2hc_register +fftwf_dft_rader_register +fftwf_dft_rank_geq2_register +fftwf_dft_solve +fftwf_dft_thr_vrank_geq1_register +fftwf_dft_vrank_geq1_register +fftwf_dft_zerotens +fftwf_dht_r2hc_register +fftwf_dht_rader_register +fftwf_dimcmp +fftwf_elapsed_since +fftwf_estimate_cost +fftwf_execute +fftwf_execute_dft +fftwf_execute_dft_c2r +fftwf_execute_dft_r2c +fftwf_execute_r2r +fftwf_execute_split_dft +fftwf_execute_split_dft_c2r +fftwf_execute_split_dft_r2c +fftwf_export_wisdom +fftwf_export_wisdom_to_file +fftwf_export_wisdom_to_filename +fftwf_export_wisdom_to_string +fftwf_extract_reim +fftwf_factors_into +fftwf_factors_into_small_primes +fftwf_find_generator +fftwf_first_divisor +fftwf_flops +fftwf_forget_wisdom +fftwf_fprint_plan +fftwf_free +fftwf_get_crude_time +fftwf_guru64_kosherp +fftwf_guru_kosherp +fftwf_hash +fftwf_have_simd_avx +fftwf_have_simd_sse2 +fftwf_hc2hc_applicable +fftwf_hc2hc_generic_register +fftwf_iabs +fftwf_ialignment_of +fftwf_iestimate_cost +fftwf_ifree +fftwf_ifree0 +fftwf_imax +fftwf_imin +fftwf_import_system_wisdom +fftwf_import_wisdom +fftwf_import_wisdom_from_file +fftwf_import_wisdom_from_filename +fftwf_import_wisdom_from_string +fftwf_init_threads +fftwf_is_prime +fftwf_isqrt +fftwf_ithreads_init +fftwf_join_taint +fftwf_kdft_dif_register +fftwf_kdft_difsq_register +fftwf_kdft_dit_register +fftwf_kdft_register +fftwf_kernel_free +fftwf_kernel_malloc +fftwf_khc2c_register +fftwf_khc2hc_register +fftwf_kr2c_register +fftwf_kr2r_register +fftwf_make_planner_thread_safe +fftwf_malloc +fftwf_malloc_plain +fftwf_many_kosherp +fftwf_mapflags +fftwf_map_r2r_kind +fftwf_md5begin +fftwf_md5end +fftwf_md5int +fftwf_md5INT +fftwf_md5putb +fftwf_md5putc +fftwf_md5puts +fftwf_md5unsigned +fftwf_measure_execution_time +fftwf_mkapiplan +fftwf_mkplan +fftwf_mkplan_d +fftwf_mkplan_dft +fftwf_mkplan_dftw +fftwf_mkplan_f_d +fftwf_mkplan_hc2c +fftwf_mkplan_hc2hc +fftwf_mkplanner +fftwf_mkplan_rdft +fftwf_mkplan_rdft2 +fftwf_mkprinter +fftwf_mkprinter_cnt +fftwf_mkprinter_file +fftwf_mkprinter_str +fftwf_mkproblem +fftwf_mkproblem_dft +fftwf_mkproblem_dft_d +fftwf_mkproblem_rdft +fftwf_mkproblem_rdft_0_d +fftwf_mkproblem_rdft_1 +fftwf_mkproblem_rdft_1_d +fftwf_mkproblem_rdft2 +fftwf_mkproblem_rdft2_d +fftwf_mkproblem_rdft2_d_3pointers +fftwf_mkproblem_rdft_d +fftwf_mkproblem_unsolvable +fftwf_mkscanner +fftwf_mksolver +fftwf_mksolver_ct +fftwf_mksolver_ct_threads +fftwf_mksolver_dft_direct +fftwf_mksolver_dft_directbuf +fftwf_mksolver_hc2c +fftwf_mksolver_hc2hc +fftwf_mksolver_hc2hc_threads +fftwf_mksolver_rdft2_direct +fftwf_mksolver_rdft_r2c_direct +fftwf_mksolver_rdft_r2c_directbuf +fftwf_mksolver_rdft_r2r_direct +fftwf_mkstride +fftwf_mktensor +fftwf_mktensor_0d +fftwf_mktensor_1d +fftwf_mktensor_2d +fftwf_mktensor_3d +fftwf_mktensor_4d +fftwf_mktensor_5d +fftwf_mktensor_iodims +fftwf_mktensor_iodims64 +fftwf_mktensor_rowmajor +fftwf_mktriggen +fftwf_modulo +fftwf_nbuf +fftwf_nbuf_redundant +fftwf_next_prime +fftwf_null_awake +fftwf_ops_add +fftwf_ops_add2 +fftwf_ops_cpy +fftwf_ops_madd +fftwf_ops_madd2 +fftwf_ops_other +fftwf_ops_zero +fftwf_pickdim +fftwf_plan_awake +fftwf_plan_destroy_internal +fftwf_plan_dft +fftwf_plan_dft_1d +fftwf_plan_dft_2d +fftwf_plan_dft_3d +fftwf_plan_dft_c2r +fftwf_plan_dft_c2r_1d +fftwf_plan_dft_c2r_2d +fftwf_plan_dft_c2r_3d +fftwf_plan_dft_r2c +fftwf_plan_dft_r2c_1d +fftwf_plan_dft_r2c_2d +fftwf_plan_dft_r2c_3d +fftwf_plan_guru64_dft +fftwf_plan_guru64_dft_c2r +fftwf_plan_guru64_dft_r2c +fftwf_plan_guru64_r2r +fftwf_plan_guru64_split_dft +fftwf_plan_guru64_split_dft_c2r +fftwf_plan_guru64_split_dft_r2c +fftwf_plan_guru_dft +fftwf_plan_guru_dft_c2r +fftwf_plan_guru_dft_r2c +fftwf_plan_guru_r2r +fftwf_plan_guru_split_dft +fftwf_plan_guru_split_dft_c2r +fftwf_plan_guru_split_dft_r2c +fftwf_plan_many_dft +fftwf_plan_many_dft_c2r +fftwf_plan_many_dft_r2c +fftwf_plan_many_r2r +fftwf_planner_destroy +fftwf_plan_null_destroy +fftwf_plan_r2r +fftwf_plan_r2r_1d +fftwf_plan_r2r_2d +fftwf_plan_r2r_3d +fftwf_plan_with_nthreads +fftwf_power_mod +fftwf_printer_destroy +fftwf_print_plan +fftwf_problem_destroy +fftwf_rader_tl_delete +fftwf_rader_tl_find +fftwf_rader_tl_insert +fftwf_rdft2_buffered_register +fftwf_rdft2_complex_n +fftwf_rdft2_inplace_strides +fftwf_rdft2_nop_register +fftwf_rdft2_pad +fftwf_rdft2_rank0_register +fftwf_rdft2_rank_geq2_register +fftwf_rdft2_rdft_register +fftwf_rdft2_solve +fftwf_rdft2_strides +fftwf_rdft2_tensor_max_index +fftwf_rdft2_thr_vrank_geq1_register +fftwf_rdft2_vrank_geq1_register +fftwf_rdft_buffered_register +fftwf_rdft_conf_standard +fftwf_rdft_dht_register +fftwf_rdft_generic_register +fftwf_rdft_indirect_register +fftwf_rdft_kind_str +fftwf_rdft_nop_register +fftwf_rdft_rank0_register +fftwf_rdft_rank_geq2_register +fftwf_rdft_solve +fftwf_rdft_thr_vrank_geq1_register +fftwf_rdft_vrank3_transpose_register +fftwf_rdft_vrank_geq1_register +fftwf_rdft_zerotens +fftwf_redft00e_r2hc_pad_register +fftwf_regsolver_ct_directw +fftwf_regsolver_ct_directwsq +fftwf_regsolver_hc2c_direct +fftwf_regsolver_hc2hc_direct +fftwf_reodft00e_splitradix_register +fftwf_reodft010e_r2hc_register +fftwf_reodft11e_r2hc_odd_register +fftwf_reodft11e_radix2_r2hc_register +fftwf_reodft_conf_standard +fftwf_rodft00e_r2hc_pad_register +fftwf_safe_mulmod +fftwf_scanner_destroy +fftwf_set_planner_hooks +fftwf_set_timelimit +fftwf_solver_destroy +fftwf_solver_register +fftwf_solver_use +fftwf_solvtab_exec +fftwf_spawn_loop +fftwf_sprint_plan +fftwf_stride_destroy +fftwf_taint +fftwf_tensor_append +fftwf_tensor_compress +fftwf_tensor_compress_contiguous +fftwf_tensor_copy +fftwf_tensor_copy_except +fftwf_tensor_copy_inplace +fftwf_tensor_copy_sub +fftwf_tensor_destroy +fftwf_tensor_destroy2 +fftwf_tensor_destroy4 +fftwf_tensor_equal +fftwf_tensor_inplace_locations +fftwf_tensor_inplace_strides +fftwf_tensor_inplace_strides2 +fftwf_tensor_kosherp +fftwf_tensor_max_index +fftwf_tensor_md5 +fftwf_tensor_min_istride +fftwf_tensor_min_ostride +fftwf_tensor_min_stride +fftwf_tensor_print +fftwf_tensor_split +fftwf_tensor_strides_decrease +fftwf_tensor_sz +fftwf_tensor_tornk1 +fftwf_the_planner +fftwf_threads_cleanup +fftwf_threads_conf_standard +fftwf_threads_register_planner_hooks +fftwf_tile2d +fftwf_toobig +fftwf_transpose +fftwf_transpose_tiled +fftwf_transpose_tiledbuf +fftwf_triggen_destroy +fftwf_twiddle_awake +fftwf_twiddle_length +fftwf_zero1d_pair +sfftw_cleanup_ +sfftw_cleanup__ +sfftw_cleanup_threads_ +sfftw_cleanup_threads__ +sfftw_cost_ +sfftw_cost__ +sfftw_destroy_plan_ +sfftw_destroy_plan__ +sfftw_estimate_cost_ +sfftw_estimate_cost__ +sfftw_execute_ +sfftw_execute__ +sfftw_execute_dft_ +sfftw_execute_dft__ +sfftw_execute_dft_c2r_ +sfftw_execute_dft_c2r__ +sfftw_execute_dft_r2c_ +sfftw_execute_dft_r2c__ +sfftw_execute_r2r_ +sfftw_execute_r2r__ +sfftw_execute_split_dft_ +sfftw_execute_split_dft__ +sfftw_execute_split_dft_c2r_ +sfftw_execute_split_dft_c2r__ +sfftw_execute_split_dft_r2c_ +sfftw_execute_split_dft_r2c__ +sfftw_export_wisdom_ +sfftw_export_wisdom__ +sfftw_flops_ +sfftw_flops__ +sfftw_forget_wisdom_ +sfftw_forget_wisdom__ +sfftw_import_system_wisdom_ +sfftw_import_system_wisdom__ +sfftw_import_wisdom_ +sfftw_import_wisdom__ +sfftw_init_threads_ +sfftw_init_threads__ +sfftw_plan_dft_ +sfftw_plan_dft__ +sfftw_plan_dft_1d_ +sfftw_plan_dft_1d__ +sfftw_plan_dft_2d_ +sfftw_plan_dft_2d__ +sfftw_plan_dft_3d_ +sfftw_plan_dft_3d__ +sfftw_plan_dft_c2r_ +sfftw_plan_dft_c2r__ +sfftw_plan_dft_c2r_1d_ +sfftw_plan_dft_c2r_1d__ +sfftw_plan_dft_c2r_2d_ +sfftw_plan_dft_c2r_2d__ +sfftw_plan_dft_c2r_3d_ +sfftw_plan_dft_c2r_3d__ +sfftw_plan_dft_r2c_ +sfftw_plan_dft_r2c__ +sfftw_plan_dft_r2c_1d_ +sfftw_plan_dft_r2c_1d__ +sfftw_plan_dft_r2c_2d_ +sfftw_plan_dft_r2c_2d__ +sfftw_plan_dft_r2c_3d_ +sfftw_plan_dft_r2c_3d__ +sfftw_plan_guru_dft_ +sfftw_plan_guru_dft__ +sfftw_plan_guru_dft_c2r_ +sfftw_plan_guru_dft_c2r__ +sfftw_plan_guru_dft_r2c_ +sfftw_plan_guru_dft_r2c__ +sfftw_plan_guru_r2r_ +sfftw_plan_guru_r2r__ +sfftw_plan_guru_split_dft_ +sfftw_plan_guru_split_dft__ +sfftw_plan_guru_split_dft_c2r_ +sfftw_plan_guru_split_dft_c2r__ +sfftw_plan_guru_split_dft_r2c_ +sfftw_plan_guru_split_dft_r2c__ +sfftw_plan_many_dft_ +sfftw_plan_many_dft__ +sfftw_plan_many_dft_c2r_ +sfftw_plan_many_dft_c2r__ +sfftw_plan_many_dft_r2c_ +sfftw_plan_many_dft_r2c__ +sfftw_plan_many_r2r_ +sfftw_plan_many_r2r__ +sfftw_plan_r2r_ +sfftw_plan_r2r__ +sfftw_plan_r2r_1d_ +sfftw_plan_r2r_1d__ +sfftw_plan_r2r_2d_ +sfftw_plan_r2r_2d__ +sfftw_plan_r2r_3d_ +sfftw_plan_r2r_3d__ +sfftw_plan_with_nthreads_ +sfftw_plan_with_nthreads__ +sfftw_print_plan_ +sfftw_print_plan__ +sfftw_set_timelimit_ +sfftw_set_timelimit__ diff --git a/funasr/runtime/onnxruntime/win/lib/x64/libfftw3f-3.exp b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3f-3.exp new file mode 100644 index 000000000..65b880624 Binary files /dev/null and b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3f-3.exp differ diff --git a/funasr/runtime/onnxruntime/win/lib/x64/libfftw3f-3.lib b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3f-3.lib new file mode 100644 index 000000000..e8f03ddf7 Binary files /dev/null and b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3f-3.lib differ diff --git a/funasr/runtime/onnxruntime/win/lib/x64/libfftw3l-3.def b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3l-3.def new file mode 100644 index 000000000..62a5e4231 --- /dev/null +++ b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3l-3.def @@ -0,0 +1,634 @@ +LIBRARY libfftw3l-3.dll +EXPORTS +fftwl_alignment_of +fftwl_alloc_complex +fftwl_alloc_real +fftwl_assertion_failed +fftwl_bufdist +fftwl_choose_radix +fftwl_cleanup +fftwl_cleanup_threads +fftwl_codelet_e01_8 +fftwl_codelet_e10_8 +fftwl_codelet_hb_10 +fftwl_codelet_hb_12 +fftwl_codelet_hb_15 +fftwl_codelet_hb_16 +fftwl_codelet_hb_2 +fftwl_codelet_hb_20 +fftwl_codelet_hb2_16 +fftwl_codelet_hb2_20 +fftwl_codelet_hb2_25 +fftwl_codelet_hb2_32 +fftwl_codelet_hb2_4 +fftwl_codelet_hb_25 +fftwl_codelet_hb2_5 +fftwl_codelet_hb2_8 +fftwl_codelet_hb_3 +fftwl_codelet_hb_32 +fftwl_codelet_hb_4 +fftwl_codelet_hb_5 +fftwl_codelet_hb_6 +fftwl_codelet_hb_64 +fftwl_codelet_hb_7 +fftwl_codelet_hb_8 +fftwl_codelet_hb_9 +fftwl_codelet_hc2cb_10 +fftwl_codelet_hc2cb_12 +fftwl_codelet_hc2cb_16 +fftwl_codelet_hc2cb_2 +fftwl_codelet_hc2cb_20 +fftwl_codelet_hc2cb2_16 +fftwl_codelet_hc2cb2_20 +fftwl_codelet_hc2cb2_32 +fftwl_codelet_hc2cb2_4 +fftwl_codelet_hc2cb2_8 +fftwl_codelet_hc2cb_32 +fftwl_codelet_hc2cb_4 +fftwl_codelet_hc2cb_6 +fftwl_codelet_hc2cb_8 +fftwl_codelet_hc2cbdft_10 +fftwl_codelet_hc2cbdft_12 +fftwl_codelet_hc2cbdft_16 +fftwl_codelet_hc2cbdft_2 +fftwl_codelet_hc2cbdft_20 +fftwl_codelet_hc2cbdft2_16 +fftwl_codelet_hc2cbdft2_20 +fftwl_codelet_hc2cbdft2_32 +fftwl_codelet_hc2cbdft2_4 +fftwl_codelet_hc2cbdft2_8 +fftwl_codelet_hc2cbdft_32 +fftwl_codelet_hc2cbdft_4 +fftwl_codelet_hc2cbdft_6 +fftwl_codelet_hc2cbdft_8 +fftwl_codelet_hc2cf_10 +fftwl_codelet_hc2cf_12 +fftwl_codelet_hc2cf_16 +fftwl_codelet_hc2cf_2 +fftwl_codelet_hc2cf_20 +fftwl_codelet_hc2cf2_16 +fftwl_codelet_hc2cf2_20 +fftwl_codelet_hc2cf2_32 +fftwl_codelet_hc2cf2_4 +fftwl_codelet_hc2cf2_8 +fftwl_codelet_hc2cf_32 +fftwl_codelet_hc2cf_4 +fftwl_codelet_hc2cf_6 +fftwl_codelet_hc2cf_8 +fftwl_codelet_hc2cfdft_10 +fftwl_codelet_hc2cfdft_12 +fftwl_codelet_hc2cfdft_16 +fftwl_codelet_hc2cfdft_2 +fftwl_codelet_hc2cfdft_20 +fftwl_codelet_hc2cfdft2_16 +fftwl_codelet_hc2cfdft2_20 +fftwl_codelet_hc2cfdft2_32 +fftwl_codelet_hc2cfdft2_4 +fftwl_codelet_hc2cfdft2_8 +fftwl_codelet_hc2cfdft_32 +fftwl_codelet_hc2cfdft_4 +fftwl_codelet_hc2cfdft_6 +fftwl_codelet_hc2cfdft_8 +fftwl_codelet_hf_10 +fftwl_codelet_hf_12 +fftwl_codelet_hf_15 +fftwl_codelet_hf_16 +fftwl_codelet_hf_2 +fftwl_codelet_hf_20 +fftwl_codelet_hf2_16 +fftwl_codelet_hf2_20 +fftwl_codelet_hf2_25 +fftwl_codelet_hf2_32 +fftwl_codelet_hf2_4 +fftwl_codelet_hf_25 +fftwl_codelet_hf2_5 +fftwl_codelet_hf2_8 +fftwl_codelet_hf_3 +fftwl_codelet_hf_32 +fftwl_codelet_hf_4 +fftwl_codelet_hf_5 +fftwl_codelet_hf_6 +fftwl_codelet_hf_64 +fftwl_codelet_hf_7 +fftwl_codelet_hf_8 +fftwl_codelet_hf_9 +fftwl_codelet_n1_10 +fftwl_codelet_n1_11 +fftwl_codelet_n1_12 +fftwl_codelet_n1_13 +fftwl_codelet_n1_14 +fftwl_codelet_n1_15 +fftwl_codelet_n1_16 +fftwl_codelet_n1_2 +fftwl_codelet_n1_20 +fftwl_codelet_n1_25 +fftwl_codelet_n1_3 +fftwl_codelet_n1_32 +fftwl_codelet_n1_4 +fftwl_codelet_n1_5 +fftwl_codelet_n1_6 +fftwl_codelet_n1_64 +fftwl_codelet_n1_7 +fftwl_codelet_n1_8 +fftwl_codelet_n1_9 +fftwl_codelet_q1_2 +fftwl_codelet_q1_3 +fftwl_codelet_q1_4 +fftwl_codelet_q1_5 +fftwl_codelet_q1_6 +fftwl_codelet_q1_8 +fftwl_codelet_r2cb_10 +fftwl_codelet_r2cb_11 +fftwl_codelet_r2cb_12 +fftwl_codelet_r2cb_128 +fftwl_codelet_r2cb_13 +fftwl_codelet_r2cb_14 +fftwl_codelet_r2cb_15 +fftwl_codelet_r2cb_16 +fftwl_codelet_r2cb_2 +fftwl_codelet_r2cb_20 +fftwl_codelet_r2cb_25 +fftwl_codelet_r2cb_3 +fftwl_codelet_r2cb_32 +fftwl_codelet_r2cb_4 +fftwl_codelet_r2cb_5 +fftwl_codelet_r2cb_6 +fftwl_codelet_r2cb_64 +fftwl_codelet_r2cb_7 +fftwl_codelet_r2cb_8 +fftwl_codelet_r2cb_9 +fftwl_codelet_r2cbIII_10 +fftwl_codelet_r2cbIII_12 +fftwl_codelet_r2cbIII_15 +fftwl_codelet_r2cbIII_16 +fftwl_codelet_r2cbIII_2 +fftwl_codelet_r2cbIII_20 +fftwl_codelet_r2cbIII_25 +fftwl_codelet_r2cbIII_3 +fftwl_codelet_r2cbIII_32 +fftwl_codelet_r2cbIII_4 +fftwl_codelet_r2cbIII_5 +fftwl_codelet_r2cbIII_6 +fftwl_codelet_r2cbIII_64 +fftwl_codelet_r2cbIII_7 +fftwl_codelet_r2cbIII_8 +fftwl_codelet_r2cbIII_9 +fftwl_codelet_r2cf_10 +fftwl_codelet_r2cf_11 +fftwl_codelet_r2cf_12 +fftwl_codelet_r2cf_128 +fftwl_codelet_r2cf_13 +fftwl_codelet_r2cf_14 +fftwl_codelet_r2cf_15 +fftwl_codelet_r2cf_16 +fftwl_codelet_r2cf_2 +fftwl_codelet_r2cf_20 +fftwl_codelet_r2cf_25 +fftwl_codelet_r2cf_3 +fftwl_codelet_r2cf_32 +fftwl_codelet_r2cf_4 +fftwl_codelet_r2cf_5 +fftwl_codelet_r2cf_6 +fftwl_codelet_r2cf_64 +fftwl_codelet_r2cf_7 +fftwl_codelet_r2cf_8 +fftwl_codelet_r2cf_9 +fftwl_codelet_r2cfII_10 +fftwl_codelet_r2cfII_12 +fftwl_codelet_r2cfII_15 +fftwl_codelet_r2cfII_16 +fftwl_codelet_r2cfII_2 +fftwl_codelet_r2cfII_20 +fftwl_codelet_r2cfII_25 +fftwl_codelet_r2cfII_3 +fftwl_codelet_r2cfII_32 +fftwl_codelet_r2cfII_4 +fftwl_codelet_r2cfII_5 +fftwl_codelet_r2cfII_6 +fftwl_codelet_r2cfII_64 +fftwl_codelet_r2cfII_7 +fftwl_codelet_r2cfII_8 +fftwl_codelet_r2cfII_9 +fftwl_codelet_t1_10 +fftwl_codelet_t1_12 +fftwl_codelet_t1_15 +fftwl_codelet_t1_16 +fftwl_codelet_t1_2 +fftwl_codelet_t1_20 +fftwl_codelet_t1_25 +fftwl_codelet_t1_3 +fftwl_codelet_t1_32 +fftwl_codelet_t1_4 +fftwl_codelet_t1_5 +fftwl_codelet_t1_6 +fftwl_codelet_t1_64 +fftwl_codelet_t1_7 +fftwl_codelet_t1_8 +fftwl_codelet_t1_9 +fftwl_codelet_t2_10 +fftwl_codelet_t2_16 +fftwl_codelet_t2_20 +fftwl_codelet_t2_25 +fftwl_codelet_t2_32 +fftwl_codelet_t2_4 +fftwl_codelet_t2_5 +fftwl_codelet_t2_64 +fftwl_codelet_t2_8 +fftwl_compute_tilesz +fftwl_configure_planner +fftwl_cost +fftwl_cpy1d +fftwl_cpy2d +fftwl_cpy2d_ci +fftwl_cpy2d_co +fftwl_cpy2d_pair +fftwl_cpy2d_pair_ci +fftwl_cpy2d_pair_co +fftwl_cpy2d_tiled +fftwl_cpy2d_tiledbuf +fftwl_ct_applicable +fftwl_ct_genericbuf_register +fftwl_ct_generic_register +fftwl_ct_uglyp +fftwl_destroy_plan +fftwl_dft_bluestein_register +fftwl_dft_buffered_register +fftwl_dft_conf_standard +fftwl_dft_generic_register +fftwl_dft_indirect_register +fftwl_dft_indirect_transpose_register +fftwl_dft_nop_register +fftwl_dft_r2hc_register +fftwl_dft_rader_register +fftwl_dft_rank_geq2_register +fftwl_dft_solve +fftwl_dft_thr_vrank_geq1_register +fftwl_dft_vrank_geq1_register +fftwl_dft_zerotens +fftwl_dht_r2hc_register +fftwl_dht_rader_register +fftwl_dimcmp +fftwl_elapsed_since +fftwl_estimate_cost +fftwl_execute +fftwl_execute_dft +fftwl_execute_dft_c2r +fftwl_execute_dft_r2c +fftwl_execute_r2r +fftwl_execute_split_dft +fftwl_execute_split_dft_c2r +fftwl_execute_split_dft_r2c +fftwl_export_wisdom +fftwl_export_wisdom_to_file +fftwl_export_wisdom_to_filename +fftwl_export_wisdom_to_string +fftwl_extract_reim +fftwl_factors_into +fftwl_factors_into_small_primes +fftwl_find_generator +fftwl_first_divisor +fftwl_flops +fftwl_forget_wisdom +fftwl_fprint_plan +fftwl_free +fftwl_get_crude_time +fftwl_guru64_kosherp +fftwl_guru_kosherp +fftwl_hash +fftwl_hc2hc_applicable +fftwl_hc2hc_generic_register +fftwl_iabs +fftwl_ialignment_of +fftwl_iestimate_cost +fftwl_ifree +fftwl_ifree0 +fftwl_imax +fftwl_imin +fftwl_import_system_wisdom +fftwl_import_wisdom +fftwl_import_wisdom_from_file +fftwl_import_wisdom_from_filename +fftwl_import_wisdom_from_string +fftwl_init_threads +fftwl_is_prime +fftwl_isqrt +fftwl_ithreads_init +fftwl_kdft_dif_register +fftwl_kdft_difsq_register +fftwl_kdft_dit_register +fftwl_kdft_register +fftwl_kernel_free +fftwl_kernel_malloc +fftwl_khc2c_register +fftwl_khc2hc_register +fftwl_kr2c_register +fftwl_kr2r_register +fftwl_make_planner_thread_safe +fftwl_malloc +fftwl_malloc_plain +fftwl_many_kosherp +fftwl_mapflags +fftwl_map_r2r_kind +fftwl_md5begin +fftwl_md5end +fftwl_md5int +fftwl_md5INT +fftwl_md5putb +fftwl_md5putc +fftwl_md5puts +fftwl_md5unsigned +fftwl_measure_execution_time +fftwl_mkapiplan +fftwl_mkplan +fftwl_mkplan_d +fftwl_mkplan_dft +fftwl_mkplan_dftw +fftwl_mkplan_f_d +fftwl_mkplan_hc2c +fftwl_mkplan_hc2hc +fftwl_mkplanner +fftwl_mkplan_rdft +fftwl_mkplan_rdft2 +fftwl_mkprinter +fftwl_mkprinter_cnt +fftwl_mkprinter_file +fftwl_mkprinter_str +fftwl_mkproblem +fftwl_mkproblem_dft +fftwl_mkproblem_dft_d +fftwl_mkproblem_rdft +fftwl_mkproblem_rdft_0_d +fftwl_mkproblem_rdft_1 +fftwl_mkproblem_rdft_1_d +fftwl_mkproblem_rdft2 +fftwl_mkproblem_rdft2_d +fftwl_mkproblem_rdft2_d_3pointers +fftwl_mkproblem_rdft_d +fftwl_mkproblem_unsolvable +fftwl_mkscanner +fftwl_mksolver +fftwl_mksolver_ct +fftwl_mksolver_ct_threads +fftwl_mksolver_dft_direct +fftwl_mksolver_dft_directbuf +fftwl_mksolver_hc2c +fftwl_mksolver_hc2hc +fftwl_mksolver_hc2hc_threads +fftwl_mksolver_rdft2_direct +fftwl_mksolver_rdft_r2c_direct +fftwl_mksolver_rdft_r2c_directbuf +fftwl_mksolver_rdft_r2r_direct +fftwl_mktensor +fftwl_mktensor_0d +fftwl_mktensor_1d +fftwl_mktensor_2d +fftwl_mktensor_3d +fftwl_mktensor_4d +fftwl_mktensor_5d +fftwl_mktensor_iodims +fftwl_mktensor_iodims64 +fftwl_mktensor_rowmajor +fftwl_mktriggen +fftwl_modulo +fftwl_nbuf +fftwl_nbuf_redundant +fftwl_next_prime +fftwl_null_awake +fftwl_ops_add +fftwl_ops_add2 +fftwl_ops_cpy +fftwl_ops_madd +fftwl_ops_madd2 +fftwl_ops_other +fftwl_ops_zero +fftwl_pickdim +fftwl_plan_awake +fftwl_plan_destroy_internal +fftwl_plan_dft +fftwl_plan_dft_1d +fftwl_plan_dft_2d +fftwl_plan_dft_3d +fftwl_plan_dft_c2r +fftwl_plan_dft_c2r_1d +fftwl_plan_dft_c2r_2d +fftwl_plan_dft_c2r_3d +fftwl_plan_dft_r2c +fftwl_plan_dft_r2c_1d +fftwl_plan_dft_r2c_2d +fftwl_plan_dft_r2c_3d +fftwl_plan_guru64_dft +fftwl_plan_guru64_dft_c2r +fftwl_plan_guru64_dft_r2c +fftwl_plan_guru64_r2r +fftwl_plan_guru64_split_dft +fftwl_plan_guru64_split_dft_c2r +fftwl_plan_guru64_split_dft_r2c +fftwl_plan_guru_dft +fftwl_plan_guru_dft_c2r +fftwl_plan_guru_dft_r2c +fftwl_plan_guru_r2r +fftwl_plan_guru_split_dft +fftwl_plan_guru_split_dft_c2r +fftwl_plan_guru_split_dft_r2c +fftwl_plan_many_dft +fftwl_plan_many_dft_c2r +fftwl_plan_many_dft_r2c +fftwl_plan_many_r2r +fftwl_planner_destroy +fftwl_plan_null_destroy +fftwl_plan_r2r +fftwl_plan_r2r_1d +fftwl_plan_r2r_2d +fftwl_plan_r2r_3d +fftwl_plan_with_nthreads +fftwl_power_mod +fftwl_printer_destroy +fftwl_print_plan +fftwl_problem_destroy +fftwl_rader_tl_delete +fftwl_rader_tl_find +fftwl_rader_tl_insert +fftwl_rdft2_buffered_register +fftwl_rdft2_complex_n +fftwl_rdft2_inplace_strides +fftwl_rdft2_nop_register +fftwl_rdft2_pad +fftwl_rdft2_rank0_register +fftwl_rdft2_rank_geq2_register +fftwl_rdft2_rdft_register +fftwl_rdft2_solve +fftwl_rdft2_strides +fftwl_rdft2_tensor_max_index +fftwl_rdft2_thr_vrank_geq1_register +fftwl_rdft2_vrank_geq1_register +fftwl_rdft_buffered_register +fftwl_rdft_conf_standard +fftwl_rdft_dht_register +fftwl_rdft_generic_register +fftwl_rdft_indirect_register +fftwl_rdft_kind_str +fftwl_rdft_nop_register +fftwl_rdft_rank0_register +fftwl_rdft_rank_geq2_register +fftwl_rdft_solve +fftwl_rdft_thr_vrank_geq1_register +fftwl_rdft_vrank3_transpose_register +fftwl_rdft_vrank_geq1_register +fftwl_rdft_zerotens +fftwl_redft00e_r2hc_pad_register +fftwl_regsolver_ct_directw +fftwl_regsolver_ct_directwsq +fftwl_regsolver_hc2c_direct +fftwl_regsolver_hc2hc_direct +fftwl_reodft00e_splitradix_register +fftwl_reodft010e_r2hc_register +fftwl_reodft11e_r2hc_odd_register +fftwl_reodft11e_radix2_r2hc_register +fftwl_reodft_conf_standard +fftwl_rodft00e_r2hc_pad_register +fftwl_safe_mulmod +fftwl_scanner_destroy +fftwl_set_planner_hooks +fftwl_set_timelimit +fftwl_solver_destroy +fftwl_solver_register +fftwl_solver_use +fftwl_solvtab_exec +fftwl_spawn_loop +fftwl_sprint_plan +fftwl_tensor_append +fftwl_tensor_compress +fftwl_tensor_compress_contiguous +fftwl_tensor_copy +fftwl_tensor_copy_except +fftwl_tensor_copy_inplace +fftwl_tensor_copy_sub +fftwl_tensor_destroy +fftwl_tensor_destroy2 +fftwl_tensor_destroy4 +fftwl_tensor_equal +fftwl_tensor_inplace_locations +fftwl_tensor_inplace_strides +fftwl_tensor_inplace_strides2 +fftwl_tensor_kosherp +fftwl_tensor_max_index +fftwl_tensor_md5 +fftwl_tensor_min_istride +fftwl_tensor_min_ostride +fftwl_tensor_min_stride +fftwl_tensor_print +fftwl_tensor_split +fftwl_tensor_strides_decrease +fftwl_tensor_sz +fftwl_tensor_tornk1 +fftwl_the_planner +fftwl_threads_cleanup +fftwl_threads_conf_standard +fftwl_threads_register_planner_hooks +fftwl_tile2d +fftwl_toobig +fftwl_transpose +fftwl_transpose_tiled +fftwl_transpose_tiledbuf +fftwl_triggen_destroy +fftwl_twiddle_awake +fftwl_twiddle_length +fftwl_zero1d_pair +lfftw_cleanup_ +lfftw_cleanup__ +lfftw_cleanup_threads_ +lfftw_cleanup_threads__ +lfftw_cost_ +lfftw_cost__ +lfftw_destroy_plan_ +lfftw_destroy_plan__ +lfftw_estimate_cost_ +lfftw_estimate_cost__ +lfftw_execute_ +lfftw_execute__ +lfftw_execute_dft_ +lfftw_execute_dft__ +lfftw_execute_dft_c2r_ +lfftw_execute_dft_c2r__ +lfftw_execute_dft_r2c_ +lfftw_execute_dft_r2c__ +lfftw_execute_r2r_ +lfftw_execute_r2r__ +lfftw_execute_split_dft_ +lfftw_execute_split_dft__ +lfftw_execute_split_dft_c2r_ +lfftw_execute_split_dft_c2r__ +lfftw_execute_split_dft_r2c_ +lfftw_execute_split_dft_r2c__ +lfftw_export_wisdom_ +lfftw_export_wisdom__ +lfftw_flops_ +lfftw_flops__ +lfftw_forget_wisdom_ +lfftw_forget_wisdom__ +lfftw_import_system_wisdom_ +lfftw_import_system_wisdom__ +lfftw_import_wisdom_ +lfftw_import_wisdom__ +lfftw_init_threads_ +lfftw_init_threads__ +lfftw_plan_dft_ +lfftw_plan_dft__ +lfftw_plan_dft_1d_ +lfftw_plan_dft_1d__ +lfftw_plan_dft_2d_ +lfftw_plan_dft_2d__ +lfftw_plan_dft_3d_ +lfftw_plan_dft_3d__ +lfftw_plan_dft_c2r_ +lfftw_plan_dft_c2r__ +lfftw_plan_dft_c2r_1d_ +lfftw_plan_dft_c2r_1d__ +lfftw_plan_dft_c2r_2d_ +lfftw_plan_dft_c2r_2d__ +lfftw_plan_dft_c2r_3d_ +lfftw_plan_dft_c2r_3d__ +lfftw_plan_dft_r2c_ +lfftw_plan_dft_r2c__ +lfftw_plan_dft_r2c_1d_ +lfftw_plan_dft_r2c_1d__ +lfftw_plan_dft_r2c_2d_ +lfftw_plan_dft_r2c_2d__ +lfftw_plan_dft_r2c_3d_ +lfftw_plan_dft_r2c_3d__ +lfftw_plan_guru_dft_ +lfftw_plan_guru_dft__ +lfftw_plan_guru_dft_c2r_ +lfftw_plan_guru_dft_c2r__ +lfftw_plan_guru_dft_r2c_ +lfftw_plan_guru_dft_r2c__ +lfftw_plan_guru_r2r_ +lfftw_plan_guru_r2r__ +lfftw_plan_guru_split_dft_ +lfftw_plan_guru_split_dft__ +lfftw_plan_guru_split_dft_c2r_ +lfftw_plan_guru_split_dft_c2r__ +lfftw_plan_guru_split_dft_r2c_ +lfftw_plan_guru_split_dft_r2c__ +lfftw_plan_many_dft_ +lfftw_plan_many_dft__ +lfftw_plan_many_dft_c2r_ +lfftw_plan_many_dft_c2r__ +lfftw_plan_many_dft_r2c_ +lfftw_plan_many_dft_r2c__ +lfftw_plan_many_r2r_ +lfftw_plan_many_r2r__ +lfftw_plan_r2r_ +lfftw_plan_r2r__ +lfftw_plan_r2r_1d_ +lfftw_plan_r2r_1d__ +lfftw_plan_r2r_2d_ +lfftw_plan_r2r_2d__ +lfftw_plan_r2r_3d_ +lfftw_plan_r2r_3d__ +lfftw_plan_with_nthreads_ +lfftw_plan_with_nthreads__ +lfftw_print_plan_ +lfftw_print_plan__ +lfftw_set_timelimit_ +lfftw_set_timelimit__ diff --git a/funasr/runtime/onnxruntime/win/lib/x64/libfftw3l-3.exp b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3l-3.exp new file mode 100644 index 000000000..1c98b3ac1 Binary files /dev/null and b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3l-3.exp differ diff --git a/funasr/runtime/onnxruntime/win/lib/x64/libfftw3l-3.lib b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3l-3.lib new file mode 100644 index 000000000..3661f5aae Binary files /dev/null and b/funasr/runtime/onnxruntime/win/lib/x64/libfftw3l-3.lib differ diff --git a/funasr/runtime/onnxruntime/win/lib/x64/onnxruntime.lib b/funasr/runtime/onnxruntime/win/lib/x64/onnxruntime.lib new file mode 100644 index 000000000..b1a314c3a Binary files /dev/null and b/funasr/runtime/onnxruntime/win/lib/x64/onnxruntime.lib differ diff --git a/funasr/runtime/onnxruntime/win/lib/x86/libfftw3-3.def b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3-3.def new file mode 100644 index 000000000..4b50ecd41 --- /dev/null +++ b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3-3.def @@ -0,0 +1,1017 @@ +LIBRARY libfftw3-3.dll +EXPORTS +dfftw_cleanup_ +dfftw_cleanup__ +dfftw_cleanup_threads_ +dfftw_cleanup_threads__ +dfftw_cost_ +dfftw_cost__ +dfftw_destroy_plan_ +dfftw_destroy_plan__ +dfftw_estimate_cost_ +dfftw_estimate_cost__ +dfftw_execute_ +dfftw_execute__ +dfftw_execute_dft_ +dfftw_execute_dft__ +dfftw_execute_dft_c2r_ +dfftw_execute_dft_c2r__ +dfftw_execute_dft_r2c_ +dfftw_execute_dft_r2c__ +dfftw_execute_r2r_ +dfftw_execute_r2r__ +dfftw_execute_split_dft_ +dfftw_execute_split_dft__ +dfftw_execute_split_dft_c2r_ +dfftw_execute_split_dft_c2r__ +dfftw_execute_split_dft_r2c_ +dfftw_execute_split_dft_r2c__ +dfftw_export_wisdom_ +dfftw_export_wisdom__ +dfftw_flops_ +dfftw_flops__ +dfftw_forget_wisdom_ +dfftw_forget_wisdom__ +dfftw_import_system_wisdom_ +dfftw_import_system_wisdom__ +dfftw_import_wisdom_ +dfftw_import_wisdom__ +dfftw_init_threads_ +dfftw_init_threads__ +dfftw_plan_dft_ +dfftw_plan_dft__ +dfftw_plan_dft_1d_ +dfftw_plan_dft_1d__ +dfftw_plan_dft_2d_ +dfftw_plan_dft_2d__ +dfftw_plan_dft_3d_ +dfftw_plan_dft_3d__ +dfftw_plan_dft_c2r_ +dfftw_plan_dft_c2r__ +dfftw_plan_dft_c2r_1d_ +dfftw_plan_dft_c2r_1d__ +dfftw_plan_dft_c2r_2d_ +dfftw_plan_dft_c2r_2d__ +dfftw_plan_dft_c2r_3d_ +dfftw_plan_dft_c2r_3d__ +dfftw_plan_dft_r2c_ +dfftw_plan_dft_r2c__ +dfftw_plan_dft_r2c_1d_ +dfftw_plan_dft_r2c_1d__ +dfftw_plan_dft_r2c_2d_ +dfftw_plan_dft_r2c_2d__ +dfftw_plan_dft_r2c_3d_ +dfftw_plan_dft_r2c_3d__ +dfftw_plan_guru_dft_ +dfftw_plan_guru_dft__ +dfftw_plan_guru_dft_c2r_ +dfftw_plan_guru_dft_c2r__ +dfftw_plan_guru_dft_r2c_ +dfftw_plan_guru_dft_r2c__ +dfftw_plan_guru_r2r_ +dfftw_plan_guru_r2r__ +dfftw_plan_guru_split_dft_ +dfftw_plan_guru_split_dft__ +dfftw_plan_guru_split_dft_c2r_ +dfftw_plan_guru_split_dft_c2r__ +dfftw_plan_guru_split_dft_r2c_ +dfftw_plan_guru_split_dft_r2c__ +dfftw_plan_many_dft_ +dfftw_plan_many_dft__ +dfftw_plan_many_dft_c2r_ +dfftw_plan_many_dft_c2r__ +dfftw_plan_many_dft_r2c_ +dfftw_plan_many_dft_r2c__ +dfftw_plan_many_r2r_ +dfftw_plan_many_r2r__ +dfftw_plan_r2r_ +dfftw_plan_r2r__ +dfftw_plan_r2r_1d_ +dfftw_plan_r2r_1d__ +dfftw_plan_r2r_2d_ +dfftw_plan_r2r_2d__ +dfftw_plan_r2r_3d_ +dfftw_plan_r2r_3d__ +dfftw_plan_with_nthreads_ +dfftw_plan_with_nthreads__ +dfftw_print_plan_ +dfftw_print_plan__ +dfftw_set_timelimit_ +dfftw_set_timelimit__ +fftw_alignment_of +fftw_alloc_complex +fftw_alloc_real +fftw_assertion_failed +fftw_bufdist +fftw_check_alignment_of_sse2_pm +fftw_choose_radix +fftw_cleanup +fftw_cleanup_threads +fftw_codelet_e01_8 +fftw_codelet_e10_8 +fftw_codelet_hb_10 +fftw_codelet_hb_12 +fftw_codelet_hb_15 +fftw_codelet_hb_16 +fftw_codelet_hb_2 +fftw_codelet_hb_20 +fftw_codelet_hb2_16 +fftw_codelet_hb2_20 +fftw_codelet_hb2_25 +fftw_codelet_hb2_32 +fftw_codelet_hb2_4 +fftw_codelet_hb_25 +fftw_codelet_hb2_5 +fftw_codelet_hb2_8 +fftw_codelet_hb_3 +fftw_codelet_hb_32 +fftw_codelet_hb_4 +fftw_codelet_hb_5 +fftw_codelet_hb_6 +fftw_codelet_hb_64 +fftw_codelet_hb_7 +fftw_codelet_hb_8 +fftw_codelet_hb_9 +fftw_codelet_hc2cb_10 +fftw_codelet_hc2cb_12 +fftw_codelet_hc2cb_16 +fftw_codelet_hc2cb_2 +fftw_codelet_hc2cb_20 +fftw_codelet_hc2cb2_16 +fftw_codelet_hc2cb2_20 +fftw_codelet_hc2cb2_32 +fftw_codelet_hc2cb2_4 +fftw_codelet_hc2cb2_8 +fftw_codelet_hc2cb_32 +fftw_codelet_hc2cb_4 +fftw_codelet_hc2cb_6 +fftw_codelet_hc2cb_8 +fftw_codelet_hc2cbdft_10 +fftw_codelet_hc2cbdft_12 +fftw_codelet_hc2cbdft_16 +fftw_codelet_hc2cbdft_2 +fftw_codelet_hc2cbdft_20 +fftw_codelet_hc2cbdft2_16 +fftw_codelet_hc2cbdft2_20 +fftw_codelet_hc2cbdft2_32 +fftw_codelet_hc2cbdft2_4 +fftw_codelet_hc2cbdft2_8 +fftw_codelet_hc2cbdft_32 +fftw_codelet_hc2cbdft_4 +fftw_codelet_hc2cbdft_6 +fftw_codelet_hc2cbdft_8 +fftw_codelet_hc2cbdftv_10_avx +fftw_codelet_hc2cbdftv_10_sse2 +fftw_codelet_hc2cbdftv_12_avx +fftw_codelet_hc2cbdftv_12_sse2 +fftw_codelet_hc2cbdftv_16_avx +fftw_codelet_hc2cbdftv_16_sse2 +fftw_codelet_hc2cbdftv_20_avx +fftw_codelet_hc2cbdftv_20_sse2 +fftw_codelet_hc2cbdftv_2_avx +fftw_codelet_hc2cbdftv_2_sse2 +fftw_codelet_hc2cbdftv_32_avx +fftw_codelet_hc2cbdftv_32_sse2 +fftw_codelet_hc2cbdftv_4_avx +fftw_codelet_hc2cbdftv_4_sse2 +fftw_codelet_hc2cbdftv_6_avx +fftw_codelet_hc2cbdftv_6_sse2 +fftw_codelet_hc2cbdftv_8_avx +fftw_codelet_hc2cbdftv_8_sse2 +fftw_codelet_hc2cf_10 +fftw_codelet_hc2cf_12 +fftw_codelet_hc2cf_16 +fftw_codelet_hc2cf_2 +fftw_codelet_hc2cf_20 +fftw_codelet_hc2cf2_16 +fftw_codelet_hc2cf2_20 +fftw_codelet_hc2cf2_32 +fftw_codelet_hc2cf2_4 +fftw_codelet_hc2cf2_8 +fftw_codelet_hc2cf_32 +fftw_codelet_hc2cf_4 +fftw_codelet_hc2cf_6 +fftw_codelet_hc2cf_8 +fftw_codelet_hc2cfdft_10 +fftw_codelet_hc2cfdft_12 +fftw_codelet_hc2cfdft_16 +fftw_codelet_hc2cfdft_2 +fftw_codelet_hc2cfdft_20 +fftw_codelet_hc2cfdft2_16 +fftw_codelet_hc2cfdft2_20 +fftw_codelet_hc2cfdft2_32 +fftw_codelet_hc2cfdft2_4 +fftw_codelet_hc2cfdft2_8 +fftw_codelet_hc2cfdft_32 +fftw_codelet_hc2cfdft_4 +fftw_codelet_hc2cfdft_6 +fftw_codelet_hc2cfdft_8 +fftw_codelet_hc2cfdftv_10_avx +fftw_codelet_hc2cfdftv_10_sse2 +fftw_codelet_hc2cfdftv_12_avx +fftw_codelet_hc2cfdftv_12_sse2 +fftw_codelet_hc2cfdftv_16_avx +fftw_codelet_hc2cfdftv_16_sse2 +fftw_codelet_hc2cfdftv_20_avx +fftw_codelet_hc2cfdftv_20_sse2 +fftw_codelet_hc2cfdftv_2_avx +fftw_codelet_hc2cfdftv_2_sse2 +fftw_codelet_hc2cfdftv_32_avx +fftw_codelet_hc2cfdftv_32_sse2 +fftw_codelet_hc2cfdftv_4_avx +fftw_codelet_hc2cfdftv_4_sse2 +fftw_codelet_hc2cfdftv_6_avx +fftw_codelet_hc2cfdftv_6_sse2 +fftw_codelet_hc2cfdftv_8_avx +fftw_codelet_hc2cfdftv_8_sse2 +fftw_codelet_hf_10 +fftw_codelet_hf_12 +fftw_codelet_hf_15 +fftw_codelet_hf_16 +fftw_codelet_hf_2 +fftw_codelet_hf_20 +fftw_codelet_hf2_16 +fftw_codelet_hf2_20 +fftw_codelet_hf2_25 +fftw_codelet_hf2_32 +fftw_codelet_hf2_4 +fftw_codelet_hf_25 +fftw_codelet_hf2_5 +fftw_codelet_hf2_8 +fftw_codelet_hf_3 +fftw_codelet_hf_32 +fftw_codelet_hf_4 +fftw_codelet_hf_5 +fftw_codelet_hf_6 +fftw_codelet_hf_64 +fftw_codelet_hf_7 +fftw_codelet_hf_8 +fftw_codelet_hf_9 +fftw_codelet_n1_10 +fftw_codelet_n1_11 +fftw_codelet_n1_12 +fftw_codelet_n1_13 +fftw_codelet_n1_14 +fftw_codelet_n1_15 +fftw_codelet_n1_16 +fftw_codelet_n1_2 +fftw_codelet_n1_20 +fftw_codelet_n1_25 +fftw_codelet_n1_3 +fftw_codelet_n1_32 +fftw_codelet_n1_4 +fftw_codelet_n1_5 +fftw_codelet_n1_6 +fftw_codelet_n1_64 +fftw_codelet_n1_7 +fftw_codelet_n1_8 +fftw_codelet_n1_9 +fftw_codelet_n1bv_10_avx +fftw_codelet_n1bv_10_sse2 +fftw_codelet_n1bv_11_avx +fftw_codelet_n1bv_11_sse2 +fftw_codelet_n1bv_128_avx +fftw_codelet_n1bv_128_sse2 +fftw_codelet_n1bv_12_avx +fftw_codelet_n1bv_12_sse2 +fftw_codelet_n1bv_13_avx +fftw_codelet_n1bv_13_sse2 +fftw_codelet_n1bv_14_avx +fftw_codelet_n1bv_14_sse2 +fftw_codelet_n1bv_15_avx +fftw_codelet_n1bv_15_sse2 +fftw_codelet_n1bv_16_avx +fftw_codelet_n1bv_16_sse2 +fftw_codelet_n1bv_20_avx +fftw_codelet_n1bv_20_sse2 +fftw_codelet_n1bv_25_avx +fftw_codelet_n1bv_25_sse2 +fftw_codelet_n1bv_2_avx +fftw_codelet_n1bv_2_sse2 +fftw_codelet_n1bv_32_avx +fftw_codelet_n1bv_32_sse2 +fftw_codelet_n1bv_3_avx +fftw_codelet_n1bv_3_sse2 +fftw_codelet_n1bv_4_avx +fftw_codelet_n1bv_4_sse2 +fftw_codelet_n1bv_5_avx +fftw_codelet_n1bv_5_sse2 +fftw_codelet_n1bv_64_avx +fftw_codelet_n1bv_64_sse2 +fftw_codelet_n1bv_6_avx +fftw_codelet_n1bv_6_sse2 +fftw_codelet_n1bv_7_avx +fftw_codelet_n1bv_7_sse2 +fftw_codelet_n1bv_8_avx +fftw_codelet_n1bv_8_sse2 +fftw_codelet_n1bv_9_avx +fftw_codelet_n1bv_9_sse2 +fftw_codelet_n1fv_10_avx +fftw_codelet_n1fv_10_sse2 +fftw_codelet_n1fv_11_avx +fftw_codelet_n1fv_11_sse2 +fftw_codelet_n1fv_128_avx +fftw_codelet_n1fv_128_sse2 +fftw_codelet_n1fv_12_avx +fftw_codelet_n1fv_12_sse2 +fftw_codelet_n1fv_13_avx +fftw_codelet_n1fv_13_sse2 +fftw_codelet_n1fv_14_avx +fftw_codelet_n1fv_14_sse2 +fftw_codelet_n1fv_15_avx +fftw_codelet_n1fv_15_sse2 +fftw_codelet_n1fv_16_avx +fftw_codelet_n1fv_16_sse2 +fftw_codelet_n1fv_20_avx +fftw_codelet_n1fv_20_sse2 +fftw_codelet_n1fv_25_avx +fftw_codelet_n1fv_25_sse2 +fftw_codelet_n1fv_2_avx +fftw_codelet_n1fv_2_sse2 +fftw_codelet_n1fv_32_avx +fftw_codelet_n1fv_32_sse2 +fftw_codelet_n1fv_3_avx +fftw_codelet_n1fv_3_sse2 +fftw_codelet_n1fv_4_avx +fftw_codelet_n1fv_4_sse2 +fftw_codelet_n1fv_5_avx +fftw_codelet_n1fv_5_sse2 +fftw_codelet_n1fv_64_avx +fftw_codelet_n1fv_64_sse2 +fftw_codelet_n1fv_6_avx +fftw_codelet_n1fv_6_sse2 +fftw_codelet_n1fv_7_avx +fftw_codelet_n1fv_7_sse2 +fftw_codelet_n1fv_8_avx +fftw_codelet_n1fv_8_sse2 +fftw_codelet_n1fv_9_avx +fftw_codelet_n1fv_9_sse2 +fftw_codelet_n2bv_10_avx +fftw_codelet_n2bv_10_sse2 +fftw_codelet_n2bv_12_avx +fftw_codelet_n2bv_12_sse2 +fftw_codelet_n2bv_14_avx +fftw_codelet_n2bv_14_sse2 +fftw_codelet_n2bv_16_avx +fftw_codelet_n2bv_16_sse2 +fftw_codelet_n2bv_20_avx +fftw_codelet_n2bv_20_sse2 +fftw_codelet_n2bv_2_avx +fftw_codelet_n2bv_2_sse2 +fftw_codelet_n2bv_32_avx +fftw_codelet_n2bv_32_sse2 +fftw_codelet_n2bv_4_avx +fftw_codelet_n2bv_4_sse2 +fftw_codelet_n2bv_64_avx +fftw_codelet_n2bv_64_sse2 +fftw_codelet_n2bv_6_avx +fftw_codelet_n2bv_6_sse2 +fftw_codelet_n2bv_8_avx +fftw_codelet_n2bv_8_sse2 +fftw_codelet_n2fv_10_avx +fftw_codelet_n2fv_10_sse2 +fftw_codelet_n2fv_12_avx +fftw_codelet_n2fv_12_sse2 +fftw_codelet_n2fv_14_avx +fftw_codelet_n2fv_14_sse2 +fftw_codelet_n2fv_16_avx +fftw_codelet_n2fv_16_sse2 +fftw_codelet_n2fv_20_avx +fftw_codelet_n2fv_20_sse2 +fftw_codelet_n2fv_2_avx +fftw_codelet_n2fv_2_sse2 +fftw_codelet_n2fv_32_avx +fftw_codelet_n2fv_32_sse2 +fftw_codelet_n2fv_4_avx +fftw_codelet_n2fv_4_sse2 +fftw_codelet_n2fv_64_avx +fftw_codelet_n2fv_64_sse2 +fftw_codelet_n2fv_6_avx +fftw_codelet_n2fv_6_sse2 +fftw_codelet_n2fv_8_avx +fftw_codelet_n2fv_8_sse2 +fftw_codelet_n2sv_16_avx +fftw_codelet_n2sv_16_sse2 +fftw_codelet_n2sv_32_avx +fftw_codelet_n2sv_32_sse2 +fftw_codelet_n2sv_4_avx +fftw_codelet_n2sv_4_sse2 +fftw_codelet_n2sv_64_avx +fftw_codelet_n2sv_64_sse2 +fftw_codelet_n2sv_8_avx +fftw_codelet_n2sv_8_sse2 +fftw_codelet_q1_2 +fftw_codelet_q1_3 +fftw_codelet_q1_4 +fftw_codelet_q1_5 +fftw_codelet_q1_6 +fftw_codelet_q1_8 +fftw_codelet_q1bv_2_avx +fftw_codelet_q1bv_2_sse2 +fftw_codelet_q1bv_4_avx +fftw_codelet_q1bv_4_sse2 +fftw_codelet_q1bv_5_avx +fftw_codelet_q1bv_5_sse2 +fftw_codelet_q1bv_8_avx +fftw_codelet_q1bv_8_sse2 +fftw_codelet_q1fv_2_avx +fftw_codelet_q1fv_2_sse2 +fftw_codelet_q1fv_4_avx +fftw_codelet_q1fv_4_sse2 +fftw_codelet_q1fv_5_avx +fftw_codelet_q1fv_5_sse2 +fftw_codelet_q1fv_8_avx +fftw_codelet_q1fv_8_sse2 +fftw_codelet_r2cb_10 +fftw_codelet_r2cb_11 +fftw_codelet_r2cb_12 +fftw_codelet_r2cb_128 +fftw_codelet_r2cb_13 +fftw_codelet_r2cb_14 +fftw_codelet_r2cb_15 +fftw_codelet_r2cb_16 +fftw_codelet_r2cb_2 +fftw_codelet_r2cb_20 +fftw_codelet_r2cb_25 +fftw_codelet_r2cb_3 +fftw_codelet_r2cb_32 +fftw_codelet_r2cb_4 +fftw_codelet_r2cb_5 +fftw_codelet_r2cb_6 +fftw_codelet_r2cb_64 +fftw_codelet_r2cb_7 +fftw_codelet_r2cb_8 +fftw_codelet_r2cb_9 +fftw_codelet_r2cbIII_10 +fftw_codelet_r2cbIII_12 +fftw_codelet_r2cbIII_15 +fftw_codelet_r2cbIII_16 +fftw_codelet_r2cbIII_2 +fftw_codelet_r2cbIII_20 +fftw_codelet_r2cbIII_25 +fftw_codelet_r2cbIII_3 +fftw_codelet_r2cbIII_32 +fftw_codelet_r2cbIII_4 +fftw_codelet_r2cbIII_5 +fftw_codelet_r2cbIII_6 +fftw_codelet_r2cbIII_64 +fftw_codelet_r2cbIII_7 +fftw_codelet_r2cbIII_8 +fftw_codelet_r2cbIII_9 +fftw_codelet_r2cf_10 +fftw_codelet_r2cf_11 +fftw_codelet_r2cf_12 +fftw_codelet_r2cf_128 +fftw_codelet_r2cf_13 +fftw_codelet_r2cf_14 +fftw_codelet_r2cf_15 +fftw_codelet_r2cf_16 +fftw_codelet_r2cf_2 +fftw_codelet_r2cf_20 +fftw_codelet_r2cf_25 +fftw_codelet_r2cf_3 +fftw_codelet_r2cf_32 +fftw_codelet_r2cf_4 +fftw_codelet_r2cf_5 +fftw_codelet_r2cf_6 +fftw_codelet_r2cf_64 +fftw_codelet_r2cf_7 +fftw_codelet_r2cf_8 +fftw_codelet_r2cf_9 +fftw_codelet_r2cfII_10 +fftw_codelet_r2cfII_12 +fftw_codelet_r2cfII_15 +fftw_codelet_r2cfII_16 +fftw_codelet_r2cfII_2 +fftw_codelet_r2cfII_20 +fftw_codelet_r2cfII_25 +fftw_codelet_r2cfII_3 +fftw_codelet_r2cfII_32 +fftw_codelet_r2cfII_4 +fftw_codelet_r2cfII_5 +fftw_codelet_r2cfII_6 +fftw_codelet_r2cfII_64 +fftw_codelet_r2cfII_7 +fftw_codelet_r2cfII_8 +fftw_codelet_r2cfII_9 +fftw_codelet_t1_10 +fftw_codelet_t1_12 +fftw_codelet_t1_15 +fftw_codelet_t1_16 +fftw_codelet_t1_2 +fftw_codelet_t1_20 +fftw_codelet_t1_25 +fftw_codelet_t1_3 +fftw_codelet_t1_32 +fftw_codelet_t1_4 +fftw_codelet_t1_5 +fftw_codelet_t1_6 +fftw_codelet_t1_64 +fftw_codelet_t1_7 +fftw_codelet_t1_8 +fftw_codelet_t1_9 +fftw_codelet_t1buv_10_avx +fftw_codelet_t1buv_10_sse2 +fftw_codelet_t1buv_2_avx +fftw_codelet_t1buv_2_sse2 +fftw_codelet_t1buv_3_avx +fftw_codelet_t1buv_3_sse2 +fftw_codelet_t1buv_4_avx +fftw_codelet_t1buv_4_sse2 +fftw_codelet_t1buv_5_avx +fftw_codelet_t1buv_5_sse2 +fftw_codelet_t1buv_6_avx +fftw_codelet_t1buv_6_sse2 +fftw_codelet_t1buv_7_avx +fftw_codelet_t1buv_7_sse2 +fftw_codelet_t1buv_8_avx +fftw_codelet_t1buv_8_sse2 +fftw_codelet_t1buv_9_avx +fftw_codelet_t1buv_9_sse2 +fftw_codelet_t1bv_10_avx +fftw_codelet_t1bv_10_sse2 +fftw_codelet_t1bv_12_avx +fftw_codelet_t1bv_12_sse2 +fftw_codelet_t1bv_15_avx +fftw_codelet_t1bv_15_sse2 +fftw_codelet_t1bv_16_avx +fftw_codelet_t1bv_16_sse2 +fftw_codelet_t1bv_20_avx +fftw_codelet_t1bv_20_sse2 +fftw_codelet_t1bv_25_avx +fftw_codelet_t1bv_25_sse2 +fftw_codelet_t1bv_2_avx +fftw_codelet_t1bv_2_sse2 +fftw_codelet_t1bv_32_avx +fftw_codelet_t1bv_32_sse2 +fftw_codelet_t1bv_3_avx +fftw_codelet_t1bv_3_sse2 +fftw_codelet_t1bv_4_avx +fftw_codelet_t1bv_4_sse2 +fftw_codelet_t1bv_5_avx +fftw_codelet_t1bv_5_sse2 +fftw_codelet_t1bv_64_avx +fftw_codelet_t1bv_64_sse2 +fftw_codelet_t1bv_6_avx +fftw_codelet_t1bv_6_sse2 +fftw_codelet_t1bv_7_avx +fftw_codelet_t1bv_7_sse2 +fftw_codelet_t1bv_8_avx +fftw_codelet_t1bv_8_sse2 +fftw_codelet_t1bv_9_avx +fftw_codelet_t1bv_9_sse2 +fftw_codelet_t1fuv_10_avx +fftw_codelet_t1fuv_10_sse2 +fftw_codelet_t1fuv_2_avx +fftw_codelet_t1fuv_2_sse2 +fftw_codelet_t1fuv_3_avx +fftw_codelet_t1fuv_3_sse2 +fftw_codelet_t1fuv_4_avx +fftw_codelet_t1fuv_4_sse2 +fftw_codelet_t1fuv_5_avx +fftw_codelet_t1fuv_5_sse2 +fftw_codelet_t1fuv_6_avx +fftw_codelet_t1fuv_6_sse2 +fftw_codelet_t1fuv_7_avx +fftw_codelet_t1fuv_7_sse2 +fftw_codelet_t1fuv_8_avx +fftw_codelet_t1fuv_8_sse2 +fftw_codelet_t1fuv_9_avx +fftw_codelet_t1fuv_9_sse2 +fftw_codelet_t1fv_10_avx +fftw_codelet_t1fv_10_sse2 +fftw_codelet_t1fv_12_avx +fftw_codelet_t1fv_12_sse2 +fftw_codelet_t1fv_15_avx +fftw_codelet_t1fv_15_sse2 +fftw_codelet_t1fv_16_avx +fftw_codelet_t1fv_16_sse2 +fftw_codelet_t1fv_20_avx +fftw_codelet_t1fv_20_sse2 +fftw_codelet_t1fv_25_avx +fftw_codelet_t1fv_25_sse2 +fftw_codelet_t1fv_2_avx +fftw_codelet_t1fv_2_sse2 +fftw_codelet_t1fv_32_avx +fftw_codelet_t1fv_32_sse2 +fftw_codelet_t1fv_3_avx +fftw_codelet_t1fv_3_sse2 +fftw_codelet_t1fv_4_avx +fftw_codelet_t1fv_4_sse2 +fftw_codelet_t1fv_5_avx +fftw_codelet_t1fv_5_sse2 +fftw_codelet_t1fv_64_avx +fftw_codelet_t1fv_64_sse2 +fftw_codelet_t1fv_6_avx +fftw_codelet_t1fv_6_sse2 +fftw_codelet_t1fv_7_avx +fftw_codelet_t1fv_7_sse2 +fftw_codelet_t1fv_8_avx +fftw_codelet_t1fv_8_sse2 +fftw_codelet_t1fv_9_avx +fftw_codelet_t1fv_9_sse2 +fftw_codelet_t1sv_16_avx +fftw_codelet_t1sv_16_sse2 +fftw_codelet_t1sv_2_avx +fftw_codelet_t1sv_2_sse2 +fftw_codelet_t1sv_32_avx +fftw_codelet_t1sv_32_sse2 +fftw_codelet_t1sv_4_avx +fftw_codelet_t1sv_4_sse2 +fftw_codelet_t1sv_8_avx +fftw_codelet_t1sv_8_sse2 +fftw_codelet_t2_10 +fftw_codelet_t2_16 +fftw_codelet_t2_20 +fftw_codelet_t2_25 +fftw_codelet_t2_32 +fftw_codelet_t2_4 +fftw_codelet_t2_5 +fftw_codelet_t2_64 +fftw_codelet_t2_8 +fftw_codelet_t2bv_10_avx +fftw_codelet_t2bv_10_sse2 +fftw_codelet_t2bv_16_avx +fftw_codelet_t2bv_16_sse2 +fftw_codelet_t2bv_20_avx +fftw_codelet_t2bv_20_sse2 +fftw_codelet_t2bv_25_avx +fftw_codelet_t2bv_25_sse2 +fftw_codelet_t2bv_2_avx +fftw_codelet_t2bv_2_sse2 +fftw_codelet_t2bv_32_avx +fftw_codelet_t2bv_32_sse2 +fftw_codelet_t2bv_4_avx +fftw_codelet_t2bv_4_sse2 +fftw_codelet_t2bv_5_avx +fftw_codelet_t2bv_5_sse2 +fftw_codelet_t2bv_64_avx +fftw_codelet_t2bv_64_sse2 +fftw_codelet_t2bv_8_avx +fftw_codelet_t2bv_8_sse2 +fftw_codelet_t2fv_10_avx +fftw_codelet_t2fv_10_sse2 +fftw_codelet_t2fv_16_avx +fftw_codelet_t2fv_16_sse2 +fftw_codelet_t2fv_20_avx +fftw_codelet_t2fv_20_sse2 +fftw_codelet_t2fv_25_avx +fftw_codelet_t2fv_25_sse2 +fftw_codelet_t2fv_2_avx +fftw_codelet_t2fv_2_sse2 +fftw_codelet_t2fv_32_avx +fftw_codelet_t2fv_32_sse2 +fftw_codelet_t2fv_4_avx +fftw_codelet_t2fv_4_sse2 +fftw_codelet_t2fv_5_avx +fftw_codelet_t2fv_5_sse2 +fftw_codelet_t2fv_64_avx +fftw_codelet_t2fv_64_sse2 +fftw_codelet_t2fv_8_avx +fftw_codelet_t2fv_8_sse2 +fftw_codelet_t2sv_16_avx +fftw_codelet_t2sv_16_sse2 +fftw_codelet_t2sv_32_avx +fftw_codelet_t2sv_32_sse2 +fftw_codelet_t2sv_4_avx +fftw_codelet_t2sv_4_sse2 +fftw_codelet_t2sv_8_avx +fftw_codelet_t2sv_8_sse2 +fftw_codelet_t3bv_10_avx +fftw_codelet_t3bv_10_sse2 +fftw_codelet_t3bv_16_avx +fftw_codelet_t3bv_16_sse2 +fftw_codelet_t3bv_20_avx +fftw_codelet_t3bv_20_sse2 +fftw_codelet_t3bv_25_avx +fftw_codelet_t3bv_25_sse2 +fftw_codelet_t3bv_32_avx +fftw_codelet_t3bv_32_sse2 +fftw_codelet_t3bv_4_avx +fftw_codelet_t3bv_4_sse2 +fftw_codelet_t3bv_5_avx +fftw_codelet_t3bv_5_sse2 +fftw_codelet_t3bv_8_avx +fftw_codelet_t3bv_8_sse2 +fftw_codelet_t3fv_10_avx +fftw_codelet_t3fv_10_sse2 +fftw_codelet_t3fv_16_avx +fftw_codelet_t3fv_16_sse2 +fftw_codelet_t3fv_20_avx +fftw_codelet_t3fv_20_sse2 +fftw_codelet_t3fv_25_avx +fftw_codelet_t3fv_25_sse2 +fftw_codelet_t3fv_32_avx +fftw_codelet_t3fv_32_sse2 +fftw_codelet_t3fv_4_avx +fftw_codelet_t3fv_4_sse2 +fftw_codelet_t3fv_5_avx +fftw_codelet_t3fv_5_sse2 +fftw_codelet_t3fv_8_avx +fftw_codelet_t3fv_8_sse2 +fftw_compute_tilesz +fftw_configure_planner +fftw_cost +fftw_cpy1d +fftw_cpy2d +fftw_cpy2d_ci +fftw_cpy2d_co +fftw_cpy2d_pair +fftw_cpy2d_pair_ci +fftw_cpy2d_pair_co +fftw_cpy2d_tiled +fftw_cpy2d_tiledbuf +fftw_ct_applicable +fftw_ct_genericbuf_register +fftw_ct_generic_register +fftw_ct_uglyp +fftw_destroy_plan +fftw_dft_bluestein_register +fftw_dft_buffered_register +fftw_dft_conf_standard +fftw_dft_generic_register +fftw_dft_indirect_register +fftw_dft_indirect_transpose_register +fftw_dft_nop_register +fftw_dft_r2hc_register +fftw_dft_rader_register +fftw_dft_rank_geq2_register +fftw_dft_solve +fftw_dft_thr_vrank_geq1_register +fftw_dft_vrank_geq1_register +fftw_dft_zerotens +fftw_dht_r2hc_register +fftw_dht_rader_register +fftw_dimcmp +fftw_elapsed_since +fftw_estimate_cost +fftw_execute +fftw_execute_dft +fftw_execute_dft_c2r +fftw_execute_dft_r2c +fftw_execute_r2r +fftw_execute_split_dft +fftw_execute_split_dft_c2r +fftw_execute_split_dft_r2c +fftw_export_wisdom +fftw_export_wisdom_to_file +fftw_export_wisdom_to_filename +fftw_export_wisdom_to_string +fftw_extract_reim +fftw_factors_into +fftw_factors_into_small_primes +fftw_find_generator +fftw_first_divisor +fftw_flops +fftw_forget_wisdom +fftw_fprint_plan +fftw_free +fftw_get_crude_time +fftw_guru64_kosherp +fftw_guru_kosherp +fftw_hash +fftw_have_simd_avx +fftw_have_simd_sse2 +fftw_hc2hc_applicable +fftw_hc2hc_generic_register +fftw_iabs +fftw_ialignment_of +fftw_iestimate_cost +fftw_ifree +fftw_ifree0 +fftw_imax +fftw_imin +fftw_import_system_wisdom +fftw_import_wisdom +fftw_import_wisdom_from_file +fftw_import_wisdom_from_filename +fftw_import_wisdom_from_string +fftw_init_threads +fftw_is_prime +fftw_isqrt +fftw_ithreads_init +fftw_join_taint +fftw_kdft_dif_register +fftw_kdft_difsq_register +fftw_kdft_dit_register +fftw_kdft_register +fftw_kernel_free +fftw_kernel_malloc +fftw_khc2c_register +fftw_khc2hc_register +fftw_kr2c_register +fftw_kr2r_register +fftw_make_planner_thread_safe +fftw_malloc +fftw_malloc_plain +fftw_many_kosherp +fftw_mapflags +fftw_map_r2r_kind +fftw_md5begin +fftw_md5end +fftw_md5int +fftw_md5INT +fftw_md5putb +fftw_md5putc +fftw_md5puts +fftw_md5unsigned +fftw_measure_execution_time +fftw_mkapiplan +fftw_mkplan +fftw_mkplan_d +fftw_mkplan_dft +fftw_mkplan_dftw +fftw_mkplan_f_d +fftw_mkplan_hc2c +fftw_mkplan_hc2hc +fftw_mkplanner +fftw_mkplan_rdft +fftw_mkplan_rdft2 +fftw_mkprinter +fftw_mkprinter_cnt +fftw_mkprinter_file +fftw_mkprinter_str +fftw_mkproblem +fftw_mkproblem_dft +fftw_mkproblem_dft_d +fftw_mkproblem_rdft +fftw_mkproblem_rdft_0_d +fftw_mkproblem_rdft_1 +fftw_mkproblem_rdft_1_d +fftw_mkproblem_rdft2 +fftw_mkproblem_rdft2_d +fftw_mkproblem_rdft2_d_3pointers +fftw_mkproblem_rdft_d +fftw_mkproblem_unsolvable +fftw_mkscanner +fftw_mksolver +fftw_mksolver_ct +fftw_mksolver_ct_threads +fftw_mksolver_dft_direct +fftw_mksolver_dft_directbuf +fftw_mksolver_hc2c +fftw_mksolver_hc2hc +fftw_mksolver_hc2hc_threads +fftw_mksolver_rdft2_direct +fftw_mksolver_rdft_r2c_direct +fftw_mksolver_rdft_r2c_directbuf +fftw_mksolver_rdft_r2r_direct +fftw_mkstride +fftw_mktensor +fftw_mktensor_0d +fftw_mktensor_1d +fftw_mktensor_2d +fftw_mktensor_3d +fftw_mktensor_4d +fftw_mktensor_5d +fftw_mktensor_iodims +fftw_mktensor_iodims64 +fftw_mktensor_rowmajor +fftw_mktriggen +fftw_modulo +fftw_nbuf +fftw_nbuf_redundant +fftw_next_prime +fftw_null_awake +fftw_ops_add +fftw_ops_add2 +fftw_ops_cpy +fftw_ops_madd +fftw_ops_madd2 +fftw_ops_other +fftw_ops_zero +fftw_pickdim +fftw_plan_awake +fftw_plan_destroy_internal +fftw_plan_dft +fftw_plan_dft_1d +fftw_plan_dft_2d +fftw_plan_dft_3d +fftw_plan_dft_c2r +fftw_plan_dft_c2r_1d +fftw_plan_dft_c2r_2d +fftw_plan_dft_c2r_3d +fftw_plan_dft_r2c +fftw_plan_dft_r2c_1d +fftw_plan_dft_r2c_2d +fftw_plan_dft_r2c_3d +fftw_plan_guru64_dft +fftw_plan_guru64_dft_c2r +fftw_plan_guru64_dft_r2c +fftw_plan_guru64_r2r +fftw_plan_guru64_split_dft +fftw_plan_guru64_split_dft_c2r +fftw_plan_guru64_split_dft_r2c +fftw_plan_guru_dft +fftw_plan_guru_dft_c2r +fftw_plan_guru_dft_r2c +fftw_plan_guru_r2r +fftw_plan_guru_split_dft +fftw_plan_guru_split_dft_c2r +fftw_plan_guru_split_dft_r2c +fftw_plan_many_dft +fftw_plan_many_dft_c2r +fftw_plan_many_dft_r2c +fftw_plan_many_r2r +fftw_planner_destroy +fftw_plan_null_destroy +fftw_plan_r2r +fftw_plan_r2r_1d +fftw_plan_r2r_2d +fftw_plan_r2r_3d +fftw_plan_with_nthreads +fftw_power_mod +fftw_printer_destroy +fftw_print_plan +fftw_problem_destroy +fftw_rader_tl_delete +fftw_rader_tl_find +fftw_rader_tl_insert +fftw_rdft2_buffered_register +fftw_rdft2_complex_n +fftw_rdft2_inplace_strides +fftw_rdft2_nop_register +fftw_rdft2_pad +fftw_rdft2_rank0_register +fftw_rdft2_rank_geq2_register +fftw_rdft2_rdft_register +fftw_rdft2_solve +fftw_rdft2_strides +fftw_rdft2_tensor_max_index +fftw_rdft2_thr_vrank_geq1_register +fftw_rdft2_vrank_geq1_register +fftw_rdft_buffered_register +fftw_rdft_conf_standard +fftw_rdft_dht_register +fftw_rdft_generic_register +fftw_rdft_indirect_register +fftw_rdft_kind_str +fftw_rdft_nop_register +fftw_rdft_rank0_register +fftw_rdft_rank_geq2_register +fftw_rdft_solve +fftw_rdft_thr_vrank_geq1_register +fftw_rdft_vrank3_transpose_register +fftw_rdft_vrank_geq1_register +fftw_rdft_zerotens +fftw_redft00e_r2hc_pad_register +fftw_regsolver_ct_directw +fftw_regsolver_ct_directwsq +fftw_regsolver_hc2c_direct +fftw_regsolver_hc2hc_direct +fftw_reodft00e_splitradix_register +fftw_reodft010e_r2hc_register +fftw_reodft11e_r2hc_odd_register +fftw_reodft11e_radix2_r2hc_register +fftw_reodft_conf_standard +fftw_rodft00e_r2hc_pad_register +fftw_safe_mulmod +fftw_scanner_destroy +fftw_set_planner_hooks +fftw_set_timelimit +fftw_solver_destroy +fftw_solver_register +fftw_solver_use +fftw_solvtab_exec +fftw_spawn_loop +fftw_sprint_plan +fftw_stride_destroy +fftw_taint +fftw_tensor_append +fftw_tensor_compress +fftw_tensor_compress_contiguous +fftw_tensor_copy +fftw_tensor_copy_except +fftw_tensor_copy_inplace +fftw_tensor_copy_sub +fftw_tensor_destroy +fftw_tensor_destroy2 +fftw_tensor_destroy4 +fftw_tensor_equal +fftw_tensor_inplace_locations +fftw_tensor_inplace_strides +fftw_tensor_inplace_strides2 +fftw_tensor_kosherp +fftw_tensor_max_index +fftw_tensor_md5 +fftw_tensor_min_istride +fftw_tensor_min_ostride +fftw_tensor_min_stride +fftw_tensor_print +fftw_tensor_split +fftw_tensor_strides_decrease +fftw_tensor_sz +fftw_tensor_tornk1 +fftw_the_planner +fftw_threads_cleanup +fftw_threads_conf_standard +fftw_threads_register_planner_hooks +fftw_tile2d +fftw_toobig +fftw_transpose +fftw_transpose_tiled +fftw_transpose_tiledbuf +fftw_triggen_destroy +fftw_twiddle_awake +fftw_twiddle_length +fftw_zero1d_pair diff --git a/funasr/runtime/onnxruntime/win/lib/x86/libfftw3-3.exp b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3-3.exp new file mode 100644 index 000000000..5048009f2 Binary files /dev/null and b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3-3.exp differ diff --git a/funasr/runtime/onnxruntime/win/lib/x86/libfftw3-3.lib b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3-3.lib new file mode 100644 index 000000000..7103673bf Binary files /dev/null and b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3-3.lib differ diff --git a/funasr/runtime/onnxruntime/win/lib/x86/libfftw3f-3.def b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3f-3.def new file mode 100644 index 000000000..d61a2c36c --- /dev/null +++ b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3f-3.def @@ -0,0 +1,1017 @@ +LIBRARY libfftw3f-3.dll +EXPORTS +fftwf_alignment_of +fftwf_alloc_complex +fftwf_alloc_real +fftwf_assertion_failed +fftwf_bufdist +fftwf_check_alignment_of_sse2_pm +fftwf_choose_radix +fftwf_cleanup +fftwf_cleanup_threads +fftwf_codelet_e01_8 +fftwf_codelet_e10_8 +fftwf_codelet_hb_10 +fftwf_codelet_hb_12 +fftwf_codelet_hb_15 +fftwf_codelet_hb_16 +fftwf_codelet_hb_2 +fftwf_codelet_hb_20 +fftwf_codelet_hb2_16 +fftwf_codelet_hb2_20 +fftwf_codelet_hb2_25 +fftwf_codelet_hb2_32 +fftwf_codelet_hb2_4 +fftwf_codelet_hb_25 +fftwf_codelet_hb2_5 +fftwf_codelet_hb2_8 +fftwf_codelet_hb_3 +fftwf_codelet_hb_32 +fftwf_codelet_hb_4 +fftwf_codelet_hb_5 +fftwf_codelet_hb_6 +fftwf_codelet_hb_64 +fftwf_codelet_hb_7 +fftwf_codelet_hb_8 +fftwf_codelet_hb_9 +fftwf_codelet_hc2cb_10 +fftwf_codelet_hc2cb_12 +fftwf_codelet_hc2cb_16 +fftwf_codelet_hc2cb_2 +fftwf_codelet_hc2cb_20 +fftwf_codelet_hc2cb2_16 +fftwf_codelet_hc2cb2_20 +fftwf_codelet_hc2cb2_32 +fftwf_codelet_hc2cb2_4 +fftwf_codelet_hc2cb2_8 +fftwf_codelet_hc2cb_32 +fftwf_codelet_hc2cb_4 +fftwf_codelet_hc2cb_6 +fftwf_codelet_hc2cb_8 +fftwf_codelet_hc2cbdft_10 +fftwf_codelet_hc2cbdft_12 +fftwf_codelet_hc2cbdft_16 +fftwf_codelet_hc2cbdft_2 +fftwf_codelet_hc2cbdft_20 +fftwf_codelet_hc2cbdft2_16 +fftwf_codelet_hc2cbdft2_20 +fftwf_codelet_hc2cbdft2_32 +fftwf_codelet_hc2cbdft2_4 +fftwf_codelet_hc2cbdft2_8 +fftwf_codelet_hc2cbdft_32 +fftwf_codelet_hc2cbdft_4 +fftwf_codelet_hc2cbdft_6 +fftwf_codelet_hc2cbdft_8 +fftwf_codelet_hc2cbdftv_10_avx +fftwf_codelet_hc2cbdftv_10_sse2 +fftwf_codelet_hc2cbdftv_12_avx +fftwf_codelet_hc2cbdftv_12_sse2 +fftwf_codelet_hc2cbdftv_16_avx +fftwf_codelet_hc2cbdftv_16_sse2 +fftwf_codelet_hc2cbdftv_20_avx +fftwf_codelet_hc2cbdftv_20_sse2 +fftwf_codelet_hc2cbdftv_2_avx +fftwf_codelet_hc2cbdftv_2_sse2 +fftwf_codelet_hc2cbdftv_32_avx +fftwf_codelet_hc2cbdftv_32_sse2 +fftwf_codelet_hc2cbdftv_4_avx +fftwf_codelet_hc2cbdftv_4_sse2 +fftwf_codelet_hc2cbdftv_6_avx +fftwf_codelet_hc2cbdftv_6_sse2 +fftwf_codelet_hc2cbdftv_8_avx +fftwf_codelet_hc2cbdftv_8_sse2 +fftwf_codelet_hc2cf_10 +fftwf_codelet_hc2cf_12 +fftwf_codelet_hc2cf_16 +fftwf_codelet_hc2cf_2 +fftwf_codelet_hc2cf_20 +fftwf_codelet_hc2cf2_16 +fftwf_codelet_hc2cf2_20 +fftwf_codelet_hc2cf2_32 +fftwf_codelet_hc2cf2_4 +fftwf_codelet_hc2cf2_8 +fftwf_codelet_hc2cf_32 +fftwf_codelet_hc2cf_4 +fftwf_codelet_hc2cf_6 +fftwf_codelet_hc2cf_8 +fftwf_codelet_hc2cfdft_10 +fftwf_codelet_hc2cfdft_12 +fftwf_codelet_hc2cfdft_16 +fftwf_codelet_hc2cfdft_2 +fftwf_codelet_hc2cfdft_20 +fftwf_codelet_hc2cfdft2_16 +fftwf_codelet_hc2cfdft2_20 +fftwf_codelet_hc2cfdft2_32 +fftwf_codelet_hc2cfdft2_4 +fftwf_codelet_hc2cfdft2_8 +fftwf_codelet_hc2cfdft_32 +fftwf_codelet_hc2cfdft_4 +fftwf_codelet_hc2cfdft_6 +fftwf_codelet_hc2cfdft_8 +fftwf_codelet_hc2cfdftv_10_avx +fftwf_codelet_hc2cfdftv_10_sse2 +fftwf_codelet_hc2cfdftv_12_avx +fftwf_codelet_hc2cfdftv_12_sse2 +fftwf_codelet_hc2cfdftv_16_avx +fftwf_codelet_hc2cfdftv_16_sse2 +fftwf_codelet_hc2cfdftv_20_avx +fftwf_codelet_hc2cfdftv_20_sse2 +fftwf_codelet_hc2cfdftv_2_avx +fftwf_codelet_hc2cfdftv_2_sse2 +fftwf_codelet_hc2cfdftv_32_avx +fftwf_codelet_hc2cfdftv_32_sse2 +fftwf_codelet_hc2cfdftv_4_avx +fftwf_codelet_hc2cfdftv_4_sse2 +fftwf_codelet_hc2cfdftv_6_avx +fftwf_codelet_hc2cfdftv_6_sse2 +fftwf_codelet_hc2cfdftv_8_avx +fftwf_codelet_hc2cfdftv_8_sse2 +fftwf_codelet_hf_10 +fftwf_codelet_hf_12 +fftwf_codelet_hf_15 +fftwf_codelet_hf_16 +fftwf_codelet_hf_2 +fftwf_codelet_hf_20 +fftwf_codelet_hf2_16 +fftwf_codelet_hf2_20 +fftwf_codelet_hf2_25 +fftwf_codelet_hf2_32 +fftwf_codelet_hf2_4 +fftwf_codelet_hf_25 +fftwf_codelet_hf2_5 +fftwf_codelet_hf2_8 +fftwf_codelet_hf_3 +fftwf_codelet_hf_32 +fftwf_codelet_hf_4 +fftwf_codelet_hf_5 +fftwf_codelet_hf_6 +fftwf_codelet_hf_64 +fftwf_codelet_hf_7 +fftwf_codelet_hf_8 +fftwf_codelet_hf_9 +fftwf_codelet_n1_10 +fftwf_codelet_n1_11 +fftwf_codelet_n1_12 +fftwf_codelet_n1_13 +fftwf_codelet_n1_14 +fftwf_codelet_n1_15 +fftwf_codelet_n1_16 +fftwf_codelet_n1_2 +fftwf_codelet_n1_20 +fftwf_codelet_n1_25 +fftwf_codelet_n1_3 +fftwf_codelet_n1_32 +fftwf_codelet_n1_4 +fftwf_codelet_n1_5 +fftwf_codelet_n1_6 +fftwf_codelet_n1_64 +fftwf_codelet_n1_7 +fftwf_codelet_n1_8 +fftwf_codelet_n1_9 +fftwf_codelet_n1bv_10_avx +fftwf_codelet_n1bv_10_sse2 +fftwf_codelet_n1bv_11_avx +fftwf_codelet_n1bv_11_sse2 +fftwf_codelet_n1bv_128_avx +fftwf_codelet_n1bv_128_sse2 +fftwf_codelet_n1bv_12_avx +fftwf_codelet_n1bv_12_sse2 +fftwf_codelet_n1bv_13_avx +fftwf_codelet_n1bv_13_sse2 +fftwf_codelet_n1bv_14_avx +fftwf_codelet_n1bv_14_sse2 +fftwf_codelet_n1bv_15_avx +fftwf_codelet_n1bv_15_sse2 +fftwf_codelet_n1bv_16_avx +fftwf_codelet_n1bv_16_sse2 +fftwf_codelet_n1bv_20_avx +fftwf_codelet_n1bv_20_sse2 +fftwf_codelet_n1bv_25_avx +fftwf_codelet_n1bv_25_sse2 +fftwf_codelet_n1bv_2_avx +fftwf_codelet_n1bv_2_sse2 +fftwf_codelet_n1bv_32_avx +fftwf_codelet_n1bv_32_sse2 +fftwf_codelet_n1bv_3_avx +fftwf_codelet_n1bv_3_sse2 +fftwf_codelet_n1bv_4_avx +fftwf_codelet_n1bv_4_sse2 +fftwf_codelet_n1bv_5_avx +fftwf_codelet_n1bv_5_sse2 +fftwf_codelet_n1bv_64_avx +fftwf_codelet_n1bv_64_sse2 +fftwf_codelet_n1bv_6_avx +fftwf_codelet_n1bv_6_sse2 +fftwf_codelet_n1bv_7_avx +fftwf_codelet_n1bv_7_sse2 +fftwf_codelet_n1bv_8_avx +fftwf_codelet_n1bv_8_sse2 +fftwf_codelet_n1bv_9_avx +fftwf_codelet_n1bv_9_sse2 +fftwf_codelet_n1fv_10_avx +fftwf_codelet_n1fv_10_sse2 +fftwf_codelet_n1fv_11_avx +fftwf_codelet_n1fv_11_sse2 +fftwf_codelet_n1fv_128_avx +fftwf_codelet_n1fv_128_sse2 +fftwf_codelet_n1fv_12_avx +fftwf_codelet_n1fv_12_sse2 +fftwf_codelet_n1fv_13_avx +fftwf_codelet_n1fv_13_sse2 +fftwf_codelet_n1fv_14_avx +fftwf_codelet_n1fv_14_sse2 +fftwf_codelet_n1fv_15_avx +fftwf_codelet_n1fv_15_sse2 +fftwf_codelet_n1fv_16_avx +fftwf_codelet_n1fv_16_sse2 +fftwf_codelet_n1fv_20_avx +fftwf_codelet_n1fv_20_sse2 +fftwf_codelet_n1fv_25_avx +fftwf_codelet_n1fv_25_sse2 +fftwf_codelet_n1fv_2_avx +fftwf_codelet_n1fv_2_sse2 +fftwf_codelet_n1fv_32_avx +fftwf_codelet_n1fv_32_sse2 +fftwf_codelet_n1fv_3_avx +fftwf_codelet_n1fv_3_sse2 +fftwf_codelet_n1fv_4_avx +fftwf_codelet_n1fv_4_sse2 +fftwf_codelet_n1fv_5_avx +fftwf_codelet_n1fv_5_sse2 +fftwf_codelet_n1fv_64_avx +fftwf_codelet_n1fv_64_sse2 +fftwf_codelet_n1fv_6_avx +fftwf_codelet_n1fv_6_sse2 +fftwf_codelet_n1fv_7_avx +fftwf_codelet_n1fv_7_sse2 +fftwf_codelet_n1fv_8_avx +fftwf_codelet_n1fv_8_sse2 +fftwf_codelet_n1fv_9_avx +fftwf_codelet_n1fv_9_sse2 +fftwf_codelet_n2bv_10_avx +fftwf_codelet_n2bv_10_sse2 +fftwf_codelet_n2bv_12_avx +fftwf_codelet_n2bv_12_sse2 +fftwf_codelet_n2bv_14_avx +fftwf_codelet_n2bv_14_sse2 +fftwf_codelet_n2bv_16_avx +fftwf_codelet_n2bv_16_sse2 +fftwf_codelet_n2bv_20_avx +fftwf_codelet_n2bv_20_sse2 +fftwf_codelet_n2bv_2_avx +fftwf_codelet_n2bv_2_sse2 +fftwf_codelet_n2bv_32_avx +fftwf_codelet_n2bv_32_sse2 +fftwf_codelet_n2bv_4_avx +fftwf_codelet_n2bv_4_sse2 +fftwf_codelet_n2bv_64_avx +fftwf_codelet_n2bv_64_sse2 +fftwf_codelet_n2bv_6_avx +fftwf_codelet_n2bv_6_sse2 +fftwf_codelet_n2bv_8_avx +fftwf_codelet_n2bv_8_sse2 +fftwf_codelet_n2fv_10_avx +fftwf_codelet_n2fv_10_sse2 +fftwf_codelet_n2fv_12_avx +fftwf_codelet_n2fv_12_sse2 +fftwf_codelet_n2fv_14_avx +fftwf_codelet_n2fv_14_sse2 +fftwf_codelet_n2fv_16_avx +fftwf_codelet_n2fv_16_sse2 +fftwf_codelet_n2fv_20_avx +fftwf_codelet_n2fv_20_sse2 +fftwf_codelet_n2fv_2_avx +fftwf_codelet_n2fv_2_sse2 +fftwf_codelet_n2fv_32_avx +fftwf_codelet_n2fv_32_sse2 +fftwf_codelet_n2fv_4_avx +fftwf_codelet_n2fv_4_sse2 +fftwf_codelet_n2fv_64_avx +fftwf_codelet_n2fv_64_sse2 +fftwf_codelet_n2fv_6_avx +fftwf_codelet_n2fv_6_sse2 +fftwf_codelet_n2fv_8_avx +fftwf_codelet_n2fv_8_sse2 +fftwf_codelet_n2sv_16_avx +fftwf_codelet_n2sv_16_sse2 +fftwf_codelet_n2sv_32_avx +fftwf_codelet_n2sv_32_sse2 +fftwf_codelet_n2sv_4_avx +fftwf_codelet_n2sv_4_sse2 +fftwf_codelet_n2sv_64_avx +fftwf_codelet_n2sv_64_sse2 +fftwf_codelet_n2sv_8_avx +fftwf_codelet_n2sv_8_sse2 +fftwf_codelet_q1_2 +fftwf_codelet_q1_3 +fftwf_codelet_q1_4 +fftwf_codelet_q1_5 +fftwf_codelet_q1_6 +fftwf_codelet_q1_8 +fftwf_codelet_q1bv_2_avx +fftwf_codelet_q1bv_2_sse2 +fftwf_codelet_q1bv_4_avx +fftwf_codelet_q1bv_4_sse2 +fftwf_codelet_q1bv_5_avx +fftwf_codelet_q1bv_5_sse2 +fftwf_codelet_q1bv_8_avx +fftwf_codelet_q1bv_8_sse2 +fftwf_codelet_q1fv_2_avx +fftwf_codelet_q1fv_2_sse2 +fftwf_codelet_q1fv_4_avx +fftwf_codelet_q1fv_4_sse2 +fftwf_codelet_q1fv_5_avx +fftwf_codelet_q1fv_5_sse2 +fftwf_codelet_q1fv_8_avx +fftwf_codelet_q1fv_8_sse2 +fftwf_codelet_r2cb_10 +fftwf_codelet_r2cb_11 +fftwf_codelet_r2cb_12 +fftwf_codelet_r2cb_128 +fftwf_codelet_r2cb_13 +fftwf_codelet_r2cb_14 +fftwf_codelet_r2cb_15 +fftwf_codelet_r2cb_16 +fftwf_codelet_r2cb_2 +fftwf_codelet_r2cb_20 +fftwf_codelet_r2cb_25 +fftwf_codelet_r2cb_3 +fftwf_codelet_r2cb_32 +fftwf_codelet_r2cb_4 +fftwf_codelet_r2cb_5 +fftwf_codelet_r2cb_6 +fftwf_codelet_r2cb_64 +fftwf_codelet_r2cb_7 +fftwf_codelet_r2cb_8 +fftwf_codelet_r2cb_9 +fftwf_codelet_r2cbIII_10 +fftwf_codelet_r2cbIII_12 +fftwf_codelet_r2cbIII_15 +fftwf_codelet_r2cbIII_16 +fftwf_codelet_r2cbIII_2 +fftwf_codelet_r2cbIII_20 +fftwf_codelet_r2cbIII_25 +fftwf_codelet_r2cbIII_3 +fftwf_codelet_r2cbIII_32 +fftwf_codelet_r2cbIII_4 +fftwf_codelet_r2cbIII_5 +fftwf_codelet_r2cbIII_6 +fftwf_codelet_r2cbIII_64 +fftwf_codelet_r2cbIII_7 +fftwf_codelet_r2cbIII_8 +fftwf_codelet_r2cbIII_9 +fftwf_codelet_r2cf_10 +fftwf_codelet_r2cf_11 +fftwf_codelet_r2cf_12 +fftwf_codelet_r2cf_128 +fftwf_codelet_r2cf_13 +fftwf_codelet_r2cf_14 +fftwf_codelet_r2cf_15 +fftwf_codelet_r2cf_16 +fftwf_codelet_r2cf_2 +fftwf_codelet_r2cf_20 +fftwf_codelet_r2cf_25 +fftwf_codelet_r2cf_3 +fftwf_codelet_r2cf_32 +fftwf_codelet_r2cf_4 +fftwf_codelet_r2cf_5 +fftwf_codelet_r2cf_6 +fftwf_codelet_r2cf_64 +fftwf_codelet_r2cf_7 +fftwf_codelet_r2cf_8 +fftwf_codelet_r2cf_9 +fftwf_codelet_r2cfII_10 +fftwf_codelet_r2cfII_12 +fftwf_codelet_r2cfII_15 +fftwf_codelet_r2cfII_16 +fftwf_codelet_r2cfII_2 +fftwf_codelet_r2cfII_20 +fftwf_codelet_r2cfII_25 +fftwf_codelet_r2cfII_3 +fftwf_codelet_r2cfII_32 +fftwf_codelet_r2cfII_4 +fftwf_codelet_r2cfII_5 +fftwf_codelet_r2cfII_6 +fftwf_codelet_r2cfII_64 +fftwf_codelet_r2cfII_7 +fftwf_codelet_r2cfII_8 +fftwf_codelet_r2cfII_9 +fftwf_codelet_t1_10 +fftwf_codelet_t1_12 +fftwf_codelet_t1_15 +fftwf_codelet_t1_16 +fftwf_codelet_t1_2 +fftwf_codelet_t1_20 +fftwf_codelet_t1_25 +fftwf_codelet_t1_3 +fftwf_codelet_t1_32 +fftwf_codelet_t1_4 +fftwf_codelet_t1_5 +fftwf_codelet_t1_6 +fftwf_codelet_t1_64 +fftwf_codelet_t1_7 +fftwf_codelet_t1_8 +fftwf_codelet_t1_9 +fftwf_codelet_t1buv_10_avx +fftwf_codelet_t1buv_10_sse2 +fftwf_codelet_t1buv_2_avx +fftwf_codelet_t1buv_2_sse2 +fftwf_codelet_t1buv_3_avx +fftwf_codelet_t1buv_3_sse2 +fftwf_codelet_t1buv_4_avx +fftwf_codelet_t1buv_4_sse2 +fftwf_codelet_t1buv_5_avx +fftwf_codelet_t1buv_5_sse2 +fftwf_codelet_t1buv_6_avx +fftwf_codelet_t1buv_6_sse2 +fftwf_codelet_t1buv_7_avx +fftwf_codelet_t1buv_7_sse2 +fftwf_codelet_t1buv_8_avx +fftwf_codelet_t1buv_8_sse2 +fftwf_codelet_t1buv_9_avx +fftwf_codelet_t1buv_9_sse2 +fftwf_codelet_t1bv_10_avx +fftwf_codelet_t1bv_10_sse2 +fftwf_codelet_t1bv_12_avx +fftwf_codelet_t1bv_12_sse2 +fftwf_codelet_t1bv_15_avx +fftwf_codelet_t1bv_15_sse2 +fftwf_codelet_t1bv_16_avx +fftwf_codelet_t1bv_16_sse2 +fftwf_codelet_t1bv_20_avx +fftwf_codelet_t1bv_20_sse2 +fftwf_codelet_t1bv_25_avx +fftwf_codelet_t1bv_25_sse2 +fftwf_codelet_t1bv_2_avx +fftwf_codelet_t1bv_2_sse2 +fftwf_codelet_t1bv_32_avx +fftwf_codelet_t1bv_32_sse2 +fftwf_codelet_t1bv_3_avx +fftwf_codelet_t1bv_3_sse2 +fftwf_codelet_t1bv_4_avx +fftwf_codelet_t1bv_4_sse2 +fftwf_codelet_t1bv_5_avx +fftwf_codelet_t1bv_5_sse2 +fftwf_codelet_t1bv_64_avx +fftwf_codelet_t1bv_64_sse2 +fftwf_codelet_t1bv_6_avx +fftwf_codelet_t1bv_6_sse2 +fftwf_codelet_t1bv_7_avx +fftwf_codelet_t1bv_7_sse2 +fftwf_codelet_t1bv_8_avx +fftwf_codelet_t1bv_8_sse2 +fftwf_codelet_t1bv_9_avx +fftwf_codelet_t1bv_9_sse2 +fftwf_codelet_t1fuv_10_avx +fftwf_codelet_t1fuv_10_sse2 +fftwf_codelet_t1fuv_2_avx +fftwf_codelet_t1fuv_2_sse2 +fftwf_codelet_t1fuv_3_avx +fftwf_codelet_t1fuv_3_sse2 +fftwf_codelet_t1fuv_4_avx +fftwf_codelet_t1fuv_4_sse2 +fftwf_codelet_t1fuv_5_avx +fftwf_codelet_t1fuv_5_sse2 +fftwf_codelet_t1fuv_6_avx +fftwf_codelet_t1fuv_6_sse2 +fftwf_codelet_t1fuv_7_avx +fftwf_codelet_t1fuv_7_sse2 +fftwf_codelet_t1fuv_8_avx +fftwf_codelet_t1fuv_8_sse2 +fftwf_codelet_t1fuv_9_avx +fftwf_codelet_t1fuv_9_sse2 +fftwf_codelet_t1fv_10_avx +fftwf_codelet_t1fv_10_sse2 +fftwf_codelet_t1fv_12_avx +fftwf_codelet_t1fv_12_sse2 +fftwf_codelet_t1fv_15_avx +fftwf_codelet_t1fv_15_sse2 +fftwf_codelet_t1fv_16_avx +fftwf_codelet_t1fv_16_sse2 +fftwf_codelet_t1fv_20_avx +fftwf_codelet_t1fv_20_sse2 +fftwf_codelet_t1fv_25_avx +fftwf_codelet_t1fv_25_sse2 +fftwf_codelet_t1fv_2_avx +fftwf_codelet_t1fv_2_sse2 +fftwf_codelet_t1fv_32_avx +fftwf_codelet_t1fv_32_sse2 +fftwf_codelet_t1fv_3_avx +fftwf_codelet_t1fv_3_sse2 +fftwf_codelet_t1fv_4_avx +fftwf_codelet_t1fv_4_sse2 +fftwf_codelet_t1fv_5_avx +fftwf_codelet_t1fv_5_sse2 +fftwf_codelet_t1fv_64_avx +fftwf_codelet_t1fv_64_sse2 +fftwf_codelet_t1fv_6_avx +fftwf_codelet_t1fv_6_sse2 +fftwf_codelet_t1fv_7_avx +fftwf_codelet_t1fv_7_sse2 +fftwf_codelet_t1fv_8_avx +fftwf_codelet_t1fv_8_sse2 +fftwf_codelet_t1fv_9_avx +fftwf_codelet_t1fv_9_sse2 +fftwf_codelet_t1sv_16_avx +fftwf_codelet_t1sv_16_sse2 +fftwf_codelet_t1sv_2_avx +fftwf_codelet_t1sv_2_sse2 +fftwf_codelet_t1sv_32_avx +fftwf_codelet_t1sv_32_sse2 +fftwf_codelet_t1sv_4_avx +fftwf_codelet_t1sv_4_sse2 +fftwf_codelet_t1sv_8_avx +fftwf_codelet_t1sv_8_sse2 +fftwf_codelet_t2_10 +fftwf_codelet_t2_16 +fftwf_codelet_t2_20 +fftwf_codelet_t2_25 +fftwf_codelet_t2_32 +fftwf_codelet_t2_4 +fftwf_codelet_t2_5 +fftwf_codelet_t2_64 +fftwf_codelet_t2_8 +fftwf_codelet_t2bv_10_avx +fftwf_codelet_t2bv_10_sse2 +fftwf_codelet_t2bv_16_avx +fftwf_codelet_t2bv_16_sse2 +fftwf_codelet_t2bv_20_avx +fftwf_codelet_t2bv_20_sse2 +fftwf_codelet_t2bv_25_avx +fftwf_codelet_t2bv_25_sse2 +fftwf_codelet_t2bv_2_avx +fftwf_codelet_t2bv_2_sse2 +fftwf_codelet_t2bv_32_avx +fftwf_codelet_t2bv_32_sse2 +fftwf_codelet_t2bv_4_avx +fftwf_codelet_t2bv_4_sse2 +fftwf_codelet_t2bv_5_avx +fftwf_codelet_t2bv_5_sse2 +fftwf_codelet_t2bv_64_avx +fftwf_codelet_t2bv_64_sse2 +fftwf_codelet_t2bv_8_avx +fftwf_codelet_t2bv_8_sse2 +fftwf_codelet_t2fv_10_avx +fftwf_codelet_t2fv_10_sse2 +fftwf_codelet_t2fv_16_avx +fftwf_codelet_t2fv_16_sse2 +fftwf_codelet_t2fv_20_avx +fftwf_codelet_t2fv_20_sse2 +fftwf_codelet_t2fv_25_avx +fftwf_codelet_t2fv_25_sse2 +fftwf_codelet_t2fv_2_avx +fftwf_codelet_t2fv_2_sse2 +fftwf_codelet_t2fv_32_avx +fftwf_codelet_t2fv_32_sse2 +fftwf_codelet_t2fv_4_avx +fftwf_codelet_t2fv_4_sse2 +fftwf_codelet_t2fv_5_avx +fftwf_codelet_t2fv_5_sse2 +fftwf_codelet_t2fv_64_avx +fftwf_codelet_t2fv_64_sse2 +fftwf_codelet_t2fv_8_avx +fftwf_codelet_t2fv_8_sse2 +fftwf_codelet_t2sv_16_avx +fftwf_codelet_t2sv_16_sse2 +fftwf_codelet_t2sv_32_avx +fftwf_codelet_t2sv_32_sse2 +fftwf_codelet_t2sv_4_avx +fftwf_codelet_t2sv_4_sse2 +fftwf_codelet_t2sv_8_avx +fftwf_codelet_t2sv_8_sse2 +fftwf_codelet_t3bv_10_avx +fftwf_codelet_t3bv_10_sse2 +fftwf_codelet_t3bv_16_avx +fftwf_codelet_t3bv_16_sse2 +fftwf_codelet_t3bv_20_avx +fftwf_codelet_t3bv_20_sse2 +fftwf_codelet_t3bv_25_avx +fftwf_codelet_t3bv_25_sse2 +fftwf_codelet_t3bv_32_avx +fftwf_codelet_t3bv_32_sse2 +fftwf_codelet_t3bv_4_avx +fftwf_codelet_t3bv_4_sse2 +fftwf_codelet_t3bv_5_avx +fftwf_codelet_t3bv_5_sse2 +fftwf_codelet_t3bv_8_avx +fftwf_codelet_t3bv_8_sse2 +fftwf_codelet_t3fv_10_avx +fftwf_codelet_t3fv_10_sse2 +fftwf_codelet_t3fv_16_avx +fftwf_codelet_t3fv_16_sse2 +fftwf_codelet_t3fv_20_avx +fftwf_codelet_t3fv_20_sse2 +fftwf_codelet_t3fv_25_avx +fftwf_codelet_t3fv_25_sse2 +fftwf_codelet_t3fv_32_avx +fftwf_codelet_t3fv_32_sse2 +fftwf_codelet_t3fv_4_avx +fftwf_codelet_t3fv_4_sse2 +fftwf_codelet_t3fv_5_avx +fftwf_codelet_t3fv_5_sse2 +fftwf_codelet_t3fv_8_avx +fftwf_codelet_t3fv_8_sse2 +fftwf_compute_tilesz +fftwf_configure_planner +fftwf_cost +fftwf_cpy1d +fftwf_cpy2d +fftwf_cpy2d_ci +fftwf_cpy2d_co +fftwf_cpy2d_pair +fftwf_cpy2d_pair_ci +fftwf_cpy2d_pair_co +fftwf_cpy2d_tiled +fftwf_cpy2d_tiledbuf +fftwf_ct_applicable +fftwf_ct_genericbuf_register +fftwf_ct_generic_register +fftwf_ct_uglyp +fftwf_destroy_plan +fftwf_dft_bluestein_register +fftwf_dft_buffered_register +fftwf_dft_conf_standard +fftwf_dft_generic_register +fftwf_dft_indirect_register +fftwf_dft_indirect_transpose_register +fftwf_dft_nop_register +fftwf_dft_r2hc_register +fftwf_dft_rader_register +fftwf_dft_rank_geq2_register +fftwf_dft_solve +fftwf_dft_thr_vrank_geq1_register +fftwf_dft_vrank_geq1_register +fftwf_dft_zerotens +fftwf_dht_r2hc_register +fftwf_dht_rader_register +fftwf_dimcmp +fftwf_elapsed_since +fftwf_estimate_cost +fftwf_execute +fftwf_execute_dft +fftwf_execute_dft_c2r +fftwf_execute_dft_r2c +fftwf_execute_r2r +fftwf_execute_split_dft +fftwf_execute_split_dft_c2r +fftwf_execute_split_dft_r2c +fftwf_export_wisdom +fftwf_export_wisdom_to_file +fftwf_export_wisdom_to_filename +fftwf_export_wisdom_to_string +fftwf_extract_reim +fftwf_factors_into +fftwf_factors_into_small_primes +fftwf_find_generator +fftwf_first_divisor +fftwf_flops +fftwf_forget_wisdom +fftwf_fprint_plan +fftwf_free +fftwf_get_crude_time +fftwf_guru64_kosherp +fftwf_guru_kosherp +fftwf_hash +fftwf_have_simd_avx +fftwf_have_simd_sse2 +fftwf_hc2hc_applicable +fftwf_hc2hc_generic_register +fftwf_iabs +fftwf_ialignment_of +fftwf_iestimate_cost +fftwf_ifree +fftwf_ifree0 +fftwf_imax +fftwf_imin +fftwf_import_system_wisdom +fftwf_import_wisdom +fftwf_import_wisdom_from_file +fftwf_import_wisdom_from_filename +fftwf_import_wisdom_from_string +fftwf_init_threads +fftwf_is_prime +fftwf_isqrt +fftwf_ithreads_init +fftwf_join_taint +fftwf_kdft_dif_register +fftwf_kdft_difsq_register +fftwf_kdft_dit_register +fftwf_kdft_register +fftwf_kernel_free +fftwf_kernel_malloc +fftwf_khc2c_register +fftwf_khc2hc_register +fftwf_kr2c_register +fftwf_kr2r_register +fftwf_make_planner_thread_safe +fftwf_malloc +fftwf_malloc_plain +fftwf_many_kosherp +fftwf_mapflags +fftwf_map_r2r_kind +fftwf_md5begin +fftwf_md5end +fftwf_md5int +fftwf_md5INT +fftwf_md5putb +fftwf_md5putc +fftwf_md5puts +fftwf_md5unsigned +fftwf_measure_execution_time +fftwf_mkapiplan +fftwf_mkplan +fftwf_mkplan_d +fftwf_mkplan_dft +fftwf_mkplan_dftw +fftwf_mkplan_f_d +fftwf_mkplan_hc2c +fftwf_mkplan_hc2hc +fftwf_mkplanner +fftwf_mkplan_rdft +fftwf_mkplan_rdft2 +fftwf_mkprinter +fftwf_mkprinter_cnt +fftwf_mkprinter_file +fftwf_mkprinter_str +fftwf_mkproblem +fftwf_mkproblem_dft +fftwf_mkproblem_dft_d +fftwf_mkproblem_rdft +fftwf_mkproblem_rdft_0_d +fftwf_mkproblem_rdft_1 +fftwf_mkproblem_rdft_1_d +fftwf_mkproblem_rdft2 +fftwf_mkproblem_rdft2_d +fftwf_mkproblem_rdft2_d_3pointers +fftwf_mkproblem_rdft_d +fftwf_mkproblem_unsolvable +fftwf_mkscanner +fftwf_mksolver +fftwf_mksolver_ct +fftwf_mksolver_ct_threads +fftwf_mksolver_dft_direct +fftwf_mksolver_dft_directbuf +fftwf_mksolver_hc2c +fftwf_mksolver_hc2hc +fftwf_mksolver_hc2hc_threads +fftwf_mksolver_rdft2_direct +fftwf_mksolver_rdft_r2c_direct +fftwf_mksolver_rdft_r2c_directbuf +fftwf_mksolver_rdft_r2r_direct +fftwf_mkstride +fftwf_mktensor +fftwf_mktensor_0d +fftwf_mktensor_1d +fftwf_mktensor_2d +fftwf_mktensor_3d +fftwf_mktensor_4d +fftwf_mktensor_5d +fftwf_mktensor_iodims +fftwf_mktensor_iodims64 +fftwf_mktensor_rowmajor +fftwf_mktriggen +fftwf_modulo +fftwf_nbuf +fftwf_nbuf_redundant +fftwf_next_prime +fftwf_null_awake +fftwf_ops_add +fftwf_ops_add2 +fftwf_ops_cpy +fftwf_ops_madd +fftwf_ops_madd2 +fftwf_ops_other +fftwf_ops_zero +fftwf_pickdim +fftwf_plan_awake +fftwf_plan_destroy_internal +fftwf_plan_dft +fftwf_plan_dft_1d +fftwf_plan_dft_2d +fftwf_plan_dft_3d +fftwf_plan_dft_c2r +fftwf_plan_dft_c2r_1d +fftwf_plan_dft_c2r_2d +fftwf_plan_dft_c2r_3d +fftwf_plan_dft_r2c +fftwf_plan_dft_r2c_1d +fftwf_plan_dft_r2c_2d +fftwf_plan_dft_r2c_3d +fftwf_plan_guru64_dft +fftwf_plan_guru64_dft_c2r +fftwf_plan_guru64_dft_r2c +fftwf_plan_guru64_r2r +fftwf_plan_guru64_split_dft +fftwf_plan_guru64_split_dft_c2r +fftwf_plan_guru64_split_dft_r2c +fftwf_plan_guru_dft +fftwf_plan_guru_dft_c2r +fftwf_plan_guru_dft_r2c +fftwf_plan_guru_r2r +fftwf_plan_guru_split_dft +fftwf_plan_guru_split_dft_c2r +fftwf_plan_guru_split_dft_r2c +fftwf_plan_many_dft +fftwf_plan_many_dft_c2r +fftwf_plan_many_dft_r2c +fftwf_plan_many_r2r +fftwf_planner_destroy +fftwf_plan_null_destroy +fftwf_plan_r2r +fftwf_plan_r2r_1d +fftwf_plan_r2r_2d +fftwf_plan_r2r_3d +fftwf_plan_with_nthreads +fftwf_power_mod +fftwf_printer_destroy +fftwf_print_plan +fftwf_problem_destroy +fftwf_rader_tl_delete +fftwf_rader_tl_find +fftwf_rader_tl_insert +fftwf_rdft2_buffered_register +fftwf_rdft2_complex_n +fftwf_rdft2_inplace_strides +fftwf_rdft2_nop_register +fftwf_rdft2_pad +fftwf_rdft2_rank0_register +fftwf_rdft2_rank_geq2_register +fftwf_rdft2_rdft_register +fftwf_rdft2_solve +fftwf_rdft2_strides +fftwf_rdft2_tensor_max_index +fftwf_rdft2_thr_vrank_geq1_register +fftwf_rdft2_vrank_geq1_register +fftwf_rdft_buffered_register +fftwf_rdft_conf_standard +fftwf_rdft_dht_register +fftwf_rdft_generic_register +fftwf_rdft_indirect_register +fftwf_rdft_kind_str +fftwf_rdft_nop_register +fftwf_rdft_rank0_register +fftwf_rdft_rank_geq2_register +fftwf_rdft_solve +fftwf_rdft_thr_vrank_geq1_register +fftwf_rdft_vrank3_transpose_register +fftwf_rdft_vrank_geq1_register +fftwf_rdft_zerotens +fftwf_redft00e_r2hc_pad_register +fftwf_regsolver_ct_directw +fftwf_regsolver_ct_directwsq +fftwf_regsolver_hc2c_direct +fftwf_regsolver_hc2hc_direct +fftwf_reodft00e_splitradix_register +fftwf_reodft010e_r2hc_register +fftwf_reodft11e_r2hc_odd_register +fftwf_reodft11e_radix2_r2hc_register +fftwf_reodft_conf_standard +fftwf_rodft00e_r2hc_pad_register +fftwf_safe_mulmod +fftwf_scanner_destroy +fftwf_set_planner_hooks +fftwf_set_timelimit +fftwf_solver_destroy +fftwf_solver_register +fftwf_solver_use +fftwf_solvtab_exec +fftwf_spawn_loop +fftwf_sprint_plan +fftwf_stride_destroy +fftwf_taint +fftwf_tensor_append +fftwf_tensor_compress +fftwf_tensor_compress_contiguous +fftwf_tensor_copy +fftwf_tensor_copy_except +fftwf_tensor_copy_inplace +fftwf_tensor_copy_sub +fftwf_tensor_destroy +fftwf_tensor_destroy2 +fftwf_tensor_destroy4 +fftwf_tensor_equal +fftwf_tensor_inplace_locations +fftwf_tensor_inplace_strides +fftwf_tensor_inplace_strides2 +fftwf_tensor_kosherp +fftwf_tensor_max_index +fftwf_tensor_md5 +fftwf_tensor_min_istride +fftwf_tensor_min_ostride +fftwf_tensor_min_stride +fftwf_tensor_print +fftwf_tensor_split +fftwf_tensor_strides_decrease +fftwf_tensor_sz +fftwf_tensor_tornk1 +fftwf_the_planner +fftwf_threads_cleanup +fftwf_threads_conf_standard +fftwf_threads_register_planner_hooks +fftwf_tile2d +fftwf_toobig +fftwf_transpose +fftwf_transpose_tiled +fftwf_transpose_tiledbuf +fftwf_triggen_destroy +fftwf_twiddle_awake +fftwf_twiddle_length +fftwf_zero1d_pair +sfftw_cleanup_ +sfftw_cleanup__ +sfftw_cleanup_threads_ +sfftw_cleanup_threads__ +sfftw_cost_ +sfftw_cost__ +sfftw_destroy_plan_ +sfftw_destroy_plan__ +sfftw_estimate_cost_ +sfftw_estimate_cost__ +sfftw_execute_ +sfftw_execute__ +sfftw_execute_dft_ +sfftw_execute_dft__ +sfftw_execute_dft_c2r_ +sfftw_execute_dft_c2r__ +sfftw_execute_dft_r2c_ +sfftw_execute_dft_r2c__ +sfftw_execute_r2r_ +sfftw_execute_r2r__ +sfftw_execute_split_dft_ +sfftw_execute_split_dft__ +sfftw_execute_split_dft_c2r_ +sfftw_execute_split_dft_c2r__ +sfftw_execute_split_dft_r2c_ +sfftw_execute_split_dft_r2c__ +sfftw_export_wisdom_ +sfftw_export_wisdom__ +sfftw_flops_ +sfftw_flops__ +sfftw_forget_wisdom_ +sfftw_forget_wisdom__ +sfftw_import_system_wisdom_ +sfftw_import_system_wisdom__ +sfftw_import_wisdom_ +sfftw_import_wisdom__ +sfftw_init_threads_ +sfftw_init_threads__ +sfftw_plan_dft_ +sfftw_plan_dft__ +sfftw_plan_dft_1d_ +sfftw_plan_dft_1d__ +sfftw_plan_dft_2d_ +sfftw_plan_dft_2d__ +sfftw_plan_dft_3d_ +sfftw_plan_dft_3d__ +sfftw_plan_dft_c2r_ +sfftw_plan_dft_c2r__ +sfftw_plan_dft_c2r_1d_ +sfftw_plan_dft_c2r_1d__ +sfftw_plan_dft_c2r_2d_ +sfftw_plan_dft_c2r_2d__ +sfftw_plan_dft_c2r_3d_ +sfftw_plan_dft_c2r_3d__ +sfftw_plan_dft_r2c_ +sfftw_plan_dft_r2c__ +sfftw_plan_dft_r2c_1d_ +sfftw_plan_dft_r2c_1d__ +sfftw_plan_dft_r2c_2d_ +sfftw_plan_dft_r2c_2d__ +sfftw_plan_dft_r2c_3d_ +sfftw_plan_dft_r2c_3d__ +sfftw_plan_guru_dft_ +sfftw_plan_guru_dft__ +sfftw_plan_guru_dft_c2r_ +sfftw_plan_guru_dft_c2r__ +sfftw_plan_guru_dft_r2c_ +sfftw_plan_guru_dft_r2c__ +sfftw_plan_guru_r2r_ +sfftw_plan_guru_r2r__ +sfftw_plan_guru_split_dft_ +sfftw_plan_guru_split_dft__ +sfftw_plan_guru_split_dft_c2r_ +sfftw_plan_guru_split_dft_c2r__ +sfftw_plan_guru_split_dft_r2c_ +sfftw_plan_guru_split_dft_r2c__ +sfftw_plan_many_dft_ +sfftw_plan_many_dft__ +sfftw_plan_many_dft_c2r_ +sfftw_plan_many_dft_c2r__ +sfftw_plan_many_dft_r2c_ +sfftw_plan_many_dft_r2c__ +sfftw_plan_many_r2r_ +sfftw_plan_many_r2r__ +sfftw_plan_r2r_ +sfftw_plan_r2r__ +sfftw_plan_r2r_1d_ +sfftw_plan_r2r_1d__ +sfftw_plan_r2r_2d_ +sfftw_plan_r2r_2d__ +sfftw_plan_r2r_3d_ +sfftw_plan_r2r_3d__ +sfftw_plan_with_nthreads_ +sfftw_plan_with_nthreads__ +sfftw_print_plan_ +sfftw_print_plan__ +sfftw_set_timelimit_ +sfftw_set_timelimit__ diff --git a/funasr/runtime/onnxruntime/win/lib/x86/libfftw3f-3.exp b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3f-3.exp new file mode 100644 index 000000000..c2380657c Binary files /dev/null and b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3f-3.exp differ diff --git a/funasr/runtime/onnxruntime/win/lib/x86/libfftw3f-3.lib b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3f-3.lib new file mode 100644 index 000000000..55fd55015 Binary files /dev/null and b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3f-3.lib differ diff --git a/funasr/runtime/onnxruntime/win/lib/x86/libfftw3l-3.def b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3l-3.def new file mode 100644 index 000000000..62a5e4231 --- /dev/null +++ b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3l-3.def @@ -0,0 +1,634 @@ +LIBRARY libfftw3l-3.dll +EXPORTS +fftwl_alignment_of +fftwl_alloc_complex +fftwl_alloc_real +fftwl_assertion_failed +fftwl_bufdist +fftwl_choose_radix +fftwl_cleanup +fftwl_cleanup_threads +fftwl_codelet_e01_8 +fftwl_codelet_e10_8 +fftwl_codelet_hb_10 +fftwl_codelet_hb_12 +fftwl_codelet_hb_15 +fftwl_codelet_hb_16 +fftwl_codelet_hb_2 +fftwl_codelet_hb_20 +fftwl_codelet_hb2_16 +fftwl_codelet_hb2_20 +fftwl_codelet_hb2_25 +fftwl_codelet_hb2_32 +fftwl_codelet_hb2_4 +fftwl_codelet_hb_25 +fftwl_codelet_hb2_5 +fftwl_codelet_hb2_8 +fftwl_codelet_hb_3 +fftwl_codelet_hb_32 +fftwl_codelet_hb_4 +fftwl_codelet_hb_5 +fftwl_codelet_hb_6 +fftwl_codelet_hb_64 +fftwl_codelet_hb_7 +fftwl_codelet_hb_8 +fftwl_codelet_hb_9 +fftwl_codelet_hc2cb_10 +fftwl_codelet_hc2cb_12 +fftwl_codelet_hc2cb_16 +fftwl_codelet_hc2cb_2 +fftwl_codelet_hc2cb_20 +fftwl_codelet_hc2cb2_16 +fftwl_codelet_hc2cb2_20 +fftwl_codelet_hc2cb2_32 +fftwl_codelet_hc2cb2_4 +fftwl_codelet_hc2cb2_8 +fftwl_codelet_hc2cb_32 +fftwl_codelet_hc2cb_4 +fftwl_codelet_hc2cb_6 +fftwl_codelet_hc2cb_8 +fftwl_codelet_hc2cbdft_10 +fftwl_codelet_hc2cbdft_12 +fftwl_codelet_hc2cbdft_16 +fftwl_codelet_hc2cbdft_2 +fftwl_codelet_hc2cbdft_20 +fftwl_codelet_hc2cbdft2_16 +fftwl_codelet_hc2cbdft2_20 +fftwl_codelet_hc2cbdft2_32 +fftwl_codelet_hc2cbdft2_4 +fftwl_codelet_hc2cbdft2_8 +fftwl_codelet_hc2cbdft_32 +fftwl_codelet_hc2cbdft_4 +fftwl_codelet_hc2cbdft_6 +fftwl_codelet_hc2cbdft_8 +fftwl_codelet_hc2cf_10 +fftwl_codelet_hc2cf_12 +fftwl_codelet_hc2cf_16 +fftwl_codelet_hc2cf_2 +fftwl_codelet_hc2cf_20 +fftwl_codelet_hc2cf2_16 +fftwl_codelet_hc2cf2_20 +fftwl_codelet_hc2cf2_32 +fftwl_codelet_hc2cf2_4 +fftwl_codelet_hc2cf2_8 +fftwl_codelet_hc2cf_32 +fftwl_codelet_hc2cf_4 +fftwl_codelet_hc2cf_6 +fftwl_codelet_hc2cf_8 +fftwl_codelet_hc2cfdft_10 +fftwl_codelet_hc2cfdft_12 +fftwl_codelet_hc2cfdft_16 +fftwl_codelet_hc2cfdft_2 +fftwl_codelet_hc2cfdft_20 +fftwl_codelet_hc2cfdft2_16 +fftwl_codelet_hc2cfdft2_20 +fftwl_codelet_hc2cfdft2_32 +fftwl_codelet_hc2cfdft2_4 +fftwl_codelet_hc2cfdft2_8 +fftwl_codelet_hc2cfdft_32 +fftwl_codelet_hc2cfdft_4 +fftwl_codelet_hc2cfdft_6 +fftwl_codelet_hc2cfdft_8 +fftwl_codelet_hf_10 +fftwl_codelet_hf_12 +fftwl_codelet_hf_15 +fftwl_codelet_hf_16 +fftwl_codelet_hf_2 +fftwl_codelet_hf_20 +fftwl_codelet_hf2_16 +fftwl_codelet_hf2_20 +fftwl_codelet_hf2_25 +fftwl_codelet_hf2_32 +fftwl_codelet_hf2_4 +fftwl_codelet_hf_25 +fftwl_codelet_hf2_5 +fftwl_codelet_hf2_8 +fftwl_codelet_hf_3 +fftwl_codelet_hf_32 +fftwl_codelet_hf_4 +fftwl_codelet_hf_5 +fftwl_codelet_hf_6 +fftwl_codelet_hf_64 +fftwl_codelet_hf_7 +fftwl_codelet_hf_8 +fftwl_codelet_hf_9 +fftwl_codelet_n1_10 +fftwl_codelet_n1_11 +fftwl_codelet_n1_12 +fftwl_codelet_n1_13 +fftwl_codelet_n1_14 +fftwl_codelet_n1_15 +fftwl_codelet_n1_16 +fftwl_codelet_n1_2 +fftwl_codelet_n1_20 +fftwl_codelet_n1_25 +fftwl_codelet_n1_3 +fftwl_codelet_n1_32 +fftwl_codelet_n1_4 +fftwl_codelet_n1_5 +fftwl_codelet_n1_6 +fftwl_codelet_n1_64 +fftwl_codelet_n1_7 +fftwl_codelet_n1_8 +fftwl_codelet_n1_9 +fftwl_codelet_q1_2 +fftwl_codelet_q1_3 +fftwl_codelet_q1_4 +fftwl_codelet_q1_5 +fftwl_codelet_q1_6 +fftwl_codelet_q1_8 +fftwl_codelet_r2cb_10 +fftwl_codelet_r2cb_11 +fftwl_codelet_r2cb_12 +fftwl_codelet_r2cb_128 +fftwl_codelet_r2cb_13 +fftwl_codelet_r2cb_14 +fftwl_codelet_r2cb_15 +fftwl_codelet_r2cb_16 +fftwl_codelet_r2cb_2 +fftwl_codelet_r2cb_20 +fftwl_codelet_r2cb_25 +fftwl_codelet_r2cb_3 +fftwl_codelet_r2cb_32 +fftwl_codelet_r2cb_4 +fftwl_codelet_r2cb_5 +fftwl_codelet_r2cb_6 +fftwl_codelet_r2cb_64 +fftwl_codelet_r2cb_7 +fftwl_codelet_r2cb_8 +fftwl_codelet_r2cb_9 +fftwl_codelet_r2cbIII_10 +fftwl_codelet_r2cbIII_12 +fftwl_codelet_r2cbIII_15 +fftwl_codelet_r2cbIII_16 +fftwl_codelet_r2cbIII_2 +fftwl_codelet_r2cbIII_20 +fftwl_codelet_r2cbIII_25 +fftwl_codelet_r2cbIII_3 +fftwl_codelet_r2cbIII_32 +fftwl_codelet_r2cbIII_4 +fftwl_codelet_r2cbIII_5 +fftwl_codelet_r2cbIII_6 +fftwl_codelet_r2cbIII_64 +fftwl_codelet_r2cbIII_7 +fftwl_codelet_r2cbIII_8 +fftwl_codelet_r2cbIII_9 +fftwl_codelet_r2cf_10 +fftwl_codelet_r2cf_11 +fftwl_codelet_r2cf_12 +fftwl_codelet_r2cf_128 +fftwl_codelet_r2cf_13 +fftwl_codelet_r2cf_14 +fftwl_codelet_r2cf_15 +fftwl_codelet_r2cf_16 +fftwl_codelet_r2cf_2 +fftwl_codelet_r2cf_20 +fftwl_codelet_r2cf_25 +fftwl_codelet_r2cf_3 +fftwl_codelet_r2cf_32 +fftwl_codelet_r2cf_4 +fftwl_codelet_r2cf_5 +fftwl_codelet_r2cf_6 +fftwl_codelet_r2cf_64 +fftwl_codelet_r2cf_7 +fftwl_codelet_r2cf_8 +fftwl_codelet_r2cf_9 +fftwl_codelet_r2cfII_10 +fftwl_codelet_r2cfII_12 +fftwl_codelet_r2cfII_15 +fftwl_codelet_r2cfII_16 +fftwl_codelet_r2cfII_2 +fftwl_codelet_r2cfII_20 +fftwl_codelet_r2cfII_25 +fftwl_codelet_r2cfII_3 +fftwl_codelet_r2cfII_32 +fftwl_codelet_r2cfII_4 +fftwl_codelet_r2cfII_5 +fftwl_codelet_r2cfII_6 +fftwl_codelet_r2cfII_64 +fftwl_codelet_r2cfII_7 +fftwl_codelet_r2cfII_8 +fftwl_codelet_r2cfII_9 +fftwl_codelet_t1_10 +fftwl_codelet_t1_12 +fftwl_codelet_t1_15 +fftwl_codelet_t1_16 +fftwl_codelet_t1_2 +fftwl_codelet_t1_20 +fftwl_codelet_t1_25 +fftwl_codelet_t1_3 +fftwl_codelet_t1_32 +fftwl_codelet_t1_4 +fftwl_codelet_t1_5 +fftwl_codelet_t1_6 +fftwl_codelet_t1_64 +fftwl_codelet_t1_7 +fftwl_codelet_t1_8 +fftwl_codelet_t1_9 +fftwl_codelet_t2_10 +fftwl_codelet_t2_16 +fftwl_codelet_t2_20 +fftwl_codelet_t2_25 +fftwl_codelet_t2_32 +fftwl_codelet_t2_4 +fftwl_codelet_t2_5 +fftwl_codelet_t2_64 +fftwl_codelet_t2_8 +fftwl_compute_tilesz +fftwl_configure_planner +fftwl_cost +fftwl_cpy1d +fftwl_cpy2d +fftwl_cpy2d_ci +fftwl_cpy2d_co +fftwl_cpy2d_pair +fftwl_cpy2d_pair_ci +fftwl_cpy2d_pair_co +fftwl_cpy2d_tiled +fftwl_cpy2d_tiledbuf +fftwl_ct_applicable +fftwl_ct_genericbuf_register +fftwl_ct_generic_register +fftwl_ct_uglyp +fftwl_destroy_plan +fftwl_dft_bluestein_register +fftwl_dft_buffered_register +fftwl_dft_conf_standard +fftwl_dft_generic_register +fftwl_dft_indirect_register +fftwl_dft_indirect_transpose_register +fftwl_dft_nop_register +fftwl_dft_r2hc_register +fftwl_dft_rader_register +fftwl_dft_rank_geq2_register +fftwl_dft_solve +fftwl_dft_thr_vrank_geq1_register +fftwl_dft_vrank_geq1_register +fftwl_dft_zerotens +fftwl_dht_r2hc_register +fftwl_dht_rader_register +fftwl_dimcmp +fftwl_elapsed_since +fftwl_estimate_cost +fftwl_execute +fftwl_execute_dft +fftwl_execute_dft_c2r +fftwl_execute_dft_r2c +fftwl_execute_r2r +fftwl_execute_split_dft +fftwl_execute_split_dft_c2r +fftwl_execute_split_dft_r2c +fftwl_export_wisdom +fftwl_export_wisdom_to_file +fftwl_export_wisdom_to_filename +fftwl_export_wisdom_to_string +fftwl_extract_reim +fftwl_factors_into +fftwl_factors_into_small_primes +fftwl_find_generator +fftwl_first_divisor +fftwl_flops +fftwl_forget_wisdom +fftwl_fprint_plan +fftwl_free +fftwl_get_crude_time +fftwl_guru64_kosherp +fftwl_guru_kosherp +fftwl_hash +fftwl_hc2hc_applicable +fftwl_hc2hc_generic_register +fftwl_iabs +fftwl_ialignment_of +fftwl_iestimate_cost +fftwl_ifree +fftwl_ifree0 +fftwl_imax +fftwl_imin +fftwl_import_system_wisdom +fftwl_import_wisdom +fftwl_import_wisdom_from_file +fftwl_import_wisdom_from_filename +fftwl_import_wisdom_from_string +fftwl_init_threads +fftwl_is_prime +fftwl_isqrt +fftwl_ithreads_init +fftwl_kdft_dif_register +fftwl_kdft_difsq_register +fftwl_kdft_dit_register +fftwl_kdft_register +fftwl_kernel_free +fftwl_kernel_malloc +fftwl_khc2c_register +fftwl_khc2hc_register +fftwl_kr2c_register +fftwl_kr2r_register +fftwl_make_planner_thread_safe +fftwl_malloc +fftwl_malloc_plain +fftwl_many_kosherp +fftwl_mapflags +fftwl_map_r2r_kind +fftwl_md5begin +fftwl_md5end +fftwl_md5int +fftwl_md5INT +fftwl_md5putb +fftwl_md5putc +fftwl_md5puts +fftwl_md5unsigned +fftwl_measure_execution_time +fftwl_mkapiplan +fftwl_mkplan +fftwl_mkplan_d +fftwl_mkplan_dft +fftwl_mkplan_dftw +fftwl_mkplan_f_d +fftwl_mkplan_hc2c +fftwl_mkplan_hc2hc +fftwl_mkplanner +fftwl_mkplan_rdft +fftwl_mkplan_rdft2 +fftwl_mkprinter +fftwl_mkprinter_cnt +fftwl_mkprinter_file +fftwl_mkprinter_str +fftwl_mkproblem +fftwl_mkproblem_dft +fftwl_mkproblem_dft_d +fftwl_mkproblem_rdft +fftwl_mkproblem_rdft_0_d +fftwl_mkproblem_rdft_1 +fftwl_mkproblem_rdft_1_d +fftwl_mkproblem_rdft2 +fftwl_mkproblem_rdft2_d +fftwl_mkproblem_rdft2_d_3pointers +fftwl_mkproblem_rdft_d +fftwl_mkproblem_unsolvable +fftwl_mkscanner +fftwl_mksolver +fftwl_mksolver_ct +fftwl_mksolver_ct_threads +fftwl_mksolver_dft_direct +fftwl_mksolver_dft_directbuf +fftwl_mksolver_hc2c +fftwl_mksolver_hc2hc +fftwl_mksolver_hc2hc_threads +fftwl_mksolver_rdft2_direct +fftwl_mksolver_rdft_r2c_direct +fftwl_mksolver_rdft_r2c_directbuf +fftwl_mksolver_rdft_r2r_direct +fftwl_mktensor +fftwl_mktensor_0d +fftwl_mktensor_1d +fftwl_mktensor_2d +fftwl_mktensor_3d +fftwl_mktensor_4d +fftwl_mktensor_5d +fftwl_mktensor_iodims +fftwl_mktensor_iodims64 +fftwl_mktensor_rowmajor +fftwl_mktriggen +fftwl_modulo +fftwl_nbuf +fftwl_nbuf_redundant +fftwl_next_prime +fftwl_null_awake +fftwl_ops_add +fftwl_ops_add2 +fftwl_ops_cpy +fftwl_ops_madd +fftwl_ops_madd2 +fftwl_ops_other +fftwl_ops_zero +fftwl_pickdim +fftwl_plan_awake +fftwl_plan_destroy_internal +fftwl_plan_dft +fftwl_plan_dft_1d +fftwl_plan_dft_2d +fftwl_plan_dft_3d +fftwl_plan_dft_c2r +fftwl_plan_dft_c2r_1d +fftwl_plan_dft_c2r_2d +fftwl_plan_dft_c2r_3d +fftwl_plan_dft_r2c +fftwl_plan_dft_r2c_1d +fftwl_plan_dft_r2c_2d +fftwl_plan_dft_r2c_3d +fftwl_plan_guru64_dft +fftwl_plan_guru64_dft_c2r +fftwl_plan_guru64_dft_r2c +fftwl_plan_guru64_r2r +fftwl_plan_guru64_split_dft +fftwl_plan_guru64_split_dft_c2r +fftwl_plan_guru64_split_dft_r2c +fftwl_plan_guru_dft +fftwl_plan_guru_dft_c2r +fftwl_plan_guru_dft_r2c +fftwl_plan_guru_r2r +fftwl_plan_guru_split_dft +fftwl_plan_guru_split_dft_c2r +fftwl_plan_guru_split_dft_r2c +fftwl_plan_many_dft +fftwl_plan_many_dft_c2r +fftwl_plan_many_dft_r2c +fftwl_plan_many_r2r +fftwl_planner_destroy +fftwl_plan_null_destroy +fftwl_plan_r2r +fftwl_plan_r2r_1d +fftwl_plan_r2r_2d +fftwl_plan_r2r_3d +fftwl_plan_with_nthreads +fftwl_power_mod +fftwl_printer_destroy +fftwl_print_plan +fftwl_problem_destroy +fftwl_rader_tl_delete +fftwl_rader_tl_find +fftwl_rader_tl_insert +fftwl_rdft2_buffered_register +fftwl_rdft2_complex_n +fftwl_rdft2_inplace_strides +fftwl_rdft2_nop_register +fftwl_rdft2_pad +fftwl_rdft2_rank0_register +fftwl_rdft2_rank_geq2_register +fftwl_rdft2_rdft_register +fftwl_rdft2_solve +fftwl_rdft2_strides +fftwl_rdft2_tensor_max_index +fftwl_rdft2_thr_vrank_geq1_register +fftwl_rdft2_vrank_geq1_register +fftwl_rdft_buffered_register +fftwl_rdft_conf_standard +fftwl_rdft_dht_register +fftwl_rdft_generic_register +fftwl_rdft_indirect_register +fftwl_rdft_kind_str +fftwl_rdft_nop_register +fftwl_rdft_rank0_register +fftwl_rdft_rank_geq2_register +fftwl_rdft_solve +fftwl_rdft_thr_vrank_geq1_register +fftwl_rdft_vrank3_transpose_register +fftwl_rdft_vrank_geq1_register +fftwl_rdft_zerotens +fftwl_redft00e_r2hc_pad_register +fftwl_regsolver_ct_directw +fftwl_regsolver_ct_directwsq +fftwl_regsolver_hc2c_direct +fftwl_regsolver_hc2hc_direct +fftwl_reodft00e_splitradix_register +fftwl_reodft010e_r2hc_register +fftwl_reodft11e_r2hc_odd_register +fftwl_reodft11e_radix2_r2hc_register +fftwl_reodft_conf_standard +fftwl_rodft00e_r2hc_pad_register +fftwl_safe_mulmod +fftwl_scanner_destroy +fftwl_set_planner_hooks +fftwl_set_timelimit +fftwl_solver_destroy +fftwl_solver_register +fftwl_solver_use +fftwl_solvtab_exec +fftwl_spawn_loop +fftwl_sprint_plan +fftwl_tensor_append +fftwl_tensor_compress +fftwl_tensor_compress_contiguous +fftwl_tensor_copy +fftwl_tensor_copy_except +fftwl_tensor_copy_inplace +fftwl_tensor_copy_sub +fftwl_tensor_destroy +fftwl_tensor_destroy2 +fftwl_tensor_destroy4 +fftwl_tensor_equal +fftwl_tensor_inplace_locations +fftwl_tensor_inplace_strides +fftwl_tensor_inplace_strides2 +fftwl_tensor_kosherp +fftwl_tensor_max_index +fftwl_tensor_md5 +fftwl_tensor_min_istride +fftwl_tensor_min_ostride +fftwl_tensor_min_stride +fftwl_tensor_print +fftwl_tensor_split +fftwl_tensor_strides_decrease +fftwl_tensor_sz +fftwl_tensor_tornk1 +fftwl_the_planner +fftwl_threads_cleanup +fftwl_threads_conf_standard +fftwl_threads_register_planner_hooks +fftwl_tile2d +fftwl_toobig +fftwl_transpose +fftwl_transpose_tiled +fftwl_transpose_tiledbuf +fftwl_triggen_destroy +fftwl_twiddle_awake +fftwl_twiddle_length +fftwl_zero1d_pair +lfftw_cleanup_ +lfftw_cleanup__ +lfftw_cleanup_threads_ +lfftw_cleanup_threads__ +lfftw_cost_ +lfftw_cost__ +lfftw_destroy_plan_ +lfftw_destroy_plan__ +lfftw_estimate_cost_ +lfftw_estimate_cost__ +lfftw_execute_ +lfftw_execute__ +lfftw_execute_dft_ +lfftw_execute_dft__ +lfftw_execute_dft_c2r_ +lfftw_execute_dft_c2r__ +lfftw_execute_dft_r2c_ +lfftw_execute_dft_r2c__ +lfftw_execute_r2r_ +lfftw_execute_r2r__ +lfftw_execute_split_dft_ +lfftw_execute_split_dft__ +lfftw_execute_split_dft_c2r_ +lfftw_execute_split_dft_c2r__ +lfftw_execute_split_dft_r2c_ +lfftw_execute_split_dft_r2c__ +lfftw_export_wisdom_ +lfftw_export_wisdom__ +lfftw_flops_ +lfftw_flops__ +lfftw_forget_wisdom_ +lfftw_forget_wisdom__ +lfftw_import_system_wisdom_ +lfftw_import_system_wisdom__ +lfftw_import_wisdom_ +lfftw_import_wisdom__ +lfftw_init_threads_ +lfftw_init_threads__ +lfftw_plan_dft_ +lfftw_plan_dft__ +lfftw_plan_dft_1d_ +lfftw_plan_dft_1d__ +lfftw_plan_dft_2d_ +lfftw_plan_dft_2d__ +lfftw_plan_dft_3d_ +lfftw_plan_dft_3d__ +lfftw_plan_dft_c2r_ +lfftw_plan_dft_c2r__ +lfftw_plan_dft_c2r_1d_ +lfftw_plan_dft_c2r_1d__ +lfftw_plan_dft_c2r_2d_ +lfftw_plan_dft_c2r_2d__ +lfftw_plan_dft_c2r_3d_ +lfftw_plan_dft_c2r_3d__ +lfftw_plan_dft_r2c_ +lfftw_plan_dft_r2c__ +lfftw_plan_dft_r2c_1d_ +lfftw_plan_dft_r2c_1d__ +lfftw_plan_dft_r2c_2d_ +lfftw_plan_dft_r2c_2d__ +lfftw_plan_dft_r2c_3d_ +lfftw_plan_dft_r2c_3d__ +lfftw_plan_guru_dft_ +lfftw_plan_guru_dft__ +lfftw_plan_guru_dft_c2r_ +lfftw_plan_guru_dft_c2r__ +lfftw_plan_guru_dft_r2c_ +lfftw_plan_guru_dft_r2c__ +lfftw_plan_guru_r2r_ +lfftw_plan_guru_r2r__ +lfftw_plan_guru_split_dft_ +lfftw_plan_guru_split_dft__ +lfftw_plan_guru_split_dft_c2r_ +lfftw_plan_guru_split_dft_c2r__ +lfftw_plan_guru_split_dft_r2c_ +lfftw_plan_guru_split_dft_r2c__ +lfftw_plan_many_dft_ +lfftw_plan_many_dft__ +lfftw_plan_many_dft_c2r_ +lfftw_plan_many_dft_c2r__ +lfftw_plan_many_dft_r2c_ +lfftw_plan_many_dft_r2c__ +lfftw_plan_many_r2r_ +lfftw_plan_many_r2r__ +lfftw_plan_r2r_ +lfftw_plan_r2r__ +lfftw_plan_r2r_1d_ +lfftw_plan_r2r_1d__ +lfftw_plan_r2r_2d_ +lfftw_plan_r2r_2d__ +lfftw_plan_r2r_3d_ +lfftw_plan_r2r_3d__ +lfftw_plan_with_nthreads_ +lfftw_plan_with_nthreads__ +lfftw_print_plan_ +lfftw_print_plan__ +lfftw_set_timelimit_ +lfftw_set_timelimit__ diff --git a/funasr/runtime/onnxruntime/win/lib/x86/libfftw3l-3.exp b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3l-3.exp new file mode 100644 index 000000000..cc66aff00 Binary files /dev/null and b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3l-3.exp differ diff --git a/funasr/runtime/onnxruntime/win/lib/x86/libfftw3l-3.lib b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3l-3.lib new file mode 100644 index 000000000..bdceb321a Binary files /dev/null and b/funasr/runtime/onnxruntime/win/lib/x86/libfftw3l-3.lib differ diff --git a/funasr/runtime/onnxruntime/win/lib/x86/onnxruntime.lib b/funasr/runtime/onnxruntime/win/lib/x86/onnxruntime.lib new file mode 100644 index 000000000..b00709f54 Binary files /dev/null and b/funasr/runtime/onnxruntime/win/lib/x86/onnxruntime.lib differ diff --git a/funasr/runtime/onnxruntime/win/readme.md b/funasr/runtime/onnxruntime/win/readme.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/funasr/runtime/onnxruntime/win/readme.md @@ -0,0 +1 @@ + diff --git a/funasr/runtime/python/benchmark_onnx.md b/funasr/runtime/python/benchmark_onnx.md new file mode 100644 index 000000000..02adc7992 --- /dev/null +++ b/funasr/runtime/python/benchmark_onnx.md @@ -0,0 +1,53 @@ +# Benchmark + +Aishell1 test set , the total audio duration is 36108.919 seconds. (Note: The service has been fully warm up.) + +## [Paraformer-large](https://www.modelscope.cn/models/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/summary) + + ### Intel(R) Xeon(R) Platinum 8369B CPU @ 2.90GHz 16core-32processor with avx512_vnni + +| concurrent-tasks | processing time(s) | RTF | Speedup Rate | +|:----------------:|:------------------:|:-------:|:------------:| +| 1 (onnx fp32) | 2806 | 0.0777 | 12.9 | +| 1 (onnx int8) | 1611 | 0.0446 | 22.4 | +| 8 (onnx fp32) | 538 | 0.0149 | 67.1 | +| 8 (onnx int8) | 210 | 0.0058 | 172.4 | +| 16 (onnx fp32) | 288 | 0.0080 | 125.2 | +| 16 (onnx int8) | 117 | 0.0032 | 309.9 | +| 32 (onnx fp32) | 167 | 0.0046 | 216.5 | +| 32 (onnx int8) | 86 | 0.0024 | 420.0 | +| 64 (onnx fp32) | 158 | 0.0044 | 228.1 | +| 64 (onnx int8) | 82 | 0.0023 | 442.8 | +| 96 (onnx fp32) | 151 | 0.0042 | 238.0 | +| 96 (onnx int8) | 80 | 0.0022 | 452.0 | + + +### Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz 16core-32processor with avx512_vnni + +| concurrent-tasks | processing time(s) | RTF | Speedup Rate | +|:----------------:|:------------------:|:------:|:------------:| +| 1 (onnx fp32) | 2613 | 0.0724 | 13.8 | +| 1 (onnx int8) | 1321 | 0.0366 | 22.4 | +| 32 (onnx fp32) | 170 | 0.0047 | 212.7 | +| 32 (onnx int8) | 89 | 0.0025 | 407.0 | +| 64 (onnx fp32) | 166 | 0.0046 | 217.1 | +| 64 (onnx int8) | 87 | 0.0024 | 414.7 | + + +### Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz 32core-64processor without avx512_vnni + + +| concurrent-tasks | processing time(s) | RTF | Speedup Rate | +|:----------------:|:------------------:|:------:|:------------:| +| 1 (onnx fp32) | 2959 | 0.0820 | 12.2 | +| 1 (onnx int8) | 2814 | 0.0778 | 12.8 | +| 16 (onnx fp32) | 373 | 0.0103 | 96.9 | +| 16 (onnx int8) | 331 | 0.0091 | 109.0 | +| 32 (onnx fp32) | 211 | 0.0058 | 171.4 | +| 32 (onnx int8) | 181 | 0.0050 | 200.0 | +| 64 (onnx fp32) | 153 | 0.0042 | 235.9 | +| 64 (onnx int8) | 103 | 0.0029 | 349.9 | +| 96 (onnx fp32) | 146 | 0.0041 | 247.0 | +| 96 (onnx int8) | 108 | 0.0030 | 334.1 | + +## [Paraformer](https://modelscope.cn/models/damo/speech_paraformer_asr_nat-zh-cn-16k-common-vocab8358-tensorflow1/summary) diff --git a/funasr/runtime/python/libtorch/torch_paraformer/paraformer_bin.py b/funasr/runtime/python/libtorch/torch_paraformer/paraformer_bin.py index e6b33d464..d47135aa0 100644 --- a/funasr/runtime/python/libtorch/torch_paraformer/paraformer_bin.py +++ b/funasr/runtime/python/libtorch/torch_paraformer/paraformer_bin.py @@ -22,12 +22,18 @@ class Paraformer(): def __init__(self, model_dir: Union[str, Path] = None, batch_size: int = 1, device_id: Union[str, int] = "-1", + plot_timestamp_to: str = "", + pred_bias: int = 1, + quantize: bool = False, + intra_op_num_threads: int = 1, ): if not Path(model_dir).exists(): raise FileNotFoundError(f'{model_dir} does not exist.') model_file = os.path.join(model_dir, 'model.torchscripts') + if quantize: + model_file = os.path.join(model_dir, 'model_quant.torchscripts') config_file = os.path.join(model_dir, 'config.yaml') cmvn_file = os.path.join(model_dir, 'am.mvn') config = read_yaml(config_file) @@ -40,17 +46,17 @@ class Paraformer(): ) self.ort_infer = torch.jit.load(model_file) self.batch_size = batch_size + self.plot_timestamp_to = plot_timestamp_to + self.pred_bias = pred_bias def __call__(self, wav_content: Union[str, np.ndarray, List[str]], **kwargs) -> List: waveform_list = self.load_data(wav_content, self.frontend.opts.frame_opts.samp_freq) waveform_nums = len(waveform_list) - asr_res = [] for beg_idx in range(0, waveform_nums, self.batch_size): - res = {} + end_idx = min(waveform_nums, beg_idx + self.batch_size) feats, feats_len = self.extract_feat(waveform_list[beg_idx:end_idx]) - try: outputs = self.ort_infer(feats, feats_len) am_scores, valid_token_lens = outputs[0], outputs[1] @@ -65,15 +71,42 @@ class Paraformer(): preds = [''] else: am_scores, valid_token_lens = am_scores.detach().cpu().numpy(), valid_token_lens.detach().cpu().numpy() - preds, raw_token = self.decode(am_scores, valid_token_lens)[0] - res['preds'] = preds - if us_cif_peak is not None: - us_alphas, us_cif_peak = us_alphas.cpu().numpy(), us_cif_peak.cpu().numpy() - timestamp = time_stamp_lfr6_pl(us_alphas, us_cif_peak, copy.copy(raw_token), log=False) - res['timestamp'] = timestamp - asr_res.append(res) + preds = self.decode(am_scores, valid_token_lens) + if us_cif_peak is None: + for pred in preds: + asr_res.append({'preds': pred}) + else: + for pred, us_cif_peak_ in zip(preds, us_cif_peak): + text, tokens = pred + timestamp, timestamp_total = time_stamp_lfr6_onnx(us_cif_peak_, copy.copy(tokens)) + if len(self.plot_timestamp_to): + self.plot_wave_timestamp(waveform_list[0], timestamp_total, self.plot_timestamp_to) + asr_res.append({'preds': text, 'timestamp': timestamp}) return asr_res + def plot_wave_timestamp(self, wav, text_timestamp, dest): + # TODO: Plot the wav and timestamp results with matplotlib + import matplotlib + matplotlib.use('Agg') + matplotlib.rc("font", family='Alibaba PuHuiTi') # set it to a font that your system supports + import matplotlib.pyplot as plt + fig, ax1 = plt.subplots(figsize=(11, 3.5), dpi=320) + ax2 = ax1.twinx() + ax2.set_ylim([0, 2.0]) + # plot waveform + ax1.set_ylim([-0.3, 0.3]) + time = np.arange(wav.shape[0]) / 16000 + ax1.plot(time, wav/wav.max()*0.3, color='gray', alpha=0.4) + # plot lines and text + for (char, start, end) in text_timestamp: + ax1.vlines(start, -0.3, 0.3, ls='--') + ax1.vlines(end, -0.3, 0.3, ls='--') + x_adj = 0.045 if char != '' else 0.12 + ax1.text((start + end) * 0.5 - x_adj, 0, char) + # plt.legend() + plotname = "{}/timestamp.png".format(dest) + plt.savefig(plotname, bbox_inches='tight') + def load_data(self, wav_content: Union[str, np.ndarray, List[str]], fs: int = None) -> List: def load_wav(path: str) -> np.ndarray: @@ -148,9 +181,7 @@ class Paraformer(): # Change integer-ids to tokens token = self.converter.ids2tokens(token_int) - # token = token[:valid_token_num-1] + token = token[:valid_token_num-self.pred_bias] texts = sentence_postprocess(token) - text = texts[0] - # text = self.tokenizer.tokens2text(token) - return text, token + return texts diff --git a/funasr/runtime/python/libtorch/torch_paraformer/utils/compute_wer.py b/funasr/runtime/python/libtorch/torch_paraformer/utils/compute_wer.py new file mode 100755 index 000000000..349a3f609 --- /dev/null +++ b/funasr/runtime/python/libtorch/torch_paraformer/utils/compute_wer.py @@ -0,0 +1,157 @@ +import os +import numpy as np +import sys + +def compute_wer(ref_file, + hyp_file, + cer_detail_file): + rst = { + 'Wrd': 0, + 'Corr': 0, + 'Ins': 0, + 'Del': 0, + 'Sub': 0, + 'Snt': 0, + 'Err': 0.0, + 'S.Err': 0.0, + 'wrong_words': 0, + 'wrong_sentences': 0 + } + + hyp_dict = {} + ref_dict = {} + with open(hyp_file, 'r') as hyp_reader: + for line in hyp_reader: + key = line.strip().split()[0] + value = line.strip().split()[1:] + hyp_dict[key] = value + with open(ref_file, 'r') as ref_reader: + for line in ref_reader: + key = line.strip().split()[0] + value = line.strip().split()[1:] + ref_dict[key] = value + + cer_detail_writer = open(cer_detail_file, 'w') + for hyp_key in hyp_dict: + if hyp_key in ref_dict: + out_item = compute_wer_by_line(hyp_dict[hyp_key], ref_dict[hyp_key]) + rst['Wrd'] += out_item['nwords'] + rst['Corr'] += out_item['cor'] + rst['wrong_words'] += out_item['wrong'] + rst['Ins'] += out_item['ins'] + rst['Del'] += out_item['del'] + rst['Sub'] += out_item['sub'] + rst['Snt'] += 1 + if out_item['wrong'] > 0: + rst['wrong_sentences'] += 1 + cer_detail_writer.write(hyp_key + print_cer_detail(out_item) + '\n') + cer_detail_writer.write("ref:" + '\t' + "".join(ref_dict[hyp_key]) + '\n') + cer_detail_writer.write("hyp:" + '\t' + "".join(hyp_dict[hyp_key]) + '\n') + + if rst['Wrd'] > 0: + rst['Err'] = round(rst['wrong_words'] * 100 / rst['Wrd'], 2) + if rst['Snt'] > 0: + rst['S.Err'] = round(rst['wrong_sentences'] * 100 / rst['Snt'], 2) + + cer_detail_writer.write('\n') + cer_detail_writer.write("%WER " + str(rst['Err']) + " [ " + str(rst['wrong_words'])+ " / " + str(rst['Wrd']) + + ", " + str(rst['Ins']) + " ins, " + str(rst['Del']) + " del, " + str(rst['Sub']) + " sub ]" + '\n') + cer_detail_writer.write("%SER " + str(rst['S.Err']) + " [ " + str(rst['wrong_sentences']) + " / " + str(rst['Snt']) + " ]" + '\n') + cer_detail_writer.write("Scored " + str(len(hyp_dict)) + " sentences, " + str(len(hyp_dict) - rst['Snt']) + " not present in hyp." + '\n') + + +def compute_wer_by_line(hyp, + ref): + hyp = list(map(lambda x: x.lower(), hyp)) + ref = list(map(lambda x: x.lower(), ref)) + + len_hyp = len(hyp) + len_ref = len(ref) + + cost_matrix = np.zeros((len_hyp + 1, len_ref + 1), dtype=np.int16) + + ops_matrix = np.zeros((len_hyp + 1, len_ref + 1), dtype=np.int8) + + for i in range(len_hyp + 1): + cost_matrix[i][0] = i + for j in range(len_ref + 1): + cost_matrix[0][j] = j + + for i in range(1, len_hyp + 1): + for j in range(1, len_ref + 1): + if hyp[i - 1] == ref[j - 1]: + cost_matrix[i][j] = cost_matrix[i - 1][j - 1] + else: + substitution = cost_matrix[i - 1][j - 1] + 1 + insertion = cost_matrix[i - 1][j] + 1 + deletion = cost_matrix[i][j - 1] + 1 + + compare_val = [substitution, insertion, deletion] + + min_val = min(compare_val) + operation_idx = compare_val.index(min_val) + 1 + cost_matrix[i][j] = min_val + ops_matrix[i][j] = operation_idx + + match_idx = [] + i = len_hyp + j = len_ref + rst = { + 'nwords': len_ref, + 'cor': 0, + 'wrong': 0, + 'ins': 0, + 'del': 0, + 'sub': 0 + } + while i >= 0 or j >= 0: + i_idx = max(0, i) + j_idx = max(0, j) + + if ops_matrix[i_idx][j_idx] == 0: # correct + if i - 1 >= 0 and j - 1 >= 0: + match_idx.append((j - 1, i - 1)) + rst['cor'] += 1 + + i -= 1 + j -= 1 + + elif ops_matrix[i_idx][j_idx] == 2: # insert + i -= 1 + rst['ins'] += 1 + + elif ops_matrix[i_idx][j_idx] == 3: # delete + j -= 1 + rst['del'] += 1 + + elif ops_matrix[i_idx][j_idx] == 1: # substitute + i -= 1 + j -= 1 + rst['sub'] += 1 + + if i < 0 and j >= 0: + rst['del'] += 1 + elif j < 0 and i >= 0: + rst['ins'] += 1 + + match_idx.reverse() + wrong_cnt = cost_matrix[len_hyp][len_ref] + rst['wrong'] = wrong_cnt + + return rst + +def print_cer_detail(rst): + return ("(" + "nwords=" + str(rst['nwords']) + ",cor=" + str(rst['cor']) + + ",ins=" + str(rst['ins']) + ",del=" + str(rst['del']) + ",sub=" + + str(rst['sub']) + ") corr:" + '{:.2%}'.format(rst['cor']/rst['nwords']) + + ",cer:" + '{:.2%}'.format(rst['wrong']/rst['nwords'])) + +if __name__ == '__main__': + if len(sys.argv) != 4: + print("usage : python compute-wer.py test.ref test.hyp test.wer") + sys.exit(0) + + ref_file = sys.argv[1] + hyp_file = sys.argv[2] + cer_detail_file = sys.argv[3] + compute_wer(ref_file, hyp_file, cer_detail_file) diff --git a/funasr/runtime/python/onnxruntime/debug.png b/funasr/runtime/python/onnxruntime/debug.png new file mode 100644 index 000000000..f2522d033 Binary files /dev/null and b/funasr/runtime/python/onnxruntime/debug.png differ diff --git a/funasr/runtime/python/onnxruntime/demo.py b/funasr/runtime/python/onnxruntime/demo.py index 5209f319a..1b887daec 100644 --- a/funasr/runtime/python/onnxruntime/demo.py +++ b/funasr/runtime/python/onnxruntime/demo.py @@ -1,12 +1,15 @@ from rapid_paraformer import Paraformer -model_dir = "/Users/shixian/code/funasr2/export/damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch" -# model_dir = "/Users/shixian/code/funasr2/export/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch" +#model_dir = "/Users/shixian/code/funasr/export/damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch" +#model_dir = "/Users/shixian/code/funasr/export/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch" +model_dir = "/Users/shixian/code/funasr/export/damo/speech_paraformer-tiny-commandword_asr_nat-zh-cn-16k-vocab544-pytorch" -model = Paraformer(model_dir, batch_size=1) +# if you use paraformer-tiny-commandword_asr_nat-zh-cn-16k-vocab544-pytorch, you should set pred_bias=0 +# plot_timestamp_to works only when using speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch +model = Paraformer(model_dir, batch_size=2, plot_timestamp_to="./", pred_bias=0) -wav_path = ['/Users/shixian/code/funasr2/export/damo/speech_paraformer-tiny-commandword_asr_nat-zh-cn-16k-vocab544-pytorch/example/asr_example.wav'] +wav_path = "/Users/shixian/code/funasr/export/damo/speech_paraformer-tiny-commandword_asr_nat-zh-cn-16k-vocab544-pytorch/example/asr_example.wav" result = model(wav_path) print(result) \ No newline at end of file diff --git a/funasr/runtime/python/onnxruntime/rapid_paraformer/paraformer_onnx.py b/funasr/runtime/python/onnxruntime/rapid_paraformer/paraformer_onnx.py index 091db0d25..61c85ec4c 100644 --- a/funasr/runtime/python/onnxruntime/rapid_paraformer/paraformer_onnx.py +++ b/funasr/runtime/python/onnxruntime/rapid_paraformer/paraformer_onnx.py @@ -1,6 +1,7 @@ # -*- encoding: utf-8 -*- # @Author: SWHL # @Contact: liekkaskono@163.com +from cgitb import text import os.path from pathlib import Path from typing import List, Union, Tuple @@ -25,12 +26,16 @@ class Paraformer(): device_id: Union[str, int] = "-1", plot_timestamp_to: str = "", pred_bias: int = 1, + quantize: bool = False, + intra_op_num_threads: int = 4, ): if not Path(model_dir).exists(): raise FileNotFoundError(f'{model_dir} does not exist.') model_file = os.path.join(model_dir, 'model.onnx') + if quantize: + model_file = os.path.join(model_dir, 'model_quant.onnx') config_file = os.path.join(model_dir, 'config.yaml') cmvn_file = os.path.join(model_dir, 'am.mvn') config = read_yaml(config_file) @@ -41,7 +46,7 @@ class Paraformer(): cmvn_file=cmvn_file, **config['frontend_conf'] ) - self.ort_infer = OrtInferSession(model_file, device_id) + self.ort_infer = OrtInferSession(model_file, device_id, intra_op_num_threads=intra_op_num_threads) self.batch_size = batch_size self.plot_timestamp_to = plot_timestamp_to self.pred_bias = pred_bias diff --git a/funasr/runtime/python/onnxruntime/rapid_paraformer/utils/timestamp_utils.py b/funasr/runtime/python/onnxruntime/rapid_paraformer/utils/timestamp_utils.py index 767e864fc..dd702f39f 100644 --- a/funasr/runtime/python/onnxruntime/rapid_paraformer/utils/timestamp_utils.py +++ b/funasr/runtime/python/onnxruntime/rapid_paraformer/utils/timestamp_utils.py @@ -1,11 +1,11 @@ import numpy as np -def time_stamp_lfr6_onnx(us_cif_peak, char_list, begin_time=0.0): +def time_stamp_lfr6_onnx(us_cif_peak, char_list, begin_time=0.0, total_offset=-1.5): if not len(char_list): return [] START_END_THRESHOLD = 5 - MAX_TOKEN_DURATION = 14 + MAX_TOKEN_DURATION = 30 TIME_RATE = 10.0 * 6 / 1000 / 3 # 3 times upsampled cif_peak = us_cif_peak.reshape(-1) num_frames = cif_peak.shape[-1] @@ -16,7 +16,7 @@ def time_stamp_lfr6_onnx(us_cif_peak, char_list, begin_time=0.0): new_char_list = [] # for bicif model trained with large data, cif2 actually fires when a character starts # so treat the frames between two peaks as the duration of the former token - fire_place = np.where(cif_peak>1.0-1e-4)[0] - 1.5 # np format + fire_place = np.where(cif_peak>1.0-1e-4)[0] + total_offset # np format num_peak = len(fire_place) assert num_peak == len(char_list) + 1 # number of peaks is supposed to be number of tokens + 1 # begin silence @@ -27,7 +27,7 @@ def time_stamp_lfr6_onnx(us_cif_peak, char_list, begin_time=0.0): # tokens timestamp for i in range(len(fire_place)-1): new_char_list.append(char_list[i]) - if MAX_TOKEN_DURATION < 0 or fire_place[i+1] - fire_place[i] < MAX_TOKEN_DURATION: + if i == len(fire_place)-2 or MAX_TOKEN_DURATION < 0 or fire_place[i+1] - fire_place[i] < MAX_TOKEN_DURATION: timestamp_list.append([fire_place[i]*TIME_RATE, fire_place[i+1]*TIME_RATE]) else: # cut the duration to token and sil of the 0-weight frames last long @@ -55,4 +55,5 @@ def time_stamp_lfr6_onnx(us_cif_peak, char_list, begin_time=0.0): for char, timestamp in zip(new_char_list, timestamp_list): if char != '': res.append([int(timestamp[0] * 1000), int(timestamp[1] * 1000)]) - return res, res_total \ No newline at end of file + return res, res_total + \ No newline at end of file diff --git a/funasr/runtime/python/onnxruntime/rapid_paraformer/utils/utils.py b/funasr/runtime/python/onnxruntime/rapid_paraformer/utils/utils.py index 7943abbf9..ec907c015 100644 --- a/funasr/runtime/python/onnxruntime/rapid_paraformer/utils/utils.py +++ b/funasr/runtime/python/onnxruntime/rapid_paraformer/utils/utils.py @@ -147,9 +147,10 @@ class ONNXRuntimeError(Exception): class OrtInferSession(): - def __init__(self, model_file, device_id=-1): + def __init__(self, model_file, device_id=-1, intra_op_num_threads=4): device_id = str(device_id) sess_opt = SessionOptions() + sess_opt.intra_op_num_threads = intra_op_num_threads sess_opt.log_severity_level = 4 sess_opt.enable_cpu_mem_arena = False sess_opt.graph_optimization_level = GraphOptimizationLevel.ORT_ENABLE_ALL diff --git a/funasr/runtime/python/utils/test_rtf.py b/funasr/runtime/python/utils/test_rtf.py index 3394e8a04..fd26fad94 100644 --- a/funasr/runtime/python/utils/test_rtf.py +++ b/funasr/runtime/python/utils/test_rtf.py @@ -2,22 +2,30 @@ import time import sys import librosa -backend=sys.argv[1] -model_dir=sys.argv[2] -wav_file=sys.argv[3] -from torch_paraformer import Paraformer -if backend == "onnxruntime": - from rapid_paraformer import Paraformer + +import argparse +parser = argparse.ArgumentParser() +parser.add_argument('--model_dir', type=str, required=True) +parser.add_argument('--backend', type=str, default='onnx', help='["onnx", "torch"]') +parser.add_argument('--wav_file', type=str, default=None, help='amp fallback number') +parser.add_argument('--quantize', type=bool, default=False, help='quantized model') +parser.add_argument('--intra_op_num_threads', type=int, default=1, help='intra_op_num_threads for onnx') +args = parser.parse_args() + + +from funasr.runtime.python.libtorch.torch_paraformer import Paraformer +if args.backend == "onnx": + from funasr.runtime.python.onnxruntime.rapid_paraformer import Paraformer -model = Paraformer(model_dir, batch_size=1, device_id="-1") +model = Paraformer(args.model_dir, batch_size=1, quantize=args.quantize, intra_op_num_threads=args.intra_op_num_threads) -wav_file_f = open(wav_file, 'r') +wav_file_f = open(args.wav_file, 'r') wav_files = wav_file_f.readlines() # warm-up total = 0.0 -num = 100 +num = 30 wav_path = wav_files[0].split("\t")[1].strip() if "\t" in wav_files[0] else wav_files[0].split(" ")[1].strip() for i in range(num): beg_time = time.time() diff --git a/funasr/runtime/python/utils/test_rtf.sh b/funasr/runtime/python/utils/test_rtf.sh index fe13da7d8..7399c88d9 100644 --- a/funasr/runtime/python/utils/test_rtf.sh +++ b/funasr/runtime/python/utils/test_rtf.sh @@ -1,71 +1,95 @@ nj=64 - -#:< ${local_scp_dir}/log.$JOB.txt + taskset -c ${core_id} python ${rtf_tool} --backend ${backend} --model_dir ${model_dir} --wav_file ${logs_outputs_dir}/wav.$JOB.scp --quantize ${quantize} &> ${logs_outputs_dir}/log.$JOB.txt }& done wait -rm -rf ${local_scp_dir}/total_time_comput.txt -rm -rf ${local_scp_dir}/total_time_wav.txt -rm -rf ${local_scp_dir}/total_rtf.txt +rm -rf ${logs_outputs_dir}/total_time_comput.txt +rm -rf ${logs_outputs_dir}/total_time_wav.txt +rm -rf ${logs_outputs_dir}/total_rtf.txt for JOB in $(seq ${nj}); do { - cat ${local_scp_dir}/log.$JOB.txt | grep "total_time_comput" | awk -F ' ' '{print $2}' >> ${local_scp_dir}/total_time_comput.txt - cat ${local_scp_dir}/log.$JOB.txt | grep "total_time_wav" | awk -F ' ' '{print $2}' >> ${local_scp_dir}/total_time_wav.txt - cat ${local_scp_dir}/log.$JOB.txt | grep "total_rtf" | awk -F ' ' '{print $2}' >> ${local_scp_dir}/total_rtf.txt + cat ${logs_outputs_dir}/log.$JOB.txt | grep "total_time_comput" | awk -F ' ' '{print $2}' >> ${logs_outputs_dir}/total_time_comput.txt + cat ${logs_outputs_dir}/log.$JOB.txt | grep "total_time_wav" | awk -F ' ' '{print $2}' >> ${logs_outputs_dir}/total_time_wav.txt + cat ${logs_outputs_dir}/log.$JOB.txt | grep "total_rtf" | awk -F ' ' '{print $2}' >> ${logs_outputs_dir}/total_rtf.txt } done -total_time_comput=`cat ${local_scp_dir}/total_time_comput.txt | awk 'BEGIN {max = 0} {if ($1+0>max+0) max=$1 fi} END {print max}'` -total_time_wav=`cat ${local_scp_dir}/total_time_wav.txt | awk '{sum +=$1};END {print sum}'` +total_time_comput=`cat ${logs_outputs_dir}/total_time_comput.txt | awk 'BEGIN {max = 0} {if ($1+0>max+0) max=$1 fi} END {print max}'` +total_time_wav=`cat ${logs_outputs_dir}/total_time_wav.txt | awk '{sum +=$1};END {print sum}'` rtf=`awk 'BEGIN{printf "%.5f\n",'$total_time_comput'/'$total_time_wav'}'` speed=`awk 'BEGIN{printf "%.2f\n",1/'$rtf'}'` diff --git a/funasr/runtime/triton_gpu/Dockerfile/Dockerfile.server b/funasr/runtime/triton_gpu/Dockerfile/Dockerfile.server index 459195cae..d03610c58 100644 --- a/funasr/runtime/triton_gpu/Dockerfile/Dockerfile.server +++ b/funasr/runtime/triton_gpu/Dockerfile/Dockerfile.server @@ -10,8 +10,10 @@ RUN apt-get update && apt-get -y install \ cmake \ libsndfile1 +# -i https://pypi.tuna.tsinghua.edu.cn/simple +RUN pip3 install torch torchaudio RUN pip3 install kaldifeat pyyaml # Dependency for client -RUN pip3 install soundfile grpcio-tools tritonclient pyyaml +RUN pip3 install soundfile grpcio-tools tritonclient WORKDIR /workspace diff --git a/funasr/runtime/triton_gpu/README.md b/funasr/runtime/triton_gpu/README.md index daceb4e03..48e889c29 100644 --- a/funasr/runtime/triton_gpu/README.md +++ b/funasr/runtime/triton_gpu/README.md @@ -1,16 +1,21 @@ ## Inference with Triton ### Steps: -1. Refer here to [get model.onnx](https://github.com/alibaba-damo-academy/FunASR/blob/main/funasr/export/README.md) - -2. Follow below instructions to using triton +1. Prepare model repo files ```sh -# using docker image Dockerfile/Dockerfile.server -docker build . -f Dockerfile/Dockerfile.server -t triton-paraformer:23.01 -docker run -it --rm --name "paraformer_triton_server" --gpus all -v :/workspace --shm-size 1g --net host triton-paraformer:23.01 -# inside the docker container, prepare previous exported model.onnx -mv /workspace/triton_gpu/model_repo_paraformer_large_offline/encoder/1/ +git-lfs install +git clone https://www.modelscope.cn/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch.git +pretrained_model_dir=$(pwd)/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch + +cp $pretrained_model_dir/am.mvn ./model_repo_paraformer_large_offline/feature_extractor/ +cp $pretrained_model_dir/config.yaml ./model_repo_paraformer_large_offline/feature_extractor/ + +# Refer here to get model.onnx (https://github.com/alibaba-damo-academy/FunASR/blob/main/funasr/export/README.md) +cp /model.onnx ./model_repo_paraformer_large_offline/encoder/1/ +``` +Log of directory tree: +```sh model_repo_paraformer_large_offline/ |-- encoder | |-- 1 @@ -20,6 +25,7 @@ model_repo_paraformer_large_offline/ | |-- 1 | | `-- model.py | |-- config.pbtxt +| |-- am.mvn | `-- config.yaml |-- infer_pipeline | |-- 1 @@ -27,13 +33,19 @@ model_repo_paraformer_large_offline/ `-- scoring |-- 1 | `-- model.py - |-- config.pbtxt - `-- token_list.pkl + `-- config.pbtxt 8 directories, 9 files +``` + +2. Follow below instructions to launch triton server +```sh +# using docker image Dockerfile/Dockerfile.server +docker build . -f Dockerfile/Dockerfile.server -t triton-paraformer:23.01 +docker run -it --rm --name "paraformer_triton_server" --gpus all -v :/workspace/ --shm-size 1g --net host triton-paraformer:23.01 # launch the service -tritonserver --model-repository ./model_repo_paraformer_large_offline \ +tritonserver --model-repository /workspace/model_repo_paraformer_large_offline \ --pinned-memory-pool-byte-size=512000000 \ --cuda-memory-pool-byte-size=0:1024000000 @@ -43,6 +55,27 @@ tritonserver --model-repository ./model_repo_paraformer_large_offline \ Benchmark [speech_paraformer](https://www.modelscope.cn/models/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/summary) based on Aishell1 test set with a single V100, the total audio duration is 36108.919 seconds. +```sh +# For client container: +docker run -it --rm --name "client_test" --net host --gpus all -v :/workpace/ soar97/triton-k2:22.12.1 # noqa +# For aishell manifests: +apt-get install git-lfs +git-lfs install +git clone https://huggingface.co/csukuangfj/aishell-test-dev-manifests +sudo mkdir -p /root/fangjun/open-source/icefall-aishell/egs/aishell/ASR/download/aishell +tar xf ./aishell-test-dev-manifests/data_aishell.tar.gz -C /root/fangjun/open-source/icefall-aishell/egs/aishell/ASR/download/aishell/ # noqa + +serveraddr=localhost +manifest_path=/workspace/aishell-test-dev-manifests/data/fbank/aishell_cuts_test.jsonl.gz +num_task=60 +python3 client/decode_manifest_triton.py \ + --server-addr $serveraddr \ + --compute-cer \ + --model-name infer_pipeline \ + --num-tasks $num_task \ + --manifest-filename $manifest_path +``` + (Note: The service has been fully warm up.) |concurrent-tasks | processing time(s) | RTF | |----------|--------------------|------------| diff --git a/funasr/runtime/triton_gpu/client/aishell_test.txt b/funasr/runtime/triton_gpu/client/aishell_test.txt new file mode 100644 index 000000000..e68f8582d --- /dev/null +++ b/funasr/runtime/triton_gpu/client/aishell_test.txt @@ -0,0 +1,7176 @@ +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0174.wav", "duration": 3.553, "text": "房地产业正经历一个调整阶段"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0166.wav", "duration": 3.239, "text": "回升势头有转弱的迹象"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0369.wav", "duration": 5.222875, "text": "成为本届残运会志愿服务文化的重要部分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0139.wav", "duration": 4.578, "text": "美丽北京大型绿色公益品牌项目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0220.wav", "duration": 5.2729375, "text": "研究逐步扩大良种补贴品种和范围"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0455.wav", "duration": 5.197, "text": "他们怀疑是有人在村里养蛇所致"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0158.wav", "duration": 4.003, "text": "一线城市土地市场成交火热"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0463.wav", "duration": 3.8979375, "text": "大家对温州话难懂这事儿略有耳闻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0350.wav", "duration": 4.306125, "text": "目前八座为已有场馆并在使用中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0177.wav", "duration": 5.412, "text": "除了做好传统门店的体验销售电商平台销售外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0195.wav", "duration": 5.739, "text": "则需要在发债时机和发债规模上进行合理的把握"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0235.wav", "duration": 5.1540625, "text": "并对政府性债务进行馀额管理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0320.wav", "duration": 4.2900625, "text": "同时也卡住了自动化的投入"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0133.wav", "duration": 5.572, "text": "今年北京要建设筹集各类保障房十万套"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0145.wav", "duration": 4.754, "text": "目前整体的宏观经济还是比较困难的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0440.wav", "duration": 3.491, "text": "又供称是自己失手杀妻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0339.wav", "duration": 8.406, "text": "有着较为丰富志愿服务经历的九零后吴雯的话"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0140.wav", "duration": 2.6779375, "text": "还清首套房公积金贷款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0419.wav", "duration": 9.49, "text": "早前演出的舞台剧令他醒觉要出外寻找更多演出机会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0467.wav", "duration": 6.677, "text": "温州市民郑女士在农贸市场购买了三只大虾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0250.wav", "duration": 4.6539375, "text": "完善环境法律政策体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0433.wav", "duration": 4.3469375, "text": "其发现清洁工保洁不到位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0249.wav", "duration": 6.2579375, "text": "生产者应当及时采取措施消除缺陷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0217.wav", "duration": 3.3470625, "text": "地震灾后重建等领域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0372.wav", "duration": 6.063, "text": "这里常年吸引着众多登山探险运动爱好者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0162.wav", "duration": 4.7569375, "text": "与目前房地产救市的市场导向相吻合"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0124.wav", "duration": 9.098, "text": "已经删除了此前针对外商投资房地产的全部限制类条款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0484.wav", "duration": 3.3779375, "text": "都说下属有困难找领导"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0268.wav", "duration": 2.9880625, "text": "但是病毒武器的出现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0121.wav", "duration": 3.098, "text": "作为一线城市的北京"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0225.wav", "duration": 7.0489375, "text": "对新建公共交通设施用地的地上地下空间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0362.wav", "duration": 3.2739375, "text": "一系列大型赛事的承办"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0461.wav", "duration": 7.243875, "text": "有网友反映前往山东日照一海排档点海鲜时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0187.wav", "duration": 3.5510625, "text": "农业现代化水平显着提升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0264.wav", "duration": 3.379, "text": "中国人从来不缺乏创新创造的基因"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0172.wav", "duration": 5.197, "text": "公积金在申请放贷流程上并未提速"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0131.wav", "duration": 4.282, "text": "住建部等三部委联合发文"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0374.wav", "duration": 4.969, "text": "但训练量几乎和正常时不可同日而语"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0486.wav", "duration": 7.6010625, "text": "温州一家六口吃毒蘑菇身亡女婴拒吃面躲过死神"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0352.wav", "duration": 4.952125, "text": "上一场同包尔江的比赛之后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0265.wav", "duration": 4.6660625, "text": "但是过去整整一年他都在秘密工作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0315.wav", "duration": 3.7369375, "text": "由于传统汽车产业步入寒冬"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0388.wav", "duration": 3.3359375, "text": "雅桑克莱的优势继续在扩大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0180.wav", "duration": 5.6259375, "text": "通州新城彩虹之门用地挂出三十日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0233.wav", "duration": 4.0129375, "text": "保障人民群众生命健康安全"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0320.wav", "duration": 3.8088125, "text": "软件开发是领导的授意"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0180.wav", "duration": 2.579, "text": "但不少业内人士认为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0379.wav", "duration": 3.7360625, "text": "或进入体育行政机关"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0133.wav", "duration": 4.1679375, "text": "美丽北京大型绿色公益品牌项目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0293.wav", "duration": 4.0, "text": "一定会有立竿见影的推广效果"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0238.wav", "duration": 8.0169375, "text": "我国地方政府的累积债务相对于偿付能力来看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0403.wav", "duration": 7.078125, "text": "保证国家队水平不会被其他球队相差太远的承诺下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0212.wav", "duration": 4.134, "text": "农作物秸秆综合利用率百分之五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0387.wav", "duration": 5.6230625, "text": "如今为这次赛事服务的志愿者们更为年轻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0372.wav", "duration": 6.9560625, "text": "哈特灵今年饱受十字韧带伤势困扰"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0256.wav", "duration": 6.74, "text": "如果按照每股一二七美元的股价来算"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0474.wav", "duration": 7.1579375, "text": "把云盘变成了一个淫秽色情信息的隐蔽聚散地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0236.wav", "duration": 3.182, "text": "债券发行人是优质的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0133.wav", "duration": 4.9859375, "text": "然而这家雄心勃勃的公司并未止步于此"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0222.wav", "duration": 2.912, "text": "增强农业公益性服务能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0265.wav", "duration": 3.4489375, "text": "以及给领导们的审批费用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0291.wav", "duration": 3.9809375, "text": "管理层眼光得再高一点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0360.wav", "duration": 4.483125, "text": "而在技术上年轻队员也弥补了我的不足"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0467.wav", "duration": 8.24, "text": "温州一七月大女童接种疫苗抽搐省疾控专家调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0232.wav", "duration": 3.635, "text": "继续建设国家级旱作农业示范区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0369.wav", "duration": 5.8728125, "text": "对于我国冰雪运动实力的提升会有巨大的推动作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0214.wav", "duration": 3.609, "text": "但还需要进一步改进"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0196.wav", "duration": 3.424, "text": "向大企业大集团集中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0223.wav", "duration": 7.0500625, "text": "将其纳入旧城改造和新城建设规划"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0344.wav", "duration": 5.056875, "text": "我和队友们一起团结努力克服了这些困难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0472.wav", "duration": 6.6950625, "text": "机场严查匿打火机过安检放在鞋子里算藏匿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0376.wav", "duration": 5.491, "text": "与商业性冰场达成合作协议"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0404.wav", "duration": 3.880125, "text": "他自己还将出任影片的男主角"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0417.wav", "duration": 4.253875, "text": "同场更有两个神秘嘉宾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0277.wav", "duration": 4.9099375, "text": "整个过程基于安全元素芯片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0393.wav", "duration": 6.734875, "text": "吕会会在走到混合区接受记者采访时止住了泪水"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0464.wav", "duration": 6.454125, "text": "该村妇因犯非法种植毒品原植物罪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0451.wav", "duration": 5.844, "text": "清华附小校长窦桂海诠释成志教育理念"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0414.wav", "duration": 3.8310625, "text": "陈妍希晒出一组攀岩照"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0167.wav", "duration": 4.1800625, "text": "唯独这样才能盘活公积金资源"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0121.wav", "duration": 5.358, "text": "也不代表开发商资金面已经不再紧张"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0368.wav", "duration": 4.896, "text": "高桥大辅因为其比赛风格的妖娆多变"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0257.wav", "duration": 3.8969375, "text": "苹果的股价有一定的波动规律"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0148.wav", "duration": 7.0019375, "text": "因此开发还要继续坚定的开工和拿地的信心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0391.wav", "duration": 3.222875, "text": "直通里约奥运会的目标也近在咫尺"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0244.wav", "duration": 7.495, "text": "建立城市公共交通运营成本和服务质量信息公开制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0407.wav", "duration": 4.719, "text": "乌鸦在没有其他公司愿意接手的情况下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0132.wav", "duration": 3.941, "text": "导致公积金资源闲置的问题出现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0155.wav", "duration": 4.28, "text": "对于实施住房限购政策的城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0282.wav", "duration": 3.6580625, "text": "以及中国的春节做准备"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0136.wav", "duration": 4.677, "text": "设立住房银行的条件已基本成熟"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0415.wav", "duration": 5.214125, "text": "他感叹自己在无线十五年都没有机会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0351.wav", "duration": 4.3349375, "text": "他经常在社交网站公开美食等照片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0437.wav", "duration": 4.555875, "text": "参考消息网七月二八日报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0447.wav", "duration": 3.2050625, "text": "已造成六人死亡九人受伤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0340.wav", "duration": 3.3100625, "text": "对这里的水质比较关心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0169.wav", "duration": 4.5, "text": "根据北京中原地产统计"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0453.wav", "duration": 3.7170625, "text": "事故电梯出厂刚满一年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0403.wav", "duration": 5.4250625, "text": "提升战绩为九胜一负反超至榜首位置"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0229.wav", "duration": 3.126, "text": "加强农业基础设施建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0249.wav", "duration": 6.646, "text": "在遴选优质管理人提升保险资金投资收益率的同时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0261.wav", "duration": 5.173, "text": "神雕还有一定的隐身特性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0318.wav", "duration": 4.296, "text": "项目总投资十四点五亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0216.wav", "duration": 6.262, "text": "从加快转变农业发展的方式关键环节入手"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0169.wav", "duration": 6.791, "text": "因此判断随着利好政策的实施和成交量的增加"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0345.wav", "duration": 4.094, "text": "如果能够加强这方面的锻炼"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0482.wav", "duration": 4.0908125, "text": "瑞安市市场监管局玉海所介入调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0384.wav", "duration": 4.4509375, "text": "当下想把注意力集中在打球上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0281.wav", "duration": 3.4, "text": "为即将到来的购物季"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0237.wav", "duration": 6.589, "text": "对海洋江河湖泊沿岸化工企业进行集中综合整治"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0427.wav", "duration": 3.661875, "text": "事后解释是生活观不同才分开"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0435.wav", "duration": 3.9360625, "text": "还有待职能部门进一步调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0362.wav", "duration": 3.7529375, "text": "双方刺刀见红式的对攻中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0299.wav", "duration": 5.1760625, "text": "包括更换不同尺寸型号和不同的表带"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0131.wav", "duration": 10.8420625, "text": "中指院广州公司总经理张化学向南都记者表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0184.wav", "duration": 4.288, "text": "今久整合营销集团迎来了它的生日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0295.wav", "duration": 4.3049375, "text": "是否能令捧场客心满意足"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0436.wav", "duration": 7.234875, "text": "村官遭判刑处罚证据涉嫌造假公检法自查迟迟无果"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0434.wav", "duration": 5.77, "text": "现代快报记者从省邮政管理局了解到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0233.wav", "duration": 3.444125, "text": "国务院二零一一年五月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0411.wav", "duration": 5.068125, "text": "有网友则晒出当天现场情况"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0394.wav", "duration": 7.0, "text": "所有主办国的男子冰球成绩排位均在二十位之内"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0262.wav", "duration": 6.267, "text": "前往苹果零售店的顾客将比餐厅订餐叫号还方便"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0469.wav", "duration": 8.912125, "text": "温州集资诈骗案犯汇给情人四千万小三被诉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0484.wav", "duration": 6.645, "text": "村委会主任建议由垫资人担任村文书"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0276.wav", "duration": 3.714875, "text": "当出现此类价格变化时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0323.wav", "duration": 2.5899375, "text": "我们进行了极为严谨的测试"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0218.wav", "duration": 4.401, "text": "建立农业补贴政策后评估机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0492.wav", "duration": 6.6628125, "text": "村支书以在全村井水中投毒以报复村民的离奇事件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0369.wav", "duration": 3.239, "text": "中国女排将应战日本队"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0212.wav", "duration": 5.7149375, "text": "以及提供服务中的变相涨价或价格欺诈行为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0280.wav", "duration": 5.203, "text": "仅有三点百分之四的分析师建议卖出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0206.wav", "duration": 7.198, "text": "探索完善财政支持下的农业大灾风险分散机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0311.wav", "duration": 4.3830625, "text": "美的吸取了当年大跃进的教训"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0241.wav", "duration": 4.745, "text": "允许在普通收费公路行驶的摩托车"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0315.wav", "duration": 6.3869375, "text": "而绝大多数漏洞状态都是未联系到厂商或厂商忽略"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0205.wav", "duration": 5.2619375, "text": "在有条件地区实行整乡整县场推进"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0481.wav", "duration": 7.4389375, "text": "温州一女士洗澡被已婚男多次偷窥二年后才报警"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0481.wav", "duration": 6.0278125, "text": "第一个下井救人的大叔却再也没能爬上来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0342.wav", "duration": 5.5949375, "text": "鄂美蝶便毫无保留地将炮火轰向对手"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0233.wav", "duration": 5.333, "text": "地方投融资平台公司申请发行债券"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0372.wav", "duration": 4.605, "text": "显然处于最艰难时期的两人丝毫没有放弃"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0134.wav", "duration": 7.674, "text": "即使去年十一月公积金贷款利率降至百分之七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0258.wav", "duration": 3.7880625, "text": "苹果靠什么颠复移动支付"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0206.wav", "duration": 3.611, "text": "合理布局入海排污口"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0265.wav", "duration": 4.621, "text": "牛师傅总说自己的面没有添加任何防腐剂"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0360.wav", "duration": 5.218, "text": "组委会在部门设置上调整了人员分工"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0206.wav", "duration": 5.1, "text": "力争实现优势产区和主要品种全复盖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0269.wav", "duration": 4.22, "text": "预示着未来战争模样将完全改变"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0418.wav", "duration": 5.756125, "text": "搜狐娱乐讯据香港媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0493.wav", "duration": 3.792, "text": "很多人都已为赏月做准备"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0493.wav", "duration": 6.495875, "text": "村支书醉驾撞伤孕妇刑满释放后仍当人大代表"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0381.wav", "duration": 3.6540625, "text": "是全场得分最高的运动员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0445.wav", "duration": 7.6699375, "text": "温州天价窝头事件背后顾客要持持赔三条中华"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0366.wav", "duration": 4.782, "text": "也让我们看到了自身存在着的不足"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0292.wav", "duration": 5.1281875, "text": "苹果股票每分钟交易量已超过六十七万股"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0470.wav", "duration": 5.3830625, "text": "当植物恢复正常生长后铁丝网将拆除"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0191.wav", "duration": 3.348, "text": "信息化水平不断提高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0210.wav", "duration": 3.4240625, "text": "鼓励农民专业合作社开展信用合作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0269.wav", "duration": 3.188, "text": "就手机领域的发展趋势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0353.wav", "duration": 5.115, "text": "一个强项跟弱项同样突出的拳手"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0248.wav", "duration": 4.891, "text": "有的考试在不同地区收费标准差异较大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0216.wav", "duration": 3.3349375, "text": "加大农业支持保护力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0431.wav", "duration": 7.5, "text": "港富豪被绑涉及两岸三地绑匪要求赎金用比特币"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0463.wav", "duration": 7.5700625, "text": "去年一二月四日在村民多次上访无果的情况下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0142.wav", "duration": 2.347, "text": "与新政相比"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0357.wav", "duration": 3.3261875, "text": "自从哈萨克斯坦独立"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0151.wav", "duration": 3.555, "text": "这是智能家居行业的先例"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0263.wav", "duration": 5.4859375, "text": "也能够给股票市场来带更多兴奋"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0373.wav", "duration": 3.573, "text": "如今和小林尊出双入对"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0413.wav", "duration": 4.5659375, "text": "中新网五月六日电据台湾媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0357.wav", "duration": 4.199, "text": "表示愿意再征战一个冬奥会周期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0453.wav", "duration": 10.428, "text": "村民一零年在沙洲植树造林已成林却被指种错地方"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0164.wav", "duration": 4.587, "text": "涨幅据十大城市之首"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0464.wav", "duration": 5.2849375, "text": "双方因互殴均被行政拘留并处罚款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0318.wav", "duration": 6.37, "text": "仅处于美的集团内部管理架构调整的阶段"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0164.wav", "duration": 3.621, "text": "可美国的月亮总是比中国的亮"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0489.wav", "duration": 5.7368125, "text": "湖北一公司以员工名义贷款数十员工负债千万"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0421.wav", "duration": 6.47, "text": "香港女星吴君如与导演陈可辛爱情长跑十八年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0246.wav", "duration": 6.3299375, "text": "有媒体报道了云投集团等发债企业转移核心资产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0365.wav", "duration": 6.683875, "text": "而且满足了绝大多数业馀排球爱好者的参赛需求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0409.wav", "duration": 3.8779375, "text": "例如出入帮忙开门拉椅子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0158.wav", "duration": 5.5229375, "text": "因此最终仅有龙湖地产一家报价"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0125.wav", "duration": 4.852, "text": "而南昌除了放松首套房界定标准"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0258.wav", "duration": 3.8239375, "text": "强制不断的心率测量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0259.wav", "duration": 3.135, "text": "因为在新品发布之前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0333.wav", "duration": 4.481, "text": "这些都是和消费者增添黏性互动的方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0158.wav", "duration": 3.497, "text": "有效提高家庭购房能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0343.wav", "duration": 5.123875, "text": "北京市排球协会与天津排协已经初步达成合作意向"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0177.wav", "duration": 3.299, "text": "今久又一次利用资本市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0429.wav", "duration": 4.3889375, "text": "港歌神陈奕迅出道近二十年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0473.wav", "duration": 3.1028125, "text": "导致数百亩农田干旱"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0487.wav", "duration": 3.2949375, "text": "酒店行为属于乱收费"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0295.wav", "duration": 3.7900625, "text": "前者有长时间的沉淀"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0215.wav", "duration": 3.14, "text": "新一轮菜篮子建设工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0198.wav", "duration": 5.5320625, "text": "记者昨日第一时间从江苏省交通运输厅获悉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0144.wav", "duration": 3.3899375, "text": "降息消息传出后首日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0164.wav", "duration": 4.679, "text": "年初选择使用公积金贷款的购房者占比环比增多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0404.wav", "duration": 4.933125, "text": "这部命运多旭的电影"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0369.wav", "duration": 2.7839375, "text": "对于法国冰协的行为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0184.wav", "duration": 4.2120625, "text": "更多是原本计划购房的客群享受到了政策利好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0349.wav", "duration": 3.8460625, "text": "朱婷在第四局比赛中意外崴脚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0155.wav", "duration": 4.2649375, "text": "该资金可以是委托人的自有资金"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0427.wav", "duration": 2.797125, "text": "他要赶进厂开工"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0475.wav", "duration": 4.224125, "text": "对提供重大线索协助破案者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0485.wav", "duration": 4.6799375, "text": "高仿沉香多以化学香精等制成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0172.wav", "duration": 6.6859375, "text": "旨在帮助小型企业降低运运营成本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0196.wav", "duration": 3.4, "text": "激发农业科技创新活力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0288.wav", "duration": 4.828, "text": "亦拜股份去年六月一拆七所赐"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0211.wav", "duration": 11.2779375, "text": "吴显亭称将加强和证监会等相关部门的配合和协作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0382.wav", "duration": 6.6240625, "text": "将成为无数武迷接下来最大的期待之一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0419.wav", "duration": 3.087875, "text": "头发随意披在脑后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0243.wav", "duration": 5.605, "text": "支持优势产区现代化鲜活农产品批发市场建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0221.wav", "duration": 3.5760625, "text": "发行规模还会稳步扩大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0415.wav", "duration": 3.579125, "text": "陈冠希在微博晒出一张自拍照"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0347.wav", "duration": 6.0961875, "text": "还曾经两次拿到了四大洲锦标赛的男单冠军"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0409.wav", "duration": 4.2519375, "text": "婷婷指收到消息时正在拍摄广告"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0175.wav", "duration": 2.421, "text": "今久又出高价"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0488.wav", "duration": 7.235875, "text": "图片由胡先生提供本报讯记者喻莉出门旅游"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0354.wav", "duration": 3.097875, "text": "他不仅动过多次肌肉手术"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0266.wav", "duration": 5.124, "text": "高空长航时战略无人机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0230.wav", "duration": 3.266, "text": "各地保障房建设的套数"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0145.wav", "duration": 4.239, "text": "无论是东部中部还是西部地区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0208.wav", "duration": 3.734, "text": "维护正常的市场价格秩序"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0193.wav", "duration": 4.698, "text": "严厉打击农产品投机炒作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0195.wav", "duration": 6.3569375, "text": "三是促进考务成本降低和考试单位合并"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0131.wav", "duration": 6.08, "text": "境外个人购房依然需要符合当地政策规定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0349.wav", "duration": 5.5788125, "text": "阿拉木图方面将会使用十四个场馆作为比赛之用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0146.wav", "duration": 6.2849375, "text": "商品房房的销售面积同比数据出现好转"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0330.wav", "duration": 3.6450625, "text": "任何家用电器只要通电就会产生电磁辐射"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0346.wav", "duration": 2.3239375, "text": "通过未来几年的发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0172.wav", "duration": 4.79, "text": "北京调整首套房公积金贷款最高额度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0213.wav", "duration": 4.6070625, "text": "积极稳妥推进户籍制度改革"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0180.wav", "duration": 3.108, "text": "今久成功实现了转型"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0136.wav", "duration": 5.041, "text": "土地市场体现了房企对一二线市场的看重"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0314.wav", "duration": 5.469, "text": "相关人员表示为了方便和孩子保持联系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0333.wav", "duration": 4.573, "text": "二十二二零一五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0138.wav", "duration": 3.58, "text": "成交量环比大幅增加"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0482.wav", "duration": 4.1269375, "text": "老师发现后和学生一起寻找"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0283.wav", "duration": 5.078, "text": "四大天王平均回报仅一百分之二十五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0287.wav", "duration": 5.005, "text": "而苹果得以顺利跻身道指"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0459.wav", "duration": 4.104, "text": "恐影响旁边大厦的基地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0193.wav", "duration": 3.236125, "text": "以及扩大内需战略的实施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0167.wav", "duration": 8.2619375, "text": "房地产被视作保值升值的投资标的被炒作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0460.wav", "duration": 4.469, "text": "附近村民闻讯纷纷赶来瞧个新鲜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0262.wav", "duration": 5.6210625, "text": "苹果对电动汽车表现出的浓厚兴趣"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0439.wav", "duration": 5.3730625, "text": "伤者目前在解放军第一一八医院进行治疗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0340.wav", "duration": 4.6269375, "text": "因为导致这项数值波动的原因有很多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0462.wav", "duration": 6.806875, "text": "清洁工开宝马上班被称励志故事经查系逃犯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0392.wav", "duration": 5.297125, "text": "不过这依然是吕会会的个人最好成绩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0396.wav", "duration": 3.443125, "text": "就是要一枪一枪地投"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0236.wav", "duration": 6.271, "text": "对全国各地的政府债务进行啦严格审计"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0390.wav", "duration": 3.410875, "text": "该是一件多幸福的事啊"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0445.wav", "duration": 7.003875, "text": "游客在乌鲁木齐市吃自助餐浪费食物被罚二四零零元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0465.wav", "duration": 5.3241875, "text": "被麒麟区法院判处有期徒刑六个月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0228.wav", "duration": 4.791, "text": "确保耕地保有量保持在十亿亩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0292.wav", "duration": 5.3979375, "text": "帮助设计了苹果多项产品的外观和用户体验"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0271.wav", "duration": 5.2829375, "text": "美国芯片行业兴起并购热潮搜狐科技"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0457.wav", "duration": 8.714125, "text": "李连杰名誉维权案一审胜诉网站被判至致歉赔偿一零万"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0199.wav", "duration": 12.636, "text": "也是国家淘汰落后产能加快产业升级宏观政策的体现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0210.wav", "duration": 2.303, "text": "团结就是力量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0344.wav", "duration": 4.7849375, "text": "进而提升我国在冬奥会申办过程中的竞争力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0352.wav", "duration": 3.8369375, "text": "他俩组建了工作团队"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0477.wav", "duration": 3.25, "text": "今后将加强水库管理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0434.wav", "duration": 3.5898125, "text": "现场图温都讯今天下午四时许"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0401.wav", "duration": 3.2829375, "text": "朴泰桓和美容院都互不相让"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0425.wav", "duration": 4.042, "text": "和往日的端庄淑女形象大有不同"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0405.wav", "duration": 5.1110625, "text": "另一部要视独立日二的票房而定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0459.wav", "duration": 6.584, "text": "明着是大兴区黄村镇狼垡三村的医师"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0420.wav", "duration": 3.3920625, "text": "搜狐娱乐讯据台湾媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0298.wav", "duration": 8.082, "text": "高通二零一四年所获专利也增长了百分之二十三"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0366.wav", "duration": 2.9250625, "text": "跑者们随着年龄的增长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0197.wav", "duration": 6.4970625, "text": "加大先进适用技术装备的引进消化和吸收力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0326.wav", "duration": 4.3559375, "text": "汽车模具以及汽车零部件表现一般"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0234.wav", "duration": 11.251, "text": "包括七座以下小客车及摩托车都被列入免费范范围"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0391.wav", "duration": 3.75, "text": "四号位进攻以大斜线为主"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0221.wav", "duration": 4.3399375, "text": "政府举债建设形成了大量资产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0248.wav", "duration": 6.2059375, "text": "有媒体报道了云投集团等发债企业转移核心资产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0374.wav", "duration": 3.283, "text": "但法政大学很快公开辟谣"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0150.wav", "duration": 4.6159375, "text": "对各地分支机构实行垂直管理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0142.wav", "duration": 4.47, "text": "今年北京除了建设保障性住房外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0444.wav", "duration": 3.9189375, "text": "我明白言论自由是一把两刃刀"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0343.wav", "duration": 3.714875, "text": "里约奥组委此前表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0148.wav", "duration": 4.316, "text": "可充分利用这些机构网点和人员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0170.wav", "duration": 2.912, "text": "同比上涨约六成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0464.wav", "duration": 3.8420625, "text": "造成一名井下工人死亡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0166.wav", "duration": 4.997, "text": "并不代表全年土地市场行情走低"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0382.wav", "duration": 5.140875, "text": "中国女排队长坦言不仅是后面的几场比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0309.wav", "duration": 4.891, "text": "成飞集成相关人士告诉每日经济新闻记者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0271.wav", "duration": 6.5400625, "text": "并建议客户减少对该股票在投资组合中的占比"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0443.wav", "duration": 6.4028125, "text": "遭到镇政府工作人员用土掩埋"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0344.wav", "duration": 6.656, "text": "在他的职业生涯里曾在二零一零年拿到世锦赛金牌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0226.wav", "duration": 5.4230625, "text": "也具有间接的经济效益或社会效益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0460.wav", "duration": 3.777125, "text": "该告示不能成为园方免责的理由"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0369.wav", "duration": 6.0920625, "text": "播求久负盛名的扫腿与冲膝技术开始发威"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0179.wav", "duration": 4.1159375, "text": "他认为跟后辈姻缘风险相比"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0293.wav", "duration": 4.5239375, "text": "但应刻在每个中国企业家甚至每个中国人心里"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0457.wav", "duration": 4.4509375, "text": "温州苍南县看守所一宿舍起火"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0356.wav", "duration": 6.0, "text": "花样滑冰短道速滑项目在首都体育馆进行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0302.wav", "duration": 3.566875, "text": "苹果没有危害消费者利益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0446.wav", "duration": 7.567125, "text": "市二中院终审认定李家遗产共计八零零多万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0248.wav", "duration": 7.1990625, "text": "在稳定城市副食品供应保证能力的基础上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0159.wav", "duration": 4.875, "text": "东地产财经周度审计工作报告出炉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0311.wav", "duration": 3.1320625, "text": "今年还将新增二百台"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0271.wav", "duration": 3.5800625, "text": "索尼黑莓以至诺基亚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0258.wav", "duration": 3.3990625, "text": "当它进入动物胃部时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0367.wav", "duration": 2.80325, "text": "但是由于国籍不统一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0165.wav", "duration": 4.183, "text": "广州二手房迎来新一轮涨价潮"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0171.wav", "duration": 6.408, "text": "最低首付款比例由百分之七降低至百分之五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0265.wav", "duration": 5.7950625, "text": "那将会是中国海空军的战力倍增器之一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0375.wav", "duration": 4.4670625, "text": "韩国媒体报道称朴泰桓确实人在日本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0411.wav", "duration": 4.6809375, "text": "但就希望外界多给予他们发展空间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0132.wav", "duration": 4.068, "text": "其成立需具备哪些条件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0372.wav", "duration": 6.656, "text": "搜狐体育郭健九月一日发自日本冈山今天下午"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0349.wav", "duration": 4.8000625, "text": "是一个在球场上有想法的球员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0259.wav", "duration": 6.23, "text": "苹果推出的每一款新产品都不免要引发大讨论"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0121.wav", "duration": 3.675, "text": "真正落地的产品却非常地少"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0337.wav", "duration": 3.9250625, "text": "实现营收净利双增长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0385.wav", "duration": 3.1118125, "text": "半个月的报名期限未到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0435.wav", "duration": 8.4360625, "text": "杨爱明却参加了兴安县第十五届人大五次会议"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0188.wav", "duration": 4.272, "text": "发展现代农业的条件更加有利"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0169.wav", "duration": 4.348, "text": "今久上海分公司又悄无声息地开张了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0334.wav", "duration": 4.0970625, "text": "业物内士向记者分析说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0337.wav", "duration": 5.3249375, "text": "我们小天才电话手表就是不断创新的成果"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0182.wav", "duration": 4.125, "text": "市场去库存的速度在适度提高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0292.wav", "duration": 6.693125, "text": "倾销幅度从百分之十七至百分之九十九"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0248.wav", "duration": 3.886, "text": "以农兽药残留标准为重点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0150.wav", "duration": 6.5899375, "text": "各相关部门要主动服务区县服务各参建单位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0494.wav", "duration": 3.4030625, "text": "被民警用针扎破手指"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0349.wav", "duration": 7.1479375, "text": "作为队长出席新闻发布会的曾春蕾提到了凝聚力三个字"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0135.wav", "duration": 5.561, "text": "得益于一系列稳定房地产市场的措施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0490.wav", "duration": 6.1330625, "text": "强化媒体根据群众举报开展调查采访和舆论监督"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0188.wav", "duration": 3.136, "text": "生产经营方式不断优化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0389.wav", "duration": 3.689, "text": "朱婷进攻相对比较简单"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0481.wav", "duration": 5.1379375, "text": "华商报商洛讯记者白鹏飞近日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0244.wav", "duration": 4.139, "text": "可以向有关金融监管部门申请"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0187.wav", "duration": 3.509, "text": "发行利率也有较大幅度上升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0277.wav", "duration": 5.865, "text": "拓朗的主打产品是现场可编程门阵列芯片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0387.wav", "duration": 6.4880625, "text": "感谢这三位因伤未能参赛的姐妹对球队做出的巨大贡献"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0333.wav", "duration": 3.308125, "text": "一些车企为了节约成本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0135.wav", "duration": 3.8970625, "text": "房企对土地的争抢更加积极"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0149.wav", "duration": 6.821, "text": "也将在一定程度上降低刚需购房者支付负担"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0219.wav", "duration": 3.834125, "text": "中央企业要进一步深化改革"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0333.wav", "duration": 5.982875, "text": "满足政府和企业级客户云计算下的定制化需求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0227.wav", "duration": 3.027125, "text": "二零一二保障房建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0283.wav", "duration": 3.72, "text": "已经有股票经纪公司预测"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0454.wav", "duration": 2.9509375, "text": "目前神志已恢复清醒"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0225.wav", "duration": 3.1709375, "text": "大年初一路上都没什么车"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0381.wav", "duration": 5.4460625, "text": "不少媒体追问她是否有男朋友"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0175.wav", "duration": 2.881, "text": "从申请到最后的放款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0198.wav", "duration": 5.15, "text": "结合地方政府债务管理制度的完善"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0448.wav", "duration": 3.803, "text": "本来一家人出国旅游挺高兴的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0123.wav", "duration": 5.78, "text": "即由商业银行向市民发放执行公积金利率的贷款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0287.wav", "duration": 5.087875, "text": "并减少太阳能产业相关就业岗位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0149.wav", "duration": 3.842, "text": "与房地产商的需求相去甚远"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0404.wav", "duration": 4.161125, "text": "瓦尔兹将精心演绎这个著名角色"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0138.wav", "duration": 4.273, "text": "较上月环比上涨百分之五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0318.wav", "duration": 7.6579375, "text": "资产规模将达到六十五亿八百亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0340.wav", "duration": 3.745, "text": "跑友们积极的参与剪纸活动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0352.wav", "duration": 5.1950625, "text": "展示出了如同其偶像安东尼一样的全面犀利"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0425.wav", "duration": 5.853, "text": "陈妍希回应现在真的很享受快乐恋爱的喜悦"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0265.wav", "duration": 3.723, "text": "创新是中华民族最鲜明的禀赋"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0383.wav", "duration": 2.910875, "text": "经过二十多年的努力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0215.wav", "duration": 4.1689375, "text": "央企在境外含港澳地区营收"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0430.wav", "duration": 6.751, "text": "怎料无心说话却一语成谶"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0260.wav", "duration": 3.8049375, "text": "有媒体援引知情人士消息称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0237.wav", "duration": 8.5650625, "text": "引导农产品加工业向种养业优势区域和城市郊区集中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0363.wav", "duration": 6.0399375, "text": "当被问及新老队员相互担当弥补的话题时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0485.wav", "duration": 3.4868125, "text": "这让张女士哭笑不得"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0158.wav", "duration": 5.7800625, "text": "呈现购房者积极入市的行情"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0149.wav", "duration": 6.373, "text": "公积金是地方政府可以直接通过政策调整动用的资金"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0132.wav", "duration": 5.9490625, "text": "这一系列公积金门槛放低额度提高的调整"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0245.wav", "duration": 4.7730625, "text": "债券市场城投债券发行不畅"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0207.wav", "duration": 5.4189375, "text": "农业面临着容易被忽视或削弱的风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0383.wav", "duration": 2.871, "text": "但是里面不是淡定的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0183.wav", "duration": 3.023, "text": "公积金短期拉动的购房需求有限"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0124.wav", "duration": 5.109, "text": "汇率较大概率维持双向波动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0265.wav", "duration": 5.365, "text": "这对于一家巨型企业是非常难能可贵的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0234.wav", "duration": 4.125, "text": "试点基金管理公司发展态势良好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0143.wav", "duration": 4.723, "text": "开发商仍然面临着较大的销售压力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0156.wav", "duration": 6.7070625, "text": "七月广州二手楼市交投升温的态势已相当明确"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0211.wav", "duration": 4.0229375, "text": "城投债券的发行有比较严格的条件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0143.wav", "duration": 3.1839375, "text": "但综观国内同类企业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0379.wav", "duration": 4.396, "text": "很多人都看到了新的奥运商机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0371.wav", "duration": 3.4409375, "text": "支持他们继续训练参加比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0298.wav", "duration": 5.187, "text": "苹果没有透露更昂贵智能手表的具体售价"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0429.wav", "duration": 3.4970625, "text": "谢依霖穿着白色吊带裙"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0314.wav", "duration": 6.1169375, "text": "八月初公司通过了增加产能建设的决议"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0457.wav", "duration": 4.3559375, "text": "长江商报消息本报记者张萌昨日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0445.wav", "duration": 5.137, "text": "双方发生语言冲突后进行互殴"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0304.wav", "duration": 3.2580625, "text": "这台设备就不会开机运转"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0239.wav", "duration": 3.906, "text": "健全安全管理制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0408.wav", "duration": 2.762, "text": "晚上二十零下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0146.wav", "duration": 3.072, "text": "业务网点一千个"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0156.wav", "duration": 8.369, "text": "一外商投资房地产企业注册资本与投资总额比例"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0236.wav", "duration": 5.818, "text": "对化学品生产经营企业进行环境隐患排查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0403.wav", "duration": 3.188, "text": "比赛地水不是太干净"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0136.wav", "duration": 2.9050625, "text": "产生非常可怕的结果"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0306.wav", "duration": 5.5959375, "text": "同比增长十一五十六点四百分之二"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0317.wav", "duration": 8.3969375, "text": "在国内四大厂商浪潮华为联想曙光中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0206.wav", "duration": 4.5560625, "text": "加快推进该区域现代农业建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0333.wav", "duration": 5.263875, "text": "每天的销量让你感受到儿童电话手表的火爆"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0274.wav", "duration": 5.3149375, "text": "以告知客户相关技术人员确切的空闲时间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0491.wav", "duration": 7.6371875, "text": "潘老伯二六岁的外孙还在医院重症监护室治疗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0231.wav", "duration": 3.8830625, "text": "保障房和水利建设概念股"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0355.wav", "duration": 4.6120625, "text": "能够在这个集体与可爱的队友一起拼杀"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0290.wav", "duration": 9.4310625, "text": "认定从中国进口的乘用车和轻型卡车轮胎存在倾销行为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0334.wav", "duration": 6.3669375, "text": "锂电池在今年上半年成为诸多上市公司的业绩功臣"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0175.wav", "duration": 3.615, "text": "房价未来可能会略微有下跌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0415.wav", "duration": 3.318125, "text": "袁两半一人歌词包办"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0252.wav", "duration": 3.8460625, "text": "淘汰报废高耗能老旧农业机械"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0458.wav", "duration": 7.03, "text": "游客武夷山就餐麝香肉结账要四八元一两"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0296.wav", "duration": 5.105125, "text": "这使得神雕在全球也成为最大的无人机之一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0354.wav", "duration": 3.0029375, "text": "北京时间十月二十七日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0153.wav", "duration": 6.126, "text": "住房城乡建设部政策研究中心主任秦虹表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0436.wav", "duration": 4.4619375, "text": "这是二零一零年四月二三日以来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0437.wav", "duration": 7.400875, "text": "骗取搬迁补偿金一二二万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0412.wav", "duration": 6.7270625, "text": "哈哈哈第一次见人用这种方式证明自己没怀孕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0482.wav", "duration": 4.8579375, "text": "温州网讯洗澡被偷窥却一忍再忍"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0256.wav", "duration": 8.651, "text": "其中包括美国大鸦无人机今后将由印度工厂制造"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0207.wav", "duration": 4.386, "text": "符合提高直接融资比重的要求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0450.wav", "duration": 6.9350625, "text": "游客进店未购物被导游嘲讽官方正在立案处理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0263.wav", "duration": 3.396, "text": "粗估下来大概要七十亿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0488.wav", "duration": 2.9911875, "text": "意味着生活条件的改善"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0400.wav", "duration": 4.9040625, "text": "我的泪水主要还是来自于喜悦"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0165.wav", "duration": 4.311, "text": "楼市调控的行政手段宜减不宜加"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0281.wav", "duration": 5.6049375, "text": "想要成功的零售商将考虑消费者的利益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0477.wav", "duration": 4.2780625, "text": "村里随处可见装潢小广告"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0185.wav", "duration": 3.865, "text": "就在上周五双降公布之后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0163.wav", "duration": 2.534, "text": "盘活各地公积金资源"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0426.wav", "duration": 3.078125, "text": "一路上都十指紧扣"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0234.wav", "duration": 7.7990625, "text": "从二零零九年下半年就开始要求有关部门调研这一问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0137.wav", "duration": 3.662, "text": "中新网房产频道每每"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0235.wav", "duration": 7.053, "text": "对于引领全国现代农业加快发展具有重要意义"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0469.wav", "duration": 9.8561875, "text": "港媒关注重雾霾重回华北罕见蓝天只持续两周"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0233.wav", "duration": 6.2060625, "text": "推进农业经营体系体制创新"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0335.wav", "duration": 5.2050625, "text": "如今的智能家电更多意义上是智能加上互动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0236.wav", "duration": 5.3559375, "text": "增加划设城市公共交通优先车道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0470.wav", "duration": 4.5339375, "text": "她将几只虾的图片通过微博发布"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0175.wav", "duration": 7.203, "text": "而政府放松限购按揭和内地融资政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0176.wav", "duration": 5.8370625, "text": "为进一步完善住房公积金个人住房贷款政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0396.wav", "duration": 3.681875, "text": "平昌曾经三次申办冬奥会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0491.wav", "duration": 5.7360625, "text": "以上两村民所要求的内容不符合相关规定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0367.wav", "duration": 5.7780625, "text": "均已被纳入二零二二年冬奥会的规划场馆"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0162.wav", "duration": 3.389, "text": "促进楼市预期向好发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0422.wav", "duration": 3.4970625, "text": "但坚信有我落脚的地方"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0293.wav", "duration": 5.8250625, "text": "今年三月美国大众科学杂志刊文称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0177.wav", "duration": 3.083, "text": "在目前的法律框架下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0372.wav", "duration": 5.473875, "text": "用他们真挚的微笑和运动员建立起心与心的连接"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0374.wav", "duration": 6.3979375, "text": "为他们搭建一个特色自由的体育室加户外体育课堂"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0210.wav", "duration": 3.7359375, "text": "面临着一系列严峻挑战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0232.wav", "duration": 6.2440625, "text": "并对地方政府债务进行监控和风险防范等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0292.wav", "duration": 7.295875, "text": "二零一五年最适宜供职的公司仍在科技领域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0290.wav", "duration": 7.6450625, "text": "有报道称苹果计划在二零一四年秋季推出其可穿戴设备"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0237.wav", "duration": 6.807, "text": "用五个多月时间对全国七十台运行在建核电机组"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0461.wav", "duration": 6.3310625, "text": "不像她发表的那些先锋的观点一样冲击人眼球"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0402.wav", "duration": 4.802, "text": "视频中国三比一大胜俄罗斯独占女排世界杯榜首"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0365.wav", "duration": 5.5400625, "text": "专家会诊之后认为孙杨存在心肌缺血情况"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0339.wav", "duration": 6.4350625, "text": "中国队教练组还是做出了让朱婷继续休战的抉择"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0207.wav", "duration": 3.392, "text": "壮大农业农村人才队伍"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0239.wav", "duration": 3.754, "text": "农业机械化推进工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0380.wav", "duration": 7.2470625, "text": "这些出路也是中国运动员比较常见的退役选择"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0484.wav", "duration": 4.729, "text": "超过韩国成为访日最大客源国"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0181.wav", "duration": 3.06, "text": "后今久时代正式到来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0257.wav", "duration": 5.541, "text": "一旦战事结束或出于特殊需要可以实现自毁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0355.wav", "duration": 6.917, "text": "在今天的比赛中中国女排始终相互鼓励相互扶持"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0377.wav", "duration": 4.3310625, "text": "被立刻送往医院接受紧急输血治疗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0268.wav", "duration": 3.0379375, "text": "蕴含着巨大商业价值"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0244.wav", "duration": 4.808, "text": "各地机场高速公路是否实行免费通行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0161.wav", "duration": 5.582, "text": "继前年和去年连续两年突破四万亿元后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0383.wav", "duration": 3.5910625, "text": "由于中国女排的前期准备特别充分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0349.wav", "duration": 3.9919375, "text": "对于我的对手制造更多的麻烦"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0154.wav", "duration": 3.117, "text": "上海作为一线城市代表"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0413.wav", "duration": 2.993875, "text": "搜狐娱乐讯九月六日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0379.wav", "duration": 4.1699375, "text": "严重影响卡尔泽塔的实现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0163.wav", "duration": 6.563, "text": "可以购买符合实际需要的自用自住商品房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0345.wav", "duration": 4.587125, "text": "在今天的比赛中曾春蕾首发出场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0261.wav", "duration": 3.7330625, "text": "在当年社交游戏风靡的时候"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0312.wav", "duration": 3.526125, "text": "是很多父母迫切需要的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0159.wav", "duration": 6.6730625, "text": "得益于一系列稳定房地产市场的措施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0440.wav", "duration": 6.9038125, "text": "更有全球李氏宗亲大会将其列为祭祖主题曲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0420.wav", "duration": 3.3100625, "text": "今年三月底惊爆分手"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0318.wav", "duration": 4.0020625, "text": "公司超百位研发人员历经半年多时间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0345.wav", "duration": 5.4650625, "text": "明年春天普鲁申科将再次进行手术"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0147.wav", "duration": 5.166, "text": "各区县各单位要加强协作配合"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0274.wav", "duration": 3.1809375, "text": "公司的成功缺一不可"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0182.wav", "duration": 2.984, "text": "作用大并不代表每个人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0395.wav", "duration": 3.787875, "text": "只能依靠顽强的意志进行支撑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0178.wav", "duration": 3.3369375, "text": "这些税费均无法避免"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0425.wav", "duration": 4.3840625, "text": "许茹芸与韩籍男友举行了婚礼"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0206.wav", "duration": 4.4299375, "text": "这决定了我国城市化动力十分强劲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0485.wav", "duration": 8.775875, "text": "渔民在南海打捞起可疑电子装置确系无人潜航器"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0137.wav", "duration": 5.2569375, "text": "多数在积极剑指一线城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0192.wav", "duration": 4.083, "text": "耕地占用税税率提高后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0129.wav", "duration": 5.6390625, "text": "北京公积金贷款成交量上涨百分之五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0436.wav", "duration": 10.5, "text": "村支书骗拆迁款一二万获刑一一年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0460.wav", "duration": 3.187, "text": "二零一三六二三"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0430.wav", "duration": 4.3579375, "text": "陈凯琳之前说没交过男友"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0492.wav", "duration": 4.057125, "text": "仍处于深度昏迷状态"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0493.wav", "duration": 4.1689375, "text": "为泄愤将开水淋到顾客头上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0196.wav", "duration": 7.8470625, "text": "引导各地鉴借示范区发展现代农业的好做法和好经验"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0329.wav", "duration": 2.712, "text": "关于手机等产品的辐射问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0193.wav", "duration": 5.0190625, "text": "启动实施农业科技创新能力建设工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0476.wav", "duration": 9.808125, "text": "港媒曝水货客扮残疾人在轮椅中藏钻石月入八万"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0246.wav", "duration": 6.7360625, "text": "也就是将债劵还本压力在债劵存续期内进行合理分摊"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0179.wav", "duration": 3.7229375, "text": "虽然刚需购房者入市积极性有所提升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0213.wav", "duration": 3.119, "text": "我国地方政府性债务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0494.wav", "duration": 4.3879375, "text": "其室友在微博上所发的寻人启事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0405.wav", "duration": 2.900875, "text": "且获得奥斯卡最佳动画片大奖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0210.wav", "duration": 12.0, "text": "城市化快速发展期的重要特征就是基础设施投资需求量大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0465.wav", "duration": 3.8410625, "text": "躺进吊床的父亲还荡起吊床"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0274.wav", "duration": 7.7409375, "text": "去年高通被评为最佳实习科技公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0170.wav", "duration": 7.718, "text": "这份只有五百多字的通知印发于八月十九日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0375.wav", "duration": 3.745, "text": "当队长的一举一动都会带来情绪上影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0473.wav", "duration": 4.994875, "text": "双手背脸部等裸露部位有刺伤划伤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0125.wav", "duration": 6.875, "text": "发现土地成本占比持续提升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0313.wav", "duration": 4.891, "text": "置入只有手机几分之一大小的手表表盘"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0455.wav", "duration": 5.162125, "text": "随即被送到儿童医院进行抢救"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0365.wav", "duration": 6.397, "text": "崇礼县发展较成熟的万龙滑雪场和云顶滑雪场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0176.wav", "duration": 4.713, "text": "除了去库存和夯实楼市回升基础外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0260.wav", "duration": 4.865, "text": "包括电池和机器人技术领域的专家"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0385.wav", "duration": 3.8469375, "text": "首先要跨过大韩体育会这一关"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0199.wav", "duration": 3.4869375, "text": "科技创新孕育新突破"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0459.wav", "duration": 4.1640625, "text": "湖北电梯吃人定性为责任事故"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0263.wav", "duration": 4.5969375, "text": "苹果零售店实行先到先服务的原则"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0426.wav", "duration": 3.4309375, "text": "搜狐娱乐讯据台湾媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0431.wav", "duration": 5.234875, "text": "温州鹿城区宣传部官微做出回应"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0250.wav", "duration": 5.3619375, "text": "但出于对我国地方政府债务风险的不合理判断"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0410.wav", "duration": 2.609125, "text": "沉寂一段时间后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0325.wav", "duration": 5.7990625, "text": "近年来随着国内互联网企业的快速发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0308.wav", "duration": 5.7690625, "text": "美的家用空调事业部制造副总裁乌守保对记者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0462.wav", "duration": 6.724125, "text": "贵港民警追凶未言弃嫌犯一五年后落法网"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0149.wav", "duration": 3.344, "text": "一线城市签约十七万套"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0444.wav", "duration": 6.98, "text": "雷某一直在河北邢台衡水等地干着游走骗婚的勾当"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0181.wav", "duration": 2.833, "text": "平均溢价率较低"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0340.wav", "duration": 8.0080625, "text": "徐永昊以雷霆万钧之势缔造了一场震撼的秒杀之作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0469.wav", "duration": 4.0700625, "text": "参考消息网八月一五日报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0247.wav", "duration": 4.7360625, "text": "鼓励商业银行去境外开设分支机构"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0307.wav", "duration": 3.991, "text": "该公司内部相关人士回应称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0225.wav", "duration": 5.7680625, "text": "要尽快建立我国的地方政府债务管理体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0472.wav", "duration": 7.7839375, "text": "温州市域铁路将成为全国第一条城市交通铁路"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0358.wav", "duration": 4.337875, "text": "两人的更改国籍禁赛期即将开始"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0322.wav", "duration": 8.295875, "text": "虽然投入产生问题以及机器人后期运行维护等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0191.wav", "duration": 4.374, "text": "具备条件的要积极引进战略投资者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0308.wav", "duration": 3.2680625, "text": "美的计划在二零一八年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0173.wav", "duration": 7.409, "text": "整体平均楼面价折合一万元每平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0264.wav", "duration": 4.8010625, "text": "就开始追寻打造真正的机器人的梦想"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0315.wav", "duration": 4.702875, "text": "从美的海尔使用机器人操作来看来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0350.wav", "duration": 3.1179375, "text": "高桥大辅丝毫不加掩饰"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0484.wav", "duration": 7.639875, "text": "湖北二五岁女子从未来例假基因检查是男身"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0346.wav", "duration": 6.291, "text": "张锦麟将为自己称为鸟巢新一代志愿者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0297.wav", "duration": 3.2839375, "text": "据可靠的网络消息源称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0319.wav", "duration": 6.668125, "text": "阐述老板电器和内部创新外部国际化如何进行破题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0189.wav", "duration": 6.266, "text": "即各省在考务费标准基础上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0125.wav", "duration": 4.317, "text": "年初往往是土地供应的淡季"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0132.wav", "duration": 3.658, "text": "不得超越界限盲目扩张"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0392.wav", "duration": 6.150875, "text": "中国国家男子冰球队目前排名第三十二位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0389.wav", "duration": 3.864, "text": "我们可以说已经输给了其他强敌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0327.wav", "duration": 3.635, "text": "儿童电话手表到底有多火"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0418.wav", "duration": 3.400875, "text": "陈势安两天一夜没洗澡刷牙"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0125.wav", "duration": 6.9359375, "text": "放开外资购买房产限制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0447.wav", "duration": 4.035125, "text": "近一年来每天晚上有垃圾倒在这块闲置地上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0371.wav", "duration": 5.218, "text": "本次赛事已经开始接受团队报名"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0386.wav", "duration": 4.7050625, "text": "二四个参赛名额就已经全部报满"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0316.wav", "duration": 5.879875, "text": "紫光集团还计划布局物联网网络设备芯片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0439.wav", "duration": 7.522, "text": "该歌曲今年一经在各大音乐网站上线便收获无数好评"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0222.wav", "duration": 5.338, "text": "虽然已发行的城投债券的还本付息都是正常的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0320.wav", "duration": 3.9260625, "text": "因此更有可能留下信息安全风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0174.wav", "duration": 7.3339375, "text": "一至七月份大多数城市还是会采取积极降价的策略"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0460.wav", "duration": 4.9931875, "text": "地头边的一间平房也被夷为平地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0307.wav", "duration": 4.8940625, "text": "担心会直接影响孩子正常的学习"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0224.wav", "duration": 7.5539375, "text": "建设水产遗传育种中心和原良种场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0358.wav", "duration": 3.952875, "text": "伴随着双方激战的火爆升级"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0383.wav", "duration": 5.9040625, "text": "身材高挑并且不抽烟喝酒的男生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0128.wav", "duration": 5.775, "text": "随着广州住房公积金贷款政策的调整实施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0162.wav", "duration": 5.1050625, "text": "随着一线城市楼市企温回升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0126.wav", "duration": 4.883, "text": "以北京提高公积金贷款最高额度为例"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0337.wav", "duration": 5.667, "text": "锂电池在今年上半年成为诸多上市公司的业绩功臣"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0415.wav", "duration": 2.954125, "text": "二人一直鲜少回应"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0457.wav", "duration": 5.2588125, "text": "失联近两天的中传研究生周云露"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0229.wav", "duration": 6.055875, "text": "加强地方政府债务管理和风险防控"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0234.wav", "duration": 3.302, "text": "开展池塘标准化改造"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0451.wav", "duration": 3.4109375, "text": "由普通商店作为掩护"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0123.wav", "duration": 5.9289375, "text": "缴存者还可以在租房装修离退休时提取"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0488.wav", "duration": 9.0, "text": "其在村西旁花费万元建起一名叫清明堂的家庙"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0132.wav", "duration": 9.854, "text": "三线城市库存积压又逼倒房地产商在一线城市抢地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0279.wav", "duration": 3.2989375, "text": "应用于汽车医疗等行业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0208.wav", "duration": 4.4830625, "text": "确保过往车辆分类分车道有序通行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0404.wav", "duration": 2.541, "text": "如今再遭厄运"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0303.wav", "duration": 4.635, "text": "现在市面上的电话手表功能最主要有两个通话和定位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0405.wav", "duration": 5.17825, "text": "档期遇到了不可调和的冲突"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0339.wav", "duration": 3.1119375, "text": "并且会逐渐扩大比赛规模"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0329.wav", "duration": 9.548125, "text": "再加上互联网企业对服务器技术性可能等要求很高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0347.wav", "duration": 4.126, "text": "张晓雅这个娃娃训练很自觉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0191.wav", "duration": 5.8039375, "text": "促使我国战略性新兴产业发展实现了良好开局"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0456.wav", "duration": 5.895, "text": "蛇主刘先生表示以后将不在家里养蛇"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0240.wav", "duration": 5.0820625, "text": "大力发展高效植保机器"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0124.wav", "duration": 5.71, "text": "我国房地产市场过去总体偏紧部分地区过紧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0125.wav", "duration": 4.2389375, "text": "今久商品房销售额首次上涨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0458.wav", "duration": 8.77, "text": "村卫生室医师兼职黑b超记者暗访结束被跟踪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0189.wav", "duration": 2.825, "text": "对于这条特殊的隧道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0150.wav", "duration": 4.653, "text": "有关地方追回资金或补贴一亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0436.wav", "duration": 3.417, "text": "目前该协管已经停职"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0486.wav", "duration": 6.135, "text": "温州医生夫妇贩婴被批捕女儿欲捐款替父赎罪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0195.wav", "duration": 5.249, "text": "全面准确及时发布事故处置相关信息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0266.wav", "duration": 4.5389375, "text": "这一亏损已经收窄了百分之五十七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0157.wav", "duration": 6.428, "text": "上海深圳等主要城市也在公积金新政推动下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0426.wav", "duration": 3.538125, "text": "二人发生姓肢体冲突"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0414.wav", "duration": 5.2150625, "text": "乱糟糟的马尾加上宽松衣服的村姑打扮"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0282.wav", "duration": 3.828, "text": "价格高于六百美元的高端手机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0449.wav", "duration": 5.791, "text": "但各楼层的自动扶梯均已关停供图新华"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0369.wav", "duration": 8.2590625, "text": "新科世界冠军宁泽涛领衔中国队出战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0423.wav", "duration": 4.826875, "text": "有不少幕后花絮片花"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0241.wav", "duration": 4.63, "text": "我国资本市场将迎来更多机构投资者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0478.wav", "duration": 5.364, "text": "蔡兴桥在妈妈的帮助下靠墙练习站立"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0394.wav", "duration": 2.99, "text": "对垒日本女排有这样一个小细节"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0234.wav", "duration": 4.115, "text": "政府将制订境外投资总体战略"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0127.wav", "duration": 3.885, "text": "据伟嘉安捷数据统计显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0365.wav", "duration": 4.901875, "text": "以大刀阔斧的摆肘砸肘为主"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0459.wav", "duration": 3.0849375, "text": "称就是想找个无辜的人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0242.wav", "duration": 4.491, "text": "加快规模养殖场粪污处理利用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0487.wav", "duration": 6.6179375, "text": "游客成都遇连环车祸近千人隧道里死里逃亡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0440.wav", "duration": 3.485125, "text": "船上八名船员六人不幸遇难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0226.wav", "duration": 3.6010625, "text": "都要严格履行环评程序"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0442.wav", "duration": 7.0900625, "text": "惠州公安在金山河捞获一具无头无双手女尸"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0365.wav", "duration": 4.0649375, "text": "指导各赛区开展志愿服务培训"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0312.wav", "duration": 6.1069375, "text": "决定由麦德公司的技术部门研发静默插件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0297.wav", "duration": 3.292, "text": "苹果就公布了合作伙伴"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0375.wav", "duration": 4.249, "text": "去年在亚青赛上亮相后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0291.wav", "duration": 4.2540625, "text": "触控科技子公司涨幅居前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0243.wav", "duration": 4.9199375, "text": "坚持分类指导重点突破梯次推进"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0124.wav", "duration": 4.457, "text": "公积金贷款与商业贷款之间的利息差额"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0487.wav", "duration": 3.438, "text": "明星刘晓庆又火了一把"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0319.wav", "duration": 3.6169375, "text": "我就给自己的孩子也买了一个呢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0253.wav", "duration": 7.2540625, "text": "比如用户抱怨升级之后设施无法像以前那样工作了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0194.wav", "duration": 3.5239375, "text": "城投债券收益率上升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0125.wav", "duration": 4.149, "text": "贷款额度上限调整为一百万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0245.wav", "duration": 5.422, "text": "加大天然草原退牧还草工程实施力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0375.wav", "duration": 5.838875, "text": "但直到一二年后的法国阿尔贝维尔冬奥会上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0337.wav", "duration": 9.074, "text": "合作范围遍及全国各直属海关及隶属海关"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0230.wav", "duration": 7.365, "text": "对城市公共交通企业实行税收优惠政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0203.wav", "duration": 5.243875, "text": "徐林这几年城投债券发行数量的确有所增加"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0250.wav", "duration": 6.98, "text": "以园艺产品生产品水产品等为重点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0404.wav", "duration": 6.1699375, "text": "但是由于加朵要为蝙蝠侠大战超人忙碌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0378.wav", "duration": 4.2529375, "text": "想通过训练提升脚踝和小腿的能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0182.wav", "duration": 6.131, "text": "通州运河核心区一宗多功能用地挂出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0401.wav", "duration": 4.2148125, "text": "若想保住进入前两名的资格"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0438.wav", "duration": 2.766125, "text": "你不可能一分钱不花"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0205.wav", "duration": 3.6790625, "text": "健全农业再保险体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0368.wav", "duration": 3.298125, "text": "速度下降的更加明显"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0194.wav", "duration": 4.5390625, "text": "有利于提升城投债券的资产配置价值"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0229.wav", "duration": 4.4810625, "text": "作为城投债券发行监管部门"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0254.wav", "duration": 4.938, "text": "由于关于乔布斯的电话即将上演了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0449.wav", "duration": 11.1430625, "text": "五一岁的村支委猥亵一名一零岁的留守儿童隔壁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0385.wav", "duration": 4.678, "text": "和绝不会是短期行为的基调"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0179.wav", "duration": 3.7690625, "text": "纠偏政策一刀切的负面影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0455.wav", "duration": 2.962125, "text": "虽然事情过去三天了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0334.wav", "duration": 6.454125, "text": "锂电池生产企业将迎来业绩持续高增长阶段"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0494.wav", "duration": 8.3779375, "text": "华江瑶族乡十四届人大代表会第五次会议会务材料上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0241.wav", "duration": 5.4959375, "text": "提高信息化优质化和品牌化水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0354.wav", "duration": 4.6079375, "text": "这场对决的惨烈程度超出了所有人的想象"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0441.wav", "duration": 5.3930625, "text": "湖北五道杠少年捐出二万元政府奖学金"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0208.wav", "duration": 6.2740625, "text": "城市化快速发展期的重要特征就是基础设施投资需求大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0255.wav", "duration": 3.787, "text": "这个数据不及苹果的一个季度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0266.wav", "duration": 3.3719375, "text": "从随身听到智能电话"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0395.wav", "duration": 4.0700625, "text": "此次北京联手张家口申办冬奥会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0167.wav", "duration": 3.0589375, "text": "随着市场调整的深入"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0188.wav", "duration": 5.37, "text": "加快农业技术引进消化吸收再创新步伐"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0222.wav", "duration": 8.234, "text": "是一种合理的基础设施投融资金建设行为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0347.wav", "duration": 4.25, "text": "他在为此时刻准备着"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0373.wav", "duration": 4.093, "text": "尤其是比目鱼肌和腓肠肌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0360.wav", "duration": 6.328125, "text": "但这对老将却以追梦无悔的精神"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0201.wav", "duration": 5.595, "text": "加强小麦一喷三防喷施叶面肥"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0378.wav", "duration": 10.0800625, "text": "莎宾娜也凭借兼具清纯和性感气质的漂亮外形走红日本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0150.wav", "duration": 3.336, "text": "未来子女出现姻缘风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0460.wav", "duration": 2.7841875, "text": "当日的新闻发布会上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0196.wav", "duration": 4.8349375, "text": "加快农产品流通标准体系建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0179.wav", "duration": 4.179, "text": "开发商整体在手土地充足"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0213.wav", "duration": 7.6910625, "text": "城投债劵作为准市政债劵仍将是有效的融资工具"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0441.wav", "duration": 8.521, "text": "参考消息网一零月八日报道国庆长假结束"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0482.wav", "duration": 4.917, "text": "访日外国游客突破千万"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0352.wav", "duration": 8.3820625, "text": "一九九二年八月五日出生于云南省保山市龙陵县"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0307.wav", "duration": 4.9199375, "text": "中国企业与世界企业同在同一起跑线上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0346.wav", "duration": 6.1660625, "text": "而这些战斗也成为了圈内久聊不厌的经典谈资"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0202.wav", "duration": 3.9860625, "text": "加强农牧互补牧养结合"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0274.wav", "duration": 4.4700625, "text": "我们鼓励用户只从可信任的渠道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0457.wav", "duration": 9.713125, "text": "村民二六零棵梨树被连根推倒在地里住房被夷为平地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0340.wav", "duration": 7.317875, "text": "来自北汽女排的主攻手刘晓彤取代朱婷的位置首发出场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0437.wav", "duration": 8.6110625, "text": "港媒称马云向浙江商人发出警告永远不要行贿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0467.wav", "duration": 4.494875, "text": "夏先生带太太跟团去新马泰旅游"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0366.wav", "duration": 3.026875, "text": "当年的整个世青赛上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0271.wav", "duration": 3.5179375, "text": "然后又要去竞选纽约州长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0482.wav", "duration": 2.9099375, "text": "尽管在民警的协助下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0357.wav", "duration": 2.911875, "text": "作为主力主攻的朱婷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0415.wav", "duration": 5.3610625, "text": "网友纷纷将焦点转移到这对情侣身上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0336.wav", "duration": 3.1609375, "text": "一旦发现系统有漏洞"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0401.wav", "duration": 5.713875, "text": "也成为哈萨克斯坦的宣传大使"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0238.wav", "duration": 8.5589375, "text": "以及所有民用研究堆和核燃燃料循环设施等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0468.wav", "duration": 6.2900625, "text": "回家后发现大虾体内居然被注射了不明胶状物"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0194.wav", "duration": 7.213, "text": "做好外资并购大型农产品批发市场的安全审查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0299.wav", "duration": 4.4090625, "text": "两股力量基本上都有一统天下的野心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0231.wav", "duration": 8.6490625, "text": "继续加大对产粮大县生猪调出大县的奖励力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0481.wav", "duration": 5.2478125, "text": "眼睛警惕地注视着进出校门的车辆和学生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0158.wav", "duration": 4.3340625, "text": "确保完成六万户搬迁改造任务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0252.wav", "duration": 4.7359375, "text": "缺乏对外投资长远规划等问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0196.wav", "duration": 3.374, "text": "起到了非常积极的作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0290.wav", "duration": 4.562, "text": "我们一直都在打造最好的产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0403.wav", "duration": 6.2170625, "text": "在英国议会关于血液兴奋剂的听证会中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0349.wav", "duration": 4.7519375, "text": "是综合格斗运动的一大特色"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0412.wav", "duration": 2.5600625, "text": "据台湾媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0251.wav", "duration": 5.172, "text": "对考务费标准实行统一标准化管理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0164.wav", "duration": 4.185, "text": "这才是一个大企业应该有的战略方向"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0452.wav", "duration": 7.541, "text": "渣土车右转弯骑车男童被卷入车轮下不幸身亡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0243.wav", "duration": 6.792, "text": "将考试费标准由各地自行制定改为实行上限管理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0249.wav", "duration": 3.9040625, "text": "加快健全农业标准体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0250.wav", "duration": 3.7989375, "text": "确保境外企业和人员安全"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0346.wav", "duration": 4.0129375, "text": "链球贝蒂海德尔"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0396.wav", "duration": 3.7849375, "text": "在与阿拉木图的直接博弈中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0350.wav", "duration": 7.4550625, "text": "俄罗斯搏击新生代旗帜性天才高手哈亚在接受采访时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0290.wav", "duration": 5.9440625, "text": "从市场始终不愿给予苹果较高估值可见"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0455.wav", "duration": 2.823, "text": "有网友称之为青春任性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0167.wav", "duration": 10.956, "text": "作为美国新型共享式办公与创新环境的运营品牌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0480.wav", "duration": 4.2949375, "text": "没有发现近期有异常变化目前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0328.wav", "duration": 4.1748125, "text": "网络安全管理体系方面投资非常大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0173.wav", "duration": 3.88, "text": "但目前还未出现大面积提取行为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0491.wav", "duration": 3.801, "text": "涉事两企业负责人均已被控制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0232.wav", "duration": 7.021, "text": "妥善处理重金属污染历史遗留问题和突发污染事件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0402.wav", "duration": 5.8930625, "text": "由郎平挂帅的中国女排在名古屋赛区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0455.wav", "duration": 3.1699375, "text": "蚌飞市发生一起惨剧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0330.wav", "duration": 4.3159375, "text": "没有该认证的产品属于违法产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0152.wav", "duration": 3.079, "text": "美丽北京大型绿色公益品牌项目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0149.wav", "duration": 4.25, "text": "在公积金松绑等作用的刺激下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0241.wav", "duration": 3.089, "text": "也降低了城投债券的风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0204.wav", "duration": 5.645, "text": "您如何看待城投债券这几年的发展和作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0443.wav", "duration": 7.1681875, "text": "其中一组中国旅游购物者全面攻陷日本的图片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0232.wav", "duration": 6.454, "text": "对城市轨道交通运营企业实行电价优惠"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0151.wav", "duration": 4.135, "text": "北京针对公积金的调整次数便达到五次"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0475.wav", "duration": 7.172125, "text": "首都机场公安分局航站区派出所联合驻场安检人员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0351.wav", "duration": 7.3549375, "text": "分别是位于北京市区的国家速滑馆和延庆的二个雪场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0390.wav", "duration": 6.1799375, "text": "主要是四号位的高点强攻和六号位的后排进攻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0338.wav", "duration": 5.099, "text": "只要在明天的最后一战中赢下东道主日本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0421.wav", "duration": 2.712875, "text": "没有人同我讲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0434.wav", "duration": 3.875, "text": "原本自费项目变成必须交费项目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0441.wav", "duration": 2.978, "text": "该保安为附近大厦保安"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0146.wav", "duration": 5.9359375, "text": "但仍存在七万最高贷款额申请难等落地问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0482.wav", "duration": 4.855, "text": "数千围观人群高呼打死这个杂碎"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0393.wav", "duration": 4.2951875, "text": "对阵中国这样的球队是非常困难的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0190.wav", "duration": 3.086, "text": "彻底查明事故原因"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0369.wav", "duration": 4.0019375, "text": "这是一场没有输家的经典比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0491.wav", "duration": 5.344, "text": "网友先在微博中陈述了悲惨遭遇"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0213.wav", "duration": 6.276, "text": "国务院国资委将指导中央企业之间加强境外投资合作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0237.wav", "duration": 3.6800625, "text": "提高农业物质技术水装备水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0313.wav", "duration": 5.1520625, "text": "紫光集团系清华控股旗下最主要的资产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0242.wav", "duration": 5.469, "text": "重点治理农村土壤饮用水水源地污染"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0218.wav", "duration": 2.99, "text": "发展农产品电子商务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0282.wav", "duration": 2.8570625, "text": "并不像乔布斯那样激动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0314.wav", "duration": 4.2211875, "text": "消费者在听销售人员介绍小天才手表"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0364.wav", "duration": 6.4968125, "text": "令人防不胜防播求的肘击则更具王者霸气"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0224.wav", "duration": 5.6960625, "text": "虽然已发行的城投债券的还本付息都是正常的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0241.wav", "duration": 3.2310625, "text": "相对于目前的负债规模"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0379.wav", "duration": 4.8818125, "text": "二十一日抵达日本的朴泰桓目前确实在东京"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0345.wav", "duration": 4.818125, "text": "这位英气十足的九零后很有人缘"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0141.wav", "duration": 5.329, "text": "兰州新建住宅价格均呈现微降的态势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0423.wav", "duration": 6.2878125, "text": "中新网六月十六日电六月十六日是容祖儿的生日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0125.wav", "duration": 5.73, "text": "今年一到七月全国房地产开发投资五万亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0124.wav", "duration": 4.267, "text": "土地相关的审查成为重点之一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0350.wav", "duration": 5.9279375, "text": "今天出色的数据也佐证了她身体的康复情况良好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0490.wav", "duration": 2.9350625, "text": "却是一块大大的唐僧肉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0414.wav", "duration": 4.6010625, "text": "陈奕迅坦言自己一直有情绪病"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0486.wav", "duration": 5.1730625, "text": "崂山景区勒令该农家宴停止停止营业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0174.wav", "duration": 7.19, "text": "对于外商房企的注册资本金降低要求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0335.wav", "duration": 3.3359375, "text": "这样很容易被黑客攻破"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0296.wav", "duration": 4.2219375, "text": "早在九月九日发布会上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0212.wav", "duration": 3.499, "text": "从已发行的城投债券用途看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0139.wav", "duration": 4.55, "text": "不用花那么大的成本去解决安全的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0144.wav", "duration": 5.359, "text": "之后由该信托对宋芳指定的房产发出购买要约"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0124.wav", "duration": 3.515, "text": "大部分的创业者举步艰辛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0482.wav", "duration": 4.600125, "text": "他的双手还保持着托举的姿势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0373.wav", "duration": 8.249, "text": "要将北京市业馀排球联赛打造成群众性品牌赛事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0466.wav", "duration": 4.2101875, "text": "非法倾倒数百吨化工废料"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0437.wav", "duration": 5.437, "text": "对允许其亲自过问的案件提出严格限定标准"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0314.wav", "duration": 3.912125, "text": "二零一三年二零一四年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0335.wav", "duration": 5.7800625, "text": "二零一四年其市场规模已达七十一五亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0280.wav", "duration": 3.4139375, "text": "在融资和发展海外市场上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0202.wav", "duration": 5.7170625, "text": "这个问题涉及到一系列的制度完善"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0175.wav", "duration": 2.579, "text": "开始加速进入新房市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0221.wav", "duration": 3.859, "text": "建立转基因生物安全保障体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0367.wav", "duration": 5.3730625, "text": "能够亲眼见证这场火爆刺激的的精彩大战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0367.wav", "duration": 3.3210625, "text": "速度呈现出直线下降"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0123.wav", "duration": 6.631, "text": "公积金贷款最高额度由七万元提升至十万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0423.wav", "duration": 3.949, "text": "两人因合作神雕侠侣擦出爱火"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0394.wav", "duration": 3.818125, "text": "迈克尔斯齐莱德尔"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0408.wav", "duration": 2.9309375, "text": "潘玮柏以侧颜出镜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0431.wav", "duration": 4.6730625, "text": "经兴安县人大常委会许可"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0247.wav", "duration": 5.291, "text": "并及时发布产品缺陷及信息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0287.wav", "duration": 4.948, "text": "大鸦无人机由美国航空环境公司研制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0171.wav", "duration": 3.4, "text": "银行房贷额度开始紧张"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0149.wav", "duration": 3.608, "text": "企业不接触客户个人资料"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0400.wav", "duration": 7.222875, "text": "从四分之一决赛开始每场比赛评选出一名优秀运动员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0371.wav", "duration": 5.118875, "text": "中国的冬季运动还处于半起步阶段"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0189.wav", "duration": 4.14, "text": "创建国家现代农业示范区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0184.wav", "duration": 4.3970625, "text": "因此操作环节的快捷性与便捷性非常重要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0128.wav", "duration": 4.784, "text": "在公积金贷款额度上调后一个月内"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0248.wav", "duration": 4.094, "text": "政府将完善境外投资统计制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0129.wav", "duration": 6.2360625, "text": "对于中国楼市的影响不必过于乐观"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0273.wav", "duration": 4.5180625, "text": "从不可一世到遭对手边缘化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0412.wav", "duration": 5.767125, "text": "在凭借专辑米闪成为新一轮金曲歌王后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0130.wav", "duration": 3.201, "text": "多数二线城市和三四线城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0283.wav", "duration": 5.2690625, "text": "形成高度定制化的集成产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0448.wav", "duration": 2.9260625, "text": "澎湃新闻在现场看到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0414.wav", "duration": 4.8200625, "text": "不过她出道以来身材一直是外界关注的焦点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0147.wav", "duration": 2.835, "text": "从业人员五万人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0168.wav", "duration": 4.134, "text": "从目前上海住房公积金的具体政策看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0176.wav", "duration": 3.406, "text": "一线城市由于需求面大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0222.wav", "duration": 5.1430625, "text": "部分中央企业的结构调整还存在一些困难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0123.wav", "duration": 5.577, "text": "审计署审计长刘家义受国务院委托"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0495.wav", "duration": 5.7636875, "text": "村小组干部未经过小组集集体讨论"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0483.wav", "duration": 5.5859375, "text": "但这也让首次来到陕西游玩的孙女士感到憋屈"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0159.wav", "duration": 5.9770625, "text": "龙湖即以低价五点五亿元拿地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0194.wav", "duration": 6.864, "text": "积极推动土地出让收益用于高标准农田建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0246.wav", "duration": 7.645, "text": "在我国出现政府性债务违约的可能性是不大的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0478.wav", "duration": 3.2319375, "text": "渤海垃圾成堆变死海"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0447.wav", "duration": 7.5131875, "text": "菜单显示该饭店的荞麦窝窝头卖三八元一个"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0357.wav", "duration": 5.5690625, "text": "以一小时二十一分十一秒成绩获铜牌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0454.wav", "duration": 4.7419375, "text": "索赔各项损失共计二零馀万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0326.wav", "duration": 2.423, "text": "电话手表对儿童安全吗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0246.wav", "duration": 9.7580625, "text": "建立和完善农作物病虫害专业化统防统治补助政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0438.wav", "duration": 5.2380625, "text": "北京晨报记者昨天获悉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0386.wav", "duration": 2.9869375, "text": "但我觉得郎导是最苦的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0428.wav", "duration": 4.8520625, "text": "搜狐娱乐讯据台湾媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0335.wav", "duration": 5.0500625, "text": "紫光股份拟定增募资二百二十五亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0422.wav", "duration": 2.4819375, "text": "只有他们才知道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0491.wav", "duration": 4.8989375, "text": "一零月二三曰现身成都平乐古城"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0391.wav", "duration": 4.3559375, "text": "为他参加里约奥运扫清最后的障碍"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0322.wav", "duration": 6.24875, "text": "建议家长通过正规渠道购买正规厂家生产的产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0258.wav", "duration": 5.246125, "text": "即是在新品发布前的一个多季度的时间内"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0235.wav", "duration": 4.3880625, "text": "大力发展农产品加工和流通业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0438.wav", "duration": 7.7009375, "text": "东越花苑不少商铺都关门转租记者谢国林摄"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0123.wav", "duration": 5.308, "text": "今久整合营销集团迎来了它的十岁生日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0169.wav", "duration": 4.895, "text": "约六成网友看涨全国的商品房价格"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0483.wav", "duration": 5.6958125, "text": "村支书违规建小产权房花钱买通所有关系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0215.wav", "duration": 5.413, "text": "推广防灾减灾增产关键技术"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0366.wav", "duration": 9.0600625, "text": "近日德郭队公布了参加此次世锦赛的六六人大名单"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0311.wav", "duration": 4.1530625, "text": "尽管网络安全目前投入成本大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0490.wav", "duration": 7.827875, "text": "游客再曝日照点海鲜太少被围殴当地警方证实"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0315.wav", "duration": 4.975125, "text": "消费者在听销售人员介绍小天才手表"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0199.wav", "duration": 4.7320625, "text": "加快发展生物育种战略性新兴产业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0336.wav", "duration": 4.34, "text": "也就是老板电器总结的自动加互动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0224.wav", "duration": 4.4870625, "text": "也具有间接的经济效益或社会效益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0382.wav", "duration": 4.194125, "text": "特别是我们今年刚开始的时候特别艰难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0469.wav", "duration": 3.593, "text": "孰料从上月底开始平台关闭"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0343.wav", "duration": 4.3469375, "text": "只要中国队需要有人挺身而出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0195.wav", "duration": 5.259, "text": "带动周边地区现代农业加快发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0355.wav", "duration": 5.291, "text": "孙杨在一千五百米自由泳上的实力不容置疑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0187.wav", "duration": 5.882, "text": "建立健全以工促农以城带乡的长效机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0479.wav", "duration": 6.714125, "text": "且逢餐必有烟酒从园区领导到村组干部"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0217.wav", "duration": 6.1120625, "text": "主要由于各各种基础设施的投资建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0415.wav", "duration": 4.0539375, "text": "婷婷就坦言靠传媒得知"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0476.wav", "duration": 7.2260625, "text": "这听起来多少有些匪夷所思的违建竟然是真的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0204.wav", "duration": 5.471875, "text": "地方投融资平台公司通过发行债券进行融资"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0206.wav", "duration": 4.457, "text": "在工业化城镇化快速推进时期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0268.wav", "duration": 6.0, "text": "促使这家公司获得了创记录的第四财季盈利"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0390.wav", "duration": 6.0090625, "text": "另外还有两名来自加拿大和美国的外籍华侨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0321.wav", "duration": 4.5, "text": "威灵电机今后兼并美芝压缩机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0441.wav", "duration": 4.3569375, "text": "双方矛盾的焦点是一只瑞士名表"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0355.wav", "duration": 5.379875, "text": "这些使得北京积累了大量的举办与运营经验"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0130.wav", "duration": 6.8010625, "text": "上海易居研究院研究院严跃进认为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0398.wav", "duration": 2.471875, "text": "在场上移动很好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0189.wav", "duration": 5.29, "text": "加快发展现代农业机遇遇得"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0336.wav", "duration": 2.7429375, "text": "裁员两千人是由"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0472.wav", "duration": 6.9829375, "text": "港媒关注马云回应被逼捐花钱比挣钱难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0343.wav", "duration": 3.9760625, "text": "从申办冬奥会的硬件基础上看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0175.wav", "duration": 3.611, "text": "作为楼市政策的风向标"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0161.wav", "duration": 6.6860625, "text": "今年房地产市场地域分化将加剧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0330.wav", "duration": 3.9921875, "text": "一期投资额为二十五亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0454.wav", "duration": 4.1481875, "text": "今年三月份经检验为合格"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0377.wav", "duration": 4.735125, "text": "判决结果成为他能否参加里约奥运的变数"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0465.wav", "duration": 4.9658125, "text": "看似犀利不再的娜姐老将气场立刻显出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0400.wav", "duration": 5.6909375, "text": "不仅在各国网络社区和比赛中表现活跃"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0467.wav", "duration": 6.5749375, "text": "云盘就是一种直接把信息存在网络空间里的存储工具"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0231.wav", "duration": 3.7730625, "text": "作为城投债券发行监管部门"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0444.wav", "duration": 2.7570625, "text": "与小区只有一河之隔的东边"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0299.wav", "duration": 4.7309375, "text": "排名从第九升至第七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0275.wav", "duration": 3.626125, "text": "准备和特斯拉一较高下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0150.wav", "duration": 3.0790625, "text": "据中新网房产频道梳理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0377.wav", "duration": 4.453125, "text": "开始一项新的锻炼方式具有一定的风险性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0163.wav", "duration": 7.104, "text": "北京又一家共享创办公平台落地丰台"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0444.wav", "duration": 3.4030625, "text": "抓着男生的动作为摆拍"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0344.wav", "duration": 6.2058125, "text": "这一点对于京津冀一带的居民来说是才最重要的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0357.wav", "duration": 3.046, "text": "虽然知道惠若琪的心脏不太好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0128.wav", "duration": 7.755, "text": "而就昨日六部委松绑楼市限外令的情况来看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0351.wav", "duration": 6.864, "text": "两人把更多的精力放到了花滑运动的推广上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0356.wav", "duration": 5.3510625, "text": "还有记者爆料说居住在纽约的日本人透露"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0146.wav", "duration": 4.7090625, "text": "今年是十二五规划的收官之年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0490.wav", "duration": 6.9699375, "text": "温州服务员向顾客头上泼开水继而已被批捕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0345.wav", "duration": 5.948, "text": "同詹姆斯昔年头号强敌卡梅隆安东尼如出一辙"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0127.wav", "duration": 4.7460625, "text": "比如北京和上海家庭最高贷款额度均为一百万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0479.wav", "duration": 7.078125, "text": "游客偷走雷峰塔砖块想供奉起来做药给老人喝"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0458.wav", "duration": 5.465125, "text": "事发后派出所和物价局都互相踢皮球"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0297.wav", "duration": 4.913, "text": "而后者则是刚刚涌现的后起之秀"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0401.wav", "duration": 7.8559375, "text": "日本二零一五女排世界杯单循环赛战至第十轮"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0476.wav", "duration": 4.0288125, "text": "但因海上风大浪急影响救援"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0245.wav", "duration": 3.913, "text": "将切实减轻考生经济负担"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0437.wav", "duration": 10.139875, "text": "游客日照海鲜店被打受伤警方称言语冲突引发互殴"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0248.wav", "duration": 3.582, "text": "对于江苏的机场高速是否免费"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0494.wav", "duration": 8.985125, "text": "港京航班六名乘客推撞地勤四人被判九至一一天监禁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0241.wav", "duration": 7.219, "text": "完善农业气象等方面的航空站和作业起降点基础设施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0291.wav", "duration": 6.1320625, "text": "柯振东入狱期间的囚服都能在淘宝上热卖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0191.wav", "duration": 4.8239375, "text": "导致城投债券发行产生较高的风险溢价"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0240.wav", "duration": 6.274875, "text": "本报记者曹志为王婷王颖春来源中国证券报"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0172.wav", "duration": 3.792, "text": "出让金合计一千亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0310.wav", "duration": 3.646, "text": "包括外置天线和内置天线"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0282.wav", "duration": 5.6999375, "text": "触控科技全资韩国子公司在韩国上市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0347.wav", "duration": 5.5, "text": "终止时间定格在二分二十一秒"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0319.wav", "duration": 4.0, "text": "信息安全隐患也随之而来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0130.wav", "duration": 3.696, "text": "很多人受限购政策的影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0203.wav", "duration": 4.1469375, "text": "有的媒体甚至用井喷来描述"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0387.wav", "duration": 3.156, "text": "继续征战花样滑冰的比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0220.wav", "duration": 5.343, "text": "城投债券作为中国债券市场的准市政债"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0240.wav", "duration": 5.058, "text": "大力推进标准化生产和集约化经营"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0312.wav", "duration": 3.8659375, "text": "浪潮官方尚未给出回应"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0142.wav", "duration": 7.217, "text": "虚增耕地质量不达标的分别占百分之十和百分之三十"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0421.wav", "duration": 4.3899375, "text": "究竟是演戏还是积怨已深"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0408.wav", "duration": 4.402125, "text": "搞怪调皮吐舌卖萌娱乐频道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0228.wav", "duration": 6.9560625, "text": "不能简单地用寅吃卯粮来作价值判断"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0425.wav", "duration": 2.52975, "text": "他开心就好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0318.wav", "duration": 4.907, "text": "浪潮的特点在于定制化策略"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0372.wav", "duration": 3.6791875, "text": "进一步提升了比赛品质"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0428.wav", "duration": 4.678, "text": "并自嘲的写道自幼就走性感风格"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0491.wav", "duration": 5.646, "text": "四名法官系送达法律文书时被刺伤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0131.wav", "duration": 5.37, "text": "为经济社会发展提供了重要基础和支持"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0312.wav", "duration": 3.288125, "text": "正是由于销售模式的改变"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0442.wav", "duration": 6.7590625, "text": "月亮和地球之间的平均距离仅为三五六八九六万公里"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0164.wav", "duration": 2.491, "text": "环比增长百分之七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0225.wav", "duration": 6.6740625, "text": "鼓励引导社会力量参与建设保障性住房及配套设施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0347.wav", "duration": 3.6269375, "text": "标枪克里斯丁胡宋"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0464.wav", "duration": 7.9509375, "text": "港媒关注浙江暖男医生手术室播动画片哄小女孩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0400.wav", "duration": 3.2519375, "text": "在冈山的桃太郎体育馆"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0203.wav", "duration": 3.5549375, "text": "是一个比较复杂的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0271.wav", "duration": 5.932875, "text": "谷歌的福利待遇他家基本都有"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0146.wav", "duration": 3.343, "text": "这一数值为二十馀万"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0434.wav", "duration": 5.278125, "text": "近日又出现疯抢水果捡漏等事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0168.wav", "duration": 4.137125, "text": "一些三线城市取消限购及限贷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0443.wav", "duration": 4.303, "text": "政府出钱搬迁盖房的机会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0146.wav", "duration": 3.84, "text": "在兰州雁滩区域的一家楼盘"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0328.wav", "duration": 4.788125, "text": "未来给我们的机会和空间是有限的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0426.wav", "duration": 3.712875, "text": "她表示应该是吃吃饭看电影之类的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0139.wav", "duration": 3.728, "text": "今久率先提出整合营销的概念"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0453.wav", "duration": 3.6379375, "text": "水星金星也将迎来观测良机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0269.wav", "duration": 4.8669375, "text": "支持开发者为其编写应用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0423.wav", "duration": 5.2170625, "text": "搜狐娱乐讯北京时间十月二十六日消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0257.wav", "duration": 4.043, "text": "这个机器人由高分子材料制成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0471.wav", "duration": 4.1638125, "text": "随着严重雾霾卷土重来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0445.wav", "duration": 3.2370625, "text": "摔毁无人机一事为杜撰"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0419.wav", "duration": 2.2939375, "text": "现场气氛火爆"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0131.wav", "duration": 4.0459375, "text": "公积金贷款上限能够复盖单套房总价"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0148.wav", "duration": 7.56, "text": "可以使用公积金贷款的购房者将起码增加百分之七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0125.wav", "duration": 3.338, "text": "盘活各地公积金资源"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0426.wav", "duration": 4.302, "text": "有进一步消息一定会通知大家"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0318.wav", "duration": 3.885, "text": "一位商场场内部人士称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0140.wav", "duration": 4.106, "text": "正处于筑底回暖阶段"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0197.wav", "duration": 6.2889375, "text": "则需要在发债时机和发债规模上进行合理的把握"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0390.wav", "duration": 6.1210625, "text": "女排三零阿根廷朱婷复出扣杀状态神勇"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0195.wav", "duration": 3.635, "text": "提高农业利用外资水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0355.wav", "duration": 3.97, "text": "面对兵行诡道的波斯弯刀"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0341.wav", "duration": 8.26, "text": "在当天女子五二千克级自由搏击超级战中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0199.wav", "duration": 2.994, "text": "债券发行人是优质的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0154.wav", "duration": 3.867, "text": "加快公租房的配租进度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0408.wav", "duration": 4.761, "text": "搜狐娱乐据香港媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0326.wav", "duration": 4.8308125, "text": "同比上升百分之二十三点零六"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0196.wav", "duration": 4.023, "text": "依托农产品加工物流等各类农业园区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0480.wav", "duration": 4.1230625, "text": "手握电动栅栏遥控器"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0354.wav", "duration": 3.579, "text": "曾春蕾介绍是在中国女排出发的前一天"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0340.wav", "duration": 4.0, "text": "通过对脚踝和小腿等部位的强化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0324.wav", "duration": 4.97, "text": "有一部分研发楼办公楼是利用现成的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0270.wav", "duration": 3.9609375, "text": "他们没有必要着急回本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0343.wav", "duration": 4.843, "text": "我们还将继续加大污染防治力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0494.wav", "duration": 6.234875, "text": "一捧玛卡磨成粉景区商家要四零零零元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0449.wav", "duration": 6.5900625, "text": "村干部强揽工程遭拒绝雇百名老人阻挠施工"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0428.wav", "duration": 2.478, "text": "论眉毛重要性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0372.wav", "duration": 4.594, "text": "以三比一胜出拿到了宝贵的三个积分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0417.wav", "duration": 5.171875, "text": "然而准备中三个字卸掉了他的纠结"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0425.wav", "duration": 6.0610625, "text": "陈凯琳的心被郑嘉颖成功俘虏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0159.wav", "duration": 4.8869375, "text": "由于家族信托的存续期通常较长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0149.wav", "duration": 9.214, "text": "正式放松外贸外资投资我国房地产相关规定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0247.wav", "duration": 6.3160625, "text": "继续向农民免费提供测土配方施肥服务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0448.wav", "duration": 4.2460625, "text": "垃圾刺鼻的臭味害得住户们连窗户都不敢打开"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0168.wav", "duration": 8.072, "text": "六部门出台新政楼市限外政策放松"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0305.wav", "duration": 3.4179375, "text": "注定了它强烈的娱乐性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0440.wav", "duration": 9.8139375, "text": "温州二零位面包师制出二五米蛋糕或申报吉尼斯纪录"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0445.wav", "duration": 3.958, "text": "其身后的财产分割问题尘埃落定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0198.wav", "duration": 3.819, "text": "三是科技支撑将更加有力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0249.wav", "duration": 3.652, "text": "强化农业科技和人才支撑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0348.wav", "duration": 4.3740625, "text": "在比赛中展示出更多击败对手的手段"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0139.wav", "duration": 4.6340625, "text": "预计不会在短期内迅速回暖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0149.wav", "duration": 4.438, "text": "破解棚户区改造征收瓶颈问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0152.wav", "duration": 4.497, "text": "房地产开发企业土地购置面积很大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0471.wav", "duration": 4.506125, "text": "参考消息网八月二五日报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0272.wav", "duration": 5.5229375, "text": "高频交易也与此次闪崩事件逃脱不了干系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0486.wav", "duration": 4.045125, "text": "陆续派记者深入采访"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0261.wav", "duration": 5.0, "text": "苹果将引入这样一套顾客接待系统"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0466.wav", "duration": 3.8210625, "text": "并处罚金人民币一千元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0298.wav", "duration": 5.74, "text": "二零一四年春天打车软件补贴大战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0130.wav", "duration": 6.649, "text": "将使更多购房者具备买房支付能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0190.wav", "duration": 3.432, "text": "国务院国资委力挺国企"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0239.wav", "duration": 3.699, "text": "政府财力增长也相应较快"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0126.wav", "duration": 6.5929375, "text": "外资只可以购买商铺写字楼等物业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0406.wav", "duration": 4.282, "text": "来源时光网美国时间本周一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0236.wav", "duration": 5.225, "text": "加快农业科技成果转化与推广应用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0486.wav", "duration": 3.3200625, "text": "近日在医院检查才发现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0204.wav", "duration": 3.5650625, "text": "新增农田有效灌溉面积万亩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0402.wav", "duration": 5.6440625, "text": "泰拳黑王子播求无疑同小皇帝詹姆斯最为相似"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0484.wav", "duration": 4.0119375, "text": "称一名男子时常偷窥自己洗澡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0309.wav", "duration": 2.838, "text": "大盘股仍是毫无作为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0358.wav", "duration": 3.521, "text": "我们要做的就是相互弥补"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0377.wav", "duration": 4.7839375, "text": "以表演的方式推广花样滑冰"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0461.wav", "duration": 5.249, "text": "周云露的父母在昨天上午去过朝阳刑警队"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0435.wav", "duration": 3.722875, "text": "看来温州市区电梯也该大整修了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0453.wav", "duration": 3.3200625, "text": "赵女士的公公躺在病床上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0147.wav", "duration": 4.39, "text": "新京报讯记者张徐报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0347.wav", "duration": 7.8369375, "text": "而主教练郎平则在全面性方面对大家做了更多要求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0286.wav", "duration": 3.6319375, "text": "他们推出的产品不仅非常鸡肋"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0198.wav", "duration": 4.3570625, "text": "既是信贷投放回归常态的体现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0186.wav", "duration": 5.709, "text": "事业版图遍布全中国的集团化整合营销公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0267.wav", "duration": 8.6420625, "text": "该应用交付网络在整个榜单中位居第四"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0144.wav", "duration": 4.529, "text": "公积金贷款可少缴三十馀万"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0277.wav", "duration": 4.0500625, "text": "为提高苹果零售商店的服务质量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0156.wav", "duration": 5.8139375, "text": "受土地开发政策和土地规划限制未开发建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0144.wav", "duration": 2.969, "text": "据广州日报昨天报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0218.wav", "duration": 5.362875, "text": "听取对中央企业监督检查情况的汇报"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0240.wav", "duration": 3.142, "text": "加强农村环境保护"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0369.wav", "duration": 5.063, "text": "多年来围绕其性取向的争论一直没有停息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0280.wav", "duration": 5.322, "text": "安吉拉要求零售店员工养精蓄锐"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0384.wav", "duration": 3.801, "text": "最后顶住困难和压力拿到冠军"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0325.wav", "duration": 6.003875, "text": "包括管理人员等并不会因为新增生产线而增加"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0152.wav", "duration": 4.234, "text": "其中五亿元为超额拨备"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0413.wav", "duration": 3.605, "text": "许玮甯最近到法国工作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0478.wav", "duration": 8.5380625, "text": "村民为救坠井男童身亡被拉出时呈托举姿势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0319.wav", "duration": 5.1489375, "text": "注定是白色家电行业最惨烈的一年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0336.wav", "duration": 5.4778125, "text": "浪潮高管在接受媒体采访时表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0408.wav", "duration": 2.447, "text": "据香港媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0485.wav", "duration": 5.219, "text": "数百名乡邻自发赶来送他一程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0464.wav", "duration": 3.283, "text": "发现事情并没有这么简单"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0380.wav", "duration": 5.900875, "text": "长期跑步可能是一种不需要药物来保持身材的有效方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0212.wav", "duration": 7.96, "text": "为从根本上缓解交通拥堵出行不便环境污染等矛盾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0147.wav", "duration": 5.642, "text": "中小房企要面临高达两位数利率"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0327.wav", "duration": 3.3969375, "text": "可以缩减很多人力成本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0353.wav", "duration": 6.907, "text": "两位气质迥异的选手展示出了全然不同的擂台风格"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0343.wav", "duration": 8.5890625, "text": "盘点昆仑决二零一五五大飙血之战搜狐体育"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0405.wav", "duration": 6.5, "text": "好莱坞当红明星之前曾被盛传将扮演斯诺登"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0253.wav", "duration": 2.6999375, "text": "并没有提供什么帮助"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0177.wav", "duration": 3.823, "text": "房企更加愿意扎堆一线城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0122.wav", "duration": 5.346, "text": "近期广州和南京已经开始启动公转商贷款贴息模式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0250.wav", "duration": 3.7459375, "text": "会议还研究了其他事项"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0468.wav", "duration": 4.4150625, "text": "此案正在进一步审理之中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0492.wav", "duration": 3.370125, "text": "他被迫交了四零零元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0129.wav", "duration": 4.633, "text": "全国房地产开发投资三万亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0316.wav", "duration": 4.4189375, "text": "国产服务器厂商迎来利好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0342.wav", "duration": 4.443125, "text": "年少成名的他带领国家队出征冬奥会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0337.wav", "duration": 5.631, "text": "威灵电机将有可能兼并美芝压缩机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0451.wav", "duration": 3.3940625, "text": "导致崔先生腰部受伤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0322.wav", "duration": 4.3669375, "text": "比如流程的缩短平台化的应用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0342.wav", "duration": 5.7250625, "text": "张晓雅的人气肯定在前三名"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0422.wav", "duration": 2.827875, "text": "他表示感到伤痛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0488.wav", "duration": 4.744125, "text": "一个国家稳定的社会结构呈橄榄形"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0162.wav", "duration": 3.3720625, "text": "同比增长百分之七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0194.wav", "duration": 6.854, "text": "在制度上对债券人的合法权益进行保护"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0160.wav", "duration": 5.208, "text": "今年国有土地使用权出让收入四千亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0177.wav", "duration": 3.5829375, "text": "以住房公积金制度为基础"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0165.wav", "duration": 4.58, "text": "购房者受惠于政策利好的同时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0287.wav", "duration": 3.678, "text": "苹果要想在中国本土化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0485.wav", "duration": 5.9758125, "text": "按照中央纪委宣传部的统一部署"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0329.wav", "duration": 5.0239375, "text": "有一家公司表示能够及时检测黑客入侵"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0377.wav", "duration": 4.157, "text": "就像认识多年的朋友和兄弟姐妹一样"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0402.wav", "duration": 5.389875, "text": "以不同方式助力本次比赛胜利进行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0414.wav", "duration": 2.8198125, "text": "搜狐娱乐讯日前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0126.wav", "duration": 3.6110625, "text": "目前全国该指标"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0450.wav", "duration": 5.0869375, "text": "参考消息网七月二零日报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0204.wav", "duration": 3.974, "text": "坚持海陆统筹河海兼顾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0227.wav", "duration": 5.26, "text": "加强渔政基地和管理信息系统建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0487.wav", "duration": 3.743875, "text": "并索偿该游客全部损失"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0327.wav", "duration": 6.8661875, "text": "上一次是金融危机期间的二零零九一季度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0216.wav", "duration": 3.5030625, "text": "城市文化和体育设施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0486.wav", "duration": 3.7419375, "text": "就花钱请领导为他撑腰"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0286.wav", "duration": 8.9980625, "text": "就让业界讨论它会带给中国移动支付市场怎样的影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0432.wav", "duration": 5.534875, "text": "温州瑞安一驾考考生在科目三考试中突然晕了过去"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0140.wav", "duration": 3.104, "text": "可大家必须明白一个道理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0489.wav", "duration": 3.0908125, "text": "事故厂房系违章建筑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0424.wav", "duration": 3.5490625, "text": "昨天她出席保养品活动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0131.wav", "duration": 3.078, "text": "一智能产品的安全"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0161.wav", "duration": 7.842, "text": "而且提供各项衍生的福利性服务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0271.wav", "duration": 4.408125, "text": "也可能会是受到国家支持的攻击"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0420.wav", "duration": 2.333, "text": "她突然就干呕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0300.wav", "duration": 6.035875, "text": "三藩市纪事报指此君曾与库克碰头"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0206.wav", "duration": 6.4189375, "text": "中国证券报随着欧美等国主权债务危机陆续爆发"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0488.wav", "duration": 5.472875, "text": "共造成一四人死亡三三人受伤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0128.wav", "duration": 2.811, "text": "一五年一月份"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0222.wav", "duration": 5.21, "text": "加大农机化薄弱环节生产机械补贴力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0265.wav", "duration": 4.8399375, "text": "导致技术支持时间超过了预期分配时间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0439.wav", "duration": 3.8139375, "text": "涉事企业老板已被警方控制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0427.wav", "duration": 5.660875, "text": "曾江当时说我和谢贤相识多年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0135.wav", "duration": 4.6810625, "text": "今久必须担当起引领时代潮流的重任"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0380.wav", "duration": 6.297875, "text": "杨扬拿到了五百米和一千米两项短道速的金牌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0271.wav", "duration": 9.0, "text": "据新华社电美国国际贸易委员会二十一日作出终裁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0289.wav", "duration": 3.004, "text": "这对苹果是一个利好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0332.wav", "duration": 4.208, "text": "依据国家相关法律法规"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0175.wav", "duration": 3.69, "text": "除了开发商的买地行为减少"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0453.wav", "duration": 5.026875, "text": "肇事车及损伤严重的自行车报料人供图"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0362.wav", "duration": 5.297125, "text": "我们的奥运健儿将在此努力备战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0199.wav", "duration": 6.5920625, "text": "改革将对考试单位的费用支出形成倒逼机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0317.wav", "duration": 5.4299375, "text": "很多家长都在给孩子购置各种学习用品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0249.wav", "duration": 6.917, "text": "全面推进机械化标准化品牌化产业化发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0343.wav", "duration": 4.306875, "text": "此次播求面对的强敌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0397.wav", "duration": 5.8249375, "text": "这次赛事是昆仑决二零一五欧洲之旅的第三站"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0121.wav", "duration": 6.559, "text": "该地块即为通州新城核心地标彩虹之门用地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0312.wav", "duration": 3.344, "text": "以小天才电话手表为例"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0474.wav", "duration": 3.897, "text": "村委会竟然会顶风作案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0152.wav", "duration": 4.499, "text": "一个天河区的中介人士告诉记者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0251.wav", "duration": 3.557, "text": "积极发展资源节约型和环境友好型农业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0414.wav", "duration": 3.812, "text": "他调皮地将自己的眉毛抹掉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0491.wav", "duration": 5.012, "text": "海南临高籍多位渔民向中新网记者反应称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0477.wav", "duration": 3.8459375, "text": "严格搜集和固定相关证据"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0405.wav", "duration": 4.995125, "text": "我们可以清晰看到皮特的结婚戒指"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0429.wav", "duration": 3.531, "text": "陈晓与陈妍希承认恋情"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0278.wav", "duration": 4.453, "text": "针对中美光伏贸易纠纷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0244.wav", "duration": 7.692, "text": "价格主管部门将按统一合理的平均成本确定考试费用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0255.wav", "duration": 3.1440625, "text": "对未来的销量至关重要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0183.wav", "duration": 5.1889375, "text": "我国楼市正处在急速上升通道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0329.wav", "duration": 5.235125, "text": "必须取得无线电型号的核准认证"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0343.wav", "duration": 8.5659375, "text": "高桥大辅堪称日本花样滑冰男单领域的领军人物"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0129.wav", "duration": 4.247, "text": "这对于目前一线城市来说很紧要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0463.wav", "duration": 4.5749375, "text": "面积达逾三零零平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0158.wav", "duration": 3.534875, "text": "只有楼市库存真正消化了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0237.wav", "duration": 3.0140625, "text": "还本付息也是正常的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0199.wav", "duration": 5.401, "text": "做好涉农国际贸易规定制动工作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0492.wav", "duration": 4.5749375, "text": "应邀参加第二届天府古镇艺术节"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0374.wav", "duration": 3.494875, "text": "这才是产生跑步力量的根源"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0274.wav", "duration": 6.3719375, "text": "消费者贪新忘旧虽亦可能适用于苹果"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0450.wav", "duration": 5.1230625, "text": "渝蓉高速四川段因烂尾被称为最拖沓高速"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0486.wav", "duration": 5.5661875, "text": "尸体于一零月二零日在宝鸡渭河公园被发现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0425.wav", "duration": 2.6450625, "text": "且沿途有说有笑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0347.wav", "duration": 4.204875, "text": "让越来越多人关注并参与到其中来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0256.wav", "duration": 5.332, "text": "最关键的两个属性莫过于安全和便捷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0376.wav", "duration": 4.0378125, "text": "他们每天手牵手肩并肩出入赛场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0354.wav", "duration": 5.291, "text": "无疑是刚刚结束的喀山世锦赛最大的遗憾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0469.wav", "duration": 6.2309375, "text": "杀害夜跑女子嫌犯不言不语拾荒者身份尚未确认"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0207.wav", "duration": 3.7989375, "text": "政府性违约可能性不大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0332.wav", "duration": 6.364, "text": "不得接入公用电信网使用和在国内销售"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0244.wav", "duration": 3.699, "text": "进一步优化农业生产力布局"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0189.wav", "duration": 4.1479375, "text": "发行利率也有较大幅度上升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0287.wav", "duration": 6.9149375, "text": "手腕是配戴轻便型互动设备与休闲设备的理想之处"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0416.wav", "duration": 5.0488125, "text": "诸葛紫岐十日晚出席活动时表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0204.wav", "duration": 7.061, "text": "目前我国出现政府性债务违约可能性并不大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0489.wav", "duration": 5.22775, "text": "但对于部分村官及个别政府工作人员来说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0410.wav", "duration": 5.8410625, "text": "网友纷纷留言祝谢婷婷生日快乐"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0191.wav", "duration": 3.682, "text": "行业协会清理整顿报告"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0132.wav", "duration": 10.217, "text": "境外机构和个人在中国投资购买房地产的限制放松"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0339.wav", "duration": 3.172125, "text": "彻底解决目前存在的隐患"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0172.wav", "duration": 3.598, "text": "住宅市场交易明显升温"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0393.wav", "duration": 5.3969375, "text": "希望能够跟大家一起再次站在领奖台上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0172.wav", "duration": 5.0, "text": "由于不可能从根本上改变供求关系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0145.wav", "duration": 3.8130625, "text": "可由于中心城区楼盘数量稀少"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0451.wav", "duration": 6.8290625, "text": "信息时报讯记者陈子玉近日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0397.wav", "duration": 6.396, "text": "意志力惊人的白俄罗斯特种兵被没有就此放弃"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0457.wav", "duration": 5.395, "text": "并责令其立即改正价格违法行为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0200.wav", "duration": 4.5999375, "text": "优化生产布局和畜群结构"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0238.wav", "duration": 6.0390625, "text": "就不得再通过发行城投债券新增政府性债务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0395.wav", "duration": 6.218, "text": "赛艇比赛所在湖区的水污染问题近年来得到改善"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0165.wav", "duration": 6.412, "text": "纯商品房楼面价接近六万元每平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0262.wav", "duration": 8.1169375, "text": "加上它凭借远程雷达与对方舰队保持远距离"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0335.wav", "duration": 4.1489375, "text": "北京商报讯记者王晔君日前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0419.wav", "duration": 2.8569375, "text": "小笼包身体有反应"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0203.wav", "duration": 4.1259375, "text": "他就上述关注问题指出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0300.wav", "duration": 6.9300625, "text": "不过更新后锻炼和运动手臂的时候不会记录心率"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0208.wav", "duration": 4.844, "text": "加快先进适用耕作技术推广应用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0237.wav", "duration": 9.385, "text": "构建全国农产品质量安全监测信息预警平台"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0481.wav", "duration": 6.9179375, "text": "游客脚踩烈士铜像拍照四名当事人鞠躬道歉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0325.wav", "duration": 6.3889375, "text": "再次利用同样的静默安装方式继续推广软件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0248.wav", "duration": 2.723, "text": "清洁水源田园和家园"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0453.wav", "duration": 8.223875, "text": "温州网讯在温医大附属育英儿童医院的重监护室里"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0333.wav", "duration": 2.557, "text": "虽然电磁辐射无处不在"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0178.wav", "duration": 5.521, "text": "公积金提取一直是目前试图突破的内容"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0420.wav", "duration": 4.099125, "text": "终站是好友谢霆锋的创作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0173.wav", "duration": 4.586, "text": "用蓝色光标强大的新媒体技术和资源"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0452.wav", "duration": 14.6999375, "text": "白云区钟落潭竹一村民白云区钟落潭竹一村的村民跟记者报料"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0170.wav", "duration": 5.568, "text": "在总成交中占比环比增加五个百分点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0409.wav", "duration": 6.2949375, "text": "最近人在大陆举行巡回演唱会的他"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0294.wav", "duration": 4.6630625, "text": "老毕对此说甚有保留"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0321.wav", "duration": 5.8300625, "text": "不排除有一些杂牌的电话手表辐射会超标"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0166.wav", "duration": 4.5859375, "text": "是房地产当前发展格局下的一个必然"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0270.wav", "duration": 3.823, "text": "我国拥有近一四亿人口"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0220.wav", "duration": 6.1590625, "text": "是一种合理的基础设施投融资建设行为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0155.wav", "duration": 8.3589375, "text": "许多刚性住房和改善型住房需求得到释放"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0175.wav", "duration": 5.4979375, "text": "安徽铜陵结束了当地契税补贴政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0396.wav", "duration": 6.4921875, "text": "对于隋文静韩聪彭程张昊领衔的中国双人滑军团"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0485.wav", "duration": 7.714125, "text": "唐寨子村党支部书记村委会主任已被全镇通报批评"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0323.wav", "duration": 7.2690625, "text": "现在中国的八十五后和九十后消费人群已经成为消费主体"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0132.wav", "duration": 8.822, "text": "放宽提取住房公积金支付房租条件则对楼市影响甚微"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0297.wav", "duration": 3.7120625, "text": "悄无声息又经年累月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0382.wav", "duration": 3.1448125, "text": "桎梏挣脱开了就敢于发挥"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0270.wav", "duration": 3.2939375, "text": "像索尼被黑那样的事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0255.wav", "duration": 6.1320625, "text": "衍生出软件服务的又一重要举措"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0481.wav", "duration": 3.8840625, "text": "住酒店还要交二零元马桶费"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0298.wav", "duration": 4.131, "text": "根据苹果官方的支持页面显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0193.wav", "duration": 4.523, "text": "降低公众假日出行成本具有重要意义"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0127.wav", "duration": 6.766, "text": "而南昌除了放松首套房界定标准"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0456.wav", "duration": 6.147, "text": "温州三家熟食店摊主被捕为求卖相好添加日落黄"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0320.wav", "duration": 3.442875, "text": "负责车辆网络安全问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0200.wav", "duration": 3.614, "text": "海南农产品流通现状"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0435.wav", "duration": 4.8820625, "text": "已经有游客迫不及待想去张家口看看了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0246.wav", "duration": 5.5379375, "text": "加强京津风沙源区草地治理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0140.wav", "duration": 3.852, "text": "其核心在于利用数字化工具"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0209.wav", "duration": 4.9919375, "text": "加大农村劳动力培训阳光工程实施力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0190.wav", "duration": 6.4279375, "text": "实践技能操作和面试类考试科目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0395.wav", "duration": 8.764875, "text": "她的母亲在采访中表示莎宾娜为了提升自己的实力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0397.wav", "duration": 4.012, "text": "在今年世锦赛的志愿者中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0449.wav", "duration": 7.666, "text": "港商被骗牵出路边地下钱庄涉案资金四三零零亿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0312.wav", "duration": 3.1320625, "text": "机器人维护成本是挑战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0198.wav", "duration": 5.1990625, "text": "实施好转基因生物新品种培育重大专项"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0225.wav", "duration": 5.465125, "text": "是为了进一步建立健全境外国有资产管理制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0138.wav", "duration": 5.105, "text": "要求各地放宽公积金贷款条件后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0382.wav", "duration": 5.7260625, "text": "莎宾娜透露目前单身理想型是喜欢运动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0378.wav", "duration": 4.74, "text": "从四百米预赛到最后的一千五百米预赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0468.wav", "duration": 4.563, "text": "被撞废的奔驰昨日二二时左右"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0239.wav", "duration": 4.4139375, "text": "难以满足发行城投债券的资格和条件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0190.wav", "duration": 3.4819375, "text": "调整优化农业科研布局"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0308.wav", "duration": 5.266125, "text": "从本年度第一份季报来看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0146.wav", "duration": 4.325, "text": "相比千亿房企的借贷利率"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0371.wav", "duration": 8.8461875, "text": "身为上司而且已婚有儿女的桥本被指责涉嫌性侵"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0121.wav", "duration": 3.056, "text": "为了解决额度荒的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0309.wav", "duration": 3.3891875, "text": "上述网络安全人士称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0444.wav", "duration": 6.1340625, "text": "耗时一四个小时打造的二米五超长蛋糕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0157.wav", "duration": 5.312, "text": "六年土地收入十三万度审计报告中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0323.wav", "duration": 5.1760625, "text": "与技术的更新换代速度还是有相关性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0248.wav", "duration": 6.079, "text": "扩大土壤有机质提升项目实施范围和规模"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0158.wav", "duration": 4.758, "text": "房地产业将在明年有所洗牌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0439.wav", "duration": 3.6550625, "text": "将被以普通袭击罪起诉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0192.wav", "duration": 6.558, "text": "战略性新兴产业在各地呈现出集聚蓬勃发展的态势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0400.wav", "duration": 4.9030625, "text": "我是这次中俄对抗赛第一个出场的中方选手"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0396.wav", "duration": 4.1520625, "text": "这样一来可以获得韩国舆论的同情和理解"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0350.wav", "duration": 4.271, "text": "因此对于北京申办冬奥会的最终结果"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0207.wav", "duration": 5.438, "text": "合理规划和利用现有收费车道和免费专用通道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0175.wav", "duration": 3.398, "text": "按照公司持有房产计征"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0297.wav", "duration": 5.7999375, "text": "诸位自然不会满足于前面提及的潜在回报"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0253.wav", "duration": 3.9649375, "text": "毛利率也只有百分之十四"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0463.wav", "duration": 3.417, "text": "经过长达四个月的搜救"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0381.wav", "duration": 2.8889375, "text": "个别球更是像释放怒火一般"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0244.wav", "duration": 5.052, "text": "开展农业物物联网应用示范"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0159.wav", "duration": 4.719, "text": "随着我国行政干预政策的陆续退出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0185.wav", "duration": 7.0, "text": "相关部门对公积金贷款政策的第三次放松"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0485.wav", "duration": 2.984875, "text": "家住汉阳的莎莎化名"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0432.wav", "duration": 4.9030625, "text": "日前因为广东省高院作出的无罪判决"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0413.wav", "duration": 3.605, "text": "她最近又被拍到崩坏实录"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0248.wav", "duration": 4.1280625, "text": "并对债券市场形成了不小的冲击"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0383.wav", "duration": 4.4450625, "text": "逐步成长为中国女排的新核心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0221.wav", "duration": 4.002, "text": "提高粮食生产综合效益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0492.wav", "duration": 5.4289375, "text": "公司承诺贷款本息都由公司负责偿还"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0267.wav", "duration": 5.585125, "text": "足够使美国失去战争基础因此彻底失败"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0316.wav", "duration": 5.805875, "text": "汽车这个行业缺乏成熟的网络安全管理体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0171.wav", "duration": 4.724, "text": "规定外商投资建立房地产企业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0461.wav", "duration": 4.0, "text": "一三日上午一零时许"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0265.wav", "duration": 7.3249375, "text": "谷歌不仅会以优厚薪酬招募顶尖人才"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0200.wav", "duration": 5.105, "text": "徐林这个问题涉及到一系列的制度完善"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0253.wav", "duration": 7.6280625, "text": "比去年同期的六十二点三十亿美元大幅增长百分之十二"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0465.wav", "duration": 4.124, "text": "下海后却突然失去意识"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0358.wav", "duration": 5.8100625, "text": "是孙杨在二零一四年因治疗心脏不适"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0274.wav", "duration": 6.2369375, "text": "这些公司在海外市场上市往往除了获得融资机会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0225.wav", "duration": 3.797, "text": "境外资产监管有待加强"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0164.wav", "duration": 3.0879375, "text": "促进新型城镇化发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0146.wav", "duration": 7.844, "text": "一位房企人士认为五环内项目的稀缺性难以改变"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0446.wav", "duration": 8.224875, "text": "骗取搬迁补助资金用于支付搬迁安置房费用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0346.wav", "duration": 5.7009375, "text": "以宋安东为首的运动员们可以说是鲜活的冬奥名片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0212.wav", "duration": 3.3199375, "text": "办法还特别提出一些建议"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0167.wav", "duration": 5.051, "text": "今年北京土地市场仍然是高温状态"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0218.wav", "duration": 4.87, "text": "稳定发展粮食和棉油糖生产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0334.wav", "duration": 3.032, "text": "汽车模具毛利率下滑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0223.wav", "duration": 3.8570625, "text": "未来应该在制度上作进一步完善"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0235.wav", "duration": 3.6379375, "text": "审计署的审计结论表明"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0396.wav", "duration": 5.296125, "text": "五零千米竞走卡尔多赫曼"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0154.wav", "duration": 5.868, "text": "我国房地产市场过去从体偏紧部分地区过紧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0400.wav", "duration": 3.8420625, "text": "北京时间八月九日一五三零"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0374.wav", "duration": 6.593, "text": "而他们熟练掌握的秘笈是一次又一次反复的训练和排练"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0433.wav", "duration": 3.442125, "text": "二零一四九二"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0373.wav", "duration": 6.349125, "text": "昆仑决广州站在广州天河体育中心成功打响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0471.wav", "duration": 4.4460625, "text": "诱逼女教练陪他喝酒吃饭唱歌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0388.wav", "duration": 4.6528125, "text": "今年第二位离开法国冰协更换国籍的选手"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0436.wav", "duration": 6.1789375, "text": "新京报记者从温岭市政府新闻办获悉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0206.wav", "duration": 3.4410625, "text": "办法五月一日起实施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0391.wav", "duration": 4.7619375, "text": "佟健因此顺利通过了入学考试"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0428.wav", "duration": 2.8991875, "text": "网友纷纷力挺陈冠希"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0269.wav", "duration": 7.97, "text": "此举或与摩根士丹利下调苹果股票持股比例有关"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0157.wav", "duration": 7.61, "text": "都意在有针对性地加大三四线城市楼市库存消化力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0480.wav", "duration": 4.666, "text": "机场公安加航航班未发生性侵事件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0142.wav", "duration": 4.689, "text": "尤其是库存高企的三四线城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0235.wav", "duration": 3.8509375, "text": "才能申请发行城投债券"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0186.wav", "duration": 3.594, "text": "不如做一款实实在在的好产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0478.wav", "duration": 6.036125, "text": "永强中学校长也是坠楼学生的语文老师"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0400.wav", "duration": 3.052, "text": "这场官司的前五次公判"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0142.wav", "duration": 5.122, "text": "一系列利好消息影响下的首个周末"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0251.wav", "duration": 5.9760625, "text": "投资者采取措施防范风险是成熟的表现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0342.wav", "duration": 3.793, "text": "能够赢得比赛真的很开心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0279.wav", "duration": 5.7359375, "text": "根据知情人士获得的安吉拉录音手稿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0174.wav", "duration": 3.5379375, "text": "这是因为宋芳购买其房产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0447.wav", "duration": 3.1259375, "text": "被餐厅罚款二四零零元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0401.wav", "duration": 2.802, "text": "但还是担心水质问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0384.wav", "duration": 3.75, "text": "其中扣球拿到一百三十二分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0217.wav", "duration": 3.5229375, "text": "发展多种形式的规模化专业化生产经营"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0434.wav", "duration": 4.2311875, "text": "北京冬奥会刚刚申办成功"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0138.wav", "duration": 4.289, "text": "全国住房公积金七万亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0142.wav", "duration": 4.621, "text": "虽然一线城市房价已出现反弹"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0409.wav", "duration": 4.0551875, "text": "问到他们在法国拍戏定情的细节"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0169.wav", "duration": 5.678, "text": "一线城市住宅用地平均价格为十一万元每平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0215.wav", "duration": 3.437, "text": "我国地方政府性债务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0121.wav", "duration": 3.9649375, "text": "房地产相关领域问题频发"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0214.wav", "duration": 5.2899375, "text": "我国现代农业发展面临更多的外部不确定性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0481.wav", "duration": 5.068125, "text": "回家后发现大虾体内竟然被注射了不明胶状物"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0138.wav", "duration": 8.249, "text": "第四季度二手住宅成交量将环比增幅在百分之七以内"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0215.wav", "duration": 2.8979375, "text": "地震灾后重建等领域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0154.wav", "duration": 6.773, "text": "对于外商投资房地产企业注册资本与投资总额比例"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0252.wav", "duration": 6.428, "text": "最近企业债券特别是城投债券的发行难度加大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0208.wav", "duration": 3.828, "text": "各部门要主动服务三农"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0223.wav", "duration": 6.1490625, "text": "着力强化政策科技设施装备人才和体制支撑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0352.wav", "duration": 4.933125, "text": "其馀场馆改建后均可满足赛事需要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0234.wav", "duration": 4.2429375, "text": "加快该区域现代农业建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0306.wav", "duration": 4.9509375, "text": "对于企业提高股价促成业务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0326.wav", "duration": 3.170875, "text": "笔者进行了深度的了解"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0362.wav", "duration": 6.531, "text": "并且全部采用有经验的工作人员参与竞赛组织工作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0135.wav", "duration": 3.4079375, "text": "办公楼销售额下降了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0488.wav", "duration": 6.73, "text": "湖北一骗取群众资金数亿元的传销头目近日归国投案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0398.wav", "duration": 3.6530625, "text": "如果美容院的医疗过失罪名不成立"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0460.wav", "duration": 4.5339375, "text": "暗地里却发布小广告揽客"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0443.wav", "duration": 4.4309375, "text": "现场图一零月五日下午"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0173.wav", "duration": 4.877, "text": "百分之五的网友认为房价将普遍下跌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0323.wav", "duration": 4.7119375, "text": "转型升级应该在十年前就开始了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0185.wav", "duration": 3.1650625, "text": "智能家居概念的炒作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0222.wav", "duration": 7.135, "text": "强调必须把污染治理和生态保护摆在更加重要的位置"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0228.wav", "duration": 4.217, "text": "一些专家学者提出了许多好的建议"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0347.wav", "duration": 4.615, "text": "普鲁申科的职业生涯却堪称多灾多难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0468.wav", "duration": 4.6120625, "text": "原以为可以按照游戏规则定期分红提现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0251.wav", "duration": 7.4940625, "text": "国务院将对各类交易场所清理整顿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0234.wav", "duration": 5.207, "text": "对全国各地的政府债务进行了严格审计"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0492.wav", "duration": 6.076875, "text": "参考消息网九月一三日报道港媒称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0398.wav", "duration": 6.259, "text": "从九月四日起迎接多米尼加俄罗斯和日本的挑战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0319.wav", "duration": 7.5, "text": "美的家用空调事业部制造副总裁乌守保对记者表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0341.wav", "duration": 4.262, "text": "撑杆跳丽萨莱兹奇"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0230.wav", "duration": 3.4620625, "text": "公募基金管理业务有关工作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0392.wav", "duration": 5.754875, "text": "佟健是同班同学里唯一运动员出身的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0380.wav", "duration": 4.9860625, "text": "这场史诗级惊天血战中没有失败者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0197.wav", "duration": 7.739, "text": "推动发展村镇银行等农村中小金融机构"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0413.wav", "duration": 2.9550625, "text": "有眼尖的网友发现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0352.wav", "duration": 6.9509375, "text": "作为此次赛事上唯一一场纯泰式规则的超级战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0123.wav", "duration": 6.431, "text": "预计短期央行仍可能会积极维稳"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0287.wav", "duration": 7.6999375, "text": "苹果股价相较十月份低点已经上涨约百分之二十五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0255.wav", "duration": 4.671, "text": "苹果市值超过七千亿美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0205.wav", "duration": 3.422, "text": "政府性违约可能性不大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0195.wav", "duration": 6.444, "text": "严格执行鲜活农产品运输绿色通道政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0314.wav", "duration": 7.5, "text": "负责统一管理原电机事业部的各工厂制造系统"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0449.wav", "duration": 3.7519375, "text": "发现事情并没有这么简单"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0320.wav", "duration": 4.551, "text": "老板电器如何看待公司的创新驱动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0184.wav", "duration": 5.5150625, "text": "市场基本面有可能会率先好转"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0214.wav", "duration": 8.03, "text": "着力改善田间基础设施良种科研繁育设施等生产条件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0208.wav", "duration": 6.0350625, "text": "我委核准发行的企业债券累计为七千亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0251.wav", "duration": 5.519875, "text": "徐林发债企业在债券存续期内进行资产转移"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0383.wav", "duration": 4.013875, "text": "能否在里约奥运东山再起"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0460.wav", "duration": 8.423125, "text": "网络图片参考消息网八月一四日报道港媒称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0335.wav", "duration": 4.6319375, "text": "被合并到美的的厨房电器事业部后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0331.wav", "duration": 5.4558125, "text": "不同行业在网络安全方面投入比例不一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0350.wav", "duration": 4.4440625, "text": "裁判员代表和运动员代表进行了宣誓"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0347.wav", "duration": 2.657, "text": "影响力强的全国性比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0410.wav", "duration": 3.203125, "text": "就顺着你的感觉走就好了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0430.wav", "duration": 2.6591875, "text": "尽管她努力瘦身"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0280.wav", "duration": 6.584, "text": "我们当下的股市在流动性方面也表现得支离破碎"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0160.wav", "duration": 5.929, "text": "可以有效解决商业银行顺周期操作问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0440.wav", "duration": 7.754875, "text": "市民刘先生和江西环球国际旅行社的沟通协商再次失败"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0431.wav", "duration": 5.8689375, "text": "快报讯记者赵丹丹快递实名制时代终于到来了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0388.wav", "duration": 4.1650625, "text": "他将尽全力带领队伍取得好成绩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0296.wav", "duration": 5.048, "text": "这种渗透犹如蜘蛛结网细菌繁殖病毒传播"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0137.wav", "duration": 6.036, "text": "上海市公积金管理中心公布公积金新政"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0256.wav", "duration": 3.6999375, "text": "乔布斯在最初产品开发过程中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0460.wav", "duration": 6.536875, "text": "新京报讯记者林斐然近日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0309.wav", "duration": 4.4511875, "text": "对数据库设有监控及记录"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0311.wav", "duration": 4.5339375, "text": "又可以让家长了解孩子的位置"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0386.wav", "duration": 5.4960625, "text": "马特伍兹菲兹比亚尔科"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0403.wav", "duration": 3.9909375, "text": "而且还要尽量在小分上取得优势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0407.wav", "duration": 6.6120625, "text": "二十世纪福斯影业公布一批新片的档期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0205.wav", "duration": 5.031, "text": "这几年城投债券发行数量的确有所增加"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0300.wav", "duration": 3.636, "text": "读者若信经济学人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0452.wav", "duration": 4.073, "text": "回国后被确诊为腰部骨折"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0351.wav", "duration": 8.053, "text": "徐永昊的地面技术无疑是其格斗体系中的一块短板"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0278.wav", "duration": 4.157, "text": "我国的经济处在爬坡过坎的重要关口"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0477.wav", "duration": 6.052, "text": "游客扔硬币许愿观赏莲被砸成马蜂窝"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0139.wav", "duration": 2.945, "text": "再次降低公积金贷款的门槛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0209.wav", "duration": 5.994, "text": "制定农村二三产业加快发展的鼓励政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0173.wav", "duration": 3.346, "text": "通过设立国家住房银行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0420.wav", "duration": 3.057125, "text": "自己也有一段时间没有跟他见面了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0285.wav", "duration": 3.1840625, "text": "梅姐待的已算够长了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0254.wav", "duration": 4.317, "text": "零售店就再也卖不出去一个实体钱包了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0143.wav", "duration": 7.12, "text": "在市场整体从高速增长进入中高速增长区间的同时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0216.wav", "duration": 3.8759375, "text": "加快选育应用优良品种"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0432.wav", "duration": 4.6999375, "text": "李嘉诚首次公开回应撤资不爱国等质疑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0388.wav", "duration": 4.3000625, "text": "其中年龄最小的年仅十四岁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0391.wav", "duration": 6.1960625, "text": "北申办此次冬奥会的价值要远远超过承办本身"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0181.wav", "duration": 6.6540625, "text": "易居研究院智库中心研究总监严跃进认为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0236.wav", "duration": 3.6579375, "text": "并鼓励企业在境外上市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0378.wav", "duration": 3.6579375, "text": "现成的选择就在面前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0225.wav", "duration": 4.9290625, "text": "对促进当地经济增长和政府财力的增长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0208.wav", "duration": 6.509, "text": "审议通过缺陷汽车产品召回管理条例草案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0396.wav", "duration": 5.150875, "text": "我们应该多和亚洲球队比赛来适应这样的打法"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0481.wav", "duration": 7.4189375, "text": "温州惊现注胶虾续苍南再查六公斤注胶大虾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0330.wav", "duration": 6.6479375, "text": "很多服务器厂商进入做一两年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0313.wav", "duration": 4.756125, "text": "他担心自己马上就要被辞退了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0402.wav", "duration": 5.077875, "text": "与几乎不接一传的科舍列娃相比"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0478.wav", "duration": 4.1369375, "text": "京华时报讯昨天下午"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0331.wav", "duration": 4.887, "text": "现在消费者的需求越来越个性化差异化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0233.wav", "duration": 4.0120625, "text": "进入世界五百强的企业增加"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0211.wav", "duration": 4.23, "text": "其中城投债券共发行七千亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0493.wav", "duration": 4.4260625, "text": "现场李双江受到了观众的热烈欢迎"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0176.wav", "duration": 5.912, "text": "当月住宅类商品房成交套数骤跌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0370.wav", "duration": 3.5700625, "text": "意思是他们比较认同这个结果"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0493.wav", "duration": 6.8710625, "text": "参考消息网一一月一日报道港媒称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0201.wav", "duration": 5.3530625, "text": "投资者对城投债券风险表现出的恐慌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0149.wav", "duration": 3.554, "text": "由于商品房供应量充足"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0474.wav", "duration": 8.860125, "text": "温州一住持被免政协委员遭准儿媳举报娶妻开路虎"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0416.wav", "duration": 5.3418125, "text": "但会给哥哥谢霆锋传短信了解情况"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0356.wav", "duration": 7.503875, "text": "二传丁霞和主攻刘晏含取代了沈静思和张常宁的位置"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0123.wav", "duration": 5.632, "text": "百分之五的网友选择了房贷利率打折优惠"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0302.wav", "duration": 3.697, "text": "这行字对于我们来说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0227.wav", "duration": 3.3359375, "text": "我看了以后很受震动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0488.wav", "duration": 5.650875, "text": "消费者可以直接向物价部门和旅游部门举报"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0131.wav", "duration": 5.0, "text": "开发边界将作为城市发展的刚性约定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0266.wav", "duration": 5.2429375, "text": "而土豪和穷鬼做生意的最大区别就是"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0142.wav", "duration": 5.124, "text": "中海地产作为国企龙头"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0338.wav", "duration": 5.5849375, "text": "拉德克利夫认为自己被暗指有问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0173.wav", "duration": 3.3899375, "text": "但增加的幅度不会太大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0203.wav", "duration": 3.802, "text": "农业生产技术较为成熟"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0235.wav", "duration": 4.652, "text": "国家审计署还专门组织力量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0224.wav", "duration": 4.022, "text": "着力完善现代农业产业体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0166.wav", "duration": 5.07, "text": "不予安排中长期外债额度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0127.wav", "duration": 4.626, "text": "一线城市超过三成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0239.wav", "duration": 7.9339375, "text": "重点突破棉花油菜甘蔗收获机械化瓶颈"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0354.wav", "duration": 10.488, "text": "取得瑞士卢加诺竞走挑战赛男子二十公里竞走银牌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0132.wav", "duration": 3.834, "text": "连接的最高代价就是安全问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0395.wav", "duration": 6.061, "text": "伤愈复出找手感一传防守遇考验"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0258.wav", "duration": 2.912, "text": "我们的自主创新能力还不够强"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0205.wav", "duration": 3.983875, "text": "加强入海河流综合治理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0215.wav", "duration": 4.64, "text": "加快构建以公共交通为主"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0173.wav", "duration": 4.6999375, "text": "迅速带动一线城市土地市场的整体成交"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0131.wav", "duration": 4.631, "text": "对于中国楼市有一定积极作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0213.wav", "duration": 6.4750625, "text": "在海洋环境敏感区关键区等划定生态红线"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0346.wav", "duration": 3.1528125, "text": "其中五个场馆需要新建"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0410.wav", "duration": 5.9880625, "text": "日前在大陆真人秀节目秀出两条雪白大长腿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0373.wav", "duration": 6.865, "text": "二零一五年第十二届女排世界杯单循环赛战至第八轮"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0356.wav", "duration": 3.8569375, "text": "激情战火必将以燎原之势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0414.wav", "duration": 6.1208125, "text": "与孙楠巫启贤共同起立鼓掌的许茹芸小腹凸起"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0400.wav", "duration": 6.2678125, "text": "还要求具备大型赛会或日常从事社会志愿服务的经验"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0431.wav", "duration": 3.797875, "text": "并于当日被香港警方拘捕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0196.wav", "duration": 2.943, "text": "油料总产量七万吨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0380.wav", "duration": 2.7729375, "text": "北京时间十月十日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0290.wav", "duration": 5.7860625, "text": "这种产品的设计仍需考虑文化历史和未来等因素"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0132.wav", "duration": 4.068, "text": "这些城市公积金贷款买房的比例也比较高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0134.wav", "duration": 4.57, "text": "有百分之五的网友选择了其他房企"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0438.wav", "duration": 5.6499375, "text": "本山传媒回应赵本山将有新作品没听说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0253.wav", "duration": 4.8199375, "text": "没有人提的往往才是真命天子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0391.wav", "duration": 3.318125, "text": "一切都难以用言语来表达"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0228.wav", "duration": 3.109, "text": "十二五医药发展规划"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0328.wav", "duration": 8.380125, "text": "因为机器人生产商派遣技术人员不可能长期驻起驻点企业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0479.wav", "duration": 5.864, "text": "水货集团看中轮椅人士收入不高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0367.wav", "duration": 6.303, "text": "也为背后的关键技术提供开发支持"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0167.wav", "duration": 6.43, "text": "北京市管国管住房公积金中心先后发布通知"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0407.wav", "duration": 3.141125, "text": "但是出于预算考虑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0385.wav", "duration": 3.5590625, "text": "在此次申办冬奥会的过程中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0445.wav", "duration": 3.1010625, "text": "几位游客轮流翻越护栏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0428.wav", "duration": 5.9179375, "text": "但隔年三月却又分享一张女方坐他大腿的照片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0287.wav", "duration": 3.9490625, "text": "乔帮主在首批苹果产品的开发中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0246.wav", "duration": 4.6069375, "text": "从城投债券发行监管部门的角度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0252.wav", "duration": 6.656, "text": "加强基础性前沿性公益性重大农业科学技术研究"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0188.wav", "duration": 3.984, "text": "促进战略性新兴产业健康发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0366.wav", "duration": 6.5, "text": "在场下接受完队医高压包扎后的朱婷请命上场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0173.wav", "duration": 4.956875, "text": "相反相关环节上审批更加严格"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0338.wav", "duration": 5.699, "text": "美丽的丁香湖公园成为跑步爱好者的狂欢圣地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0183.wav", "duration": 4.3840625, "text": "反映出政策层面较大的刺激力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0123.wav", "duration": 10.734, "text": "公积金政策利好首套自住住房贷款需求的消息纷至沓来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0205.wav", "duration": 10.808, "text": "下一步将进一步完善城投债卷发行制度和防范风险机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0182.wav", "duration": 3.803, "text": "为了将后辈的婚姻风险隔断"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0396.wav", "duration": 9.203125, "text": "以哈萨克斯坦排协特派选手的方式加盟日本的球队"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0245.wav", "duration": 9.188, "text": "部分核电厂未制定实施严重事故预防和缓解规程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0168.wav", "duration": 3.913, "text": "预计全年有望突破四千亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0458.wav", "duration": 4.019, "text": "出事凉亭依然呈现事发时的状态"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0407.wav", "duration": 3.881125, "text": "看上去和人物原型相当贴合"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0250.wav", "duration": 6.499, "text": "加快农田基础设备和现代农业装备建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0312.wav", "duration": 4.7531875, "text": "三十一九二零一五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0289.wav", "duration": 3.2900625, "text": "也不能一直被贴上中国组装的标签"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0384.wav", "duration": 3.6269375, "text": "二零零八年北京奥运会时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0306.wav", "duration": 5.735875, "text": "白电行业将进入最惨烈的一年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0402.wav", "duration": 3.416, "text": "日本排球界的人士指出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0303.wav", "duration": 2.858, "text": "这是未来的必经之路"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0460.wav", "duration": 8.2851875, "text": "港媒关注内地私人美术馆新富人群热衷分享藏品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0262.wav", "duration": 5.401875, "text": "也向全世界推广了一种趋之若鹜的文化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0207.wav", "duration": 3.621, "text": "城市化进程远未结束"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0494.wav", "duration": 5.746125, "text": "京华时报讯记者武红利与家人来京旅游"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0449.wav", "duration": 3.8349375, "text": "岳父母继承一零九万馀元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0369.wav", "duration": 5.6220625, "text": "小海坨山是位于延庆境内的海坨山主峰"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0174.wav", "duration": 4.1499375, "text": "他预测今年剩馀的两个月中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0337.wav", "duration": 4.0810625, "text": "侵犯了公民的合法权益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0295.wav", "duration": 5.4409375, "text": "而不是迫不及待抓住一切可以上市圈钱的机会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0259.wav", "duration": 4.941875, "text": "苹果已为汽车项目招募了数百名员工"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0246.wav", "duration": 9.328, "text": "加强种子饲草料等急救灾物资储备调运条件建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0166.wav", "duration": 5.555, "text": "搜房网广州二手房统计中心数据显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0282.wav", "duration": 4.3769375, "text": "在自己全身心的努力和坚持之下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0449.wav", "duration": 10.7270625, "text": "温州老人卖房筹四八零零万建养老院赠政府遭闲置"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0285.wav", "duration": 5.068, "text": "而是统一地认为苹果开了有史以来最烂的发布会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0443.wav", "duration": 3.6340625, "text": "记者从广安消防部门获悉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0184.wav", "duration": 5.7039375, "text": "对绿色高效宜居的高品质住房需求快速上升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0178.wav", "duration": 3.87, "text": "六部委松绑楼市限外令"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0221.wav", "duration": 6.1169375, "text": "这使得我国城投债劵的发行利率相对偏高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0168.wav", "duration": 4.205, "text": "一智能家居产品的销售渠道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0448.wav", "duration": 3.957, "text": "对中央坚定不移继续改革开放"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0370.wav", "duration": 7.401875, "text": "身材傲人颜值爆表的她魅力席卷整个亚洲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0183.wav", "duration": 5.873, "text": "并将受益人定为直系血亲后代非配偶继承人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0173.wav", "duration": 4.372, "text": "但对购房者预期有积极响应"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0387.wav", "duration": 4.718, "text": "而是王气十足地向对手进行正面逼近"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0249.wav", "duration": 5.2889375, "text": "限制类主要是指天然化工"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0353.wav", "duration": 5.832, "text": "孙杨因心脏不适退出一千五百米自由泳决赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0463.wav", "duration": 5.212875, "text": "温州企业家卖房建养老院捐给当地却被闲置三年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0237.wav", "duration": 4.495, "text": "创新鲜活农产品的流通模式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0376.wav", "duration": 6.297125, "text": "高清女排金花手捧奖杯庆夺冠"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0363.wav", "duration": 3.9130625, "text": "得到当地企业的强烈积极响应"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0390.wav", "duration": 4.8869375, "text": "美联社公布的一项独立水质检测显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0126.wav", "duration": 3.5, "text": "因此土地储备至关重要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0345.wav", "duration": 5.2160625, "text": "令拳迷记忆犹新的飙血之战不计其数"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0324.wav", "duration": 4.931125, "text": "老师是否允许孩子戴手表上学"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0304.wav", "duration": 3.721875, "text": "故依法裁定驳回上诉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0170.wav", "duration": 4.1779375, "text": "而现在这类城市房价已经很高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0342.wav", "duration": 4.5800625, "text": "明年北京市业馀排球联赛将在中国排球协会备案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0192.wav", "duration": 4.6700625, "text": "加快该地区域现代农业建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0495.wav", "duration": 3.509, "text": "湖北黄石市一家商场前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0213.wav", "duration": 3.037, "text": "如果开了小车免费车道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0167.wav", "duration": 4.91, "text": "现在已经是海南本土最大的房地产推广公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0165.wav", "duration": 3.6340625, "text": "楼市持续三个季度回升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0361.wav", "duration": 7.499, "text": "在冬奥会举办之前这里将为专业队伍训练提供场地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0124.wav", "duration": 3.94, "text": "遇到毛利率低的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0211.wav", "duration": 7.1230625, "text": "统筹城乡基础设施建和公共服务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0357.wav", "duration": 5.672875, "text": "张常宁则取代曾春蕾站在接应的位置上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0159.wav", "duration": 7.722, "text": "全国已有超百个城市发布了不同力度的公积金松绑政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0474.wav", "duration": 8.8561875, "text": "村支书为考公务员改小一零岁一四岁时三月内生两子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0458.wav", "duration": 3.1279375, "text": "砸到了村民的菜地里"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0281.wav", "duration": 3.076875, "text": "据华尔街日报网站报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0379.wav", "duration": 5.0080625, "text": "这些常年坚持跑步的人身体质量指数偏低"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0273.wav", "duration": 3.723, "text": "跨设备使用的通用应用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0246.wav", "duration": 4.192, "text": "通知扩大保险资管公司业务范围"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0233.wav", "duration": 5.672, "text": "新京报讯记者钟晶晶发改委昨日表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0174.wav", "duration": 4.974, "text": "预期政府将继续放松政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0408.wav", "duration": 2.738, "text": "演技也日渐精湛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0238.wav", "duration": 6.349, "text": "研究建立高耗能老旧农业机械报废回收制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0217.wav", "duration": 4.999, "text": "可以更好地体现代际公平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0369.wav", "duration": 2.968, "text": "在保障好技术稳定发挥的同时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0489.wav", "duration": 8.255125, "text": "温州景山花木市场发生大火火势已得到基本控制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0384.wav", "duration": 3.568125, "text": "这在曾春蕾看来打俄罗斯很有底"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0299.wav", "duration": 8.9510625, "text": "据新华社电美国国际贸易委员会二十一日作出终裁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0466.wav", "duration": 6.9289375, "text": "湖北电梯吃人调查报告电梯厂商及商场负主责"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0458.wav", "duration": 3.8561875, "text": "目前八人均已脱离生命危险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0228.wav", "duration": 6.5589375, "text": "虽然报道内容并没有具体的城投债券还本付息违约案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0405.wav", "duration": 5.046125, "text": "结果创造了相当可观的票房成绩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0341.wav", "duration": 3.4930625, "text": "我们是一条心在打团结作战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0355.wav", "duration": 3.468, "text": "主教练郎平训练结束后通知她的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0367.wav", "duration": 5.27, "text": "予服用处方药以治疗心肌缺血保护心肌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0397.wav", "duration": 4.1789375, "text": "再就是四号位的进攻除了斜线"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0146.wav", "duration": 6.0510625, "text": "满堂红链家市场研究部高级经理周峰透露"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0335.wav", "duration": 5.6630625, "text": "很多家长都在给孩子购置各种学习用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0432.wav", "duration": 5.5, "text": "警方以普通袭击罪对涉事乘客提起诉讼"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0230.wav", "duration": 5.0059375, "text": "我们对城投债券发行人的审核一直是比较严格的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0228.wav", "duration": 4.202, "text": "七千万套保障房多少钢材"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0189.wav", "duration": 4.52, "text": "并严格按照合规程序进行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0423.wav", "duration": 4.0539375, "text": "再次身体力行地辟谣怀孕传闻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0352.wav", "duration": 5.567125, "text": "照片中看到普鲁申科的背部肌肉伤痕累累"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0230.wav", "duration": 3.3940625, "text": "实现营业总收入十一亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0336.wav", "duration": 4.968, "text": "也就是去年和今年上半年营收总额都不高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0175.wav", "duration": 4.5, "text": "进而对稳定中国经济有正面作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0338.wav", "duration": 3.589, "text": "这一切并不是说说而已"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0338.wav", "duration": 5.1760625, "text": "一百米栏辛迪罗勒德尔"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0221.wav", "duration": 3.502, "text": "今年大年初一他开车去海南"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0278.wav", "duration": 5.7729375, "text": "这种芯片不会直接发送用户敏感信息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0463.wav", "duration": 5.5190625, "text": "要求停止侵权公开道歉赔偿精神损失一元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0274.wav", "duration": 6.4079375, "text": "在征收反倾销或反补贴税之前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0465.wav", "duration": 6.6120625, "text": "她身着湖蓝色细纱短袖黑长裤白运动鞋"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0198.wav", "duration": 5.6579375, "text": "引导金融机构发放农业中长期贷款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0417.wav", "duration": 3.7949375, "text": "看完片后会睡不好做恶梦"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0204.wav", "duration": 5.8349375, "text": "完善农业保险保费补贴政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0473.wav", "duration": 8.167, "text": "温州一中学门口氢气罐爆炸卖气球摊贩不治身亡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0362.wav", "duration": 3.76, "text": "哈亚的肘击刁钻狠辣"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0377.wav", "duration": 8.8149375, "text": "我相信每个人都会付出一切来为团队力争最好的成绩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0264.wav", "duration": 6.063, "text": "这些特质让库克基本上实现了财务自由"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0362.wav", "duration": 6.7521875, "text": "机关企事业单位等社会志愿者三千一百名"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0217.wav", "duration": 9.4290625, "text": "城市综合交通体系规划应明确公共交通优先发展原则"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0393.wav", "duration": 3.6259375, "text": "大韩体育会这一计划的顺利实施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0242.wav", "duration": 3.277, "text": "单项投资规模日益增大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0481.wav", "duration": 4.432875, "text": "我从没想过自己竟会出版一本这样的书"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0477.wav", "duration": 10.937, "text": "村官一顿工作餐吃二六个菜挂钩蹲点领导被诫勉谈话"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0457.wav", "duration": 8.295875, "text": "温州家庭误食毒蘑菇后续小女儿已确诊脑死亡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0229.wav", "duration": 2.567, "text": "基本农田不低于十亿亩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0471.wav", "duration": 3.3190625, "text": "孩子仍处于昏迷阶段"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0433.wav", "duration": 5.6679375, "text": "温州沙城街道一民房发生火灾已造成四人死亡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0486.wav", "duration": 4.7849375, "text": "云南昆明市同样发现类似注胶虾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0326.wav", "duration": 3.616, "text": "围绕消费者消费者需要什么"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0393.wav", "duration": 3.7851875, "text": "而哈萨克斯坦则是第十六位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0348.wav", "duration": 4.23, "text": "克里斯蒂娜奥伯福尔"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0399.wav", "duration": 4.02, "text": "一些参赛选手也向新华社记者表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0366.wav", "duration": 5.136, "text": "甚至在头一场的比赛还影响到自己的技术发挥"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0144.wav", "duration": 6.867, "text": "一线城市在价格较高的基础上整体回升并领涨全国"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0400.wav", "duration": 4.599125, "text": "比赛结果已经无需裁判的裁定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0376.wav", "duration": 3.0, "text": "对于高年龄跑者来说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0252.wav", "duration": 5.109, "text": "提升垦区现代农业发展水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0191.wav", "duration": 7.99, "text": "需配备租赁精密仪器专业设备大型场地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0202.wav", "duration": 3.423, "text": "鼓励龙头企业采取参股合作等方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0212.wav", "duration": 4.4609375, "text": "也要看到我国与欧美国家的不同之处"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0288.wav", "duration": 5.1060625, "text": "半导体行业的大公司正在寻求通过并购"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0138.wav", "duration": 4.875, "text": "将在诸多方面惠及刚需购房者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0450.wav", "duration": 3.032, "text": "对中国发展充满信心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0363.wav", "duration": 6.691875, "text": "伊萨的眉弓同样被张春雨以牙还牙的肘法击破"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0140.wav", "duration": 12.0, "text": "新产业发展快地用地集约求且需求大的地区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0278.wav", "duration": 4.879, "text": "可供客户为特定任务重新编程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0202.wav", "duration": 3.1479375, "text": "我个人是这么认认识的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0183.wav", "duration": 3.051, "text": "在全球大数据浪潮中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0278.wav", "duration": 4.449, "text": "一九八三至二零零五年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0479.wav", "duration": 9.609125, "text": "渔民南海捞出外国间谍潜航器搜集情报或已传回"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0359.wav", "duration": 5.509, "text": "就不会刻意选择位于纽约闹市区的这所大学"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0139.wav", "duration": 5.188, "text": "之前的公积金贷款额只有一百万"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0406.wav", "duration": 4.011, "text": "外媒发布了更令人兴奋的消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0426.wav", "duration": 4.9919375, "text": "搜狐娱乐讯九月十六日二十点二十七分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0327.wav", "duration": 3.6310625, "text": "而车企相对缺乏这类人才"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0144.wav", "duration": 3.079, "text": "北京公积金贷款额度提高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0416.wav", "duration": 2.4709375, "text": "今天她出席活动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0284.wav", "duration": 4.1440625, "text": "华尔街才对阿里巴巴情有独钟"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0321.wav", "duration": 3.478, "text": "员工数量将减至两万人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0366.wav", "duration": 5.004875, "text": "明天比赛里我们会冷静下来落实到细节"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0216.wav", "duration": 8.1529375, "text": "特别是地方投投融资平台公司形成的债务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0261.wav", "duration": 4.0699375, "text": "或许是受好莱坞艳照门的影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0155.wav", "duration": 4.815, "text": "也就是每个成员综合体验的最大公约数"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0389.wav", "duration": 3.9030625, "text": "在主场为中国健儿加油"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0169.wav", "duration": 3.6260625, "text": "我又不指望设立信托来赚钱"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0269.wav", "duration": 4.178, "text": "此时客户可以选择离开苹果零售店"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0458.wav", "duration": 10.2849375, "text": "游客骑着明孝陵驮碑龟趺拍照市民大煞风景"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0472.wav", "duration": 6.322, "text": "陆续有人从乐清赶往平阳法院"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0130.wav", "duration": 4.075, "text": "但对于实施住房限购政策的城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0440.wav", "duration": 3.0900625, "text": "温州新力虎汽车销售公司展示台"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0126.wav", "duration": 3.528, "text": "创业者成了智慧时代的贡品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0258.wav", "duration": 7.135, "text": "并且计划最早在二零二零年推出生产首款车型"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0399.wav", "duration": 4.2149375, "text": "朱婷在谈到大家关心的脚伤时说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0260.wav", "duration": 3.005, "text": "除了普通计算机以外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0275.wav", "duration": 7.463, "text": "而沃兹尼亚克似乎乐于承担驱魅的角色"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0404.wav", "duration": 4.3449375, "text": "这也是该片首次亮相大荧幕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0417.wav", "duration": 2.6499375, "text": "希望出去发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0471.wav", "duration": 3.6899375, "text": "退休后不在其位不谋其政"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0274.wav", "duration": 3.156, "text": "而将他软禁十年之久"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0364.wav", "duration": 4.233125, "text": "但是因为涉及到男伴更改国籍问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0253.wav", "duration": 3.939, "text": "亦不可能跟自然规律抗衡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0477.wav", "duration": 2.3899375, "text": "让借给我钱的好心人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0443.wav", "duration": 5.1430625, "text": "日照市公安局官方发布消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0358.wav", "duration": 2.89, "text": "但是也不好过问太多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0326.wav", "duration": 4.7790625, "text": "美的家用空调事业提出精品战略"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0226.wav", "duration": 3.256, "text": "建设一批大型渔政船"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0122.wav", "duration": 5.2460625, "text": "楼市地市交相升温房价会不会再度暴涨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0246.wav", "duration": 3.5710625, "text": "建立健全重要农产品储备制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0396.wav", "duration": 5.086875, "text": "只有姚明和刘国梁等少数几个人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0364.wav", "duration": 5.5820625, "text": "孙杨因感冒后出现了胸闷心悸不适等症状"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0416.wav", "duration": 2.8669375, "text": "她看了不少恐怖片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0392.wav", "duration": 4.0649375, "text": "朱婷崴脚之后带伤率队取胜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0492.wav", "duration": 3.765875, "text": "成功处置深航机上纵火事件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0228.wav", "duration": 6.2220625, "text": "增长百分之三十净利润一千亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0327.wav", "duration": 4.4109375, "text": "机器人应用也进一步提速"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0406.wav", "duration": 5.1030625, "text": "好莱坞当红明星之前曾被盛传将扮演斯诺登"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0184.wav", "duration": 5.261, "text": "这是自去年以来除降息外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0373.wav", "duration": 7.7048125, "text": "这场史诗级的双王血战在两大强者最后的对决中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0256.wav", "duration": 4.4860625, "text": "具有精确的目标定位和识别能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0136.wav", "duration": 4.3550625, "text": "为了确保保障房住宅的优良品质"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0476.wav", "duration": 4.557125, "text": "屡屡逼近八万人次的限流大关"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0207.wav", "duration": 5.588, "text": "您如何看待政府的举债行为和债务风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0385.wav", "duration": 4.379875, "text": "格里格尔特拉贝尔"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0309.wav", "duration": 3.506125, "text": "由于近期销售模式的调整"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0338.wav", "duration": 3.0, "text": "她的表现也更加全面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0193.wav", "duration": 10.7259375, "text": "多方面原因造成今年上半年部分中小企业生产经营困难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0417.wav", "duration": 4.711875, "text": "不到几个月的时间已爱得如此火热了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0378.wav", "duration": 4.9130625, "text": "曾春蕾一记五米线的调整攻打得非常漂亮"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0234.wav", "duration": 4.4499375, "text": "相关公司股票走势国海证券"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0374.wav", "duration": 3.380875, "text": "非常适合修建高山雪场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0220.wav", "duration": 5.1660625, "text": "二零一二年中央进一步加大了资金支持力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0472.wav", "duration": 3.1950625, "text": "记者接到这样的报料"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0227.wav", "duration": 3.183, "text": "扩大到四个小长假之后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0140.wav", "duration": 5.788, "text": "如允许每年发行专项金融债券七万亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0377.wav", "duration": 3.850125, "text": "打得对手只有招架之功"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0400.wav", "duration": 7.1550625, "text": "而十公里女子组由刘庆红以三十四分十秒夺得冠军"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0128.wav", "duration": 3.635, "text": "市场开发也呈降温态势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0444.wav", "duration": 4.514875, "text": "在甘肃敦煌大方盘城遗址"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0128.wav", "duration": 4.401, "text": "三线及以下为一成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0413.wav", "duration": 4.5, "text": "分享入行二十年的感受"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0449.wav", "duration": 6.991, "text": "港珠澳大桥又起漂移风波可能进一步影响工期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0492.wav", "duration": 7.323, "text": "据称是当事人之一在派出所通过一个亲戚的微博发的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0330.wav", "duration": 5.7431875, "text": "紫光股份将与世纪互联共同出资组建合资公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0404.wav", "duration": 6.042, "text": "影片将在二零一五年一月在慕尼黑正式开机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0348.wav", "duration": 3.4040625, "text": "朱婷就是中国女排的核心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0440.wav", "duration": 3.672875, "text": "案件正在进一步调查中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0468.wav", "duration": 5.985125, "text": "学校正在全力配合公安机关和家属进行善后处理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0212.wav", "duration": 5.2650625, "text": "逐步建立城乡统一的公共服务制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0153.wav", "duration": 5.874, "text": "但供应和库存却主要集中在七个三四线城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0396.wav", "duration": 5.47775, "text": "相信有这些高水平业馀排球队的参与"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0388.wav", "duration": 6.52, "text": "吕会会在全场观众的加油助威声中爆发"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0311.wav", "duration": 5.76, "text": "就更加愿意长期持有他们的股票"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0373.wav", "duration": 4.9130625, "text": "拥有高山滑雪要求的八百米落差"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0316.wav", "duration": 7.292, "text": "美的集团公关部的相关人士告诉第一财经日报记者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0422.wav", "duration": 3.6369375, "text": "花了三年时间才得到这首歌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0406.wav", "duration": 6.2790625, "text": "但本月评论界就可以知道该片的真实成色"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0242.wav", "duration": 4.948, "text": "加快实施保护性耕作工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0324.wav", "duration": 4.8249375, "text": "马某等人进一步完善了插件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0128.wav", "duration": 6.031, "text": "土地交易可能随着供应淡季的到来而降温"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0412.wav", "duration": 8.225125, "text": "搜狐娱乐讯北京时间八月十二日消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0180.wav", "duration": 5.8240625, "text": "今年一线城市宅地成交的溢价率不高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0387.wav", "duration": 4.0239375, "text": "在昨天比赛的第五投"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0164.wav", "duration": 6.3449375, "text": "龙湖在丰台西局撤资三十亿元拿地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0277.wav", "duration": 4.3049375, "text": "中国游戏产品和美国产品极为不同"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0201.wav", "duration": 4.0130625, "text": "引领全国现代农业加快发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0427.wav", "duration": 4.8920625, "text": "她坦承当时很惊喜很感动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0306.wav", "duration": 4.5610625, "text": "于一九九一年加盟美的集团"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0459.wav", "duration": 5.0029375, "text": "一八一所院校将补录一九四九人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0136.wav", "duration": 3.646, "text": "具有实时性合理性和较强的针对性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0174.wav", "duration": 5.307, "text": "这将有利于稳定房地产市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0430.wav", "duration": 4.6159375, "text": "搜狐娱乐讯北京时间六月二十四日消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0479.wav", "duration": 3.4360625, "text": "九日晚女孩尸体被找到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0125.wav", "duration": 4.3, "text": "难以在周边城市用公积金购房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0310.wav", "duration": 3.626, "text": "题材股继续扮演黑马角色"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0192.wav", "duration": 3.881, "text": "鼓励本土中介机构提供服务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0393.wav", "duration": 3.1579375, "text": "十月十八日早上九点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0404.wav", "duration": 4.9030625, "text": "这部电影从二零一三年就已经开始筹备了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0205.wav", "duration": 6.1700625, "text": "为加快发展银行间债券市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0153.wav", "duration": 6.766, "text": "今年北京将继续加大集体土地建设公租房试点力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0460.wav", "duration": 4.00125, "text": "瑞安市商业街和联中路交叉口"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0152.wav", "duration": 4.5, "text": "此举将有利于市场信心的培养"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0213.wav", "duration": 7.8719375, "text": "一定程度上缓解了部分中小企业的融资困难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0268.wav", "duration": 3.177, "text": "这只是最乐观的估计"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0353.wav", "duration": 3.6909375, "text": "这个二十三岁的云南小伙子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0213.wav", "duration": 4.0230625, "text": "提高农机装备和作业水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0201.wav", "duration": 7.3249375, "text": "下一步我国的城投债劵还需要做哪些完善"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0367.wav", "duration": 5.959, "text": "志愿者的那一抹绿并大家亲切地称呼为小青椒"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0321.wav", "duration": 7.188, "text": "也将儿童人身安全的话题推向了妙论的风口浪尖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0196.wav", "duration": 5.1790625, "text": "强农惠农富农政策力度将进一步加大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0268.wav", "duration": 3.459, "text": "与现在的接待原则不同的是"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0477.wav", "duration": 5.803, "text": "故宫首次启动了起流起票限流措施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0361.wav", "duration": 4.7949375, "text": "而六十岁的跑者每英里耗时十分十八秒"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0226.wav", "duration": 9.1959375, "text": "使得城投公司能够发行真正意义上的长期市政债劵"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0492.wav", "duration": 3.2480625, "text": "目前均暂无生命危险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0196.wav", "duration": 6.383875, "text": "稳步推进退牧还草和游牧民定居工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0203.wav", "duration": 3.463, "text": "创新农业技术推广机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0476.wav", "duration": 3.947, "text": "戏称自己年过八零当为八零后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0178.wav", "duration": 6.2599375, "text": "希望智能家居产品企业在短期的高回报率也是不现实的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0481.wav", "duration": 3.4650625, "text": "龙湾警方已对此事展开调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0199.wav", "duration": 5.707, "text": "对丰富债劵市场品种也具有积极意义"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0431.wav", "duration": 5.5180625, "text": "一四年前轰动东莞沙田的一起命案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0378.wav", "duration": 2.9150625, "text": "很开心赢得今天的比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0298.wav", "duration": 3.4399375, "text": "反映了芯片行业出现整合热"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0269.wav", "duration": 6.003875, "text": "无论他做的什么都是什么都会引人注目的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0451.wav", "duration": 6.0378125, "text": "曾多次比对二零零七年命案现场匕首上的指纹"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0471.wav", "duration": 3.7319375, "text": "女神机器人在火锅店内工作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0284.wav", "duration": 5.61, "text": "艾维本周四晚在旧金山现代艺术馆向大众表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0358.wav", "duration": 5.1599375, "text": "并取得世锦赛参赛资格"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0135.wav", "duration": 6.231, "text": "双降加上广州公积金贷款新政落地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0383.wav", "duration": 3.7150625, "text": "顺利获得了冬奥会的主办权"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0349.wav", "duration": 3.9350625, "text": "十月二十八日与三十一日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0479.wav", "duration": 5.6220625, "text": "这里存放着乙酯和工业酒精等化工品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0373.wav", "duration": 5.53, "text": "四川大学的手语志愿者要学习四千个手语动作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0198.wav", "duration": 7.1, "text": "强化多双边和区域农业磋商谈判和贸易促进"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0176.wav", "duration": 4.3629375, "text": "房地产需求可能会上升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0291.wav", "duration": 3.593, "text": "英特尔需要找到新的增长点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0221.wav", "duration": 4.4870625, "text": "扩大农机具购置补贴规模"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0229.wav", "duration": 4.7620625, "text": "本报记者蔡宗琦中国证券报记者获悉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0307.wav", "duration": 3.999, "text": "从而获取用户信息的案件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0443.wav", "duration": 5.6108125, "text": "凭着远比真实年龄看起来要年经许多的容貌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0289.wav", "duration": 6.509, "text": "但这些口水式的讨伐并没有影响苹果前进的脚步"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0210.wav", "duration": 6.656, "text": "徐林吸取欧美等国主权债务危机的教训"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0247.wav", "duration": 8.218, "text": "提高天然气利用率支持天然气贸易机制创新"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0310.wav", "duration": 4.0020625, "text": "这种宣传方式的目的是什么"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0140.wav", "duration": 4.394, "text": "广州日报讯记者林琳上周五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0470.wav", "duration": 6.3769375, "text": "申龙电梯和安良百货公司应对事故负主要责任"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0352.wav", "duration": 3.459, "text": "当队伍遇到一些困难的时候"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0428.wav", "duration": 7.6440625, "text": "男友受访时也首度大方松口确实已经进入求婚阶段"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0413.wav", "duration": 4.0959375, "text": "又指自己未试过受爸爸体罚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0283.wav", "duration": 2.9670625, "text": "在转型发展上下功夫"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0220.wav", "duration": 4.1889375, "text": "深入贯彻落实科学发展观"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0468.wav", "duration": 2.681875, "text": "和传统硬盘不同的是"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0333.wav", "duration": 5.370875, "text": "小天才电话手表等国内几个大品牌都有"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0374.wav", "duration": 10.7780625, "text": "佟健又将国内部分优秀的单人滑和冰舞运动员集合起来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0397.wav", "duration": 4.765125, "text": "接下来中国女排将转战名古屋"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0234.wav", "duration": 3.213, "text": "推行禁牧休牧和划区轮牧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0281.wav", "duration": 5.558, "text": "苹果通过发布不必要的软件升级包"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0338.wav", "duration": 4.235, "text": "北京市业馀排球联赛未来每年都将举办一届"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0314.wav", "duration": 6.5, "text": "发改委约谈各大空调企业的高管"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0230.wav", "duration": 4.2729375, "text": "着力提高粮食综合生产能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0341.wav", "duration": 5.767125, "text": "如果要数一下中国女排谁最红"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0484.wav", "duration": 7.2268125, "text": "游客大铜缸刻字警察喊话故宫刻字者请自首"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0482.wav", "duration": 7.594, "text": "温州高速公路大米遭抢续五名涉案人员已落网"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0452.wav", "duration": 7.3520625, "text": "清晨飘来辣眼白雾济南八名村民中毒入院"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0474.wav", "duration": 6.44675, "text": "温州六旬老人辗转各地看公厕一二年还债七六万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0267.wav", "duration": 5.073, "text": "报收于每股一百一十五点四五美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0249.wav", "duration": 5.114, "text": "损害债劵持有人利益的事件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0433.wav", "duration": 8.051, "text": "温岭鞋厂倒塌事故已一四人遇难鞋厂老板被控制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0398.wav", "duration": 4.746125, "text": "四季如春的俄罗斯黑海东部沿岸"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0394.wav", "duration": 3.115, "text": "徐云丽最后动情地说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0415.wav", "duration": 4.545125, "text": "众星云集上海出席某商家的开业活动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0259.wav", "duration": 3.938125, "text": "究竟哪个特特性更加重要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0417.wav", "duration": 5.900875, "text": "陈凯琳田心妮等出席新剧开机机仪式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0417.wav", "duration": 3.0651875, "text": "更云集了罗中旭前任"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0298.wav", "duration": 6.9749375, "text": "此外还将与美方联手研制一款升级版大鸦无人机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0160.wav", "duration": 4.583, "text": "据阳光家缘网站公布数据统计"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0454.wav", "duration": 3.7109375, "text": "顾欣因涉嫌严重违纪违法"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0196.wav", "duration": 3.6899375, "text": "明确了发展目标和重点任务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0356.wav", "duration": 3.9489375, "text": "激发广大群众对排球的热情"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0482.wav", "duration": 7.776125, "text": "网传该航班一名男性旅客对空姐试图性侵导致飞机返航"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0489.wav", "duration": 5.837875, "text": "半个月前因误食有毒野生菌中毒"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0421.wav", "duration": 3.263875, "text": "多次想复合却无下文"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0155.wav", "duration": 8.082, "text": "在三线城市库存高攀销售停滞的情况下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0265.wav", "duration": 4.2630625, "text": "四月份或将采取更多的举动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0297.wav", "duration": 3.1440625, "text": "至于新的业务增长点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0242.wav", "duration": 4.1060625, "text": "政府总体上具有较强的偿债能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0372.wav", "duration": 3.969, "text": "受大学生的提议启发"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0412.wav", "duration": 3.6320625, "text": "一袭土豪金西装简直潮爆"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0475.wav", "duration": 4.49, "text": "因此我给自己规划了八个字的退休生活"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0277.wav", "duration": 4.298125, "text": "苹果一口气召开了两次新品发布会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0130.wav", "duration": 5.153, "text": "设立国家住房银行条件已经基本成熟"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0307.wav", "duration": 5.3290625, "text": "公司锂电池业务实现营业收入四点零一亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0492.wav", "duration": 7.4721875, "text": "二十二日在文昌市清澜港边防派出所执法检查时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0491.wav", "duration": 4.4389375, "text": "发生了一起村民举报村支书贪腐"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0253.wav", "duration": 3.2369375, "text": "或许到二零一六年的时候"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0351.wav", "duration": 3.3350625, "text": "作为队里年龄最大的球员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0222.wav", "duration": 3.9810625, "text": "城投债劵的发行期限和利率"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0288.wav", "duration": 3.501125, "text": "我们肯定不能再沾沾自喜于世界工厂"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0437.wav", "duration": 7.8989375, "text": "村书记乔俊然在家门前被一辆轿车撞倒后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0432.wav", "duration": 2.8188125, "text": "专偷摇摇车里的硬币"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0134.wav", "duration": 2.525, "text": "自二夏季开始"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0490.wav", "duration": 5.0068125, "text": "经十堰市中级人民法院确认"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0214.wav", "duration": 4.219, "text": "改善农业基础设备和装备条件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0142.wav", "duration": 5.07, "text": "兰州楼市出现明显的区域分化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0275.wav", "duration": 3.581875, "text": "在三星第二季度财报中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0478.wav", "duration": 3.708, "text": "残疾等级为六级残疾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0134.wav", "duration": 5.057, "text": "包括此次三部委发布公积金新政"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0202.wav", "duration": 8.7139375, "text": "利用价格杠杆促进考试单位向集约化发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0142.wav", "duration": 4.322, "text": "二套执行认贷不认房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0491.wav", "duration": 7.4189375, "text": "坚决不在四风问题上犯错犯错误跌跟头"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0264.wav", "duration": 4.3969375, "text": "据新华社电有病当然要吃药"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0477.wav", "duration": 4.999, "text": "餐厅返还了游客的二四零零元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0275.wav", "duration": 7.259, "text": "超过三百馀种不同类别股票均出现不正常股价波动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0454.wav", "duration": 4.068125, "text": "一则长达一分五七秒的视频在网络上热传"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0240.wav", "duration": 3.103, "text": "年均增速百分之七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0310.wav", "duration": 3.8651875, "text": "除了四轴或三轴机器人外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0401.wav", "duration": 5.786875, "text": "几乎帮助了平昌拿下二零一八年冬奥会的主办权"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0329.wav", "duration": 3.9660625, "text": "毛利率为十九点六百分之六"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0125.wav", "duration": 4.311, "text": "标杆房企必然调整市场战略"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0177.wav", "duration": 5.817, "text": "而申请公积金贷款方面还是需要走严格的流程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0154.wav", "duration": 3.661, "text": "是每个家庭成员体验的统一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0378.wav", "duration": 3.8720625, "text": "早在申办北京冬奥会的时候"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0354.wav", "duration": 6.3940625, "text": "更加多维度的助推跑步事业在中国的发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0278.wav", "duration": 4.9209375, "text": "就在会场的凳子和垃圾尚未收拾干净的时候"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0230.wav", "duration": 7.109, "text": "提高中央财政对粮食油料生产大县转移支付水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0495.wav", "duration": 3.707, "text": "侵吞征地种粮补偿款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0488.wav", "duration": 2.7170625, "text": "如果这个事情反过来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0362.wav", "duration": 11.077875, "text": "欧米茄计时管理委员会成员彼得许尔泽勒介绍说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0158.wav", "duration": 3.831, "text": "房地产相关领域问题频发"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0264.wav", "duration": 5.3670625, "text": "最近才开始向其他市场推广销售"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0214.wav", "duration": 3.157, "text": "发展多种形式的适度规模经营"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0349.wav", "duration": 3.7939375, "text": "日本和中国同积十五分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0297.wav", "duration": 5.0739375, "text": "苹果担忧这会蚕食其市场份额"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0181.wav", "duration": 4.2420625, "text": "而且提供各项行生的福利性服务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0157.wav", "duration": 5.294, "text": "上海易居研究所副院长杨红旭表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0491.wav", "duration": 3.6569375, "text": "今天九月八日下午"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0455.wav", "duration": 7.928, "text": "港媒东莞工地连续两次坍塌路面似被吸入地底"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0225.wav", "duration": 5.3880625, "text": "未来应该在制度上进一步完善"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0214.wav", "duration": 3.543, "text": "有效防范海洋环境灾害"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0451.wav", "duration": 4.1191875, "text": "为更多的老人安度往年的心愿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0316.wav", "duration": 3.01975, "text": "就是符合国家标准的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0217.wav", "duration": 6.875, "text": "大幅度提升粮食综合生产能力和现代化生产水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0415.wav", "duration": 2.874, "text": "而且是一个爱哭鬼"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0334.wav", "duration": 5.9560625, "text": "国内厂商在高端核心技术上普遍存有差距"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0474.wav", "duration": 5.6699375, "text": "通告呼吁广大群众积极检举揭发提供线索"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0397.wav", "duration": 5.0639375, "text": "中国女排昨天下午在冈山迎战古巴队"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0141.wav", "duration": 3.9850625, "text": "进一步加速了消费者的入市节奏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0359.wav", "duration": 4.8369375, "text": "速滑馆建成后将设置四百米滑道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0141.wav", "duration": 5.118, "text": "二套还清十首套比例降至五成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0265.wav", "duration": 5.73, "text": "苹果股价一度每分钟跌幅已破百分之三"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0489.wav", "duration": 5.5690625, "text": "继陕西富平妇产科医生张淑侠因贩卖婴儿被判刑之后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0382.wav", "duration": 2.9770625, "text": "作为日本的花滑王子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0286.wav", "duration": 4.3310625, "text": "销售也总有饱和的一天"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0224.wav", "duration": 3.8919375, "text": "落实节能减排各项任务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0163.wav", "duration": 5.0010625, "text": "伴随着各地住房公积金新政的落地实施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0272.wav", "duration": 5.6329375, "text": "未来的战争形态有可能就是计算机对抗计算机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0240.wav", "duration": 5.692, "text": "加大对农业科研和技术推广的支持力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0149.wav", "duration": 6.6839375, "text": "在丰台潘家村一宗商业用地低价成交后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0238.wav", "duration": 5.290875, "text": "加强畜禽遗传资源和农业野生植物资源保护"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0302.wav", "duration": 3.938, "text": "不过这导致了很多新问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0403.wav", "duration": 3.8410625, "text": "文本报记者刘艾林"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0416.wav", "duration": 3.7629375, "text": "常常在看电影和新闻时流泪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0338.wav", "duration": 3.204125, "text": "二者虽从事项目不同"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0322.wav", "duration": 6.6159375, "text": "并将从总部事业部及各区域公司共裁员二千人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0238.wav", "duration": 4.291, "text": "坚持政府支持农民主体社会参与"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0208.wav", "duration": 6.729, "text": "继续发挥该区域粮食安全基础保障作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0151.wav", "duration": 5.961, "text": "行业的玩家门槛越来越高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0193.wav", "duration": 4.7370625, "text": "由于影响成本的因素过多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0306.wav", "duration": 4.302, "text": "除了投入大这一因素之外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0139.wav", "duration": 5.307, "text": "德佑链家市场研究部总监陆骑麟表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0325.wav", "duration": 6.0490625, "text": "净利润为二十七点七五亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0175.wav", "duration": 5.0820625, "text": "未取得国有土地使用证的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0465.wav", "duration": 4.584, "text": "该地盘曾发生地陷事故"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0277.wav", "duration": 6.701875, "text": "根据美国商务部去年十二月份终裁确定的幅度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0172.wav", "duration": 4.271, "text": "郑州长春和哈尔滨三地办事处"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0344.wav", "duration": 4.452875, "text": "运动员的健康是他们关注的头等大事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0414.wav", "duration": 4.9089375, "text": "仍在个人社群网站频繁更新动态"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0423.wav", "duration": 6.4340625, "text": "而有鬼妹仔性格的婷婷不时以性感打扮亮相"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0386.wav", "duration": 3.458, "text": "至于其他球队的比赛结果"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0205.wav", "duration": 4.7620625, "text": "为确保免费政策实施后车辆有序通行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0440.wav", "duration": 4.0749375, "text": "该女子已经行骗多地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0385.wav", "duration": 2.722875, "text": "发挥也很从容和淡定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0159.wav", "duration": 3.5190625, "text": "中介机构统计数据显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0287.wav", "duration": 3.4510625, "text": "但是至少会给股价刺激一下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0303.wav", "duration": 4.495875, "text": "北京商报讯记者王晔君日前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0234.wav", "duration": 3.8100625, "text": "稳定发展生猪和蛋禽"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0303.wav", "duration": 5.4200625, "text": "在认证授权系统中对服务器设置权限管理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0346.wav", "duration": 4.901875, "text": "在奥运期间水质都可以保证运动员的健康"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0176.wav", "duration": 7.9399375, "text": "或开发项目资本金未达到项目投资总额百分之五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0366.wav", "duration": 3.4189375, "text": "凶悍直接大开大合"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0360.wav", "duration": 4.702875, "text": "二十岁的跑者平均每英里耗时八分十八秒"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0136.wav", "duration": 4.281, "text": "蓝色光标以几亿人民币收购今久"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0181.wav", "duration": 3.82, "text": "好像不谈你就不属于这个时代的人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0372.wav", "duration": 5.016125, "text": "这在我国体育发展史上具有划时代的意义"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0267.wav", "duration": 4.28, "text": "全球鹰并不能独占鳌头"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0326.wav", "duration": 4.0019375, "text": "经验积累不足也是一个大问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0224.wav", "duration": 3.8360625, "text": "关于印发十二五规划的通知"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0258.wav", "duration": 3.526, "text": "并非仅仅针对中国公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0380.wav", "duration": 6.3010625, "text": "曾春蕾表示阿根廷是一支拥有良好防守能力的球队"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0341.wav", "duration": 6.375, "text": "他们有理由相信九零后同样可以做好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0444.wav", "duration": 8.76, "text": "延庆县永宁镇偏坡峪村原党支部书记钱某"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0296.wav", "duration": 5.248, "text": "即一些财大气粗的科技公司自己不创新"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0171.wav", "duration": 4.183, "text": "中原地产首席分析师张大伟认为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0473.wav", "duration": 2.6899375, "text": "立即引起众多网友关注"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0241.wav", "duration": 3.3239375, "text": "回收再利用农膜和农药包装物"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0163.wav", "duration": 4.243, "text": "国家外汇局出台过规定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0156.wav", "duration": 3.2569375, "text": "公积金政策的调整从未这么频繁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0247.wav", "duration": 3.969, "text": "一些考试单位考务成本偏高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0234.wav", "duration": 6.735, "text": "必须符合一些基本的条件企业必须连续三年盈利"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0142.wav", "duration": 3.473, "text": "市场基数已不可同日而语"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0237.wav", "duration": 3.28, "text": "正是有了这样一些严格的规定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0123.wav", "duration": 3.5, "text": "则是希望防止外资流出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0229.wav", "duration": 3.771, "text": "二零一一年一月至七月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0231.wav", "duration": 3.9400625, "text": "坚持和完善农村基本经营制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0475.wav", "duration": 4.833, "text": "仅半年就敲诈勒索了五七二万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0462.wav", "duration": 8.3679375, "text": "该事件系游客点餐时嫌大排档太脏而引起口角纷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0444.wav", "duration": 6.3449375, "text": "肇事方为镇政府安全保卫人员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0278.wav", "duration": 5.8940625, "text": "其中手机的销售额下降了七点百分之三"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0484.wav", "duration": 6.103, "text": "港媒称假沉香充斥内地多以化学香油制成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0324.wav", "duration": 5.219, "text": "中国家电企业在世界产业链地位弱小"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0337.wav", "duration": 3.465125, "text": "将及时采取主动或被动措施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0361.wav", "duration": 3.9721875, "text": "拳法和摔跤能力很出色"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0168.wav", "duration": 6.129, "text": "五个城市新建商品住宅存销比为七个月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0494.wav", "duration": 6.8920625, "text": "游客打车被找四张同号假钞官方疑遇克隆车"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0138.wav", "duration": 4.49, "text": "依托蓝色光标强大的技术和资源优势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0250.wav", "duration": 5.0599375, "text": "改革了职业资格考试收费管理方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0194.wav", "duration": 3.1369375, "text": "在加强宏观引导方面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0430.wav", "duration": 3.0070625, "text": "称潘玮柏生日快乐"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0274.wav", "duration": 7.2199375, "text": "苹果公司现在已将约三百万的原始订单削减了一半"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0229.wav", "duration": 3.5119375, "text": "基本满足国内棉花消费需求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0442.wav", "duration": 2.959, "text": "无不发出这样的惊叹"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0463.wav", "duration": 5.793, "text": "三零馀位食客吃了四五个窝窝头"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0464.wav", "duration": 4.9601875, "text": "法官送达起诉书副本等应诉材料遇阻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0470.wav", "duration": 3.4089375, "text": "经过连续三天的抢救"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0306.wav", "duration": 2.6230625, "text": "以小天才电话手表为例"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0355.wav", "duration": 4.543, "text": "丰富北京市业馀排球群体活动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0198.wav", "duration": 5.693, "text": "新批复了七只创投基金的设立方案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0188.wav", "duration": 4.886, "text": "将发挥部际会议联席制度作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0135.wav", "duration": 5.161, "text": "此项政策对中国楼市影响有限"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0269.wav", "duration": 5.609, "text": "苹果正在全力以赴出售尽可能多的智能手机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0165.wav", "duration": 2.8500625, "text": "同比减小百分之七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0201.wav", "duration": 3.283, "text": "是一个比较复杂的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0229.wav", "duration": 9.219, "text": "城市政府要将公共交通发展资金纳入公共财政体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0209.wav", "duration": 9.1180625, "text": "积极指导支持和鼓励金融机构根据中小企业的特点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0334.wav", "duration": 4.8769375, "text": "对本公司的上半年业绩带来了负面影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0484.wav", "duration": 8.608875, "text": "编者按为深入贯彻落实中央八项规定精神"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0320.wav", "duration": 3.078, "text": "最后找到芬兰的高级技术团队"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0315.wav", "duration": 4.875, "text": "浪潮的发展也有可圈可可点之处"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0156.wav", "duration": 4.432, "text": "据中国指数研究院最新数据显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0472.wav", "duration": 5.521, "text": "警方回应都有过错经警方调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0483.wav", "duration": 8.568125, "text": "原因是有人愿为该村垫资四八万元费用修桥"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0200.wav", "duration": 6.653, "text": "发改委将尽快建立地方政府债务管理体系到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0433.wav", "duration": 2.7680625, "text": "送到医院时已没有呼吸"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0160.wav", "duration": 5.891, "text": "在上海易居房地产研究院研究员严跃进看来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0447.wav", "duration": 3.650875, "text": "海峡都市报大白天"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0392.wav", "duration": 4.555875, "text": "对于北京申办冬奥会的最终结果"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0281.wav", "duration": 5.13, "text": "中国经营网注有国外媒体报道称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0458.wav", "duration": 3.047875, "text": "骑电动车男子当场死亡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0189.wav", "duration": 4.0460625, "text": "实行农产品产地安全分级管理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0493.wav", "duration": 4.104, "text": "京华时报讯记者王晓飞在农村"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0167.wav", "duration": 3.7440625, "text": "土地成交价款三千亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0452.wav", "duration": 4.0349375, "text": "再上到楼顶一座高约四零米的铁塔上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0494.wav", "duration": 4.3149375, "text": "党和人民不会管到我身上来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0401.wav", "duration": 4.8669375, "text": "北京和张家口要占据着相当明显的优势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0461.wav", "duration": 7.2419375, "text": "温州一四岁少年小温迷失莒溪大峡谷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0412.wav", "duration": 4.193125, "text": "好友林心如也心疼喊话我会陪她"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0355.wav", "duration": 3.0961875, "text": "比赛开始后仅仅十馀秒"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0374.wav", "duration": 5.6159375, "text": "日本与美国同积十十分暂列二三两位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0494.wav", "duration": 6.5849375, "text": "中国的动画工作室越来越看重海外市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0242.wav", "duration": 3.587, "text": "责任编辑廖一宁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0234.wav", "duration": 4.9359375, "text": "改扩建检验检测实验室"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0420.wav", "duration": 2.443125, "text": "粉丝们一度失控"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0294.wav", "duration": 3.3890625, "text": "用户发现系统更新之后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0323.wav", "duration": 4.318125, "text": "电话手表对儿童健康安全是否有危险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0219.wav", "duration": 4.365, "text": "以邓小平理论和三个代表重要思想为指导"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0350.wav", "duration": 4.474125, "text": "年龄大跑者的步幅明显短于年轻人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0183.wav", "duration": 2.8940625, "text": "将于明年投标"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0456.wav", "duration": 8.9030625, "text": "游客景区被忽悠八零零克石斛收费一二六零零元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0342.wav", "duration": 4.4140625, "text": "使上年纪的跑者也能保持较快的速度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0480.wav", "duration": 7.365, "text": "村主任发账号给村文书想要继续当拿四八万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0141.wav", "duration": 5.3559375, "text": "主要还是依靠中国国内企业投资"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0438.wav", "duration": 3.8818125, "text": "破获电信诈骗案二三三起"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0365.wav", "duration": 5.277125, "text": "与这项运动结下深厚感情"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0422.wav", "duration": 3.312, "text": "自己也很期待九月中旬和男友见面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0398.wav", "duration": 4.9299375, "text": "能在北京获得一枚奖牌我很骄傲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0462.wav", "duration": 4.378875, "text": "两车损失高达数十万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0139.wav", "duration": 4.344, "text": "成立资金信托购买自家房产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0348.wav", "duration": 3.489, "text": "在球场上的思路比较清楚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0320.wav", "duration": 5.5659375, "text": "上述成飞集成人士告诉记者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0469.wav", "duration": 4.668, "text": "起因也完全不是河南游客自己说的那样"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0463.wav", "duration": 3.9020625, "text": "北京南三环附近一家茶楼里"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0332.wav", "duration": 4.1320625, "text": "被恶意软件或者黑客攻击"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0276.wav", "duration": 3.1069375, "text": "车库没有发挥过太大作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0491.wav", "duration": 4.457, "text": "向一家金融公司贷款一千多万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0153.wav", "duration": 5.6240625, "text": "这决不是八零九零的消费习惯这么单纯的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0434.wav", "duration": 3.534875, "text": "八月一七日上午一一时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0209.wav", "duration": 4.1369375, "text": "城市化进程远未结束"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0333.wav", "duration": 3.4128125, "text": "汽车零部件总体规模不大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0453.wav", "duration": 5.9040625, "text": "说最近他们村里经常有蛇出没"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0138.wav", "duration": 3.1789375, "text": "住建部等三部委联合发文"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0431.wav", "duration": 7.8881875, "text": "记者调查湖南张家界国家森林公园低价团问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0220.wav", "duration": 4.625, "text": "积极推进南方稻区单改双"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0395.wav", "duration": 3.771, "text": "来自体育圈的并不多见"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0278.wav", "duration": 4.6440625, "text": "美国玩家对游戏难度创造性要求较高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0249.wav", "duration": 5.189, "text": "投资者采取措施防范风险是成熟的表现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0258.wav", "duration": 8.1320625, "text": "作为科技股领头羊的苹果股价当天下挫百分之二"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0221.wav", "duration": 5.787, "text": "是如何更好地防范城投债券可能出现的风险的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0361.wav", "duration": 4.8459375, "text": "从二零零七年在伦敦创办至今"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0455.wav", "duration": 5.52975, "text": "记者李焜染摄十三日早晨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0274.wav", "duration": 4.354, "text": "美国市场刚好介于两者之间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0472.wav", "duration": 4.8689375, "text": "其中一辆奔驰轿车被撞出近一零米远"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0378.wav", "duration": 5.1850625, "text": "看他在冰场上搔首弄姿地表现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0181.wav", "duration": 7.7790625, "text": "备受刚需购房者关注的公积金政策也频繁迎来调整"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0165.wav", "duration": 5.146, "text": "国内许多媒体或企业都在为其背书"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0408.wav", "duration": 5.5441875, "text": "对方是二十五岁的人妻名模泰舒培"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0448.wav", "duration": 5.558125, "text": "三零馀位食客吃了四五个窝窝头"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0171.wav", "duration": 3.6839375, "text": "二到五个城市的总体水平看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0227.wav", "duration": 3.0339375, "text": "继续实行最严格的耕地保护制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0430.wav", "duration": 2.5339375, "text": "对方给了她很大的帮助"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0203.wav", "duration": 4.191, "text": "与农户建立紧密型利益联联结关系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0456.wav", "duration": 7.6848125, "text": "历城区港沟镇神武村飘来多股白色不明气体"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0458.wav", "duration": 4.8659375, "text": "地面在几秒内迅速塌陷成一个大坑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0229.wav", "duration": 4.999, "text": "国务院多举措力挺农产品流通"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0141.wav", "duration": 4.449, "text": "为改善中低收入家庭住房条件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0318.wav", "duration": 6.1219375, "text": "也成为老板电器和它的宿敌们能否领跑下半程的关键"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0378.wav", "duration": 6.7839375, "text": "附二零一五田径世锦赛德国队名单"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0209.wav", "duration": 9.163, "text": "需要向国务院国资委报送申请核准非主业投资的请示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0155.wav", "duration": 6.418, "text": "公积金贷款及组合贷咨询量明显上涨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0381.wav", "duration": 8.267125, "text": "但庞清和佟健并不愿意随遇而安地安排自己的后半生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0188.wav", "duration": 5.411, "text": "并在农业走出去方面发挥重要作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0480.wav", "duration": 7.421875, "text": "游客入住药店被收二零元马桶使用费消协可举报"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0194.wav", "duration": 4.3559375, "text": "由各省根据实际成本制定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0386.wav", "duration": 4.5, "text": "关于中国队过于依赖朱婷的言论不少"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0185.wav", "duration": 6.1950625, "text": "预计后市一二线城市拿地竞争将更加剧烈"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0372.wav", "duration": 4.771, "text": "直到二零一四年四月才解禁复出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0193.wav", "duration": 8.416, "text": "需要对发行人资产重组等重大事宜加强监管"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0452.wav", "duration": 8.3659375, "text": "该商店老板郑晓生红衣者涉嫌暗地里兑换外汇"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0422.wav", "duration": 4.135, "text": "好多传闻我都不会特别问他"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0380.wav", "duration": 3.5188125, "text": "令对手无奈放弃比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0410.wav", "duration": 6.6840625, "text": "亦未联络到爸爸了解他不是一个常打架的人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0276.wav", "duration": 3.3559375, "text": "科幻星系康斯坦丁文"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0465.wav", "duration": 5.761, "text": "游客爬到峨眉山悬崖边石头上拍照"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0357.wav", "duration": 5.707, "text": "常年的专业训练给身体带来了各种伤病"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0389.wav", "duration": 2.9411875, "text": "最大的已经年过半百"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0320.wav", "duration": 7.244125, "text": "到二零一八年美的空调营收到达一千亿元规划时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0202.wav", "duration": 4.8779375, "text": "农产品加工业产值与农业总产值"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0383.wav", "duration": 4.8818125, "text": "双方进行了最后一次也是最成功的一次洽谈"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0211.wav", "duration": 7.353, "text": "我们应该建立风险可控的规范化的地方政府融资机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0461.wav", "duration": 2.755125, "text": "一五年后落网"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0317.wav", "duration": 5.853, "text": "令车企烦恼的不仅是车主信息被泄露这一困扰"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0342.wav", "duration": 3.0900625, "text": "不断地为中国女排得分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0215.wav", "duration": 8.093, "text": "发挥好民间借贷在服务中小企业发展中的积极作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0282.wav", "duration": 7.16, "text": "四倍于标指同期的三十百分之二"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0425.wav", "duration": 5.01, "text": "还在网上分享身穿比基尼泳装照"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0486.wav", "duration": 9.839125, "text": "村主任向开发商索贿五二零万村组干部几乎全参与分赃"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0366.wav", "duration": 4.792, "text": "与感冒病毒感染损伤心肌有关"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0183.wav", "duration": 4.2849375, "text": "相关公司股票走势鄂尔多斯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0138.wav", "duration": 3.994, "text": "该信托出资购入宋芳的房产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0381.wav", "duration": 3.8249375, "text": "这一点也值得中国女排学习"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0194.wav", "duration": 7.9489375, "text": "牢固树立生产生态有机结合生态优先的基本方针"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0215.wav", "duration": 3.8459375, "text": "保障房建设和棚户区改造"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0266.wav", "duration": 2.7199375, "text": "从支付的大环境上看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0297.wav", "duration": 4.584125, "text": "印方工厂将继续完成剩馀订单"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0123.wav", "duration": 3.928, "text": "消费者行为的变化及技术的进步"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0419.wav", "duration": 5.27, "text": "搜狐娱乐讯据香港媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0402.wav", "duration": 4.563, "text": "这样的氛围让朱婷感觉像是主场一样"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0438.wav", "duration": 3.886, "text": "死亡人数上升至一四人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0371.wav", "duration": 5.2580625, "text": "滑雪期从十一月下旬到次年三月中旬"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0251.wav", "duration": 3.886, "text": "明确了参股基金管理公司股东"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0154.wav", "duration": 4.1600625, "text": "加之降息降准等政策组合拳"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0191.wav", "duration": 4.293, "text": "不仅是城投债券发行利率"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0429.wav", "duration": 3.334, "text": "她透露有些不懂的会问男友郑嘉颖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0442.wav", "duration": 8.646, "text": "游客踩敦煌千年古城遗址拍照反问踩了会掉吗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0378.wav", "duration": 3.411875, "text": "据韩国体育首尔的最新消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0139.wav", "duration": 4.84, "text": "这也是该指数连续三个月出现上涨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0389.wav", "duration": 8.46925, "text": "标志性的扫腿重击力道沉猛的后手重拳纷纷呼啸而出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0480.wav", "duration": 8.9809375, "text": "浙江在线零九月二一日讯浙江日报记者季建荣近日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0246.wav", "duration": 3.079, "text": "继续实施农村沼气工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0251.wav", "duration": 10.6960625, "text": "通过投资入股产权回购回租建公建配套等方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0478.wav", "duration": 6.4350625, "text": "游客在百年老店买到发霉盐水鸭商家主动退款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0383.wav", "duration": 3.5839375, "text": "每场较量对球队都很关键"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0472.wav", "duration": 5.496125, "text": "并最新发微博表示当地警方已介入调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0333.wav", "duration": 3.2268125, "text": "对于国内家电企业而言"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0465.wav", "duration": 5.1289375, "text": "尽管检察管最后以事事实不清"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0327.wav", "duration": 4.0399375, "text": "我们开发什么的产品研发策略"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0147.wav", "duration": 3.506, "text": "支持新产业新业态"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0492.wav", "duration": 9.1049375, "text": "村官涉不雅视频被免职饭桌上摸女子胸部臀部等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0136.wav", "duration": 7.5, "text": "使用公积金制度的作用和效果没有得到有效的发挥"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0299.wav", "duration": 3.4249375, "text": "也过分依赖于大中华地区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0287.wav", "duration": 4.2170625, "text": "但是需记住对风向保持敏感"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0459.wav", "duration": 5.468, "text": "游客骑在龟趺身上报料人供图"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0462.wav", "duration": 9.8630625, "text": "东莞常平住宅大厦联邦花园旁边发生大面积地陷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0217.wav", "duration": 4.337, "text": "看看山东之前是怎么做的记者了解到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0368.wav", "duration": 3.6589375, "text": "颇似从地狱中走出的修罗帝王"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0449.wav", "duration": 3.795875, "text": "两车驾驶员一度下车大打出手"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0239.wav", "duration": 5.142, "text": "远低于发生债务危机的欧美国家"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0449.wav", "duration": 6.526125, "text": "遗址附近有多处警示牌写明严禁跨入保护区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0428.wav", "duration": 3.7739375, "text": "也没有发生什么冲突"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0388.wav", "duration": 7.5590625, "text": "美国队官员不排除他们的队员因食物或饮水而生病"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0236.wav", "duration": 2.9979375, "text": "增加机构投资者数量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0430.wav", "duration": 8.8840625, "text": "并兼任李嘉欣经理人及处理旗下其他艺人的合约事宜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0358.wav", "duration": 4.2619375, "text": "服务时间约为五十三万小时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0287.wav", "duration": 4.0600625, "text": "这次庭审将持续九天时间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0474.wav", "duration": 6.4099375, "text": "记者从首都机场公安分局航站区派出所获悉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0122.wav", "duration": 5.021, "text": "北京通州新城投资公司网站显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0329.wav", "duration": 4.0, "text": "高工机器人董事长张小飞表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0434.wav", "duration": 5.488, "text": "而绝代歌姬李玉刚揭面引起了广泛热议"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0203.wav", "duration": 4.813, "text": "温家宝主持召开国务院常务会议"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0192.wav", "duration": 3.768, "text": "推进农业产业化经营跨越式发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0137.wav", "duration": 5.071, "text": "宋芳对北京银行私人银行的财富顾问说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0310.wav", "duration": 9.422, "text": "将有助于两大部品业务的研发资源销售渠道共享"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0489.wav", "duration": 10.073, "text": "温州高速车祸九二包大米遭哄抢续带头者被拘"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0365.wav", "duration": 6.053, "text": "当打到一三比一四中国队落后一分时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0326.wav", "duration": 6.5550625, "text": "而威灵电器二零一四年的营业额约九十二点七三亿港元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0387.wav", "duration": 3.053, "text": "希望可以见到她本人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0279.wav", "duration": 3.691875, "text": "都是该公司的强心剂"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0247.wav", "duration": 6.7320625, "text": "继续加强三江源等地区草原生态建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0445.wav", "duration": 3.6579375, "text": "并提出多种思考和提示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0386.wav", "duration": 4.1950625, "text": "一些参赛选手赛后感到胃部不适"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0358.wav", "duration": 4.214125, "text": "计划明年就将开始动工"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0288.wav", "duration": 5.021, "text": "由士兵直接用手投掷起飞"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0229.wav", "duration": 4.828, "text": "强化出口水产品生产基地功能"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0381.wav", "duration": 7.354, "text": "获得二十三分荣誉全场得分王"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0280.wav", "duration": 3.6800625, "text": "苹果设备的用户应当注意"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0156.wav", "duration": 4.5, "text": "通过国家住房银行提供低息贷款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0411.wav", "duration": 4.8989375, "text": "还拉赞姑还是那么漂亮"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0469.wav", "duration": 3.0659375, "text": "更没有扰乱社会秩序"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0349.wav", "duration": 4.168125, "text": "时隔一二年重夺世界杯冠军的中国女排"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0420.wav", "duration": 2.9701875, "text": "因此决定出外闯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0475.wav", "duration": 3.266875, "text": "导致唐山一渔船沉没"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0298.wav", "duration": 5.077875, "text": "马斯克乃商界新一代万人迷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0273.wav", "duration": 4.318125, "text": "当年泡沫破裂前也是这样的情景"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0297.wav", "duration": 4.451875, "text": "因为难以忍受股价长期被低估"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0334.wav", "duration": 4.875, "text": "往往将数据库服务器都放在公网上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0148.wav", "duration": 3.0559375, "text": "这相当于左兜掏右兜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0246.wav", "duration": 8.297, "text": "合理确定大城市郊区菜篮子产品生产用地保有数量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0495.wav", "duration": 8.6120625, "text": "港媒称内地人不穷了为何仍爱抢学者抢习惯了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0437.wav", "duration": 6.235875, "text": "澎湃新闻八月一零日从浙江温州平阳警方获悉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0182.wav", "duration": 5.313, "text": "明年平均售价将维持不变"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0147.wav", "duration": 5.2800625, "text": "公积金政策放宽对楼市成交的短期刺激作用将难以持续"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0490.wav", "duration": 5.4550625, "text": "中产阶级在一个国家的现代化中起着稳定作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0162.wav", "duration": 4.7219375, "text": "再次降低公积金贷款首付比例"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0292.wav", "duration": 8.0460625, "text": "改由设在印度本加卢鲁的一家美印合资公司生产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0232.wav", "duration": 5.323, "text": "防止出现系统性的偿债风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0184.wav", "duration": 4.5129375, "text": "伟嘉安捷对中新网房产频道表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0395.wav", "duration": 4.1238125, "text": "曾春蕾在刘晓彤一传失误后直接说我来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0261.wav", "duration": 4.66, "text": "因此需求会暂时被抑制住"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0481.wav", "duration": 5.847875, "text": "新洲一名高中新生因为没去教室上晚自习"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0153.wav", "duration": 5.823, "text": "审计已向有关部门移送重大违法违纪问题三十起"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0432.wav", "duration": 5.3730625, "text": "追求使命需要有强大的定力昨日上午"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0133.wav", "duration": 3.065, "text": "宋芳最近却有点烦恼"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0211.wav", "duration": 4.151, "text": "适宜农户沼气普及率百分之五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0430.wav", "duration": 2.3090625, "text": "中午二十零下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0321.wav", "duration": 4.307875, "text": "很多孩子都以拥有一款电话手表为豪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0200.wav", "duration": 3.0, "text": "在加快体制改革方面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0392.wav", "duration": 2.9020625, "text": "责任编辑冯浩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0471.wav", "duration": 5.7260625, "text": "迅速引起了网友以及当地监管部门的关注"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0227.wav", "duration": 5.472875, "text": "但却提醒了我们要更加关注城投债券可能出现的风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0359.wav", "duration": 3.5710625, "text": "突出弘扬北京排球文化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0346.wav", "duration": 5.332, "text": "张晓雅最大的优点是有想法"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0151.wav", "duration": 4.205, "text": "与前年差不多这种状态"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0235.wav", "duration": 5.2950625, "text": "对化学品项目布局进行梳理评估"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0422.wav", "duration": 3.0129375, "text": "自己也有带剧本去看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0192.wav", "duration": 6.8299375, "text": "我委也注意到在企业债劵存续期内"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0382.wav", "duration": 5.5859375, "text": "根据国际乒联刚刚公布的最新一期世界排名"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0166.wav", "duration": 6.581, "text": "备受刚需购房者关注的公积金政策也频繁迎来调整"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0407.wav", "duration": 7.6799375, "text": "在英格兰多塞特群的波维顿坦克博物馆"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0208.wav", "duration": 10.051, "text": "中国证卷报随着欧美等国主权债务危机陆续爆发"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0320.wav", "duration": 3.1899375, "text": "同时公布了重组计划"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0336.wav", "duration": 4.9140625, "text": "是电话手表今年大受欢迎的主要原因"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0460.wav", "duration": 4.839125, "text": "荞麦窝窝头一零月二零日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0354.wav", "duration": 5.036125, "text": "像这种无形的向心力是在队伍中一直存在的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0438.wav", "duration": 6.3269375, "text": "甚至还出现了一些造成游人身伤害的悲剧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0416.wav", "duration": 6.005875, "text": "许茹芸与韩国丈夫崔栽诚迎来结婚一周年纪念日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0468.wav", "duration": 6.322, "text": "在新加坡花费三万元购买了纯天然的祖母绿吊坠"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0125.wav", "duration": 3.352, "text": "刘家义在报告中指出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0214.wav", "duration": 5.8310625, "text": "大力开展高产创建和科技指导服务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0270.wav", "duration": 6.9079375, "text": "这家社交网络巨头对待员工也是相当慷慨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0439.wav", "duration": 3.1799375, "text": "旅游法早已明令禁止"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0467.wav", "duration": 6.249, "text": "每一次塌陷的区域前已有一个大坑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0264.wav", "duration": 5.1529375, "text": "我们所做的就是发现漏洞后立即修复"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0211.wav", "duration": 6.3879375, "text": "项目可行性研究报告尽职调查等相关文件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0239.wav", "duration": 5.0400625, "text": "此举可能将进一步推动金融混业经营"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0401.wav", "duration": 3.677, "text": "一定要尽全力打一场漂亮的比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0301.wav", "duration": 4.7331875, "text": "库克团队应当是花费了大量精力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0494.wav", "duration": 4.6208125, "text": "几乎家家户户都会在院子里养狗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0172.wav", "duration": 4.393, "text": "我预计市场成交量会有所增加"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0329.wav", "duration": 3.1899375, "text": "共同拓展国内云计算市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0441.wav", "duration": 5.657, "text": "温州一酒店窝头三八元一个三盘消费一七一零元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0447.wav", "duration": 4.802, "text": "李磊的奶奶继承四三七万馀元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0280.wav", "duration": 3.144875, "text": "但松一口气的想法是没有出路的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0358.wav", "duration": 4.345, "text": "在社会主义核心价值观的指引下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0340.wav", "duration": 3.123875, "text": "筹备时间和比赛周期都将延长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0335.wav", "duration": 3.6640625, "text": "美的空调工厂的注塑车间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0300.wav", "duration": 5.9150625, "text": "从而把运输机转化为更为复杂的远程侦察机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0126.wav", "duration": 4.014, "text": "房地产投资增速仍下降"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0440.wav", "duration": 8.5759375, "text": "港商在台遭绑三八天获救后痛哭以为必死"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0242.wav", "duration": 3.283, "text": "合力推进现代农业发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0196.wav", "duration": 2.775, "text": "这主要有四方面原因"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0448.wav", "duration": 3.8979375, "text": "此后他没有隐姓埋名逃往外地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0373.wav", "duration": 5.5951875, "text": "该公众号已经举办了两期公益活动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0248.wav", "duration": 3.5909375, "text": "规范和完善农产品期货市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0404.wav", "duration": 3.1238125, "text": "福斯只允许先拍一部"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0129.wav", "duration": 4.103, "text": "其他目的的占比为百分之五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0424.wav", "duration": 6.6269375, "text": "她日前被媒体目击与陈可辛在大街上逛街血拼"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0168.wav", "duration": 2.66, "text": "拥有许多优质客户"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0385.wav", "duration": 3.5869375, "text": "以及拥有陈露的女单项目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0386.wav", "duration": 3.711875, "text": "曾春蕾坦言打关键分的状态很忘我"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0336.wav", "duration": 8.130125, "text": "网络安全漏洞挡道车联网阴霾笼罩搜狐科技"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0407.wav", "duration": 7.077875, "text": "这是后年春季档的一个黄金上映期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0354.wav", "duration": 3.335125, "text": "大家今天打得非常出色"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0354.wav", "duration": 6.2851875, "text": "其搏击技能之全面精湛格斗天赋之卓越令人惊叹"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0145.wav", "duration": 6.221, "text": "五环内商品住宅的成交在市场中并非主流"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0369.wav", "duration": 3.8000625, "text": "女排众将手举国旗敬夺冠"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0446.wav", "duration": 3.478, "text": "剩下了一二零零克食物"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0139.wav", "duration": 5.747, "text": "再次申请公积金贷款购房的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0259.wav", "duration": 3.7430625, "text": "十二月二日路透社报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0377.wav", "duration": 4.5959375, "text": "但今天能拿冠军真的是发自肺腑的想哭"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0228.wav", "duration": 4.3000625, "text": "充分征求专家和社会公众意见"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0266.wav", "duration": 4.719, "text": "美国政府部门当地时间周四警示称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0128.wav", "duration": 5.803, "text": "均规定贷款额度不再依据个人信用等级上浮"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0471.wav", "duration": 2.954125, "text": "有待警方进一步调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0487.wav", "duration": 6.6691875, "text": "温州医生涉贩卖儿童谎称活婴是死婴骗父母放弃"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0226.wav", "duration": 3.4669375, "text": "新农村十二五发展规划"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0208.wav", "duration": 4.5459375, "text": "支持农民专业合作社参加农产品展示展销活动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0226.wav", "duration": 3.6800625, "text": "延长各类设施使用年限"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0305.wav", "duration": 4.5500625, "text": "赵伟国并未透露更多内容"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0446.wav", "duration": 3.600125, "text": "已依法对双方进行处罚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0316.wav", "duration": 4.6858125, "text": "消费者在听销售人员介绍小天才电话手表"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0454.wav", "duration": 6.0449375, "text": "浙江温州一公司安装虚拟交易系统"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0330.wav", "duration": 4.708, "text": "净利润为九点七亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0157.wav", "duration": 3.9020625, "text": "今年商品房销售一度低迷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0463.wav", "duration": 6.5969375, "text": "游戏平台称投千元可收百万数十民上当"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0357.wav", "duration": 6.6650625, "text": "为将其打造成具有影响力的群众性品牌赛事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0371.wav", "duration": 3.0, "text": "每天忙碌十三个小时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0353.wav", "duration": 4.2631875, "text": "我们不需要教练要求就会团结在一起"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0198.wav", "duration": 2.965125, "text": "还本付息也是正常的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0142.wav", "duration": 5.941, "text": "意见提出对制造业迈向中高端的企业用地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0475.wav", "duration": 5.843, "text": "复议维持了区政府的认定结论"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0272.wav", "duration": 7.5, "text": "从台湾地区进口的此类产品存在切销行为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0470.wav", "duration": 6.5439375, "text": "村中数百亩农田干旱村民质疑水库断了灌溉水"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0273.wav", "duration": 4.339, "text": "英特尔是世界头号芯片制造商"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0377.wav", "duration": 6.173125, "text": "刚刚在日本女排世界杯上夺冠的中国女排载誉回京"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0248.wav", "duration": 4.7259375, "text": "各城市要根据消费需求和季节变化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0466.wav", "duration": 4.818125, "text": "送医后被查出颈部脊髓损伤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0428.wav", "duration": 2.864, "text": "十九点二十六分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0464.wav", "duration": 5.4260625, "text": "信息时报讯记者周伟龙天上不会掉馅饼"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0473.wav", "duration": 7.614, "text": "某景点大门处多名游客与身着穿服的工作人员大打出手"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0229.wav", "duration": 6.9639375, "text": "但却提醒了我们要更加关注城投债券可能出现的风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0335.wav", "duration": 4.2879375, "text": "成飞集成百二十一九十"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0375.wav", "duration": 5.756125, "text": "将依托现有山体地形修建临时场地设施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0457.wav", "duration": 3.6279375, "text": "记者回访海珠湖公园发现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0240.wav", "duration": 3.302, "text": "进一步减少流通环节"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0153.wav", "duration": 9.5, "text": "今兰州市商品房销售面积同比上涨超过百分之三十"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0442.wav", "duration": 6.911875, "text": "从金堂县城驱车一个半小时至土桥镇的大禹村"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0256.wav", "duration": 3.1839375, "text": "有人给出了解决方法"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0179.wav", "duration": 3.8559375, "text": "但目前还未出现大面积提取行为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0260.wav", "duration": 3.871, "text": "由于许多用户都持币待购"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0264.wav", "duration": 4.993875, "text": "苹果将继续向股东返还现金"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0425.wav", "duration": 2.4130625, "text": "松口仍有联络"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0308.wav", "duration": 5.1269375, "text": "儿童电话手表除了通话定位等功能外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0295.wav", "duration": 4.412, "text": "苹果股价已下挫了百分之七十九"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0453.wav", "duration": 6.765125, "text": "筹款四八零零万经六年建成养老院"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0367.wav", "duration": 8.243125, "text": "上届莫斯科世锦赛上拿到了金牌的四位选手悉数出战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0475.wav", "duration": 3.501, "text": "温州网讯我不想死后给后人说闲话"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0422.wav", "duration": 3.207, "text": "她的团队对她更加关心了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0283.wav", "duration": 4.4860625, "text": "科技经济社会金融全都是苹果的消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0209.wav", "duration": 4.2049375, "text": "这是我国所处的发展阶段决定的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0199.wav", "duration": 4.0, "text": "农产品产销合作社简介"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0338.wav", "duration": 6.0549375, "text": "他们在训练和比赛过程之中的速度也会逐渐慢下来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0286.wav", "duration": 5.6579375, "text": "苹果股价闪崩只是正常股票套利的表现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0486.wav", "duration": 9.5959375, "text": "港媒中国科学家研究蜈蚣毒液发现新止痛药"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0347.wav", "duration": 4.04, "text": "当在新闻发布会上被问及伤情的时候"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0379.wav", "duration": 3.1269375, "text": "法国冰协提出最后要求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0377.wav", "duration": 2.7460625, "text": "马塞洛特的母亲表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0127.wav", "duration": 3.916, "text": "国家住房银行箭在弦上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0126.wav", "duration": 5.404, "text": "为完成全念土地供应计划"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0180.wav", "duration": 5.4459375, "text": "同策咨询研究部总监张宏伟认为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0180.wav", "duration": 3.9600625, "text": "人民币成交额减少百分之一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0123.wav", "duration": 4.701, "text": "本世纪网至本世纪经济报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0223.wav", "duration": 3.379, "text": "一些没有直接收益的项目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0225.wav", "duration": 2.8510625, "text": "我看了以后很受震动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0151.wav", "duration": 4.865, "text": "链家地产市场研究部数据显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0262.wav", "duration": 4.4140625, "text": "比之大市亦有所不如"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0284.wav", "duration": 5.3259375, "text": "阿里巴巴当日股价下跌一点百分之四"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0271.wav", "duration": 4.875, "text": "苹果公司也在第一时间发布官方声明"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0275.wav", "duration": 5.5810625, "text": "目前这项服务已经达到了一个里程碑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0186.wav", "duration": 5.484, "text": "而申请办理组合贷款的手续则更为复杂"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0218.wav", "duration": 3.2370625, "text": "涨幅远超央企整体水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0452.wav", "duration": 5.8730625, "text": "温州女婴打疫苗后口吐白沫抽搐昏迷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0150.wav", "duration": 5.451, "text": "许多企业都把取得顾客个人资料当作资本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0153.wav", "duration": 3.966, "text": "在大数据上的技术优势无可匹敌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0454.wav", "duration": 4.5851875, "text": "垫底的是印度城市孟买"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0491.wav", "duration": 4.561, "text": "涉案的其中两名嫌疑人陈某女"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0449.wav", "duration": 4.7788125, "text": "中科院紫金山天文台公布了一零月天象"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0197.wav", "duration": 7.88, "text": "城投债劵对公司城市基础设施和市政的建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0311.wav", "duration": 7.837875, "text": "紫光股份千九十三八在公布拓展云计算市场后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0301.wav", "duration": 6.7889375, "text": "因此用户看到测量记录的记录要比之前少一些"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0395.wav", "duration": 5.098125, "text": "其实比赛过程中我也没有多想"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0255.wav", "duration": 5.343, "text": "不能波及和影响其他无关国家甚至本国"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0211.wav", "duration": 4.843, "text": "这是我国所处的发展阶段决定的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0355.wav", "duration": 5.259, "text": "中韩之战中国队首发再次变阵"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0150.wav", "duration": 6.6760625, "text": "在某一方面找到自己的企业竞争力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0397.wav", "duration": 4.6809375, "text": "比成这样我其实已经很开心了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0459.wav", "duration": 3.0500625, "text": "所内民警宿舍楼突发大火"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0387.wav", "duration": 7.3981875, "text": "因为服用禁药被停赛的选手在禁赛期满起的三年内"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0305.wav", "duration": 7.3349375, "text": "这是浪潮借助政策东风来做的营销手段"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0192.wav", "duration": 5.4250625, "text": "对于提高重大节假日公路通行能力和服务水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0340.wav", "duration": 5.6130625, "text": "跳高玛丽劳伦斯荣格菲利斯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0300.wav", "duration": 3.209, "text": "甚至是负增长而其中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0195.wav", "duration": 3.3349375, "text": "按照扶优扶大扶强的原则"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0268.wav", "duration": 3.834, "text": "面对以网络和数字技术为标志的信息技术发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0319.wav", "duration": 8.527125, "text": "而电话手表通话时离头部还有一百零一百一十五厘米的距离"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0380.wav", "duration": 8.0, "text": "第二场对阵日本也拿下全队第二高的十二分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0483.wav", "duration": 6.802, "text": "温州昆明出现注胶虾产地均指向广东湛江"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0337.wav", "duration": 4.552, "text": "钣金冲压已实现无人运行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0186.wav", "duration": 5.6880625, "text": "楼市政策也深刻影响着房地产行业的走向"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0371.wav", "duration": 5.1270625, "text": "在接受中央电视台记者采访时朱婷表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0491.wav", "duration": 8.618875, "text": "港媒中秋赏月航班受热捧部分靠窗座位售罄"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0363.wav", "duration": 6.021, "text": "让北京具备了承办冬奥会这种顶级赛事的经验和能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0188.wav", "duration": 6.13, "text": "人民银行多次提高存款准备金率和存贷款基准利率"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0263.wav", "duration": 5.0910625, "text": "试问又有哪位有魔法能挽回巨额亏损呢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0195.wav", "duration": 5.246, "text": "粮食播种面积五亿亩棉花总产量七万吨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0270.wav", "duration": 3.3099375, "text": "而当预订时间接近时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0426.wav", "duration": 2.599125, "text": "但称自己单身"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0359.wav", "duration": 6.4550625, "text": "误服曲美他嗪导致兴奋剂检测呈阳性遭禁赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0282.wav", "duration": 5.1070625, "text": "失望中夹杂着嘲讽的情绪霸占了各模块的头条"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0388.wav", "duration": 4.8891875, "text": "托比亚斯斯切尔巴尔斯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0207.wav", "duration": 3.846, "text": "加强合作社辅导员队伍建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0448.wav", "duration": 4.099125, "text": "目前记者正赶往武胜县人民医院"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0221.wav", "duration": 5.3509375, "text": "统筹协调推动重大工程的实施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0156.wav", "duration": 3.8600625, "text": "以情怀代替体验是非常错误的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0404.wav", "duration": 3.743875, "text": "很可能被雪藏下去"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0471.wav", "duration": 2.709, "text": "就可以在网络环境下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0206.wav", "duration": 5.886, "text": "一旱涝保收高标准农田建设工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0298.wav", "duration": 3.6430625, "text": "其相应的对手不是全球鹰"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0186.wav", "duration": 5.206, "text": "将保障房地块和商品房地块捆绑出让"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0173.wav", "duration": 3.7669375, "text": "而未来借助更多的互联网技术"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0315.wav", "duration": 6.376, "text": "回购期限为自回购股份方案之日起至今年底"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0210.wav", "duration": 3.117, "text": "这是一个比较复杂的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0468.wav", "duration": 5.1901875, "text": "金报讯记者蓝莹九月一一日上午"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0298.wav", "duration": 3.0339375, "text": "那么苹果能突破一万亿大关吗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0370.wav", "duration": 3.0700625, "text": "不少粉丝都表达了谴责"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0361.wav", "duration": 5.479, "text": "帮助仰泳运动员改善自己的出发技术"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0306.wav", "duration": 3.475, "text": "现在汽车市场也在下滑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0134.wav", "duration": 5.001, "text": "随着广州住房公积金贷款政策的调整实施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0137.wav", "duration": 4.8789375, "text": "期待岁末能有更多利好出现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0366.wav", "duration": 5.7739375, "text": "始终对那块冰面恋恋不舍"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0257.wav", "duration": 4.589, "text": "这估计很难让掉进钱眼儿的四大银行接受"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0345.wav", "duration": 3.728, "text": "二零二二年冬奥会在北京举行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0493.wav", "duration": 6.5600625, "text": "该歌曲二零零字的歌词用典竟达三六处之多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0210.wav", "duration": 7.3139375, "text": "鼓励和促进工业与城市资源要素向农业农村配置"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0126.wav", "duration": 5.3080625, "text": "将受益人定为直系血亲后代非配偶继承人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0277.wav", "duration": 4.9139375, "text": "降至二十六点零六万亿韩元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0483.wav", "duration": 4.28, "text": "参考消息网七月二二日报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0426.wav", "duration": 3.9819375, "text": "这种天气很适合搞池边派对"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0379.wav", "duration": 4.2470625, "text": "中国女排表示承受了巨大的压力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0233.wav", "duration": 6.227875, "text": "资本技术等现代化生产要素集约化程度高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0479.wav", "duration": 3.355, "text": "印象里他性格是比较开朗的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0346.wav", "duration": 6.105, "text": "最终掠队拿下了比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0196.wav", "duration": 5.3360625, "text": "加快农村金融组织产品和服务创新"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0143.wav", "duration": 4.096, "text": "兰州市中心城区的一些楼盘"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0197.wav", "duration": 2.9859375, "text": "肉类总产量五万吨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0210.wav", "duration": 4.9350625, "text": "新增千亿斤粮食生产能力建设工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0308.wav", "duration": 5.192875, "text": "辐射吸收率在国家的安全标准范围之内"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0166.wav", "duration": 2.822, "text": "在海南成立了分公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0395.wav", "duration": 6.505875, "text": "二零一八年冬奥会的主办地韩国平昌是一个绝好的例子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0205.wav", "duration": 4.8310625, "text": "应当经国务院国资委核准"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0485.wav", "duration": 3.1269375, "text": "范冰冰承包了娱乐头条"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0370.wav", "duration": 3.302, "text": "悬挂于场馆醒目位置"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0132.wav", "duration": 3.851, "text": "成为房地产最信任的营销公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0424.wav", "duration": 2.756125, "text": "因为很久了很想念他"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0297.wav", "duration": 2.734, "text": "已经有股票经纪公司预测"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0351.wav", "duration": 3.491, "text": "其于六个场馆都需要新建"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0235.wav", "duration": 3.772, "text": "保障公交路权优先"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0429.wav", "duration": 4.7360625, "text": "搜狐娱乐讯男方和小三还藕断丝连"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0359.wav", "duration": 4.5559375, "text": "之后就没有举办过的大型体育赛事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0294.wav", "duration": 6.76, "text": "解决小小芯片上的连线和物理问题需要大量昂贵设备"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0346.wav", "duration": 3.967, "text": "一二年总决赛拿到金牌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0172.wav", "duration": 5.15, "text": "百分之五的网友认为房价将普遍上涨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0358.wav", "duration": 4.9250625, "text": "今天赛事举行了赛前新闻发布会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0464.wav", "duration": 5.241, "text": "新京报快讯记者杨锋凌晨今日下午"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0154.wav", "duration": 4.057, "text": "放宽公积金贷款二套房认定标准"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0219.wav", "duration": 4.3460625, "text": "一方面很多央企已制定了海外战略"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0181.wav", "duration": 2.89, "text": "本世纪经济报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0357.wav", "duration": 3.9, "text": "在赛后发布会上颜妮对记者说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0154.wav", "duration": 3.745, "text": "降幅收窄三个版百分点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0395.wav", "duration": 3.6389375, "text": "共同享受奔跑带来的乐趣"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0405.wav", "duration": 4.2158125, "text": "前后打磨了两年时间才得以完成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0360.wav", "duration": 2.9860625, "text": "据外媒最新的爆料显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0282.wav", "duration": 4.849125, "text": "作为全球最大的职业社交网站"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0276.wav", "duration": 4.272, "text": "并注意下载过程中的任何警告"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0410.wav", "duration": 3.1340625, "text": "可见两人友谊非同一般"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0158.wav", "duration": 3.899, "text": "分析用户的消费行为和生活方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0303.wav", "duration": 7.052, "text": "很多家长都考虑给孩子配置具有定位功能的智能手机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0494.wav", "duration": 4.056875, "text": "石柱村泥石流塌方现场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0128.wav", "duration": 2.987, "text": "相关公司股票走势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0207.wav", "duration": 6.2210625, "text": "研究部署在城市优先发展公共交通"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0475.wav", "duration": 3.239, "text": "盲目捐款没有益处"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0401.wav", "duration": 4.8920625, "text": "一百米莱贝卡哈塞"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0469.wav", "duration": 3.249, "text": "说起自己的伴侣大侠"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0394.wav", "duration": 3.079125, "text": "他们的禁赛期即将开始"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0234.wav", "duration": 6.319, "text": "使地方政府的债务融资规模控制在安全范围内"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0187.wav", "duration": 5.139, "text": "为环境保护提供更加完备有效的法制保障"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0490.wav", "duration": 6.7680625, "text": "广大领导干部要以引以为戒守住底线"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0211.wav", "duration": 6.1070625, "text": "多数城市公共交通出行比例偏低"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0227.wav", "duration": 6.77, "text": "要尽快建立我国的地方政府债务管理体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0450.wav", "duration": 3.733875, "text": "日前本报记者前往实地调查了解"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0386.wav", "duration": 5.688, "text": "朴泰桓的禁期禁赛期将在明年三月期满"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0177.wav", "duration": 7.5370625, "text": "对拥有一套住房并已结清相应购房贷款的居民家庭"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0270.wav", "duration": 5.8659375, "text": "病毒武器被认为是目前最具有代表性的网络武器"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0469.wav", "duration": 4.683125, "text": "张绵跃当选村委会主任"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0143.wav", "duration": 8.122, "text": "公积金额贷款额度升至一百万可以节省很多少利息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0319.wav", "duration": 4.509, "text": "总投资预计一百二十五亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0164.wav", "duration": 5.583, "text": "进一步发挥市场在资源配置中的决定性作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0279.wav", "duration": 3.8209375, "text": "中国产品不可能照搬到美国市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0133.wav", "duration": 5.909, "text": "主要是土地出让收入少征三千亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0126.wav", "duration": 3.935, "text": "重点城市公积金贷额款度也有限制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0436.wav", "duration": 5.105, "text": "登上歌王宝座的概率是不是会要大很多倍呢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0435.wav", "duration": 4.6079375, "text": "陈传钧从东莞市第二看守所出来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0211.wav", "duration": 4.4730625, "text": "深入开展粮食稳定增产行动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0236.wav", "duration": 7.022, "text": "有关部门组织核安全地震海洋等方面专家"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0444.wav", "duration": 5.6650625, "text": "杀人犯受民警感召行刑前捐器官谢罪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0153.wav", "duration": 4.37, "text": "允许机构和个人在中国购"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0234.wav", "duration": 9.577, "text": "吸引和鼓励社会资金参与公共交通基础设施建设和运营"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0451.wav", "duration": 5.2170625, "text": "顾欣资料图片昨早九号一零时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0186.wav", "duration": 4.1530625, "text": "而随着各地公积金政策的调整"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0478.wav", "duration": 3.8518125, "text": "香港海关严查水货客"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0259.wav", "duration": 3.2680625, "text": "与世界先进水平相比还有明显差距"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0232.wav", "duration": 6.501, "text": "在保持农村土地承包关系稳定并长久不变的前提下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0302.wav", "duration": 5.4040625, "text": "已经占有了全球智能手表市场的百分之五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0366.wav", "duration": 5.1020625, "text": "这是它第一次在游泳世界杯上亮相"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0371.wav", "duration": 6.498, "text": "庞清和佟健终于可以放心地考虑退役的事情了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0241.wav", "duration": 9.383875, "text": "为各地的基础建设提供有力的保障的融资渠道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0168.wav", "duration": 4.9489375, "text": "后续还款用住房公积金支付"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0357.wav", "duration": 4.491, "text": "允许布鲁诺马塞洛特代表德国"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0338.wav", "duration": 4.4360625, "text": "而在昨天对阵古巴队的比赛中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0467.wav", "duration": 3.4411875, "text": "事情的真相完全不是这样的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0353.wav", "duration": 3.688, "text": "直接将威瑟里诺夫击倒"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0466.wav", "duration": 7.7531875, "text": "温州市场现胶注虾业内不仅增重卖相更好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0328.wav", "duration": 5.4980625, "text": "我们内部做的盈利测算数据暂时无法公告"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0337.wav", "duration": 3.217, "text": "解决信息安全的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0290.wav", "duration": 5.8720625, "text": "作为科技股领头羊的苹果股份当天下挫百分之二"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0464.wav", "duration": 5.5690625, "text": "浙江温州乐清七五岁的企业家虞一杰退休之后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0313.wav", "duration": 5.8149375, "text": "其中近一半的漏洞都可能造成网站用户的信息泄露"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0158.wav", "duration": 5.8790625, "text": "即便是北上广深等供应偏紧的一线城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0326.wav", "duration": 3.355, "text": "在手机平板电脑之外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0356.wav", "duration": 6.0839375, "text": "佟健已经完成了第一个学模块的学习"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0194.wav", "duration": 3.495, "text": "粮食综合生产能力五亿吨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0377.wav", "duration": 6.2519375, "text": "并制作了精美的秩序册发给媒体及参赛队"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0490.wav", "duration": 3.312, "text": "中国再现医生涉嫌拐卖婴儿的案例"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0448.wav", "duration": 3.5349375, "text": "此事昨日经网络曝光后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0355.wav", "duration": 4.0229375, "text": "真可谓是简约而不简单啊"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0262.wav", "duration": 3.947, "text": "刚开始微软因谨慎起见"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0250.wav", "duration": 3.958, "text": "现代农业建设取得明显进展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0210.wav", "duration": 5.8830625, "text": "我委核准发行的企业债券累计为七千亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0314.wav", "duration": 5.094, "text": "不知不觉地安装上公司开发的插件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0372.wav", "duration": 4.4140625, "text": "不过两位当事人双双否认性侵的说法"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0262.wav", "duration": 4.941875, "text": "可以实现在敌国网络中的长期潜伏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0290.wav", "duration": 3.641125, "text": "更是一种文化和习惯的推广者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0357.wav", "duration": 4.771, "text": "孙杨的心脏不适早就不是秘密"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0148.wav", "duration": 5.364, "text": "广州调整住房公积金个人住房贷款政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0406.wav", "duration": 3.0659375, "text": "而不得不离开这个项目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0410.wav", "duration": 5.046125, "text": "原来陈善之最近已离开了百仕活"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0474.wav", "duration": 3.8830625, "text": "同踹死你的街道办主任"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0296.wav", "duration": 5.394875, "text": "美国航空环境公司停止生产大鸦无人机后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0152.wav", "duration": 7.718, "text": "外资在华房地产投资购房限制被松绑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0146.wav", "duration": 3.829, "text": "本轮住房公积金房贷政策调整"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0232.wav", "duration": 5.3010625, "text": "必须符合一些基本的条件企业必须连续三年盈利"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0434.wav", "duration": 3.6699375, "text": "在其发给记者的新闻稿中说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0323.wav", "duration": 7.701875, "text": "格力电器一季报营收为二百四十五亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0141.wav", "duration": 4.88, "text": "尽管有央行降息等各方利好刺激"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0229.wav", "duration": 3.8139375, "text": "加快实施生禽良种工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0212.wav", "duration": 6.907, "text": "通过组织动员和政策引导等多种途径"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0315.wav", "duration": 6.5710625, "text": "媒体采访的电话打到各空调企业的市场负责人那里"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0213.wav", "duration": 7.251, "text": "国际农产品市场投机炒作及传导影响加深"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0294.wav", "duration": 5.1159375, "text": "苹果计划于明年初开始销售其智能手表"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0174.wav", "duration": 6.703, "text": "这一平均楼面价较年前的九千元每平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0245.wav", "duration": 4.9859375, "text": "避免在最后一年累积过大的还本压力和风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0235.wav", "duration": 4.151, "text": "以加强产销衔接为重点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0437.wav", "duration": 3.3920625, "text": "导游放言此树是我栽"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0458.wav", "duration": 6.3569375, "text": "温州两女孩溺水救护车因车多路堵错过救援时间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0140.wav", "duration": 4.702, "text": "有一个突破土地或城市规划"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0314.wav", "duration": 4.1949375, "text": "目前公司锂电池订单比较充足"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0203.wav", "duration": 5.142, "text": "形成合力推进现代农业发展的新局面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0334.wav", "duration": 3.8969375, "text": "对于如此火爆的市市场需求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0441.wav", "duration": 5.4201875, "text": "同时李也俘获了无数中国大妈的芳心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0187.wav", "duration": 6.7010625, "text": "着力解决一批影响现代农业发展全局的重大科技问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0157.wav", "duration": 4.458, "text": "深圳环比上上涨百分之七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0386.wav", "duration": 5.067125, "text": "如今在家门口就可以实现这个愿望了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0210.wav", "duration": 5.869, "text": "政府通过债务融资从事基础设施建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0444.wav", "duration": 4.4050625, "text": "大客车的车头和车身损毁严重"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0478.wav", "duration": 3.660875, "text": "记者从消防部门处了解到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0464.wav", "duration": 8.0751875, "text": "图记者陈斌潇湘晨报长沙讯一零月一一日下午"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0253.wav", "duration": 4.0, "text": "可控是病毒武器最基本的要求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0200.wav", "duration": 3.409, "text": "具体执行时间由省政府定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0321.wav", "duration": 4.6999375, "text": "用户隐私遭泄露的问题日益突出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0448.wav", "duration": 6.0488125, "text": "钱某贪污一二馀万元拆迁款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0241.wav", "duration": 4.199, "text": "政府财力增长也相当较快"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0294.wav", "duration": 6.0600625, "text": "苹果股价在说不准的时间内有望上升三成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0418.wav", "duration": 4.548125, "text": "许茹芸重回舞台不做苦情女娱乐频道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0273.wav", "duration": 7.783, "text": "他们通常会单独办一张银行卡来绑定移动支付系统"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0432.wav", "duration": 7.8059375, "text": "温州水库沉车案现男女腐尸女方事发前行为古怪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0347.wav", "duration": 8.462875, "text": "在队长惠若琪因为身体原因无缘世界杯的情况下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0123.wav", "duration": 3.555, "text": "这些状况每日均上演发生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0294.wav", "duration": 5.642, "text": "把它升级成为一款综合性智能终端之后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0296.wav", "duration": 3.4239375, "text": "苹果已然可以单点突破"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0403.wav", "duration": 4.2309375, "text": "大家赢球比自己获得最佳还要高兴"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0230.wav", "duration": 4.531, "text": "防止出现系统性的偿债风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0327.wav", "duration": 2.645, "text": "开扩了一个新的市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0147.wav", "duration": 8.2589375, "text": "店均电话咨询量比上一个周末增加十一百分之左右"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0387.wav", "duration": 6.052, "text": "而队医怀疑这或许与比赛地水污染有关"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0385.wav", "duration": 5.225125, "text": "面对身高臂展明显占优的对手"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0381.wav", "duration": 5.1230625, "text": "许多为高桥痴迷多年的女粉丝肯定深受打击"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0121.wav", "duration": 6.187, "text": "双降会令市场看贬人民币的情绪持续"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0142.wav", "duration": 4.0059375, "text": "安全问题立即会成为你的内伤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0419.wav", "duration": 6.2729375, "text": "华西都市报讯闪婚欧巴一年后二零一四年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0407.wav", "duration": 4.650875, "text": "曾在二零一零年获得空前成功"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0391.wav", "duration": 5.8420625, "text": "在奥运会赛艇和铁人三项公开水域等比赛地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0220.wav", "duration": 6.364, "text": "由于目前城投债劵的发行需要符合企业债劵发行的条件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0168.wav", "duration": 2.734, "text": "北京七月楼市的成交情况"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0189.wav", "duration": 2.3869375, "text": "稳步发展区域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0328.wav", "duration": 5.829125, "text": "现在三百六十腾讯等大公司都涉足了这一领域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0172.wav", "duration": 5.9029375, "text": "需要按北京当地的要求缴纳二手房交易费用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0448.wav", "duration": 3.9250625, "text": "以便提高药品竞争力等等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0242.wav", "duration": 4.9650625, "text": "规范公共交通重大决策程序"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0318.wav", "duration": 4.469, "text": "浪潮信息的研发支出约四亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0342.wav", "duration": 7.224875, "text": "因此我请求世界反兴奋剂机构回顾前后所有的数据"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0250.wav", "duration": 7.667, "text": "对大学生涉农创业按规定给予相关政策扶持"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0295.wav", "duration": 4.9600625, "text": "心率测量记录没有之前那么频繁了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0325.wav", "duration": 2.8979375, "text": "电话手表应该如何选购"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0394.wav", "duration": 6.219, "text": "在大赛中投出这样好的成绩我自己都没有想到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0476.wav", "duration": 6.177, "text": "四年前的一幕仍没从夏英俊的记忆中抹去"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0188.wav", "duration": 6.9390625, "text": "为现代农业建设取得明显进展提供有力保障"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0487.wav", "duration": 6.886, "text": "湖北一传销头目归国投案骗取群众资金数亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0344.wav", "duration": 3.9860625, "text": "已经确定本赛季不会参加任何的比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0206.wav", "duration": 6.381, "text": "国务院总理温家宝主持召开国务院常务会议"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0397.wav", "duration": 3.858875, "text": "朱婷全场夺得二十九分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0309.wav", "duration": 6.2939375, "text": "公司主要从事计算机手机的软件开发业务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0178.wav", "duration": 3.1949375, "text": "其中地上一万平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0467.wav", "duration": 3.2951875, "text": "出门前我拿了两套衣服"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0190.wav", "duration": 5.486125, "text": "加大涉农贷款投放力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0356.wav", "duration": 3.103, "text": "我感到非常骄傲和自豪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0299.wav", "duration": 3.6450625, "text": "苹果公司上次发布全新产品是在五年以前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0196.wav", "duration": 3.489, "text": "着实让不少网友有些着急"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0426.wav", "duration": 4.1860625, "text": "称陈妍希目前还在剧组拍戏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0151.wav", "duration": 3.805, "text": "放松限外是必然趋势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0144.wav", "duration": 4.356, "text": "住房公积金贷款因其利率较低的优势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0454.wav", "duration": 6.0910625, "text": "捐给当地慈善部门后却遭闲置三年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0230.wav", "duration": 2.9349375, "text": "科学保护和合理利用水资源"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0375.wav", "duration": 3.3471875, "text": "为了备战亚运会选拔赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0268.wav", "duration": 6.1650625, "text": "拥有内部存储空间与完整的应用平台"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0256.wav", "duration": 5.249, "text": "掌趣科技三零零三一五一度超过二百倍"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0399.wav", "duration": 5.2040625, "text": "也是最终打动国家奥运委会评审团的法宝"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0154.wav", "duration": 3.379, "text": "公积金贷款新政出台"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0459.wav", "duration": 5.1789375, "text": "温州两男子为争女人驾奔驰宝马街头四次对撞"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0307.wav", "duration": 6.5759375, "text": "昔日巨头格力美的海尔也将沉浮于其中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0351.wav", "duration": 7.5920625, "text": "中国最帅的竞走冠军陈定将亮相苏州吴中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0419.wav", "duration": 3.6220625, "text": "猛嗑薄荷喉糖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0324.wav", "duration": 4.837875, "text": "关于儿童电话手表应该如何选购"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0472.wav", "duration": 3.3940625, "text": "退休并不等于生命的终结"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0385.wav", "duration": 5.272, "text": "此次韩国男团派出了一老带二新的阵容"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0406.wav", "duration": 4.182875, "text": "最终又确定为科林哈迪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0188.wav", "duration": 9.0, "text": "极可能对债劵持有人利益构成不利影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0459.wav", "duration": 7.807125, "text": "温州天价馒头续店方称顾客要狭索赔三条中华烟"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0220.wav", "duration": 6.642, "text": "研究落实各项强农惠农富农政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0246.wav", "duration": 5.5, "text": "海啸问题评估和应付基础比较薄弱等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0429.wav", "duration": 4.837875, "text": "一直邀请陈善之担任经理人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0128.wav", "duration": 2.1360625, "text": "自成立以来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0489.wav", "duration": 4.6010625, "text": "近千人在隧道里上演生死时速"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0137.wav", "duration": 5.735, "text": "住宅成为全国房地产销售金额唯一增长的板块"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0263.wav", "duration": 5.7209375, "text": "使其市值分秒间蒸发近四百亿美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0269.wav", "duration": 7.9400625, "text": "有哪家支付机构愿意心无旁续地放弃这些金子呢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0241.wav", "duration": 7.025875, "text": "积极推进养殖业园艺业农产品初加工机械化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0398.wav", "duration": 6.1950625, "text": "对此莎宾娜已经做好了吃苦的心理准备"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0170.wav", "duration": 5.234, "text": "但下半年的销售可能会回升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0365.wav", "duration": 4.306125, "text": "得到了仰泳选手的广泛好评"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0450.wav", "duration": 4.0029375, "text": "并于二零一五年一月将其抓获"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0424.wav", "duration": 3.5810625, "text": "陈妍希晒出与容祖儿合照"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0185.wav", "duration": 3.777, "text": "年底将出现翘尾行情"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0282.wav", "duration": 5.9339375, "text": "满足数据中心和物联网细分市场的用户需求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0372.wav", "duration": 7.0290625, "text": "到今年十二月为止将在东京的法政大学进行训练"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0253.wav", "duration": 4.511, "text": "据新华社电有病当然要吃药"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0193.wav", "duration": 4.134, "text": "新增收入全部用于农业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0141.wav", "duration": 7.103, "text": "中原地产市场研究部统计数据显示截至目前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0152.wav", "duration": 6.1180625, "text": "由于公积金贷款利率相当于市场贷款利率的七折"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0431.wav", "duration": 4.6189375, "text": "当事网友疑遭遇克隆车"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0299.wav", "duration": 3.9760625, "text": "较最初的预期减少了一半左右"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0377.wav", "duration": 4.47, "text": "也是孙杨整个比赛期间疲劳所致"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0412.wav", "duration": 4.125, "text": "心情低落到崩溃大哭"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0218.wav", "duration": 4.735, "text": "指导思想基本原则与发展目标"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0313.wav", "duration": 4.1069375, "text": "汉能直接销售人员大幅度减少"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0190.wav", "duration": 5.7629375, "text": "我们立即与云投集团进行了沟通"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0379.wav", "duration": 3.188, "text": "高桥大辅应该是他的新欢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0361.wav", "duration": 5.1550625, "text": "二零一四年的冰壶世锦赛也在北京举行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0354.wav", "duration": 3.718, "text": "是很难成为真正的王者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0160.wav", "duration": 5.386, "text": "是房地产当前发局格局下的一个必然"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0208.wav", "duration": 5.855, "text": "这决定了我国城市化动力十分强劲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0279.wav", "duration": 4.4489375, "text": "标普五百指数市值冠军宝座"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0181.wav", "duration": 6.0, "text": "在经济增速放缓阶段运用货币政策工具时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0194.wav", "duration": 6.061, "text": "具体工作将由各省区市政府负责统一组织实施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0370.wav", "duration": 2.8110625, "text": "搜狐体育郭健文"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0226.wav", "duration": 5.5, "text": "按照市场化原则实施土地综合开发"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0205.wav", "duration": 3.8680625, "text": "广泛开展示范社建设行动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0249.wav", "duration": 4.3950625, "text": "我们如何考虑防止这类事件再次发生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0475.wav", "duration": 4.0859375, "text": "参考消息网八月一二日报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0137.wav", "duration": 3.611, "text": "面包价格会跟风上涨吗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0197.wav", "duration": 5.0600625, "text": "要吸收民间资本参与国有企业改制重组"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0141.wav", "duration": 5.851, "text": "再加上广州公积金贷款新政终于落地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0154.wav", "duration": 8.5169375, "text": "六部委调整房地产市场外资准入和管理政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0479.wav", "duration": 5.201875, "text": "与韩国西海相连的中国渤海湾由于垃圾堆积"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0331.wav", "duration": 5.0379375, "text": "昔日巨头格力美的海尔也将沉浮于其中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0167.wav", "duration": 4.4050625, "text": "相反相关环节上审批更加严格"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0377.wav", "duration": 6.4709375, "text": "取得这一突破的领军人就包括轮椅英雄叶乔波"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0371.wav", "duration": 3.953875, "text": "不得不暂停比赛进行处理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0380.wav", "duration": 5.876, "text": "同时拿到了明年里约奥运会的入场券"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0265.wav", "duration": 3.1520625, "text": "不同意的地方多于同意"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0304.wav", "duration": 6.626, "text": "归属于上市公司股东的净利润二十五十二万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0413.wav", "duration": 3.9240625, "text": "黄榕坦言可能他做了太多运动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0412.wav", "duration": 4.728, "text": "搜狐娱乐讯据香港媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0145.wav", "duration": 3.701, "text": "而额度最高一百万时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0429.wav", "duration": 5.5920625, "text": "她透露现在父母哥哥谢霆锋都各忙各的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0389.wav", "duration": 3.5, "text": "在韩国男队中排名第四"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0369.wav", "duration": 5.8198125, "text": "这让他们的退役迟迟没有提上日程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0278.wav", "duration": 3.5, "text": "苹果靠什么颠复移动支付市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0156.wav", "duration": 2.698, "text": "许多数字新产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0341.wav", "duration": 3.774125, "text": "公开自己的同性恋者身份"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0379.wav", "duration": 3.1110625, "text": "朱婷共计拿下二十四分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0182.wav", "duration": 3.4309375, "text": "部分客户甚至等两个多月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0175.wav", "duration": 4.983, "text": "市场对金九银十的预期也开始谨慎起来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0193.wav", "duration": 3.3160625, "text": "发挥示范区引领作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0340.wav", "duration": 4.522, "text": "惠若琪将在微创手术后回到南京调养"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0467.wav", "duration": 3.827125, "text": "黄色渣土车一头撞进了路边的工房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0166.wav", "duration": 3.534, "text": "还有多家机构分析认为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0148.wav", "duration": 4.941, "text": "为安居工程建设提供了资金保障"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0252.wav", "duration": 4.3730625, "text": "抓紧制定和修订相关法律法规"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0296.wav", "duration": 3.723875, "text": "按说这只是一个客观表述"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0245.wav", "duration": 5.1939375, "text": "但在鼓励企业走出去方面释出多个信号"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0416.wav", "duration": 3.124, "text": "不抓紧会被撞到地上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0250.wav", "duration": 5.491, "text": "新老并重防结结合"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0435.wav", "duration": 3.963125, "text": "江苏快递实名制登记动真格"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0423.wav", "duration": 5.411125, "text": "被问是否感觉到谢霆锋与王菲恋爱的甜蜜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0410.wav", "duration": 5.5, "text": "新京报报道思维发散表情与肢体语言丰富"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0459.wav", "duration": 4.5690625, "text": "留下的却是被随手丢弃的垃圾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0304.wav", "duration": 7.1070625, "text": "成飞机成业绩增长主要是由于锂电需求增长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0217.wav", "duration": 5.219, "text": "在政府投融资体制改革过程中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0225.wav", "duration": 4.4909375, "text": "加强农业有害生物监测预警和防控能力建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0424.wav", "duration": 3.006125, "text": "恋情发展备受关注"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0275.wav", "duration": 4.2790625, "text": "并未能给这些公司带来其他的效应"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0245.wav", "duration": 4.2049375, "text": "依法开展公募性质的资产管理业务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0262.wav", "duration": 3.7470625, "text": "不应从用户身上榨取广告收入"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0388.wav", "duration": 4.636, "text": "佟健报考了北大光华管理学院"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0484.wav", "duration": 4.6520625, "text": "其中一道蘑菇炖鸡收费近九零零元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0479.wav", "duration": 7.4409375, "text": "中国正在逐步拥抱智能技术和数字至上创业精神"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0285.wav", "duration": 3.9760625, "text": "打造适合当地市场的产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0163.wav", "duration": 4.693, "text": "未来还将继续深耕丰台区域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0431.wav", "duration": 9.004125, "text": "渔船凶案嫌疑借发动机声将同船同事依次杀害"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0193.wav", "duration": 3.714, "text": "现代农业发展主要指标类别"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0351.wav", "duration": 7.4299375, "text": "中国队将迎战冈山赛区的第二个对手肯尼亚队"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0248.wav", "duration": 4.547, "text": "对实施召回的缺陷汽车产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0370.wav", "duration": 6.9711875, "text": "退役前高桥大辅曾与花滑女神浅田真央传出恋情"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0481.wav", "duration": 7.718, "text": "以公务招待为名大肆公款吃喝"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0440.wav", "duration": 5.4299375, "text": "并被店主及店员辱骂围殴"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0301.wav", "duration": 5.6389375, "text": "他的预测有点毒基本上是在讨论谁会下台"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0439.wav", "duration": 8.651875, "text": "温州大妈年逾半百冒充女儿成功骗婚多名小鲜肉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0331.wav", "duration": 7.1579375, "text": "除了威灵电器与美芝压缩机合并成为美的部品事业部之外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0211.wav", "duration": 4.656, "text": "要加强节日期间旅游市场价格监管"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0337.wav", "duration": 4.577125, "text": "对频频的骚扰电话显得无可奈何"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0214.wav", "duration": 4.2200625, "text": "从已发行的城投债券用途看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0216.wav", "duration": 4.112, "text": "省里会对此进行专门研究讨论"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0165.wav", "duration": 8.281, "text": "对于提供给外籍人士的个人住房按揭贷款的外债需求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0381.wav", "duration": 3.228, "text": "我觉得这冠军来之不易"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0201.wav", "duration": 4.69, "text": "提升产品研发精深加工技术水平和装备能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0339.wav", "duration": 6.4970625, "text": "但检测结果的异常并不能就证实运动员使用违禁药物"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0374.wav", "duration": 3.2321875, "text": "从目前已经传出的视频来看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0216.wav", "duration": 2.985125, "text": "强化农业法制保障"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0423.wav", "duration": 3.4870625, "text": "前天他在脸书晒出自拍照"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0493.wav", "duration": 4.4199375, "text": "渔民缴纳罚款后在摁手印时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0218.wav", "duration": 3.2889375, "text": "落实海洋环境保护责任"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0264.wav", "duration": 5.3050625, "text": "这样难免会出现某个客户的维修问题特别复杂"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0388.wav", "duration": 2.824, "text": "队友彼此之间需要相互鼓励"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0272.wav", "duration": 5.261, "text": "大尺寸屏幕设备在亚洲很流行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0196.wav", "duration": 2.8929375, "text": "规划提出诸多想法"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0127.wav", "duration": 4.0, "text": "二零零八年至二零一五年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0222.wav", "duration": 5.5189375, "text": "中国证券报面对市场对城投债券风险的担忧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0454.wav", "duration": 7.0290625, "text": "并称故宫博物院已就此事件向公安机关报案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0289.wav", "duration": 5.2039375, "text": "艾维表示尽管苹果智能手表拥有诸多功能"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0202.wav", "duration": 2.9149375, "text": "重点推进区域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0206.wav", "duration": 7.391, "text": "并尽快建立我国地方政府债务管理体系等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0387.wav", "duration": 5.5, "text": "也看到了在冰雪运动综合实力上的欠缺和不足"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0214.wav", "duration": 6.1310625, "text": "农林牧渔业增长值年均增长率百分之五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0393.wav", "duration": 2.793, "text": "是时候去努力工作了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0202.wav", "duration": 4.3840625, "text": "积极应对国际贸易摩擦"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0221.wav", "duration": 4.213, "text": "仍然存在并具有发展空间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0431.wav", "duration": 4.355, "text": "北京地接旅行社有限公司负责人称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0454.wav", "duration": 6.385, "text": "渣土车挂倒电动车致一死一伤肇事车主逃逸"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0261.wav", "duration": 3.9340625, "text": "不仅树立了良好的品牌形象"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0221.wav", "duration": 4.1800625, "text": "坚持走中国特色农业现代化道路"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0410.wav", "duration": 4.6330625, "text": "陈冠希在微博晒出一段小视频"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0417.wav", "duration": 4.4809375, "text": "许茹芸特地发微博感谢婚姻带来的幸福"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0419.wav", "duration": 2.349125, "text": "帅出新高度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0298.wav", "duration": 3.9760625, "text": "中国游戏公司纷纷忙着退市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0178.wav", "duration": 3.7429375, "text": "一些库存量较大的三四线城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0168.wav", "duration": 4.182, "text": "比月初增长了一百元每平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0196.wav", "duration": 5.259, "text": "有利于提升城投债券的资产配置价值"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0365.wav", "duration": 6.5751875, "text": "他还在积极地为二零一八年韩国平昌冬奥会进行着准备"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0330.wav", "duration": 4.282, "text": "整体行业出货量应该不断突破"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0418.wav", "duration": 3.891125, "text": "艺人谢婷婷出席活动时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0328.wav", "duration": 4.3269375, "text": "另一白电巨头青岛海尔"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0170.wav", "duration": 3.099, "text": "新媒体推广的业务扩张"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0285.wav", "duration": 2.49, "text": "如果说过去的这些年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0211.wav", "duration": 5.761, "text": "但在具体评估我国地方政府债务风险程度时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0424.wav", "duration": 2.8210625, "text": "据香港媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0480.wav", "duration": 4.4289375, "text": "邳州几名村民先后下井救人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0325.wav", "duration": 4.370875, "text": "四年来机器人代替人工近半"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0336.wav", "duration": 3.1009375, "text": "比如阳光也是一种电磁辐射"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0398.wav", "duration": 7.729, "text": "三局比分是二五比一九二五比十和二五比一四"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0261.wav", "duration": 7.167, "text": "苹果表这么火爆微软也该出智能手表吗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0356.wav", "duration": 6.76, "text": "徐建德统领的中国青年队八战全胜夺得冠军"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0129.wav", "duration": 5.162, "text": "取得土地出让收入十三万亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0247.wav", "duration": 7.61, "text": "推广相应的生产技术和防灾减灾措施大力推进农业标准化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0355.wav", "duration": 2.9260625, "text": "服务广大跑步爱好者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0490.wav", "duration": 4.546125, "text": "阳逻一家公司以数十名员工的名义"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0202.wav", "duration": 4.594, "text": "第二批三网融合试点工作业已启动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0212.wav", "duration": 2.692, "text": "应该不会开免费车道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0367.wav", "duration": 3.222875, "text": "和澳洲鱼雷索普一样"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0362.wav", "duration": 4.3549375, "text": "记者从浙江省游泳协会了解到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0205.wav", "duration": 6.5, "text": "审议通过缺陷汽车产品召回管理条例草案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0349.wav", "duration": 5.4150625, "text": "朱婷再度扮演了场上头脑的角色"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0293.wav", "duration": 4.8360625, "text": "自二零零七年乔布斯重新发明手机开始"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0170.wav", "duration": 3.0560625, "text": "相应的房价涨跌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0317.wav", "duration": 3.6960625, "text": "网络运营人员的安全素质有待提高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0477.wav", "duration": 5.7319375, "text": "杀害女童凶手被抓指认现场上千民众喊打"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0152.wav", "duration": 9.333, "text": "但房价从七月至今上涨幅度仅为百分之二左右"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0253.wav", "duration": 3.3370625, "text": "市场占有率为百分之五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0362.wav", "duration": 6.232875, "text": "与多米尼加的马丁内斯一起摘得最佳得分奖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0134.wav", "duration": 5.2069375, "text": "外资占国内地产投资比例有限"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0352.wav", "duration": 3.6440625, "text": "看起来在美国过得很开心的样子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0403.wav", "duration": 6.8249375, "text": "日本二零一五女排世界杯单循环赛战至第十轮"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0339.wav", "duration": 5.969, "text": "而与经济实力相关的一些基础设施建设方面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0384.wav", "duration": 4.242875, "text": "我们球员要做的就是立足于自己"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0204.wav", "duration": 5.735125, "text": "并尽快建立我国地方政府债务管理体系等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0224.wav", "duration": 6.713, "text": "使得城投公司能够发行真正意义上的长期市政债劵"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0422.wav", "duration": 2.4880625, "text": "虽然没有注册结婚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0251.wav", "duration": 4.854, "text": "你们如何考虑防止这类事件再次发生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0215.wav", "duration": 3.959, "text": "努力形成多元化投入新格局"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0363.wav", "duration": 7.243875, "text": "可以帮助他们在出发时增加自己距离水面的高度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0354.wav", "duration": 5.9699375, "text": "最终中国队以三比一力战韩国队全取三分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0222.wav", "duration": 8.5560625, "text": "稳步推进江淮等粳高稻生产适宜区糟改粳"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0273.wav", "duration": 4.316875, "text": "美国国际贸易委员会称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0337.wav", "duration": 4.1579375, "text": "破坏和颠复是互联网时代的特征"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0493.wav", "duration": 4.502, "text": "杀中传女生嫌犯就想找个人发泄"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0219.wav", "duration": 4.2310625, "text": "完善粮食仓储运输设备"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0479.wav", "duration": 6.667, "text": "浙江温州鹿城区检察院通报九月六日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0181.wav", "duration": 6.446, "text": "在今年两会是否会开启新一轮楼市调控这个问题上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0163.wav", "duration": 6.875, "text": "去年已有不少城市对公积金政策进行放松调整"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0125.wav", "duration": 3.909, "text": "新京报讯记者张旭报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0290.wav", "duration": 4.181, "text": "如何重修与中国政府的良好关系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0215.wav", "duration": 3.6900625, "text": "在依法自愿有偿和加强服务基础上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0213.wav", "duration": 3.26, "text": "保障房建设和棚户区改造"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0238.wav", "duration": 3.8360625, "text": "启动实施农产品加工提升工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0183.wav", "duration": 3.4400625, "text": "基本住房需求得到满足后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0418.wav", "duration": 2.1699375, "text": "应该是月初吧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0343.wav", "duration": 2.636, "text": "北京时间九月十七日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0425.wav", "duration": 4.964875, "text": "更在日前爆出交往七个月准备闪婚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0308.wav", "duration": 5.400875, "text": "东风雪铁龙的客户数据存放在专业数据库中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0451.wav", "duration": 5.972875, "text": "渝蓉高速四川段资金断裂烂尾已修了六年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0121.wav", "duration": 4.2039375, "text": "甚至出现交易几乎停滞的情况"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0136.wav", "duration": 5.7560625, "text": "中国房地产学会副会长陈国强也认为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0493.wav", "duration": 5.764625, "text": "这一斤玛卡其实价格只有一零零多元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0160.wav", "duration": 5.343, "text": "审计署审计长刘家义受国务院委托"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0423.wav", "duration": 2.432125, "text": "我便会到那里"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0374.wav", "duration": 3.927, "text": "德国队此次以老带新"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0192.wav", "duration": 4.368, "text": "维护受损各方合法权益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0436.wav", "duration": 6.6210625, "text": "渔船海上被撞翻仅一人逃生同伴求救却无能为力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0436.wav", "duration": 5.604, "text": "大兴区礼贤镇紫各庄村"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0322.wav", "duration": 8.858875, "text": "至于像整机柜这类深度定制化的细分市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0435.wav", "duration": 3.479, "text": "所谓撤资指控完全不成立"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0475.wav", "duration": 5.3361875, "text": "状元农贸市场内挂着支付宝的宣传牌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0402.wav", "duration": 7.687, "text": "夺得了自己在昆仑拳坛上的第二场重要胜利"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0358.wav", "duration": 4.0, "text": "中国队迅速调整阵容"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0446.wav", "duration": 6.4260625, "text": "二人早前被香港警方以有违公德罪落案起诉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0263.wav", "duration": 4.1020625, "text": "希望中国品牌在国际市场的知名度和影响力越来越大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0466.wav", "duration": 7.531, "text": "称他们曾在这里被人游说注册了一游戏平台的账户"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0365.wav", "duration": 5.100125, "text": "比赛在双方互不相让的对攻中落下了帷幕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0301.wav", "duration": 5.734, "text": "市场上还有诸多其他制造商也在尝试生产智能手表"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0483.wav", "duration": 5.0590625, "text": "凶手被抓捕归案钟欣摄"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0452.wav", "duration": 4.917, "text": "和平花苑现已更名为龙和华府"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0460.wav", "duration": 6.2568125, "text": "在看守所干警及消防人员的扑救下火势很快被扑灭"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0273.wav", "duration": 4.452, "text": "他们的产品在海外市场也极少被认可"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0477.wav", "duration": 10.635, "text": "渐冻男孩驾驶电动轮椅上班医生曾诊断活不过十八岁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0480.wav", "duration": 6.052, "text": "有人忧虑渤海湾的污染会直接影响到韩国西部海域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0338.wav", "duration": 5.041, "text": "折合人民币大概二千四八零亿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0195.wav", "duration": 3.614, "text": "形成了系统完整的规划体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0295.wav", "duration": 4.324, "text": "预计订单总额为三十亿美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0127.wav", "duration": 2.762, "text": "中新网房产频道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0365.wav", "duration": 3.136, "text": "但有起伏应该是正常的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0162.wav", "duration": 4.584, "text": "二初楼市迎来多项利好政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0469.wav", "duration": 4.9199375, "text": "随即被送到儿童医院进行救治"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0452.wav", "duration": 4.6289375, "text": "湖北吞人电梯三月份刚检测合格"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0162.wav", "duration": 4.516, "text": "龙湖已经在丰台有土地储备"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0178.wav", "duration": 5.566, "text": "在岸人民币兑美元收盘下跌百分之一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0251.wav", "duration": 3.5739375, "text": "机场高速最大可能还是免费"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0325.wav", "duration": 3.2270625, "text": "一定是为了降低制造成本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0295.wav", "duration": 7.207, "text": "芯片行业的并购风体现了整个科技行业的一种趋势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0145.wav", "duration": 3.5669375, "text": "虽有助于使刚需购房者长期受益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0436.wav", "duration": 3.5600625, "text": "本报讯记者汪红日前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0167.wav", "duration": 6.6840625, "text": "首先是重点城市楼市成交回落趋势明显"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0132.wav", "duration": 3.8000625, "text": "房价下跌压力将趋于缓解"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0239.wav", "duration": 3.981, "text": "正是有了这样一些严格的规定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0155.wav", "duration": 3.586, "text": "力争配租三万户以上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0190.wav", "duration": 6.197, "text": "一是工业化城镇化的引领推动作用将更加明显"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0238.wav", "duration": 5.0, "text": "落实环境监管责任和安全保障措施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0193.wav", "duration": 7.8840625, "text": "探索建立目标价格为核心的反周期补贴制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0337.wav", "duration": 5.9040625, "text": "浪潮将通过产品渠道服务价格的全方位发力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0418.wav", "duration": 5.5, "text": "当被问到对于被选为棉花糖女孩比较肉感的女生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0309.wav", "duration": 4.3100625, "text": "德国制造业最核心的技术就是嵌入式系统"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0203.wav", "duration": 4.797, "text": "支持行业协会办企业维护合法权益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0266.wav", "duration": 5.7679375, "text": "微软目前仍局限于健身手环领域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0320.wav", "duration": 3.6320625, "text": "现实的残酷落到报表上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0267.wav", "duration": 3.6380625, "text": "成熟的资本市场相对公平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0473.wav", "duration": 2.947, "text": "双方均有不同程度受伤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0372.wav", "duration": 5.3459375, "text": "但德维塔觉得归根到底还是小腿肌肉的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0161.wav", "duration": 4.598, "text": "龙湖地产有关人士对记者表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0195.wav", "duration": 4.834125, "text": "对债券投资人来说不是坏事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0392.wav", "duration": 3.724125, "text": "在参赛的二四支队伍中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0300.wav", "duration": 5.667, "text": "神雕的两个机身前后装有两对机翼"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0461.wav", "duration": 5.7099375, "text": "渣土车撞进路边民房女子抱小孩幸运逃生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0481.wav", "duration": 4.219, "text": "结果被店员搓走了二零零零元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0181.wav", "duration": 5.4910625, "text": "所以审批加上放款的时间最快也要在五个半月左右"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0307.wav", "duration": 5.1490625, "text": "两个机构专用席位列于买一和卖二的位置"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0203.wav", "duration": 3.8520625, "text": "有效控制陆海污染源"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0232.wav", "duration": 3.3160625, "text": "增长非常迅速"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0334.wav", "duration": 3.7168125, "text": "推动公司云服务战略的实施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0313.wav", "duration": 7.193, "text": "旗下拥有浪潮信息浪潮软件浪潮国际三家上市公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0389.wav", "duration": 3.8000625, "text": "在九月初参加考试时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0365.wav", "duration": 3.234, "text": "刚开始无谓的心理压力很大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0413.wav", "duration": 8.546125, "text": "亮点正是与陈凯琳互相了解中郑嘉颖也有出席"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0479.wav", "duration": 6.0, "text": "依法对一名藏匿打火机过检的旅客进行了行政处罚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0263.wav", "duration": 3.087, "text": "重点强调了其安全性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0333.wav", "duration": 6.8869375, "text": "公司拟计划通过集中竞价交易方式回购公司股份"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0169.wav", "duration": 8.7950625, "text": "这来外资进入我国房地产市场最宽松的政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0286.wav", "duration": 4.0, "text": "但却损害了消费者的利益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0470.wav", "duration": 5.099125, "text": "参考消息网九月一九日报道港媒称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0351.wav", "duration": 6.620875, "text": "曾春蕾和刘晓彤向各参赛队赠送了签名排球"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0256.wav", "duration": 4.4830625, "text": "他表示他肯定会与苹果展开合作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0246.wav", "duration": 3.942, "text": "比如南京机场高速一到节假日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0156.wav", "duration": 5.271, "text": "兰州房地产市场存在持续上涨可能"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0396.wav", "duration": 4.462875, "text": "经历过北京站和上海站两次比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0416.wav", "duration": 2.615, "text": "眼见后辈爬头"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0376.wav", "duration": 6.472875, "text": "他状告首尔某美容医院的官司将在十一月迎来终审"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0182.wav", "duration": 7.818, "text": "北京市管国管住房公积金中心先后发布通知"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0391.wav", "duration": 3.6450625, "text": "虽然留下了巨大的遗憾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0144.wav", "duration": 6.862, "text": "七月份各线城市房价分化仍然明显"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0357.wav", "duration": 6.8730625, "text": "中新网成都九月十五日电付敬懿十五日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0388.wav", "duration": 3.968, "text": "在中国的这一传统优势项目上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0442.wav", "duration": 5.901875, "text": "温州一闲置地块填满垃圾臭味浓烈附近居民不敢开窗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0426.wav", "duration": 2.6889375, "text": "陈展鹏风骚到场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0428.wav", "duration": 5.5639375, "text": "中新网九月二十五日电据台湾东森新闻报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0332.wav", "duration": 5.4760625, "text": "随着国内新能源车产业的迅猛发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0293.wav", "duration": 4.0810625, "text": "智能手机仍然有增长和爆发的空间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0293.wav", "duration": 3.4510625, "text": "一名印度高级官员透露"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0211.wav", "duration": 3.1959375, "text": "估计未来系统可能会改造"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0225.wav", "duration": 3.4620625, "text": "城投债作为一个信用产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0355.wav", "duration": 3.8459375, "text": "我必须要变的更加全面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0288.wav", "duration": 4.819, "text": "给一桩近十年之久的诉讼一个定论"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0151.wav", "duration": 6.375, "text": "上海深圳等主要城市也在公积金新政推动下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0226.wav", "duration": 8.944125, "text": "继续巩固棉油糖水果和蔬菜等产品供给保证地位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0141.wav", "duration": 4.0240625, "text": "今年资金规模接近七万亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0130.wav", "duration": 2.873, "text": "支出十二万亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0252.wav", "duration": 4.058, "text": "证监会新闻发言人邓给解释"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0398.wav", "duration": 3.546875, "text": "这会是一对绝对强大的对手"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0151.wav", "duration": 6.3689375, "text": "库存逆势攀升的根本原因在于供求错配"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0453.wav", "duration": 5.744125, "text": "杨柱军因涉嫌抢劫罪在市二中院受审"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0160.wav", "duration": 4.271, "text": "此前为限制外资炒房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0186.wav", "duration": 5.905, "text": "中原地产首席市场分析师张大伟告诉南都记者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0348.wav", "duration": 3.5451875, "text": "本报记者宋翔王薇"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0280.wav", "duration": 4.897, "text": "可有效降低信息泄漏的风险其次"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0241.wav", "duration": 4.9150625, "text": "保障鲜活农产品市场供应和价格稳定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0169.wav", "duration": 5.308, "text": "伴随着各地中住房公积金新政的落地实施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0483.wav", "duration": 4.0910625, "text": "他的义举感动了四里八乡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0411.wav", "duration": 6.900875, "text": "网友纷纷调侃道为了辟谣怀孕也是蛮拼的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0292.wav", "duration": 2.668, "text": "未必印在每个产品上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0183.wav", "duration": 8.1380625, "text": "如果申请公积金贷款或公积金贷款与商业贷款的组合贷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0150.wav", "duration": 2.867, "text": "据广州日报昨天报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0368.wav", "duration": 3.458, "text": "北京时间明天晚间十八点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0494.wav", "duration": 3.556125, "text": "让一些网友有如猜谜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0457.wav", "duration": 6.3039375, "text": "京华时报讯记者任珊记者从北京市教育考试院获悉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0471.wav", "duration": 4.3969375, "text": "连续撞了五辆小轿车最终才停了下来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0308.wav", "duration": 6.5, "text": "所以今年上半年公司在全国各地的员工人数大幅增加"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0439.wav", "duration": 6.522, "text": "参考消息网九月一七日报道港媒称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0481.wav", "duration": 6.1259375, "text": "凶手到岳池县石垭镇指认骗走孩子的现场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0300.wav", "duration": 6.306125, "text": "像苹果这样在产品上强调在本国设计的很少"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0243.wav", "duration": 3.6579375, "text": "几个亿美元的项目不断出现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0396.wav", "duration": 6.1469375, "text": "雅桑克莱的组合拳将祖耶夫重重击倒然而"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0462.wav", "duration": 3.3200625, "text": "却要承载一个成年人的体重"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0486.wav", "duration": 6.157, "text": "这名一五岁的花季少年最终送医救治无效死亡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0319.wav", "duration": 8.231, "text": "中国机床龙头企业沈阳机床在北京举行战略发布会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0254.wav", "duration": 6.6389375, "text": "而且这也可以看作是苹果利用硬件优势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0140.wav", "duration": 4.344, "text": "在了解宋芳的资产情况与需求之后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0383.wav", "duration": 5.0, "text": "朱婷以一百五十七分领先群芳"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0161.wav", "duration": 3.9260625, "text": "我国出台了一系列限外令"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0358.wav", "duration": 3.385, "text": "在复盘与俄罗斯一战时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0480.wav", "duration": 5.458, "text": "虾里有明显的胶状物质图片来源网友微信日前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0461.wav", "duration": 4.177, "text": "但赏月人群还是乱扔垃圾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0313.wav", "duration": 4.996, "text": "基本上是从二零一四年下半年才有明显的感觉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0459.wav", "duration": 3.232875, "text": "还把地面砸了个大坑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0162.wav", "duration": 6.0250625, "text": "以及在中国境内工作学习的境外个人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0462.wav", "duration": 3.130875, "text": "用来保存他们的藏品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0308.wav", "duration": 5.2249375, "text": "同比增长二百六十八点五百分之一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0285.wav", "duration": 3.0019375, "text": "还有谁能预测得准呢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0186.wav", "duration": 6.5700625, "text": "但年底出现翘尾行情并不代表楼市已经回暖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0495.wav", "duration": 4.032, "text": "让他们很担心会不会相互传染疾病"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0173.wav", "duration": 5.8470625, "text": "近期人民币贬值叠加资本外流预期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0166.wav", "duration": 4.908, "text": "而对国内比它更优秀的产品却集体失声"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0160.wav", "duration": 5.758, "text": "链家地产市场研究部张旭表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0304.wav", "duration": 5.6490625, "text": "收盘价十三点六五元于七月八日发布公告"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0445.wav", "duration": 5.160875, "text": "被拍下短片冠以野战之名在网上疯传"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0164.wav", "duration": 6.348, "text": "借全国大众创业万众创新活动周启动之势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0476.wav", "duration": 5.516875, "text": "坚持违法零容忍和高限处理的执法态度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0171.wav", "duration": 5.8349375, "text": "逐渐地撬开了上海这个外来公司很难生根的大都市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0329.wav", "duration": 3.8630625, "text": "以保证持续长久的黏性互动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0149.wav", "duration": 8.437, "text": "全国商品房待售面积比七月末增加了五百万平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0403.wav", "duration": 4.733875, "text": "八百米克里斯蒂娜哈灵"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0452.wav", "duration": 4.462125, "text": "李娜在一个商业活动中谈退役后的生活"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0413.wav", "duration": 3.2680625, "text": "所以自己也很喜欢性感打扮"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0424.wav", "duration": 2.691875, "text": "她去游泳解暑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0475.wav", "duration": 3.8881875, "text": "剩下了一二零零克食物"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0134.wav", "duration": 6.149, "text": "房地产开发企业到位资金十万亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0340.wav", "duration": 4.6169375, "text": "无论是城市交通建设还是机场运力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0164.wav", "duration": 3.666, "text": "土地市场热度可能有所下降"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0491.wav", "duration": 4.1591875, "text": "记者联系上胡先生才知虚惊一场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0366.wav", "duration": 4.2739375, "text": "实际上是同性恋者的传闻一直未停过"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0474.wav", "duration": 6.243875, "text": "唐山乐亭一船队在渤海与一山东渔船发生纠纷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0135.wav", "duration": 4.1499375, "text": "二初楼市迎来多项利好政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0225.wav", "duration": 3.0820625, "text": "渔政渔港建设工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0335.wav", "duration": 7.895, "text": "净利出现七点三百分之一的降幅"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0446.wav", "duration": 6.219, "text": "一位游客在拍照中说人家几千年都没有掉下来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0426.wav", "duration": 6.012, "text": "不过要看他心情工作同家人相处同小朋友"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0486.wav", "duration": 3.9438125, "text": "温州鹿城警方发布通报称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0249.wav", "duration": 4.852875, "text": "基本原则是预防为主纵深防御"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0332.wav", "duration": 4.543, "text": "科技创新带动了电话手表行业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0155.wav", "duration": 4.79, "text": "呈现出量价齐涨的局面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0315.wav", "duration": 3.223, "text": "这是摆在行业面前最大的技术难题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0140.wav", "duration": 5.4879375, "text": "北京要筹集建设各类保障性住房一百万套"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0215.wav", "duration": 8.792, "text": "城投债劵作为准市政债劵仍将是有效的融资工具"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0425.wav", "duration": 8.1318125, "text": "昨晚张保仔播映大结局故演员齐集饭局以及庆祝"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0223.wav", "duration": 6.0810625, "text": "是如何更好地防范城投债券可能出现的风险的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0230.wav", "duration": 5.088, "text": "关键是要把投资规模和债务规模"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0350.wav", "duration": 4.012, "text": "凝聚力一直都是中国女排的传统"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0228.wav", "duration": 6.079, "text": "对于如何建立规范的地方政府融资渠道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0187.wav", "duration": 6.881, "text": "并进而对城投债券进行唱空或做空"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0438.wav", "duration": 6.6020625, "text": "因在台风苏迪罗登陆期间在网络散布水库崩塌谣言"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0216.wav", "duration": 2.3399375, "text": "利润总额较大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0288.wav", "duration": 4.687, "text": "纳斯达克在此期间只涨了百分之十"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0196.wav", "duration": 3.0700625, "text": "我个人不赞成这一判断"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0488.wav", "duration": 7.115, "text": "温州永嘉县桥下镇吴山村的潘老伯一家六口"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0403.wav", "duration": 6.056875, "text": "近四千名跑步爱好者和其家人朋友齐聚于此"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0208.wav", "duration": 4.817, "text": "努力保护和修复渤海生态系统"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0399.wav", "duration": 3.9360625, "text": "观众们的鼓励也给了我力量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0437.wav", "duration": 8.2319375, "text": "山西省临汾市尧都区刘村镇刘南村一零名村干部"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0325.wav", "duration": 3.6319375, "text": "成飞集成的其他主营业务中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0154.wav", "duration": 4.0330625, "text": "今久正是在蓝色光标的技术支持下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0323.wav", "duration": 6.26, "text": "汉能曾计划今年底前将这一数字提高到三百家"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0311.wav", "duration": 4.691875, "text": "公司将更多地依靠经销商进行销售"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0217.wav", "duration": 5.7740625, "text": "同比较上年同期分别增长百分之三十和百分之二十八"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0447.wav", "duration": 8.295875, "text": "歧视中国药企改进质量提高信誉改善用户体验"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0338.wav", "duration": 7.1330625, "text": "意大利选手弗菜戈也说我们在来里约之前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0199.wav", "duration": 4.0739375, "text": "发挥国有大企业引领带动作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0129.wav", "duration": 3.5949375, "text": "也助推了土地市场的火爆"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0404.wav", "duration": 5.646, "text": "全球范围内的创收达到十一点八亿美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0215.wav", "duration": 5.641, "text": "必须珍惜抓住用好难得的历史机遇"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0201.wav", "duration": 7.2010625, "text": "一些规模较小的考试机构也将自动寻求合并"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0185.wav", "duration": 2.5559375, "text": "从最初的几十人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0424.wav", "duration": 2.6210625, "text": "此后便鲜有消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0470.wav", "duration": 10.8039375, "text": "村民不满行政批复诉市区政府区长庭应诉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0151.wav", "duration": 6.3379375, "text": "全国住房公积金贷款风险准备金已接近一百亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0353.wav", "duration": 4.6071875, "text": "过去一直背负着日本花滑界的重压"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0384.wav", "duration": 5.8940625, "text": "挺不容易的支持他追属属于自己的真正幸福"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0311.wav", "duration": 5.2529375, "text": "虽然国家在二零一零年就颁布了新能源补贴政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0419.wav", "duration": 2.9191875, "text": "搜狐娱乐讯日前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0386.wav", "duration": 3.4148125, "text": "人们首先会想到她的高度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0466.wav", "duration": 8.897, "text": "温州网八月二十七日讯记者项锐见习记者黄梦思"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0483.wav", "duration": 6.636, "text": "当事水产摊贩已退还郑女士一零零元购虾款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0447.wav", "duration": 11.214125, "text": "游客晋吉岛乘船颠骨折诉旅社索赔二零馀万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0174.wav", "duration": 3.179, "text": "刚需人群观望心理正逐步消散"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0367.wav", "duration": 7.8610625, "text": "也是中国双人滑在申雪赵宏退役后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0221.wav", "duration": 4.1020625, "text": "地方政府也要加大资金筹措力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0222.wav", "duration": 4.6700625, "text": "相当部分资产具有长期的直接收益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0471.wav", "duration": 5.79, "text": "高新区钓渭镇疙瘩沟村村民称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0150.wav", "duration": 7.9389375, "text": "公积金政策调整对于楼市成交刺激作用已初见瑞尔"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0359.wav", "duration": 3.146, "text": "结果等到的消息是她不能去世界杯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0308.wav", "duration": 3.927, "text": "毕竟与互联网融合时间不长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0306.wav", "duration": 3.1481875, "text": "给孩子配置智能手机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0123.wav", "duration": 5.714, "text": "对房地产市场的利好影响将是长期的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0324.wav", "duration": 4.2568125, "text": "汉能上半年业绩出现大幅下滑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0362.wav", "duration": 3.1700625, "text": "我们两家有时候比较像"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0416.wav", "duration": 2.4599375, "text": "感情一日千里"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0144.wav", "duration": 3.2749375, "text": "纠正违法用地一万起"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0344.wav", "duration": 5.0131875, "text": "无疑是擂台上最能引爆肾上腺素的震撼一幕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0383.wav", "duration": 3.8510625, "text": "而排名第三位的李尚洙"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0303.wav", "duration": 5.1000625, "text": "同比增长一百三十四点七百分之三"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0429.wav", "duration": 4.1999375, "text": "觉得对方只是分享生日上的喜悦"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0386.wav", "duration": 4.0, "text": "我们看到了自身强大的综合实力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0272.wav", "duration": 4.2850625, "text": "慈禧太后就因乔致庸创办了票号"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0143.wav", "duration": 6.6390625, "text": "同时对申请公积金贷款的缴纳时限调整为七个月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0478.wav", "duration": 4.4260625, "text": "一顿工作餐竟上二六个菜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0182.wav", "duration": 2.0500625, "text": "二到二"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0185.wav", "duration": 3.604, "text": "百分之五的网友认为不好说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0172.wav", "duration": 4.7989375, "text": "公积金提取一直是目前试图突破的内容"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0323.wav", "duration": 4.4199375, "text": "由于美的集团本身就是威灵电机的大股东"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0483.wav", "duration": 2.958, "text": "白花花的大米洒了一地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0385.wav", "duration": 5.8710625, "text": "高昂的交通和住宿成本让很多人望而却步"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0374.wav", "duration": 5.3710625, "text": "从而将战绩提升为七胜一负积二十一分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0145.wav", "duration": 8.0790625, "text": "地铺门店咨询量与七月同期相比约有百分之七左右的增幅"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0221.wav", "duration": 4.0540625, "text": "加强依法监管和制度建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0169.wav", "duration": 3.522, "text": "该存销比数值为七个月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0451.wav", "duration": 4.754875, "text": "游客铜缸刻字秀恩爱故宫已报警"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0449.wav", "duration": 6.9189375, "text": "渝蓉高速四川段计划明年通车被称最拖沓高速"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0374.wav", "duration": 3.5759375, "text": "迎来了结束铃声的敲响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0152.wav", "duration": 4.399, "text": "推动全国成交面积止跌反弹"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0328.wav", "duration": 6.140125, "text": "通过搭建具有领先技术水平的混合云解决方案平台"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0205.wav", "duration": 6.3249375, "text": "本报记者王颖春国家发改委近日发出通知"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0331.wav", "duration": 3.1179375, "text": "或者跟着广告哼起歌曲来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0135.wav", "duration": 3.389, "text": "政策内容主要涉及购房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0339.wav", "duration": 4.181875, "text": "女排姑娘们在日本的最后一夜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0326.wav", "duration": 2.991, "text": "其中十六家回复发函"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0138.wav", "duration": 5.16, "text": "从今年房企的买地情况来看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0186.wav", "duration": 3.2160625, "text": "这是自媒体时代的胜利"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0295.wav", "duration": 6.2790625, "text": "翻译过来就是加利福尼亚苹果公司设计"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0248.wav", "duration": 8.3679375, "text": "天然气用户为优先允许限制类和禁止类"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0194.wav", "duration": 5.259, "text": "通过产业拉动技术辐射和人员培训等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0340.wav", "duration": 3.2898125, "text": "七年之后宋安东二十五岁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0375.wav", "duration": 8.368875, "text": "本场比赛朱婷复出担任首发主攻并当选为当场最佳"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0462.wav", "duration": 8.708, "text": "村民不满地讨说法要求楼盘开发商停工被拘留"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0380.wav", "duration": 3.2900625, "text": "因为和高手过招有种红了眼的感觉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0441.wav", "duration": 2.96, "text": "只有一名船员得以逃生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0439.wav", "duration": 8.594, "text": "延庆法院一审以贪污罪判处钱某有期徒刑一一年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0349.wav", "duration": 5.037125, "text": "充分利用北京奥运后的丰富遗产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0453.wav", "duration": 6.6860625, "text": "信息时报讯记者周伟龙八月一零日下午"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0458.wav", "duration": 10.313, "text": "温州少年峡谷失踪续二零万馀元赔偿款执行到位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0322.wav", "duration": 4.913125, "text": "但其并未向记者透露项目盈利水平预测"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0147.wav", "duration": 4.5250625, "text": "而在兰州市新开楼盘集中的城郊区域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0495.wav", "duration": 3.312, "text": "一名路人疾步上前将男子拦开"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0193.wav", "duration": 7.078, "text": "建立起政府部门企业和中介机构各司其职的组织架构"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0359.wav", "duration": 7.381125, "text": "早到了退役年龄的庞清和佟健克服了伤病困难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0419.wav", "duration": 4.7309375, "text": "因为新剧的厂景和外景推迟了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0232.wav", "duration": 6.489, "text": "从二零零九年下半年就开始要求有关部门调研这一问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0436.wav", "duration": 9.443125, "text": "游客摔断腿旅游社赔三成因旅游时未尽提示义务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0180.wav", "duration": 3.6960625, "text": "点击进入股友会参与讨论"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0191.wav", "duration": 4.332, "text": "查清事故造成的危害及损失"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0291.wav", "duration": 3.115, "text": "这次我们同样做到了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0410.wav", "duration": 3.400875, "text": "陈凯琳也拒绝回答"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0435.wav", "duration": 5.025875, "text": "也有网友发出疑问若是李玉刚演唱李的话"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0288.wav", "duration": 3.8989375, "text": "但不适合那些笨重的解读设备"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0355.wav", "duration": 3.298125, "text": "身材偏瘦而且比较健康"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0190.wav", "duration": 3.548, "text": "加大示范区建设力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0360.wav", "duration": 4.5460625, "text": "作为就是我上场多去贯彻教练意图"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0409.wav", "duration": 4.214125, "text": "但网友的吐槽却一直没有停息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0217.wav", "duration": 8.5, "text": "坚持米袋子省长负责制和菜篮子市长负责制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0246.wav", "duration": 7.1960625, "text": "鼓励传统纺织家电汽车等一般制造业外移"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0243.wav", "duration": 5.509, "text": "按照种养规模和服务绩效安排工作经费"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0365.wav", "duration": 2.983875, "text": "两人的联手十分不顺利"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0179.wav", "duration": 5.759, "text": "该政策对于一线城市并不强制执行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0440.wav", "duration": 5.8569375, "text": "特别是师父赵本山也公开出面为大鹏点赞"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0149.wav", "duration": 5.289, "text": "公积金贷款及组合贷咨询量明显上涨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0358.wav", "duration": 7.108875, "text": "张春雨被对手的一记肘击打破了右侧眉弓"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0393.wav", "duration": 5.2629375, "text": "该湖区也将是明年奥运会赛艇比赛地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0425.wav", "duration": 3.2368125, "text": "老残样再度乍现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0495.wav", "duration": 4.1711875, "text": "这令被贷款的员工们寝食难安"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0265.wav", "duration": 2.858, "text": "乔布斯不是一名工程师"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0448.wav", "duration": 5.6279375, "text": "在村委会办公楼书记办公室"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0307.wav", "duration": 3.8190625, "text": "某个银行的系统采购"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0275.wav", "duration": 9.354, "text": "移动支付可调用的只能是消费者的小额度的钱财"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0488.wav", "duration": 3.438, "text": "她几乎刷遍了各大媒体"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0410.wav", "duration": 4.858875, "text": "她笑称我不想说我没有信心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0268.wav", "duration": 6.036, "text": "对于造成此次异常闪崩的原因目前尚未公布"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0131.wav", "duration": 4.314, "text": "确保完成六万户搬迁改造任务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0132.wav", "duration": 3.913, "text": "再次降低公积金贷款的门槛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0333.wav", "duration": 3.8969375, "text": "因此暂停或终止这些项目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0495.wav", "duration": 10.274875, "text": "游客要退团张家界低价团导游称信不信你走走不了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0475.wav", "duration": 6.899875, "text": "记者和宁波市三三改一拆办工作人员前往现场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0364.wav", "duration": 4.2009375, "text": "对我们来讲最重要的就是兢兢业业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0166.wav", "duration": 2.086, "text": "去行政化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0241.wav", "duration": 4.198, "text": "引导和鼓励社会资本投入农业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0485.wav", "duration": 2.8679375, "text": "图为几天前村民拍到的河面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0184.wav", "duration": 6.9720625, "text": "公积金贷款总共可少缴利息三十馀万"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0255.wav", "duration": 4.688, "text": "通过它能够实现药物的精准投送"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0361.wav", "duration": 4.3000625, "text": "并向对手发起了凶猛的反扑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0258.wav", "duration": 4.938, "text": "这个问题存在于软件捆绑方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0398.wav", "duration": 5.824, "text": "顽强的意志力博得了对手以及全场观众致意"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0391.wav", "duration": 5.734875, "text": "二零一五年第十二届女排世界杯战至第八轮"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0177.wav", "duration": 3.392, "text": "允许境外机构在境内设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0386.wav", "duration": 5.713875, "text": "这一单身宣言更加激发了日本粉丝对她的痴迷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0446.wav", "duration": 4.7990625, "text": "京华时报记者蒲东峰摄二零零七年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0180.wav", "duration": 6.444125, "text": "港澳台地区居民和华侨因生活需要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0207.wav", "duration": 5.4349375, "text": "积极推动种业农垦等方面改革"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0444.wav", "duration": 5.4919375, "text": "听说过段时间还要上场智能秤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0336.wav", "duration": 7.1120625, "text": "已经构成了对他人计算机信息系统的侵入控制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0364.wav", "duration": 3.171875, "text": "普鲁申科丝毫没有隐退的打算"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0377.wav", "duration": 4.136, "text": "主教练郎平获得最佳教练"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0431.wav", "duration": 4.9160625, "text": "施王祥被陆丰市纪委立案调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0166.wav", "duration": 4.464, "text": "中原地产市场研究部统计数据显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0188.wav", "duration": 4.256125, "text": "不断增强农业可持续发展能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0243.wav", "duration": 4.364, "text": "保险资产管理公司如符合有关规定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0163.wav", "duration": 6.928, "text": "这是今年五月份以来库存环比增幅最小的一次"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0414.wav", "duration": 4.0659375, "text": "朱祖儿操刀灰色调封面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0397.wav", "duration": 5.6230625, "text": "佟健希望自己能真的学到管理知识"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0275.wav", "duration": 3.78, "text": "具体如下方视频介绍所示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0339.wav", "duration": 3.0029375, "text": "这一状况有望发生改变"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0163.wav", "duration": 3.617, "text": "相关公司股票走势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0370.wav", "duration": 3.3051875, "text": "达到保护心脏的作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0127.wav", "duration": 3.162, "text": "按公司持有房产计征"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0379.wav", "duration": 5.302, "text": "二零零二年的美国盐湖城冬奥会上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0287.wav", "duration": 5.3259375, "text": "他拿出了数据作为证据截止目前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0237.wav", "duration": 5.0, "text": "审计署的审计结论表明"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0347.wav", "duration": 3.637125, "text": "赛道两边设置了许多专业摄像头"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0478.wav", "duration": 5.6159375, "text": "在馀票数量为售后现场关闭售票窗口"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0391.wav", "duration": 7.420875, "text": "由此可见北京市业馀排球联赛的影响力与号召力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0258.wav", "duration": 5.9670625, "text": "市场给予它的估值却异常克制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0243.wav", "duration": 6.6289375, "text": "该政策将于二零一二年施行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0122.wav", "duration": 4.6500625, "text": "另外要处理公积金异地使用的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0291.wav", "duration": 6.7510625, "text": "人民币的贬值很可能会增加苹果设备进口的费用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0247.wav", "duration": 4.849, "text": "提高大城市菜篮子产品的自给率"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0466.wav", "duration": 9.224125, "text": "游客称点海鲜太少被当地媒体老板受伤更重"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0380.wav", "duration": 5.53325, "text": "她就是因伤未能随队参加本次赛事的徐云丽"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0285.wav", "duration": 9.264875, "text": "谷歌十点五八分股价也出现一点百分之七十九的最大跌幅"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0433.wav", "duration": 4.941875, "text": "从下月起全面实施快递实名制登记"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0301.wav", "duration": 3.8049375, "text": "美国外交消息人士透露"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0214.wav", "duration": 5.518, "text": "有大车或是货车误闯或者闯进去了就不好办了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0186.wav", "duration": 3.935, "text": "对于实施住房限购政策的城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0425.wav", "duration": 3.8000625, "text": "否认了陈妍希疑似怀孕的传闻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0429.wav", "duration": 6.298125, "text": "好友陈妍希晒与潘玮柏搞怪合影为他庆生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0479.wav", "duration": 3.666, "text": "谢女士购买的盐水鸭外包装"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0278.wav", "duration": 4.461875, "text": "也就是所说的流动性蒸发事实上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0242.wav", "duration": 5.9600625, "text": "选择部分农业科研院所予以稳定支持"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0442.wav", "duration": 7.75, "text": "希望能从中国内地日益老龄化的一三亿人口中受益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0266.wav", "duration": 3.345, "text": "我们完全有理由树立创新自信"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0296.wav", "duration": 4.3299375, "text": "银行们对此已深耕多年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0389.wav", "duration": 4.797875, "text": "跳远阿莱恩卡马拉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0480.wav", "duration": 7.7099375, "text": "港媒中国成访日第一大客源国还会持续增加"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0226.wav", "duration": 3.5340625, "text": "不可能是完全无风险的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0354.wav", "duration": 3.364, "text": "促进北京排球事业发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0386.wav", "duration": 7.6230625, "text": "那就是姑娘们高举起惠若琪徐云丽和杨方旭的球衣"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0399.wav", "duration": 3.28, "text": "经过近两个星期的漫长等待"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0326.wav", "duration": 4.093, "text": "这个项目是自有资金投入"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0375.wav", "duration": 3.4179375, "text": "再度成为了比赛的得分王"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0267.wav", "duration": 5.7779375, "text": "苹果公司的市价将突破一万亿美金大关"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0204.wav", "duration": 11.8679375, "text": "目前我国正在稳步开展中小企业信贷资产证券化试点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0281.wav", "duration": 2.8459375, "text": "恰恰更需要我们有所作为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0251.wav", "duration": 6.781, "text": "着力建设国家商品粮供给重点保证区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0150.wav", "duration": 6.435, "text": "北京今年的土地出让金锁定在两千亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0245.wav", "duration": 7.651, "text": "加快理顺天然气价格与可代替能源的比价关系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0296.wav", "duration": 2.8569375, "text": "不少报道与评论表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0170.wav", "duration": 5.743, "text": "他是家居产品依托互联网技术升级的家居耐用品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0452.wav", "duration": 5.2531875, "text": "浙江温州一老人拿出全部积蓄并卖掉两套房子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0223.wav", "duration": 5.105, "text": "农业农村信息化十二五规划"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0227.wav", "duration": 6.5379375, "text": "对促进当地经济增长和政府财力的增长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0144.wav", "duration": 3.244, "text": "三是已有人员和机构"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0279.wav", "duration": 5.1550625, "text": "美国政府部门当地时间周四警示称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0430.wav", "duration": 4.0, "text": "搜狐娱乐讯据台湾媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0414.wav", "duration": 3.0869375, "text": "父女恋纸包不住火"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0428.wav", "duration": 5.802, "text": "对许玮甯单身说语气落寞表示我没有什么看法"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0257.wav", "duration": 4.02, "text": "往往就是公司陷入灾难的开始"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0237.wav", "duration": 6.6740625, "text": "全面落实农机具购置补贴各项管理制度和规定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0452.wav", "duration": 6.5600625, "text": "参考消息网一零月二九日报道港媒称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0411.wav", "duration": 5.9289375, "text": "身穿白色抹胸的她大秀性感好身材"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0398.wav", "duration": 3.996125, "text": "管理知识肯定都是用的上的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0320.wav", "duration": 7.391125, "text": "而这种策略带来的结果是市场份额的快速提升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0207.wav", "duration": 4.475125, "text": "科技科技进步贡献率百分之七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0198.wav", "duration": 5.517, "text": "奶类总产量七万吨水产品总产量七万吨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0176.wav", "duration": 3.957, "text": "公积金政策的放宽对二手房市场也产生了影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0365.wav", "duration": 8.016875, "text": "二零一五年世界田径锦标赛即将在北京拉开序幕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0227.wav", "duration": 3.827, "text": "继续加强优质棉花生产基地建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0333.wav", "duration": 4.1379375, "text": "锂电池作为新能源车的重要部件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0160.wav", "duration": 3.621, "text": "可使用起来让人啼笑皆非"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0251.wav", "duration": 5.6049375, "text": "并进而对城投债券进行唱空或做空"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0411.wav", "duration": 3.243125, "text": "更让粉丝看了鼻血直流"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0257.wav", "duration": 2.59, "text": "到底发挥了什么作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0396.wav", "duration": 3.378875, "text": "表明队长角色转换完成得还不错"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0238.wav", "duration": 4.6259375, "text": "形成一批具有国际竞争力的中国企业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0123.wav", "duration": 6.2960625, "text": "在限限制外商投资产业目录中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0460.wav", "duration": 5.363, "text": "看过湖北电梯吃人视频的不少上海年轻人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0406.wav", "duration": 4.213125, "text": "皮克斯终于有了拍摄玩具总动员四的计划"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0258.wav", "duration": 3.5, "text": "病毒武器的传染性超强"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0190.wav", "duration": 5.5999375, "text": "我委也注意到在企业债券存续期间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0304.wav", "duration": 7.8200625, "text": "美的美的在二零一四年三月正式发布智慧家庭战略"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0323.wav", "duration": 6.339125, "text": "将其列为恶意软件用户称其为流氓软件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0459.wav", "duration": 5.282, "text": "批评职能部门没有将消费者放在第一位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0433.wav", "duration": 3.0451875, "text": "二零一四三七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0274.wav", "duration": 3.660875, "text": "美国股市九点五十起"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0481.wav", "duration": 5.71675, "text": "村民多次向温岭市有关部门投诉反映"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0466.wav", "duration": 5.035875, "text": "游客在新加坡买祖母绿回国发现非纯天然"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0454.wav", "duration": 3.5920625, "text": "甚至还会爬到村民家中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0391.wav", "duration": 3.051, "text": "谢谢每一个支持我们的人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0249.wav", "duration": 4.293, "text": "继续加大农业农村人才培养力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0312.wav", "duration": 5.817, "text": "中国家电企业现在正面临前所未有的挑战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0435.wav", "duration": 3.9809375, "text": "南粤清风网通报该案详情"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0198.wav", "duration": 5.1909375, "text": "建立草原增加碳汇和生态补偿机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0133.wav", "duration": 3.491, "text": "此次政策调整也有较好的针对性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0398.wav", "duration": 4.375, "text": "男子冰球的战绩均在二十五名左右"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0324.wav", "duration": 3.6010625, "text": "确保信号与手机相当才真正投放市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0143.wav", "duration": 3.823, "text": "当地产商的效果预期不断提高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0376.wav", "duration": 6.1530625, "text": "并邀请京城排球界全部媒体参加报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0208.wav", "duration": 3.9810625, "text": "发展农村服务业和乡村企业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0147.wav", "duration": 4.75, "text": "再购房执行首套房贷款政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0180.wav", "duration": 3.796, "text": "允许机构和个人在中国购房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0223.wav", "duration": 7.1949375, "text": "切实解决损害公众健康影响科学发展的突发环境问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0293.wav", "duration": 4.858125, "text": "这不仅创下苹果公司自二零一四年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0267.wav", "duration": 4.3779375, "text": "移动支付又会产生非常敏感的操作信息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0315.wav", "duration": 5.650125, "text": "上半年营业收入二十一点零八亿港元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0369.wav", "duration": 7.962875, "text": "上届莫斯科世锦赛上拿到的金牌的四位选手悉数出战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0339.wav", "duration": 3.327875, "text": "近日日本媒体曝出惊人消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0229.wav", "duration": 6.3409375, "text": "要依法追究管理部门责任企业及有关人员的责任"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0166.wav", "duration": 4.843, "text": "公积金在申请放贷流程上并未提速"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0303.wav", "duration": 4.9299375, "text": "有黑客在网络上兜售车主信息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0163.wav", "duration": 3.3840625, "text": "深圳环比上涨百分之七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0473.wav", "duration": 4.777125, "text": "门头沟区长张贵林出庭应诉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0244.wav", "duration": 5.2370625, "text": "要继续深化天然气价格改革"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0315.wav", "duration": 4.702875, "text": "只要辐射值小于或等于国家标准值"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0470.wav", "duration": 3.228, "text": "只需要一个账户名和密码"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0334.wav", "duration": 7.5, "text": "自动化生产线的柔性改造也是其面临的一大难题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0302.wav", "duration": 3.3679375, "text": "苹果的市值可能将突破万亿美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0174.wav", "duration": 4.385, "text": "搭起了全国地产推广新媒体的版图"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0342.wav", "duration": 3.6120625, "text": "远远无法和北京相提并论"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0234.wav", "duration": 4.853, "text": "我们还控制了投融资平台公司发债的范围"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0327.wav", "duration": 3.991, "text": "国产服务器即使是自主设计"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0365.wav", "duration": 5.218, "text": "彭博一英里接力赛区别于其他跑步活动的是"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0255.wav", "duration": 5.108, "text": "催生着移动支付技术的大跃进"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0280.wav", "duration": 4.6939375, "text": "原告当地时间周二在法庭上表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0236.wav", "duration": 5.9859375, "text": "我国地方政府的累积债务相对于偿付能力来看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0154.wav", "duration": 5.082, "text": "商品房销售额同比上涨超过了百分之四十"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0394.wav", "duration": 6.629875, "text": "但大部分都是常年活跃在业馀排球圈里成熟队球"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0202.wav", "duration": 3.943, "text": "中国对农产品流通政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0308.wav", "duration": 5.7411875, "text": "杨某等四人一同在深圳成立了安丰公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0233.wav", "duration": 4.291, "text": "健全水产良良种体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0356.wav", "duration": 2.6790625, "text": "当时确实没有什么心理准备"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0368.wav", "duration": 4.4181875, "text": "孙杨的心肌损伤是在感冒后引发的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0254.wav", "duration": 5.2059375, "text": "其股票价格在十五点七六美元上下徘徊"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0364.wav", "duration": 4.496, "text": "颜妮坦言自己的发挥也不是特别稳定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0148.wav", "duration": 3.607, "text": "但库存压力却难以缓减"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0139.wav", "duration": 4.3449375, "text": "相继有一百多个城市出台了公积金新政"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0141.wav", "duration": 3.813, "text": "为房地产商提供系统化的服务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0237.wav", "duration": 4.2889375, "text": "远低于发生债务危机的欧美国家"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0261.wav", "duration": 3.6109375, "text": "排名前十的科技公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0171.wav", "duration": 5.36, "text": "而申请公积金贷款方面还是需要走严格的流程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0355.wav", "duration": 8.5, "text": "夺得国际田联竞走世界杯男子二十公里竞走银牌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0361.wav", "duration": 4.546875, "text": "在金牌搭档罗宾索尔科维退役之后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0148.wav", "duration": 4.053, "text": "中国市场空间多样化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0266.wav", "duration": 2.7330625, "text": "缺乏新的业务增长点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0465.wav", "duration": 2.512, "text": "拿出了自己全部的积蓄"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0200.wav", "duration": 4.215125, "text": "促进各种所有制企业共同发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0294.wav", "duration": 2.901125, "text": "也在所不惜的最后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0199.wav", "duration": 3.5240625, "text": "优化产业结构与布局"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0449.wav", "duration": 6.8249375, "text": "此前温州政协委员连续两届提出要求整治垃圾污染问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0481.wav", "duration": 8.989, "text": "可实际上维护国家边海防安全保护国家利益不受侵犯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0484.wav", "duration": 6.2580625, "text": "温州化工仓库起火殃及附近河流大量死鱼漂河面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0332.wav", "duration": 7.8769375, "text": "美的最近还把洗碗机事业部合并到美的的厨房电器事业部"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0184.wav", "duration": 3.509, "text": "依托蓝色光标的强大平台"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0324.wav", "duration": 5.0, "text": "即使今后美芝压缩机被威灵电器兼并"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0157.wav", "duration": 3.952, "text": "很难出现去年那样的楼市暴涨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0198.wav", "duration": 5.088, "text": "将切实减轻考生经济负担"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0222.wav", "duration": 6.0599375, "text": "建设国家级农作物育制种基地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0329.wav", "duration": 3.6960625, "text": "如果威灵电器兼并美芝压缩机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0226.wav", "duration": 4.0970625, "text": "坚持和完善渔用柴油补贴政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0367.wav", "duration": 3.2468125, "text": "中国队虽然如愿夺冠"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0172.wav", "duration": 4.47, "text": "甚至开始进入了供过于求的局面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0370.wav", "duration": 4.0490625, "text": "拿到了明年里约奥运会的入场券"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0283.wav", "duration": 3.042, "text": "我们外人是无法知道真相的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0384.wav", "duration": 3.8098125, "text": "不仅要看他的竞技状态恢复程度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0391.wav", "duration": 5.0610625, "text": "铁饼克里斯托弗哈特灵"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0484.wav", "duration": 4.276125, "text": "引来周边大批村民哄抢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0260.wav", "duration": 6.207, "text": "而苹果虽有可能卖出不少手表给忠实的粉丝"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0176.wav", "duration": 5.399, "text": "正式放松外资投资我国房地产相关规定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0439.wav", "duration": 3.8469375, "text": "呼救报警时称有人入屋行凶"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0229.wav", "duration": 3.2430625, "text": "老龄事业十二五规划"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0250.wav", "duration": 2.7899375, "text": "树立绿色低碳发展理念"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0487.wav", "duration": 6.0080625, "text": "村支书遭集体举报买鼠药欲投毒报复村民"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0330.wav", "duration": 4.3449375, "text": "白电行业将进入最惨烈的一年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0379.wav", "duration": 3.702125, "text": "评价自己发挥的最好一场其实就是本场比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0490.wav", "duration": 3.4150625, "text": "此前已被列入拆除范围"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0227.wav", "duration": 4.0330625, "text": "着力强化技术装备支撑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0198.wav", "duration": 4.7990625, "text": "如何为企业提供信息避免海外投资风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0470.wav", "duration": 5.9350625, "text": "二九岁的章某被控洗钱一二二万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0389.wav", "duration": 3.457, "text": "但更多的是落实在技术环节的细腻方面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0432.wav", "duration": 4.0, "text": "按照国家邮政总局统一部署"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0172.wav", "duration": 3.798, "text": "根源是体制机制存在弊端"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0358.wav", "duration": 5.105, "text": "但就在外界期待着冰王子的卷土重来时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0205.wav", "duration": 5.213, "text": "运用符合世界贸易组织规定的相关措施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0437.wav", "duration": 6.9038125, "text": "短短二零零字歌词运用诗词典故三六处"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0279.wav", "duration": 4.3559375, "text": "而是将其转化成唯一的临时编码"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0468.wav", "duration": 4.556875, "text": "因为没有哪个运动员不想表现出最好的自己"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0346.wav", "duration": 5.728, "text": "此轮战罢后积分榜前四名排位没有任何变化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0443.wav", "duration": 3.1599375, "text": "月亮看起来会比往常大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0458.wav", "duration": 5.1159375, "text": "新京报快讯记者林野记者今天傍晚获悉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0416.wav", "duration": 5.0490625, "text": "陈冠希穿休闲短袖配宽松裤子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0132.wav", "duration": 5.685, "text": "推进上百个棚改项目全面启动实施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0412.wav", "duration": 3.313, "text": "戏中的角色常常以性感打扮示人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0313.wav", "duration": 4.02, "text": "给孩子买儿童电话手表有必要吗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0148.wav", "duration": 5.9820625, "text": "北京公积金贷款首付比例松绑一周后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0245.wav", "duration": 3.634875, "text": "推进订单生产和农超对接"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0209.wav", "duration": 5.283, "text": "新建旱涝保收高标准农田四亿亩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0263.wav", "duration": 5.410875, "text": "苹果早晚将步之前过气股王的后尘"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0126.wav", "duration": 7.77, "text": "网友的置业目的为首套房自住的占到了百分之六十"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0307.wav", "duration": 5.0610625, "text": "一定程度上影响了资源整合的效率"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0461.wav", "duration": 9.459, "text": "村妇为缓解丈夫病痛种罂丽当药用被判刑六个月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0311.wav", "duration": 4.0551875, "text": "有业内人士分析指出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0148.wav", "duration": 6.443, "text": "看楼量对比上一周末大概增加百分之七左右"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0317.wav", "duration": 5.109875, "text": "儿童电话手表正好解决了这两个问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0341.wav", "duration": 4.806875, "text": "可以有效的抵消年龄所带来的速度劣势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0383.wav", "duration": 3.901875, "text": "整个队伍承受了很大的困难和考验"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0204.wav", "duration": 6.2570625, "text": "逐步实现战略运营管管理全球化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0198.wav", "duration": 4.999, "text": "力争渤海近岸海域水质总体改善"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0207.wav", "duration": 7.473, "text": "落实土壤改良地力培肥等措施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0239.wav", "duration": 5.4539375, "text": "为各地的基础设施建设提供有制度保障的融资渠道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0204.wav", "duration": 5.269, "text": "发改委双节期间重点关注电商促销行为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0421.wav", "duration": 2.974875, "text": "对于天津爆炸时间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0242.wav", "duration": 3.9929375, "text": "更加有利于价值投资理念形成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0479.wav", "duration": 7.327125, "text": "梁某某被一审法院以故意伤害罪判处有期徒刑三年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0231.wav", "duration": 3.41, "text": "控制在合理的范围内"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0209.wav", "duration": 2.613, "text": "建立稳定的产销关系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0450.wav", "duration": 3.0920625, "text": "餐厅有没有权力罚款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0223.wav", "duration": 5.251, "text": "加大动物强制免疫补贴力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0468.wav", "duration": 2.345, "text": "那原因到底在哪里呢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0283.wav", "duration": 6.0690625, "text": "在安卓出货量中的占比减少到了百分之六"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0409.wav", "duration": 3.8569375, "text": "洪永城还主动跟陈展鹏碰杯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0404.wav", "duration": 2.8789375, "text": "也等待了很长时间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0228.wav", "duration": 4.536, "text": "国务院批准银行系基金公司再扩容"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0198.wav", "duration": 5.8399375, "text": "按照分类指导突出重点梯次推进的思路"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0329.wav", "duration": 4.688, "text": "核心架构也基本照抄国外厂商"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0222.wav", "duration": 3.8780625, "text": "央企在境外投资面临的问题很多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0272.wav", "duration": 8.011, "text": "之前刚刚提出为女性员工提供冷冻卵子费用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0312.wav", "duration": 5.412125, "text": "也是顺应互联网时代管理扁平化的趋势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0487.wav", "duration": 3.1740625, "text": "她的基因竟是个纯爷们"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0122.wav", "duration": 5.931, "text": "有百分之五的网友选择了提高公积金贷款额度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0470.wav", "duration": 10.238, "text": "港媒中国出现多中心大都市郊区需要更多移民"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0493.wav", "duration": 4.022, "text": "其中一女法官尚在哺乳期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0319.wav", "duration": 6.3410625, "text": "占营业收入的比例是五点百分之四十七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0152.wav", "duration": 5.11, "text": "蓝色光标作为全球首屈一指的广告服务商"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0379.wav", "duration": 5.928, "text": "以大球套小球为设计理念"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0321.wav", "duration": 4.6390625, "text": "赵继宏老板电器做厨电已经三十多年了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0153.wav", "duration": 4.414, "text": "宋芳必须再掏出完全属于自己的资金"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0137.wav", "duration": 3.927, "text": "这成为今久转型的起点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0272.wav", "duration": 4.583, "text": "这些中国游戏公司大多成长于中国市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0301.wav", "duration": 3.8769375, "text": "这样的做法当然是企业行为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0421.wav", "duration": 3.1010625, "text": "当时女方坦承已分居"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0369.wav", "duration": 6.5, "text": "去年六月下旬举行的中国国际精英赛北仑站"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0270.wav", "duration": 4.465125, "text": "你必须保证自己了解稳态市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0125.wav", "duration": 2.945, "text": "钱烧完了东西出不来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0125.wav", "duration": 3.669, "text": "为了将后辈的婚姻分险隔断"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0434.wav", "duration": 9.0, "text": "二十七日深夜终于在云林县一家废弃空屋中救出了黄立坤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0330.wav", "duration": 4.9389375, "text": "产品创新其实也是一个双向互动的过程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0292.wav", "duration": 3.2170625, "text": "纷至沓来的报道显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0271.wav", "duration": 4.1639375, "text": "消费者对便捷性的要求可能会更高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0220.wav", "duration": 4.3819375, "text": "建立公开透明的信息发布机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0430.wav", "duration": 3.093, "text": "但几乎一个都没有实现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0390.wav", "duration": 4.2149375, "text": "拿下全场最高分的朱婷赛后表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0132.wav", "duration": 7.4049375, "text": "绿地保利万达分列性价比最高房企的二三四名"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0290.wav", "duration": 6.0, "text": "且把服务范围特别局限在医疗健康领域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0231.wav", "duration": 4.5759375, "text": "地方投融资平台公司申请发行债券"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0255.wav", "duration": 5.491, "text": "美国将向印度转让两项军事技术"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0368.wav", "duration": 5.5139375, "text": "结合业馀排球特点做出细微调整制定而成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0159.wav", "duration": 8.0869375, "text": "一百万元的贷款额度能满足大部分首套刚需的贷款需求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0476.wav", "duration": 3.629875, "text": "被餐厅罚款二四零零元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0180.wav", "duration": 3.3299375, "text": "可能引发房价泡沫风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0209.wav", "duration": 8.068, "text": "严厉打击春运期间违规上调票价价外收费等违法行为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0126.wav", "duration": 3.67, "text": "鼓励购房者积极缴纳公积金"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0343.wav", "duration": 5.083, "text": "三级跳克里斯丁吉尔奇"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0427.wav", "duration": 5.198, "text": "恰巧昨日记者碰见阮经天出门倒垃圾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0368.wav", "duration": 4.5500625, "text": "见此情景韩国队的信心受到了打击"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0348.wav", "duration": 5.0349375, "text": "高清图女排凯旋郎平受热捧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0346.wav", "duration": 5.1530625, "text": "场馆建设一简约而不简单"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0219.wav", "duration": 5.057, "text": "落实农资综合补贴动态调整机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0453.wav", "duration": 4.463875, "text": "中纪委监察部网站发布消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0231.wav", "duration": 7.033, "text": "再次听取全国民用核设施综合安全检查情况汇报"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0429.wav", "duration": 3.8139375, "text": "一直传他跟洪永城不和"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0304.wav", "duration": 4.4338125, "text": "智能手机特定的上网和游戏功能"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0365.wav", "duration": 5.7380625, "text": "还与巴西队的加比一起入选最佳主攻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0492.wav", "duration": 6.8930625, "text": "港媒称内地为国际市场修改动画片妖怪不能吃唐僧肉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0345.wav", "duration": 4.058, "text": "我觉得自己的脚伤已经完全恢复了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0467.wav", "duration": 3.488, "text": "花费几千元至上万元不等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0159.wav", "duration": 3.604, "text": "各城市库存压力正在减小"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0457.wav", "duration": 8.3400625, "text": "游客三亚海滩赏月后留二九吨垃圾三百人连夜清理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0170.wav", "duration": 4.0, "text": "提升新型城镇化质量和效益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0472.wav", "duration": 6.0608125, "text": "港媒中国发布金牌月嫂标准实用性遭质疑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0450.wav", "duration": 8.806125, "text": "村内常有蛇出没疑从养蛇村民中爬出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0267.wav", "duration": 4.967875, "text": "上一次工业革命我们落在了西方发达国家后面很远"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0489.wav", "duration": 5.1240625, "text": "每天烧香敬拜办事处主任"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0235.wav", "duration": 5.34, "text": "江苏省交通厅相关负责人昨日对记者表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0173.wav", "duration": 4.1939375, "text": "说明各城市涨价的时机还不成熟"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0378.wav", "duration": 4.1799375, "text": "三场比赛朱婷均有出色表现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0449.wav", "duration": 6.756125, "text": "港媒道士下山被批引发网友广泛讨论"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0429.wav", "duration": 3.036875, "text": "不好的事情发生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0187.wav", "duration": 8.312, "text": "带动和规范民间资本进入农产品流通领域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0349.wav", "duration": 7.5, "text": "将这份快乐与跑对跑步的执着传递给身边的好友"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0373.wav", "duration": 4.3049375, "text": "标志着我国体育开始走向国际化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0360.wav", "duration": 6.2109375, "text": "花样滑冰大奖赛中国杯常年在北京和上海之间轮换"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0459.wav", "duration": 4.0, "text": "一旦雷雨天游客在亭内出事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0261.wav", "duration": 5.2889375, "text": "这种巨大且异乎寻常的抛售量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0230.wav", "duration": 3.4160625, "text": "加快现代养殖业发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0310.wav", "duration": 3.7060625, "text": "企业所有的目标都是空洞的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0192.wav", "duration": 5.5660625, "text": "努力打造现代农业发展的典型和样板"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0218.wav", "duration": 4.6130625, "text": "引导土地承包经营权向生产和经营能手集中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0134.wav", "duration": 3.1600625, "text": "住宅销售额也增长了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0257.wav", "duration": 4.3579375, "text": "华尔街并不认可游戏这种商业模式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0425.wav", "duration": 2.723125, "text": "问及见面后两人怎样庆祝"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0132.wav", "duration": 3.813, "text": "不利于继续大规模拿地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0232.wav", "duration": 5.386, "text": "设定政府性债务风险控制指标和标准"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0197.wav", "duration": 4.6779375, "text": "各地各部门加强组织领导"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0333.wav", "duration": 5.8819375, "text": "三巨头中的格力海尔均出现不同程度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0204.wav", "duration": 5.337, "text": "研究部署在城市优先发展公共交通"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0321.wav", "duration": 3.6319375, "text": "新能源汽车市场在逐步启动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0201.wav", "duration": 3.224, "text": "今年国庆应该可以实施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0223.wav", "duration": 4.0060625, "text": "到了出口车道再把通行卡收回去"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0291.wav", "duration": 3.5910625, "text": "在类似印度之类的新兴市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0451.wav", "duration": 5.491, "text": "李娜产女后首次亮相运动员掌握英语很重要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0153.wav", "duration": 4.927, "text": "可转化为住房银行资本金"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0216.wav", "duration": 5.923, "text": "同时改善步行自行车出行条件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0426.wav", "duration": 1.859125, "text": "祝可爱的你"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0296.wav", "duration": 8.4620625, "text": "认为美国此举违反世界贸易组织规则和美国国内法"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0313.wav", "duration": 4.479, "text": "截至二零一四年十二月三十一日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0131.wav", "duration": 7.693, "text": "万科以百分之五的票数获选性价比最高的房企"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0493.wav", "duration": 5.735125, "text": "温州城管协管员掌掴女清洁工被停职"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0344.wav", "duration": 5.547875, "text": "来为二零二二年的冬奥会积累经验"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0240.wav", "duration": 3.8560625, "text": "使得很多投融资平台公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0160.wav", "duration": 6.4629375, "text": "兰州房地产市场销量增加明显"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0264.wav", "duration": 5.277, "text": "除了苹果上周公布的选定合作伙伴"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0177.wav", "duration": 4.0639375, "text": "园区总建筑面积一万平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0476.wav", "duration": 6.1169375, "text": "游客在济南景区水池许愿观赏莲被砸成马蜂窝"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0373.wav", "duration": 3.551, "text": "其中郎平主教练最为辛苦"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0345.wav", "duration": 4.7729375, "text": "北京张家口计划启用一二个竞赛场馆"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0455.wav", "duration": 4.3000625, "text": "本月中下旬小行星撞地球"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0476.wav", "duration": 3.4880625, "text": "我局将给予五万元奖励"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0413.wav", "duration": 2.922125, "text": "对着镜头吐舌卖萌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0365.wav", "duration": 3.2580625, "text": "此次北京申办冬奥会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0408.wav", "duration": 2.4978125, "text": "除了去年结婚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0489.wav", "duration": 4.5, "text": "张先生购买的四零零元玛卡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0321.wav", "duration": 5.8299375, "text": "其目前的股票市值已经不能完全反映公司价值"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0435.wav", "duration": 4.587875, "text": "导游还诱骗游客加钱走特殊路线"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0378.wav", "duration": 6.574, "text": "女排三十一日本进军里约众将欢度欢庆"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0186.wav", "duration": 3.3340625, "text": "在这一政策出台后匆忙购房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0143.wav", "duration": 8.785, "text": "生产性科技及高技术服务业发展用地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0270.wav", "duration": 4.2359375, "text": "大多数游戏产品往往病毒式地成长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0141.wav", "duration": 4.831, "text": "在鼓励盘活利用现有用地方面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0454.wav", "duration": 5.8461875, "text": "杀害中传失联女主嫌犯想找个无辜的人发泄"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0133.wav", "duration": 4.032, "text": "成千上万的产品通过无线连接"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0406.wav", "duration": 5.396, "text": "这部电影的失败并没有影响囧瑟夫的心情"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0130.wav", "duration": 3.396, "text": "同比名义增长许多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0184.wav", "duration": 4.598, "text": "关于智能家居你必须懂的五件事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0405.wav", "duration": 4.626, "text": "只以六百四十八万美元的进账排名第八"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0303.wav", "duration": 4.0600625, "text": "为中国的智能制造产业做出贡献"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0163.wav", "duration": 5.406, "text": "目的也是为了夯实楼市回升的基础"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0431.wav", "duration": 5.511, "text": "李嘉诚回应撤资不爱国指控完全不成立"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0409.wav", "duration": 4.4660625, "text": "不仅摆脱神雕侠侣时期的小笼包名号"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0420.wav", "duration": 2.8110625, "text": "谢贤怒打曾江"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0399.wav", "duration": 5.041, "text": "志愿者除了要具备流利的英语交流能力外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0479.wav", "duration": 4.451875, "text": "一身保安制服的他准时站在校门口"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0169.wav", "duration": 3.6690625, "text": "实施较大幅度的补贴政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0256.wav", "duration": 5.3469375, "text": "又如何和政府银行搞好关系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0436.wav", "duration": 6.6069375, "text": "港报评上海迪尼士不意味着香港迪尼士的没落"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0221.wav", "duration": 5.9040625, "text": "会议讨论进一步加强环境保护工作的意见"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0325.wav", "duration": 6.0539375, "text": "加上随身携带的便捷性和流畅的操作体验"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0181.wav", "duration": 6.2790625, "text": "松绑二套房贷认定标准降低二套房贷首付比例"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0249.wav", "duration": 4.723, "text": "考生对考试收费问题反映较多等问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0266.wav", "duration": 5.865, "text": "乔斯维亚克就很少在公众场合露面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0167.wav", "duration": 5.717, "text": "只要了解一点核桃锁信息的人都能第一时间感受到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0299.wav", "duration": 3.4050625, "text": "这些手表将配置不同的表带"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0122.wav", "duration": 4.191, "text": "而落地后的产品与客户的期待甚远"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0184.wav", "duration": 5.745, "text": "房地产价格调整还未完全结束"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0241.wav", "duration": 5.5960625, "text": "强化流通基础设施建设和产销信息引导"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0412.wav", "duration": 5.3251875, "text": "陈妍希今天五月二日下午出席公益活动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0321.wav", "duration": 4.2259375, "text": "移动互联以前改变的是软的层面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0350.wav", "duration": 3.467, "text": "仅有三个场馆需要新建"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0237.wav", "duration": 7.4350625, "text": "探索实施生物农药低毒农药使用补助政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0301.wav", "duration": 7.4770625, "text": "位于后方的主翼中央挂着两具涡轮风扇发动机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0176.wav", "duration": 9.584, "text": "可以北京四环内唯一的国际化共享办公园区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0213.wav", "duration": 8.4439375, "text": "我们应该建设可控的规范化的地方政府融资机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0259.wav", "duration": 7.813, "text": "只是这种情况下心率传感器会每隔十秒进行一次"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0167.wav", "duration": 5.439, "text": "我现在就是担心自己哪天突然出现个什么情况"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0162.wav", "duration": 3.433, "text": "拓展货币政策操作空间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0246.wav", "duration": 4.642, "text": "支持主要农产品优势产区建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0471.wav", "duration": 6.214125, "text": "游客不满小孩超高补票与景区工作人员群殴"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0416.wav", "duration": 7.781, "text": "使得宝宝刚出生就有了一大班星星级干爹干娘"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0312.wav", "duration": 3.7470625, "text": "但是市场启动不像预期那么快"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0287.wav", "duration": 3.413, "text": "市场份额做到了前十位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0415.wav", "duration": 6.492875, "text": "一向都是在圈子中人缘甚佳的谢天华"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0421.wav", "duration": 3.3459375, "text": "在当地逗留了三四天"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0423.wav", "duration": 2.6760625, "text": "并推断其已怀孕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0429.wav", "duration": 3.1430625, "text": "让粉丝听了又惊又喜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0349.wav", "duration": 4.7580625, "text": "裁判员队伍和参赛代表队依次入场亮相"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0470.wav", "duration": 5.4829375, "text": "游客在日照旅游吃海鲜太少被围殴警方都有错"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0455.wav", "duration": 7.5849375, "text": "游学夏令营的无奈花豪华团价格吃喝难保"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0176.wav", "duration": 3.2840625, "text": "部分客户甚至等两个多月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0313.wav", "duration": 4.588, "text": "产能现在已经满足不了订单需求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0458.wav", "duration": 5.542, "text": "湖北荆州吃人电梯盖板设计不合理供图"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0200.wav", "duration": 6.9490625, "text": "着力建设重点推进率先实现和稳步发展三类区域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0328.wav", "duration": 4.631, "text": "同比下跌十三六点百分之六"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0434.wav", "duration": 5.8310625, "text": "陆丰市纪委决定给予施王祥开除党籍处分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0130.wav", "duration": 5.059, "text": "在商品房性价比的选择上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0266.wav", "duration": 4.245, "text": "任何的电子行为都不免会留下痕迹"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0410.wav", "duration": 2.850125, "text": "纷纷留言点赞"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0398.wav", "duration": 5.878875, "text": "而二零零八年举办夏季奥运会所留下的宝贵遗产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0420.wav", "duration": 7.1161875, "text": "两人被传媒追问恋情时都要求给予空间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0222.wav", "duration": 7.052, "text": "加强新增千亿斤粮食生产能力规划的田间工程建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0218.wav", "duration": 5.062, "text": "城投债券作为中国债券市场的准市政债"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0415.wav", "duration": 7.264875, "text": "陈妍希一直努力让自己的脸圆圆脸变瘦"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0409.wav", "duration": 8.9150625, "text": "因参演剧集殭而与陈嘉宝及赖慰玲成为好姐妹"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0432.wav", "duration": 6.7519375, "text": "渔船海上爆炸沉没四名渔民漂流三天获救"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0323.wav", "duration": 8.3669375, "text": "美的不能因自动化生产增加制造成本而让用户买单"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0406.wav", "duration": 7.6120625, "text": "今天确定了上映日期二零一七年四月十七日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0127.wav", "duration": 4.059, "text": "大智慧阿思达克通讯社"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0187.wav", "duration": 3.5479375, "text": "加快老旧渔船更新改造"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0197.wav", "duration": 4.3479375, "text": "政府提供的服务企业是否需要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0458.wav", "duration": 7.7990625, "text": "温州城管掌掴女清洁工已被停职检查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0144.wav", "duration": 5.368, "text": "这时候更要求服务商具备思考和行动的一致性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0403.wav", "duration": 5.949, "text": "徐永昊的站立打击技术在该级别中堪称翘楚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0201.wav", "duration": 3.271, "text": "至二零一一年六月底"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0384.wav", "duration": 5.302, "text": "中国冰雪健儿终于站到了冬奥会的最高领奖台"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0445.wav", "duration": 6.974125, "text": "杀人犯抢劫获刑未查出旧案警方指纹识别有遗漏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0389.wav", "duration": 4.7380625, "text": "近来有关里约水污染问题备受关注"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0324.wav", "duration": 6.2009375, "text": "同比去年降零点六百分之六"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0418.wav", "duration": 3.431875, "text": "陈妍希穿着粉色上衣"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0324.wav", "duration": 6.593, "text": "其中浪潮达到了百分之六十的市场占有率"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0323.wav", "duration": 6.5400625, "text": "增持后持股比例为六十二点百分之二十三"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0494.wav", "duration": 8.8820625, "text": "湖北六零后求婚九零后被指责欠款六千万因诈骗取保候审"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0386.wav", "duration": 3.343, "text": "可以在世界范围内立足"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0350.wav", "duration": 4.661125, "text": "相较于其精湛凶猛的站立技术"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0421.wav", "duration": 3.4560625, "text": "陈妍希还去医院做了检查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0437.wav", "duration": 7.3789375, "text": "其中内地由两年前的一三零零间增至今天的二三零零间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0164.wav", "duration": 2.8419375, "text": "尽管去年新政以来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0190.wav", "duration": 4.253, "text": "对重大项目和重大问题进行协调"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0397.wav", "duration": 5.9028125, "text": "四乘一百米接力罗伯特哈特灵"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0188.wav", "duration": 5.914, "text": "建立协调配合检打联动联防联控应急处置机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0281.wav", "duration": 4.1180625, "text": "大概十年前就有了这样的说法"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0487.wav", "duration": 9.661875, "text": "港媒称内地中产人数猛增有助稳定企望渐进改革"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0332.wav", "duration": 3.7539375, "text": "搭建混合云解决方案平台"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0399.wav", "duration": 4.047125, "text": "至于中国花滑运动的推广"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0486.wav", "duration": 11.1328125, "text": "实习生郭杨雪通讯员耿万志现代快报记者李伟豪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0400.wav", "duration": 4.834, "text": "从经济实力和基础设施建设上看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0249.wav", "duration": 3.86, "text": "完善环境事件应急机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0462.wav", "duration": 3.146, "text": "走进了武网的新闻大厅"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0364.wav", "duration": 4.493875, "text": "朱婷荣膺最有价值球员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0308.wav", "duration": 5.511, "text": "在确保系统顺利运行的情况下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0306.wav", "duration": 4.9670625, "text": "漏洞已通知厂商但厂商忽略该漏洞"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0487.wav", "duration": 4.8920625, "text": "它既能搜集我国重要海域内各类环境数据"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0337.wav", "duration": 3.0390625, "text": "在电话手表出现之前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0389.wav", "duration": 5.197, "text": "这批志愿者也被称为新鸟巢一代"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0248.wav", "duration": 5.1800625, "text": "徐林出于对地方政府债务风险的担忧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0403.wav", "duration": 3.886, "text": "组委会提高了前三名的含金量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0341.wav", "duration": 5.724125, "text": "这也是他一次次在擂台上打出恐怖重击的最大资本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0416.wav", "duration": 4.6699375, "text": "她近日终于在受访时松口公开正解"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0357.wav", "duration": 7.298125, "text": "对于代表中国战队略先出阵的徐永昊来讲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0358.wav", "duration": 4.451875, "text": "从而被授予最有价值球员荣誉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0376.wav", "duration": 3.8100625, "text": "瞬间成为各国媒体的焦点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0411.wav", "duration": 6.5190625, "text": "搜狐娱乐据讯据香港媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0228.wav", "duration": 5.396, "text": "并采取措施切实保护债券投资人的合法权益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0339.wav", "duration": 4.475125, "text": "但是根据国外科学家最新的研究结果"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0351.wav", "duration": 3.9350625, "text": "同时带动当地人民的奔跑热情"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0290.wav", "duration": 4.25, "text": "随着个人计算机芯片的需求放慢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0435.wav", "duration": 3.9140625, "text": "有内地学者分析背后心态"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0310.wav", "duration": 3.5460625, "text": "击掌成为加好友等功能也一应俱全"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0145.wav", "duration": 5.031, "text": "确保完成今年六万户棚户区改造任务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0212.wav", "duration": 2.9559375, "text": "提高生产经营和市场开拓能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0252.wav", "duration": 7.5, "text": "国务院近期将开展对各类交易场所的清理整顿工作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0186.wav", "duration": 3.937, "text": "在机遇与挑战共存的互联网时代"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0466.wav", "duration": 3.8459375, "text": "现场流出的短片显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0358.wav", "duration": 6.774875, "text": "二零一一年的亚冬会是其举办的第一个国际性综合赛事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0467.wav", "duration": 5.282, "text": "希望媒体不要用这样的词来形容所有网球运动员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0214.wav", "duration": 4.2990625, "text": "中央走出去的步伐正趋加快"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0422.wav", "duration": 4.365, "text": "但小天坚持玮甯依然是我的女人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0314.wav", "duration": 6.2270625, "text": "身处传统白色家电领域中的重要一支到厨房电器"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0159.wav", "duration": 4.09, "text": "五月份多地楼市的成交量明显上涨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0200.wav", "duration": 4.411, "text": "支持其开展信用合作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0362.wav", "duration": 4.3520625, "text": "已在新加坡香港等城市成功落地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0165.wav", "duration": 3.103, "text": "大型房企低迷期拿地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0384.wav", "duration": 4.53, "text": "中国队连续三位主力因伤缺战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0328.wav", "duration": 6.2270625, "text": "所有在中国境内销售及使用的无线电组件产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0183.wav", "duration": 4.093, "text": "这是因为土地一级开发成本提高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0403.wav", "duration": 3.9340625, "text": "朱婷的任务更重效率更高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0456.wav", "duration": 4.264875, "text": "肖先生在上菜后高兴地拍下图片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0425.wav", "duration": 3.4409375, "text": "现在有点怕要见他"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0488.wav", "duration": 4.802, "text": "参考消息网九月二五日报道新报称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0191.wav", "duration": 7.079, "text": "包括北方干旱半干旱草原地区和青藏高原草原地区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0421.wav", "duration": 2.8190625, "text": "似乎已过了第三关"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0134.wav", "duration": 4.187, "text": "再加上近期一二线楼市升温"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0196.wav", "duration": 4.719, "text": "继续用好国外优惠贷款和赠款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0338.wav", "duration": 6.0610625, "text": "由郎平挂帅的中国女排在名古屋赛区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0485.wav", "duration": 3.162125, "text": "北京警方已介入调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0177.wav", "duration": 5.7169375, "text": "而出让的住宅建筑面积总和至少为一百亿平米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0456.wav", "duration": 5.1950625, "text": "是原中国文化集团党委书记宋官林"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0489.wav", "duration": 5.916, "text": "联合国官方微博晒出一张李彬彬喂大象喝水的照片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0185.wav", "duration": 4.616125, "text": "规划建筑面积为四十万平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0482.wav", "duration": 4.9860625, "text": "李晨马震就是玩笑任何情况都力挺范冰冰"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0442.wav", "duration": 6.3979375, "text": "成为各国各地广场舞今年最流行的背景音乐之一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0245.wav", "duration": 5.475, "text": "因地制宜地采取有选择差别化扶持政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0275.wav", "duration": 3.271, "text": "以及在店内的具体位置"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0191.wav", "duration": 8.6109375, "text": "预算内固定资产投资要向重大农业农村建设项目倾斜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0346.wav", "duration": 5.668, "text": "我在重点强化站立技术的同时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0488.wav", "duration": 4.5400625, "text": "又能探测获取我海军舰队活动动向"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0488.wav", "duration": 4.626, "text": "本报一零月五日讯国庆长假"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0296.wav", "duration": 3.448, "text": "问题焦点若是太阳能"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0419.wav", "duration": 3.0, "text": "穿高跟鞋快步走"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0236.wav", "duration": 3.4460625, "text": "加大水生生物资源养护力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0193.wav", "duration": 6.4029375, "text": "导致城投债券发行产生较高的风险溢价"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0472.wav", "duration": 4.948, "text": "视频中正在带彩娱乐的灰衣男"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0311.wav", "duration": 5.478, "text": "得出这个结论来自于方洪波对当前形势的判断"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0417.wav", "duration": 2.494875, "text": "推断其已怀孕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0122.wav", "duration": 8.333, "text": "其市管国管住房公积金政策也均进行调整"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0421.wav", "duration": 5.8088125, "text": "名为娱乐圈八卦的自然自媒体"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0492.wav", "duration": 8.3039375, "text": "村民为阻止儿子与女友相见编造偷小孩谎言"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0412.wav", "duration": 2.733875, "text": "他一定有他的原因"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0460.wav", "duration": 7.162875, "text": "朱军系阅兵世家曾参与一九八四年阅兵军乐演奏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0386.wav", "duration": 2.9560625, "text": "我们的朋友将代表德国"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0380.wav", "duration": 4.6681875, "text": "难怪他能接受年过半百的桥本的索吻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0148.wav", "duration": 3.65, "text": "中原地产分析师张大伟认为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0418.wav", "duration": 6.0290625, "text": "谢霆锋妹妹谢婷婷在微博晒出与父亲合影"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0385.wav", "duration": 2.6440625, "text": "据美联社十日报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0153.wav", "duration": 3.418, "text": "对需求拉动作用比较大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0301.wav", "duration": 8.347875, "text": "最终促使苹果成为主流标准但中国市场有其特殊性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0466.wav", "duration": 7.369875, "text": "网络上热传一组暖男医生哄小萝莉的温情照片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0194.wav", "duration": 6.831, "text": "使国有资本更多地向重要行业和关键领域集中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0237.wav", "duration": 3.4509375, "text": "才能申请发行城投债券"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0336.wav", "duration": 7.5, "text": "这需要通过机器人的柔性改变来对此进行处理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0202.wav", "duration": 5.704, "text": "可是通过收费站的车有大客车中型客车还有货车"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0242.wav", "duration": 4.587, "text": "提升产品的科技含量和附加值"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0210.wav", "duration": 4.861, "text": "落实和完善有关税收政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0136.wav", "duration": 7.3350625, "text": "昆明市住房公积金管理中心出台三项公积金新政"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0285.wav", "duration": 8.589, "text": "美国智库学学者和太阳能行业协会也多次警告"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0244.wav", "duration": 5.474, "text": "大力发展冷链体系和生鲜农产品配送"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0465.wav", "duration": 3.5949375, "text": "发现小温残缺的遗骸"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0476.wav", "duration": 4.046125, "text": "省吃俭用也要把该还的钱尽力还掉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0189.wav", "duration": 4.844, "text": "农业产业体系更趋完善"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0340.wav", "duration": 5.6430625, "text": "只要在明天的最后一战中赢下东道主日本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0277.wav", "duration": 3.256, "text": "对投资者大有参考价值"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0227.wav", "duration": 3.2209375, "text": "国家林业十二五规划"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0228.wav", "duration": 2.827, "text": "动植物保护工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0418.wav", "duration": 3.525125, "text": "上厕所都要把灯全部打开"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0427.wav", "duration": 3.3559375, "text": "她也坦言内心感触很多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0469.wav", "duration": 6.472875, "text": "李岚清座谈戏称自己八零后退休不等于生命终结"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0319.wav", "duration": 5.3628125, "text": "没有交付信息安全公司进行评估"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0474.wav", "duration": 6.3769375, "text": "新京报讯记者黄颖自七月六日进入暑期以来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0286.wav", "duration": 3.7790625, "text": "我们成为世界工厂是不可逾越的发展阶段"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0235.wav", "duration": 5.244, "text": "决定对全国核设施进行安全检查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0469.wav", "duration": 4.374, "text": "回国后经鉴定发现不是天纯天然的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0176.wav", "duration": 3.9389375, "text": "全国房地产库存正在堆积"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0470.wav", "duration": 6.745875, "text": "村支书一周只上二小时班村民称反映会遭报复"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0233.wav", "duration": 7.312, "text": "国务院高度重视防范地方政府债务风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0347.wav", "duration": 5.2119375, "text": "研究者们选取了一些年龄大的跑者作为研究对象"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0494.wav", "duration": 2.8679375, "text": "该段视频时长仅有六秒"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0182.wav", "duration": 3.1629375, "text": "中新网十月二十日前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0352.wav", "duration": 4.727875, "text": "最终拦网和扣球均得到六这些分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0181.wav", "duration": 4.5650625, "text": "月度市场成交量开始出现环比回升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0482.wav", "duration": 5.183125, "text": "温州一菜场惊现注胶虾追踪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0279.wav", "duration": 4.8050625, "text": "也不愿意花五分钟重新输一定密码"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0124.wav", "duration": 7.5, "text": "上海南昌等城市近期继续松绑了公积金贷款政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0185.wav", "duration": 4.3089375, "text": "后续要加大公积金贷款的便利性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0341.wav", "duration": 5.7409375, "text": "这与市民的期望和城市发展的愿景也是一致的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0308.wav", "duration": 8.854, "text": "买卖前五名共计净出于该股六十二点九三万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0418.wav", "duration": 3.125, "text": "有时甚至忘记吃饭"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0442.wav", "duration": 3.369875, "text": "他向广东省高院申诉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0294.wav", "duration": 5.3530625, "text": "眼下已有七个国家打算购买大鸦无人机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0295.wav", "duration": 4.8239375, "text": "发表的想象图与最近曝光的飞机布局很像"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0256.wav", "duration": 5.0190625, "text": "因此不能表示苹果没有新的业务增长点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0287.wav", "duration": 3.6469375, "text": "囊括了大量的优质资源"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0192.wav", "duration": 6.6630625, "text": "债券市场所有品种发行利率整体上都表现出向上的走向"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0446.wav", "duration": 3.2109375, "text": "超级月亮碰上月全食"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0431.wav", "duration": 7.1599375, "text": "公安局的决定书说不对他做出行政处罚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0402.wav", "duration": 4.167, "text": "由于韩国冰球协会的四年规划"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0259.wav", "duration": 7.798125, "text": "以二零一五年度每股八点五美元的盈利预测为准"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0314.wav", "duration": 6.5, "text": "下称美的内部的组织架构二零一五年加大了调整力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0423.wav", "duration": 6.235125, "text": "许茹芸突然闪婚让当时的娱乐圈也惊起了一阵小波澜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0198.wav", "duration": 3.3260625, "text": "我个人不赞成这一判断"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0299.wav", "duration": 4.2050625, "text": "因为难以忍受股价长期被低估"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0216.wav", "duration": 5.813, "text": "规范降价打折返券赠送等促销行为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0222.wav", "duration": 5.407, "text": "加强建设资金统筹和组织实施工作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0230.wav", "duration": 3.6960625, "text": "积极发展菜篮子产品生产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0184.wav", "duration": 7.364, "text": "该地块位于通州新城五河交汇处东南角"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0228.wav", "duration": 4.418125, "text": "关键是要把投资规模和债务规模"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0242.wav", "duration": 5.5810625, "text": "各地机场高速公路是否实行免费通行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0174.wav", "duration": 4.941, "text": "百分之五的网友认为房价走势不好判断"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0318.wav", "duration": 6.2949375, "text": "很多车企网站是外包给第三方公司开发的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0204.wav", "duration": 4.079, "text": "强化农民专业合作社组织带动能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0142.wav", "duration": 4.729, "text": "今年商品房销售一度低日迷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0443.wav", "duration": 6.9079375, "text": "称当时几位学生模样的人让他帮忙配合拍照用来宣传"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0317.wav", "duration": 3.9921875, "text": "今年的促销从三月份就启动了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0375.wav", "duration": 6.1579375, "text": "这也是他一年四记来第一次参加世锦赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0331.wav", "duration": 5.822, "text": "其馀九人获刑一年五个月至三年不等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0422.wav", "duration": 2.53, "text": "医生说得好恐怖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0224.wav", "duration": 4.828, "text": "由于山东免费放行的时间不在春运最高峰"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0385.wav", "duration": 3.9160625, "text": "大家可能觉得我们这支队伍很苦"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0227.wav", "duration": 9.12, "text": "继续实施农业种子种苗种畜种禽免税进口优惠政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0327.wav", "duration": 4.235125, "text": "在被公安机关查获后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0291.wav", "duration": 4.6069375, "text": "该产品将延迟到二零一五年发布"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0364.wav", "duration": 6.715125, "text": "邀请专家学者等三十馀人组成志愿者培训导师库"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0313.wav", "duration": 4.501, "text": "过去三十年高速发展的前提条件没有了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0367.wav", "duration": 3.218, "text": "一分分和对手拼到最后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0407.wav", "duration": 5.0, "text": "这对她来说也是一个巨大的遗憾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0144.wav", "duration": 4.203, "text": "中介机构统计数据显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0154.wav", "duration": 4.2549375, "text": "且待售库存单套面积较大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0177.wav", "duration": 5.4919375, "text": "这将有助于开发商明年维持销量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0473.wav", "duration": 4.4201875, "text": "本来云盘的出现方便了人们的生活和工作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0363.wav", "duration": 7.4079375, "text": "普鲁申科将错过整个二零一五二零一六季一六赛季的比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0161.wav", "duration": 4.2049375, "text": "达到降低成本提升营销效果的目的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0304.wav", "duration": 5.3818125, "text": "雪铁龙车主信息泄露规模或超十万条"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0303.wav", "duration": 6.1940625, "text": "每日经济新闻记者杨建江南嘉捷六万"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0362.wav", "duration": 4.0909375, "text": "不过和这次在世界杯当队长相比压力明显不同"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0430.wav", "duration": 6.6159375, "text": "曾获美国时代杂志形容为影响香港乐坛风格的人物"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0442.wav", "duration": 8.025875, "text": "新京报讯记者王巍利用村里遭受泥石流灾害后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0422.wav", "duration": 3.062, "text": "这样做反而更实际"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0404.wav", "duration": 4.3891875, "text": "将出任玩具总动员四的导演"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0399.wav", "duration": 4.119875, "text": "比赛在两名王者最后的对决中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0435.wav", "duration": 5.3510625, "text": "准备将获救的四人送上岸边医院救治"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0453.wav", "duration": 6.005125, "text": "上海已成为全亚洲奢华生活最昂贵的城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0370.wav", "duration": 5.4960625, "text": "包括前秋运动员维斯多尔"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0405.wav", "duration": 2.9560625, "text": "将出演影片的女主角"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0399.wav", "duration": 5.791, "text": "新一轮激战烽火即将炽烈点燃"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0346.wav", "duration": 2.6289375, "text": "对弹跳没有什么影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0372.wav", "duration": 4.764875, "text": "双方均向对手发起了不遗馀力的猛攻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0373.wav", "duration": 4.3759375, "text": "尽管期间孙杨的训练并没有中断"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0325.wav", "duration": 4.0799375, "text": "跟世界产业的差距不是在缩小"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0173.wav", "duration": 3.529, "text": "而在信托持有这些房产后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0150.wav", "duration": 6.315, "text": "用公积金政策刺激市场是地方政府最习惯的举措"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0157.wav", "duration": 7.37, "text": "但由于房地产市场供给仍然不仍然充足"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0223.wav", "duration": 12.428, "text": "资源环境面临较大压力有的企业管理水平不高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0318.wav", "duration": 3.832, "text": "家长随时和孩子保持联系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0400.wav", "duration": 3.647, "text": "广州日报社记者许胚日前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0458.wav", "duration": 3.7829375, "text": "当海滩上如潮的人群散去"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0409.wav", "duration": 3.8608125, "text": "有时候人生是计划赶不上变化的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0319.wav", "duration": 6.235125, "text": "这样一个全球白电的格局短期内是难以撬动的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0423.wav", "duration": 3.818125, "text": "是真的话他自己会同我讲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0270.wav", "duration": 4.0, "text": "安全真的是移动支付的第一属性吗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0178.wav", "duration": 8.98, "text": "政府放松政策对房地产销售的正面影响可能会提升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0225.wav", "duration": 9.3930625, "text": "大幅度增加农业防灾减灾稳产增产关键技术良法补助"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0451.wav", "duration": 3.1799375, "text": "成为了网民争相讨论的话题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0224.wav", "duration": 4.6850625, "text": "充分发挥地方政府融资平台作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0190.wav", "duration": 5.8769375, "text": "土地产出率劳动生产率资源利用率显着提高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0431.wav", "duration": 3.001, "text": "图自网络温州网讯有网友爆料"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0476.wav", "duration": 11.1809375, "text": "村民为多拿补偿在拆迁前突击装修全用劣质建材"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0485.wav", "duration": 4.411875, "text": "双方因语言交流不畅导致纠纷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0175.wav", "duration": 5.11, "text": "也有利于部分企业的资金周转"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0209.wav", "duration": 6.1430625, "text": "这是这几年城投债券发行规模不断扩大的主要原因"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0168.wav", "duration": 3.8290625, "text": "促使更多购房者积极入市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0407.wav", "duration": 6.77, "text": "将在本届美国电影学会影展中进行秘密放映"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0218.wav", "duration": 6.8709375, "text": "城市公共交通规划要科学布局线线网"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0203.wav", "duration": 3.2850625, "text": "扩大农村担保品范围"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0214.wav", "duration": 7.022125, "text": "推进省直接管理县市财政体制改革"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0277.wav", "duration": 4.3570625, "text": "有一百万张信用卡已被激活"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0172.wav", "duration": 4.9239375, "text": "库存去化周期依然偏大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0395.wav", "duration": 4.137, "text": "他们最大的特点就是九零后占主角"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0124.wav", "duration": 4.667, "text": "为双拱形非中心对称建筑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0221.wav", "duration": 3.437, "text": "增加农田有效灌溉面积"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0166.wav", "duration": 8.453, "text": "房地产在不同城市之间的复苏也将存在分化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0390.wav", "duration": 3.527875, "text": "铅球达维斯多尔"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0176.wav", "duration": 6.15, "text": "在整体市场供大于求区域分化严重的情况下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0213.wav", "duration": 5.0739375, "text": "必须树立公共交通优先发展理念"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0202.wav", "duration": 11.6159375, "text": "转化成由资产产生的现金流作担保可自由流通的证券"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0474.wav", "duration": 8.313, "text": "门头沟雁翅镇村民李冬梅向市政府提起了行政复议"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0257.wav", "duration": 7.5229375, "text": "那么苹果市价约为七四四十亿美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0356.wav", "duration": 3.3110625, "text": "普鲁申科出人意料地宣布复出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0324.wav", "duration": 6.703875, "text": "盘中有二千六百八十六万元资金净流入"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0364.wav", "duration": 6.816875, "text": "一方面是他们从事花样滑冰二零多年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0271.wav", "duration": 3.568, "text": "而是实实在在的金融命脉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0141.wav", "duration": 4.328, "text": "还有一个违规扩区一万公顷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0435.wav", "duration": 6.7788125, "text": "清华法学院教授司法改革应限制两长权力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0398.wav", "duration": 4.711875, "text": "尤为引人瞩目的莫过于李子成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0432.wav", "duration": 4.579125, "text": "向乘客收取的船费属于应收项目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0359.wav", "duration": 6.2739375, "text": "宣告彭博一英里接力赛上海站全面启动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0150.wav", "duration": 7.103, "text": "我国对房地产的行政干预政策陆续退出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0126.wav", "duration": 7.149, "text": "上海南昌等城市近期继续松绑了公积金贷款政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0291.wav", "duration": 4.4200625, "text": "这对于苹果来说不是件容易的事儿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0228.wav", "duration": 4.735, "text": "建立完善农业生产奖补制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0191.wav", "duration": 7.3990625, "text": "需要对发行人资产重组等重大事宜加强监管"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0161.wav", "duration": 4.1430625, "text": "呈现出量价齐涨的局面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0288.wav", "duration": 5.401, "text": "美初裁中国产轮胎倾销"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0456.wav", "duration": 4.9189375, "text": "李娜媒体用一次性参赛是对运动员的侮辱"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0187.wav", "duration": 7.812, "text": "将明确政策界限和工作机制以知以及部门分工"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0363.wav", "duration": 4.777125, "text": "她所选择的新搭档就是法国猛男马塞洛特"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0227.wav", "duration": 3.7119375, "text": "确保境外国有资产保值增值"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0224.wav", "duration": 2.927, "text": "不可能是完全无风险的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0187.wav", "duration": 2.701, "text": "加强农产品质量安全监管"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0459.wav", "duration": 5.277125, "text": "金报讯记者蓝莹还记得小温吗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0158.wav", "duration": 3.0, "text": "自二夏季开始"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0223.wav", "duration": 6.897125, "text": "以及蔬菜蚕卓等农产品生产的主体区域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0466.wav", "duration": 5.4980625, "text": "手腕上还戴着一块与之呼应的白色塑料腕表"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0179.wav", "duration": 7.9249375, "text": "国务院发展研究中心市场经济研究所副所长邓郁松认为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0245.wav", "duration": 3.468, "text": "建立秸秆禁烧和综合利用的长效机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0387.wav", "duration": 5.906, "text": "佟健的解决办法就只能努力提高自己"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0402.wav", "duration": 6.491, "text": "中国队在第二阶段的第三场比赛不仅要保全取九个积分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0311.wav", "duration": 3.875, "text": "紫光与沈阳机床可以在此布局"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0382.wav", "duration": 4.7150625, "text": "也让这位一九九四年出生的河南妹子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0216.wav", "duration": 2.803, "text": "都起到了积极的作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0130.wav", "duration": 7.605, "text": "取消限外令将促进外企在华投资房地产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0333.wav", "duration": 5.1010625, "text": "美的的洗碗机业务以外销为主"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0159.wav", "duration": 4.563, "text": "今年土地收入预计近四万亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0239.wav", "duration": 3.2939375, "text": "进行了综合安全检查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0231.wav", "duration": 2.957, "text": "率先实现区域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0239.wav", "duration": 4.2949375, "text": "探索企业化集团化发展模式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0280.wav", "duration": 5.5450625, "text": "失望中夹杂着嘲讽的情绪霸占了各模块的头条"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0223.wav", "duration": 4.8840625, "text": "完善机耕道农田防护林等设施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0328.wav", "duration": 4.3520625, "text": "警方在麦德公司数据库中发现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0238.wav", "duration": 5.2830625, "text": "乡镇农业公共服务能力建设工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0295.wav", "duration": 4.277, "text": "就开始潜移默化地渗透人类的生活"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0235.wav", "duration": 5.521, "text": "加快农业科技自主创新和农业农村人才培养"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0397.wav", "duration": 3.9489375, "text": "湖区水污染仍旧十分严重"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0266.wav", "duration": 2.8759375, "text": "他从来没有写过代码"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0159.wav", "duration": 4.33, "text": "也有限购政策在控制需求规模"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0252.wav", "duration": 6.3299375, "text": "但出于对我国地方政府债务风险的不合理判断"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0122.wav", "duration": 4.65, "text": "作为取之于民用之于民的住房公积金"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0462.wav", "duration": 9.74, "text": "曲靖一村妇竟在自家菜地内非法种植罂丽一零四二株"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0235.wav", "duration": 5.943, "text": "工商银行建设银行和交通银行为首批试点银行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0473.wav", "duration": 7.1811875, "text": "渤海一渔船沉没船上一六人落水一二人失踪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0355.wav", "duration": 3.9091875, "text": "经过将近一年时间的漫长谈判"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0283.wav", "duration": 3.032, "text": "而从二零一三年开始"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0482.wav", "duration": 8.6789375, "text": "湖北一九岁女护士深夜遭抢劫杀害嫌疑嫌犯已落网"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0208.wav", "duration": 6.1079375, "text": "以实施现代农业人才支撑计划为抓手"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0148.wav", "duration": 4.761, "text": "北京去年土地出让落下大幕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0195.wav", "duration": 4.021, "text": "加强草原生态环境保护和建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0301.wav", "duration": 3.937, "text": "价格要么下降要么维持不变"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0405.wav", "duration": 4.722875, "text": "影片的正式公映要到圣诞节当天"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0171.wav", "duration": 3.581, "text": "这产品的换代周期会较长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0266.wav", "duration": 8.0, "text": "从而影响接下来的客户无法在指定时间点获得服务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0260.wav", "duration": 3.7370625, "text": "但亏损却达到了一点八亿美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0210.wav", "duration": 3.374, "text": "大力发展农业职业培养"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0434.wav", "duration": 5.8410625, "text": "湖北六岁女童被继母虐打下阴撕裂警方已介入"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0133.wav", "duration": 6.877, "text": "是对过去住房公积金制度不作为方式的纠正"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0356.wav", "duration": 4.73, "text": "也证明了北京举办大型体育赛事的能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0455.wav", "duration": 7.3530625, "text": "游客青岛遭遇天价虾当地人最多几十元一斤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0375.wav", "duration": 3.833, "text": "男伴更是在最新公布的视频中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0321.wav", "duration": 2.802, "text": "大盘股仍是毫无作为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0160.wav", "duration": 3.861, "text": "然后对广告信息进行精确匹配"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0169.wav", "duration": 7.4659375, "text": "中国房地产的市场价格和销量将继续调整"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0465.wav", "duration": 3.8559375, "text": "中国传媒大学官网发布消息称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0282.wav", "duration": 5.094, "text": "称有些技术公司烧钱太快可能会人间蒸发"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0126.wav", "duration": 4.8890625, "text": "在住房公积金贷款的申请过程中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0464.wav", "duration": 4.640125, "text": "最终在峡谷上游的石头夹缝下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0454.wav", "duration": 4.719, "text": "天上掉下一块重约十几斤的冰块"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0433.wav", "duration": 9.6120625, "text": "香港明报参考消息网八月二十九日报道港媒称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0203.wav", "duration": 4.026, "text": "我国还处于城市化快速发展期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0383.wav", "duration": 3.8628125, "text": "谁也不知道会发生什么"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0476.wav", "duration": 3.8139375, "text": "因准儿媳的举报跌下神坛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0416.wav", "duration": 3.5, "text": "处于寻找状态中的挣扎"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0428.wav", "duration": 5.6950625, "text": "对此陈凯琳没有怪责陈嘉宝"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0190.wav", "duration": 3.594, "text": "省交通部门表示应该不会特殊"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0310.wav", "duration": 5.224, "text": "占公司总股本约二点百分之五十"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0440.wav", "duration": 4.078125, "text": "清华大学通过调取监控录线发现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0257.wav", "duration": 9.2619375, "text": "印度斯坦时报对二十四日援引消息人士的话报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0349.wav", "duration": 3.865, "text": "背伤更是常年阻碍着他的发挥"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0180.wav", "duration": 2.384, "text": "去年新政以来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0320.wav", "duration": 4.2521875, "text": "可见电话手表的辐射比手机还小"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0484.wav", "duration": 8.793, "text": "渤海湾溢油事故赔偿案宣判康菲公司被判赔一六八万"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0452.wav", "duration": 6.522, "text": "游乐场大章鱼甩飞游客母亲落地时紧抱儿子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0437.wav", "duration": 4.6691875, "text": "六名内地乘客与地勤发生肢体冲突"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0347.wav", "duration": 5.5439375, "text": "其馀场馆改扩建后可以满足赛事需要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0429.wav", "duration": 3.0500625, "text": "被网友调侃是小笼包"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0427.wav", "duration": 7.0771875, "text": "中新网七月二十二日电据台湾东森新闻消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0381.wav", "duration": 2.9458125, "text": "更具历史性意义的是"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0306.wav", "duration": 5.786, "text": "自二零一一年事业部启动自动化升级至今的四年里"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0385.wav", "duration": 3.438, "text": "争取把自身水平发挥出来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0409.wav", "duration": 2.7060625, "text": "马甲线啊马甲线"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0365.wav", "duration": 5.245125, "text": "大家回去之后将马上投入到对日本的准备中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0147.wav", "duration": 3.7, "text": "软件与硬件都做了深度的对接"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0161.wav", "duration": 2.586, "text": "同比上涨五成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0434.wav", "duration": 3.782, "text": "因此与清洁工引发争执"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0243.wav", "duration": 5.1389375, "text": "鼓励流通企业跨地区兼并重组和投资合作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0329.wav", "duration": 5.84275, "text": "涉及人才软件硬件服务以及管理等方面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0227.wav", "duration": 2.922, "text": "上交税金一万亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0197.wav", "duration": 5.421, "text": "而是改按统一合理的平均成本确定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0392.wav", "duration": 3.048125, "text": "在目前中国队的阵容中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0131.wav", "duration": 6.2209375, "text": "但专家预计短期央行仍可能会积极维稳"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0293.wav", "duration": 3.329, "text": "苹果股价的这轮连续下跌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0139.wav", "duration": 3.887, "text": "住房维修资金约七亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0150.wav", "duration": 4.576, "text": "大数据营销需要的是强大的技术实力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0380.wav", "duration": 6.8630625, "text": "会投资建设一些冰雪主题乐园和冬季项目体验场所"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0242.wav", "duration": 6.5499375, "text": "为了控制地方政府本届发债下届还钱的道德风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0243.wav", "duration": 9.4390625, "text": "实行线网规划编制公示制度和运营价格听证制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0288.wav", "duration": 4.7750625, "text": "就足以让专家们恶心七七四十九天了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0182.wav", "duration": 3.438, "text": "中新网的调查结果显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0145.wav", "duration": 3.556, "text": "实现该信托对房产的控制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0444.wav", "duration": 4.4858125, "text": "园中园收费超景区大门票"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0341.wav", "duration": 2.756, "text": "参赛队伍数量也会有所提升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0392.wav", "duration": 5.295875, "text": "自己此时此刻特别迫切地想要尽快恢复"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0491.wav", "duration": 6.76, "text": "李玉刚新歌点击逾一亿网友李家每人只需半次"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0348.wav", "duration": 4.223125, "text": "建设三个相对集聚的场馆群"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0443.wav", "duration": 4.784875, "text": "一糕点店派出二零位面包师傅"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0319.wav", "duration": 4.5710625, "text": "与互联网企业深度合作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0179.wav", "duration": 5.172, "text": "标普信用分析师孔磊说道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0387.wav", "duration": 8.3469375, "text": "本赛季调进张常宁就是郎平为朱婷解压的一个表现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0204.wav", "duration": 3.462, "text": "在国务院下发的文件中提及"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0351.wav", "duration": 3.8569375, "text": "而哈亚的表现也正如其自己所言"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0485.wav", "duration": 4.885, "text": "灵璧县韦集镇韦集村原村支书石某"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0442.wav", "duration": 2.999, "text": "而且她还是已婚身份"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0331.wav", "duration": 3.553, "text": "并将成为新兴的销售热点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0443.wav", "duration": 6.3139375, "text": "广东惠州惊爆港商杀情妇碎尸凶案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0220.wav", "duration": 10.0, "text": "城投债劵作为融资平台公司最透明的直接融资工具"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0241.wav", "duration": 5.392, "text": "集中整治存在突出环境问题的村庄和集镇"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0350.wav", "duration": 3.410875, "text": "二零一五年四月十二"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0181.wav", "duration": 3.935, "text": "这一刺激作用并不会长时间延续"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0353.wav", "duration": 5.021, "text": "过上了比运动员复杂得多的生活"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0171.wav", "duration": 6.3890625, "text": "政府出台每平方米补贴五百元的托市政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0348.wav", "duration": 6.772, "text": "总体上以节俭办赛为原则进行规划建设和改造使用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0493.wav", "duration": 5.8139375, "text": "游客北京游两天遭引导消费近二万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0438.wav", "duration": 5.7431875, "text": "清华辟谣保安迫降无人机为人为诋毁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0408.wav", "duration": 3.0600625, "text": "看来郑嘉颖是她的初恋"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0164.wav", "duration": 3.332, "text": "今年楼市将走向何方"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0478.wav", "duration": 6.933125, "text": "在中国某个在线医疗平台增设一项新服务之后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0203.wav", "duration": 3.051, "text": "到时候会不会乱成一锅粥"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0356.wav", "duration": 3.8041875, "text": "法国花样滑冰联合会终于同意"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0146.wav", "duration": 4.8709375, "text": "整合营销是利用全案思维和大数据技术"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0312.wav", "duration": 5.0, "text": "一位买家电的朋友晒出一张销量清单"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0204.wav", "duration": 3.625, "text": "大规模开展高产创建"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0247.wav", "duration": 3.927, "text": "坚决防止污染向农村转移"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0149.wav", "duration": 4.401, "text": "一向严格收紧购房政策的北京也加入此阵营"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0313.wav", "duration": 3.615, "text": "但到将来互联网时代"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0254.wav", "duration": 3.688, "text": "无疑也会成为投资者的宠儿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0301.wav", "duration": 4.4250625, "text": "这意味着美国将对相关产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0415.wav", "duration": 5.589125, "text": "搜狐娱乐讯名为娱乐圈八卦的自媒体"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0494.wav", "duration": 3.292, "text": "并将其摁倒在地殴打"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0135.wav", "duration": 4.272, "text": "开工建设公租房不低于三万套"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0340.wav", "duration": 4.3670625, "text": "控制在六零微克立方米左右"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0225.wav", "duration": 5.9759375, "text": "凡依法应当进行环评的建设规划和项目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0274.wav", "duration": 7.8039375, "text": "今年股价已经累计下跌了百分之六十而三星的情况也不佳"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0194.wav", "duration": 7.151, "text": "但没有出现大范围趋势性的破产倒闭"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0206.wav", "duration": 4.9189375, "text": "城投债券也适应了发行人和投资人的需要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0172.wav", "duration": 4.0479375, "text": "首套房贷利润优惠也开始减少"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0309.wav", "duration": 7.9030625, "text": "大家可能因为国家政策扶持国产品牌的大势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0126.wav", "duration": 4.92, "text": "导致公积金资源闲置的问题出现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0390.wav", "duration": 5.4958125, "text": "这支女排的暴露性强攻基本上都是靠朱婷打"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0390.wav", "duration": 4.823, "text": "佟健做好了考不上的思想准备"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0494.wav", "duration": 4.767125, "text": "如果对一般登高赏月仍未满足"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0176.wav", "duration": 6.044, "text": "收购了房地产互联网营销公司沈阳新维一半股份"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0423.wav", "duration": 4.265125, "text": "新专辑音乐方面还是坚持做自己"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0363.wav", "duration": 4.6269375, "text": "但是研究对象都是年轻跑者和年老跑者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0232.wav", "duration": 6.2380625, "text": "发改委将订制战略避免境外投资恶性竞争到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0244.wav", "duration": 8.464, "text": "主要指沿海地区以外的直辖市省会城市等大城市郊区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0219.wav", "duration": 7.918, "text": "相当于过去体制而言是更加市场化的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0164.wav", "duration": 3.389, "text": "房地产市场竞争加大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0272.wav", "duration": 3.624, "text": "这样的规模没有任何一个国家可以比拟"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0192.wav", "duration": 5.552, "text": "主要农产品优势区基本实行农业现代化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0408.wav", "duration": 3.5459375, "text": "但上台祝酒时都会交足戏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0467.wav", "duration": 3.178, "text": "二零一五七二六"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0133.wav", "duration": 8.0, "text": "继续限制外资投资中国房地产已经不合时宜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0299.wav", "duration": 4.3469375, "text": "它已经失去了作为独立公司的存在意义"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0128.wav", "duration": 5.155, "text": "还降低了首套房公积金首付比例"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0195.wav", "duration": 6.421, "text": "城投债券对推动城市基础设施和市政设施的建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0332.wav", "duration": 3.146, "text": "所以对业绩的影响有限"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0185.wav", "duration": 5.6169375, "text": "面对楼市中急剧增长的投资热情"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0182.wav", "duration": 4.0019375, "text": "作为取之于民用之于民的住房公积金"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0308.wav", "duration": 2.4559375, "text": "做到全方位亲子沟通"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0288.wav", "duration": 4.891, "text": "高空飞航时战略无人机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0160.wav", "duration": 3.453, "text": "房价下跌压力趋于缓解"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0166.wav", "duration": 4.528, "text": "看中的是其财产保护与传承的功能"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0368.wav", "duration": 5.901125, "text": "朴泰桓无法加入海外先进的训练团队进行训练"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0330.wav", "duration": 4.552, "text": "互联网企业也是一步步投入不断完善"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0478.wav", "duration": 4.7670625, "text": "李开复被医生宣判为第四期淋巴癌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0179.wav", "duration": 4.4490625, "text": "现在公积金贷款办理需要一个月左右的时间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0263.wav", "duration": 4.969, "text": "这项技术离临床应用还有一段距离"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0217.wav", "duration": 4.3780625, "text": "坚持和完善农业补贴政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0476.wav", "duration": 3.993875, "text": "用右脚踢向董某左腹部"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0309.wav", "duration": 4.043, "text": "但还是引发业内广泛关注"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0231.wav", "duration": 7.9959375, "text": "加强蔬菜水果肉蛋奶水产品等产品优势产区建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0138.wav", "duration": 5.237, "text": "有一套住房并已结清公积金贷款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0154.wav", "duration": 5.003, "text": "张大伟向南都记者分析"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0408.wav", "duration": 4.4409375, "text": "那些年女神陈妍希近来瘦身有成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0169.wav", "duration": 4.532, "text": "这直接影响到房地产的买地情况"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0213.wav", "duration": 4.407, "text": "城投债券的发行有比较严格的条件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0130.wav", "duration": 4.224, "text": "开创了蔓延全国的青年社区概念"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0240.wav", "duration": 8.1390625, "text": "形成了新形势下我国核电发展的建议阶段研究报告"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0325.wav", "duration": 6.8100625, "text": "公司为此研发并推出市场的智能产品非常贴近市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0421.wav", "duration": 3.0510625, "text": "迎来了人生崭新阶段"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0469.wav", "duration": 4.03325, "text": "生活经验让郑女士起了疑心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0184.wav", "duration": 3.661, "text": "不是一般的企业个人玩得起的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0197.wav", "duration": 6.344, "text": "支持现代农业发展的物质基础更加牢固"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0230.wav", "duration": 5.7370625, "text": "并采取措施切实保护债券投资人的合法权益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0269.wav", "duration": 2.977875, "text": "沃兹尼亚克自己也说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0286.wav", "duration": 9.0240625, "text": "许多美国太阳太阳能制造商依赖于全球光伏供应链"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0137.wav", "duration": 4.146, "text": "有助于发挥内需在稳增长中的积极作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0418.wav", "duration": 6.396, "text": "谈及此前她曾到横店探班郑嘉颖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0325.wav", "duration": 6.991, "text": "拟在二零一五年二零一七年先行推出两期回购方案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0468.wav", "duration": 7.370125, "text": "湖北荆州市安良百货公司事发手扶电梯已被关闭检修"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0299.wav", "duration": 5.28, "text": "该技术可用于识别隐藏于伪装下的目标"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0374.wav", "duration": 3.7749375, "text": "高调参加同性恋者的年度盛事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0245.wav", "duration": 7.5810625, "text": "采取积极有效的措施化解部分地区和领域的债务风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0381.wav", "duration": 5.2900625, "text": "他们的造型由排球的五个经典动作组成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0450.wav", "duration": 6.522, "text": "李谷一曾怒揭东方歌舞团腐败事后被调离岗位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0319.wav", "duration": 7.141125, "text": "同案被捕的马某等四人是公司技术部门的员工"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0238.wav", "duration": 5.2789375, "text": "为商业银行探索跨业经营运作积累经验"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0134.wav", "duration": 5.397, "text": "降准降息或再掀收益率的下降潮"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0127.wav", "duration": 3.25, "text": "这不是这个时代的不公平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0442.wav", "duration": 6.9709375, "text": "渝武高速武胜段发生追尾事故已造成六死九伤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0191.wav", "duration": 7.3299375, "text": "可按作价出资入股方式办理理用地手续"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0187.wav", "duration": 4.391, "text": "抓紧做好故调查处理工作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0122.wav", "duration": 4.299, "text": "人民币未来贬值压力依然较大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0400.wav", "duration": 2.900875, "text": "但更多的是看到了自己的不足"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0275.wav", "duration": 2.6450625, "text": "我国经济发展进入新常态"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0143.wav", "duration": 3.723, "text": "中小户型住房去化速度明显加快"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0164.wav", "duration": 3.643, "text": "楼市进展仍需进一步观望"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0314.wav", "duration": 4.8569375, "text": "背后涉及到百万车主的信息安全"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0162.wav", "duration": 5.185, "text": "对收益率的要求差别却不至于相去甚远"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0194.wav", "duration": 4.658, "text": "启动实施农业产业化经营跨越发展行动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0189.wav", "duration": 3.707875, "text": "不仅是城投债券发行利率"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0206.wav", "duration": 4.479, "text": "加大合作社经营管理人员培训培养力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0131.wav", "duration": 4.596, "text": "中原地产首席分析师张大伟认为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0175.wav", "duration": 5.423, "text": "北京中原地产首席分析师张大伟认为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0223.wav", "duration": 6.847, "text": "完善农作物品种试验和种子检测设施条件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0376.wav", "duration": 7.1049375, "text": "浑身是血的播求由于头部三处动脉破裂失血过多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0142.wav", "duration": 3.55, "text": "明年预计达到七万亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0385.wav", "duration": 3.3100625, "text": "暂时不考虑恋爱的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0376.wav", "duration": 3.1740625, "text": "他们的不放弃换来了成功"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0489.wav", "duration": 4.0959375, "text": "实现近距离侦查和情报收集任务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0411.wav", "duration": 2.275875, "text": "他是一个大人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0252.wav", "duration": 7.4659375, "text": "对限制类项目的核准和审核要从严把握"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0440.wav", "duration": 6.803, "text": "湖北九岁女童遇害案告破凶手强奸不成推下窗外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0382.wav", "duration": 4.9140625, "text": "观赛便利不出国门看奥运"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0457.wav", "duration": 3.828875, "text": "八位村民先后出现中毒症状"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0395.wav", "duration": 3.0920625, "text": "搜狐体育郭健文"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0211.wav", "duration": 3.311, "text": "加快技能型人才培养"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0175.wav", "duration": 3.971, "text": "昨日人民币汇率小幅走弱"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0209.wav", "duration": 4.5130625, "text": "采取必要措施加强政府债务管理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0178.wav", "duration": 3.789, "text": "而非在三四线城市深耕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0242.wav", "duration": 3.8360625, "text": "升级改造农产品批发市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0291.wav", "duration": 6.87, "text": "又一款个性十足的双机身气动外形的大型无人机神雕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0276.wav", "duration": 4.3619375, "text": "疯狂估值局限于私有公司内"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0335.wav", "duration": 5.886, "text": "非法获取用户身份认证信息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0469.wav", "duration": 3.0610625, "text": "用户不需要把它带在身上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0224.wav", "duration": 3.501, "text": "健全公益性农业技术推广服务体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0431.wav", "duration": 4.994875, "text": "执法人员将王靖苏押解回温州"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0231.wav", "duration": 3.557, "text": "大力发展节水增效农业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0165.wav", "duration": 2.679, "text": "伟嘉安捷提供数据显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0382.wav", "duration": 6.593, "text": "这是中国奥运代表团在冬季奥运会上取得的首枚金牌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0480.wav", "duration": 7.0170625, "text": "湖北一中学班长失踪坠亡教学楼四小时去向成谜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0339.wav", "duration": 5.963, "text": "高清女排力擒俄罗斯夺冠占主动众将喜极而泣"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0437.wav", "duration": 5.4301875, "text": "出事的渔船被拖到韩榆石桥海边"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0399.wav", "duration": 6.1599375, "text": "他更是以三十分十七秒一举夺得奔跑中国三连冠"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0415.wav", "duration": 10.0810625, "text": "相约家人到谢霆锋家中上演十二道锋味私房菜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0433.wav", "duration": 3.922875, "text": "昨天上午七点五零分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0135.wav", "duration": 4.5710625, "text": "增速比三月回落六个百分点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0432.wav", "duration": 3.4091875, "text": "二零一三一二二六"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0260.wav", "duration": 2.657, "text": "特别是企业自主创新方面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0133.wav", "duration": 7.5850625, "text": "兰州房地产市场回暖销量增加价格微涨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0457.wav", "duration": 7.816875, "text": "七名犯罪嫌疑人因涉嫌非法经营罪被批准逮捕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0189.wav", "duration": 5.076, "text": "并重新编报海洋环境影响报告书"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0328.wav", "duration": 5.6649375, "text": "回购期限为股东大会通过后不超过十二个月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0456.wav", "duration": 4.8090625, "text": "一对男女骑电动车在通过一个十字路口时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0448.wav", "duration": 4.475125, "text": "本月下旬天宇将现五星连线奇观"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0353.wav", "duration": 3.225125, "text": "北京时间七月二十八日晚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0434.wav", "duration": 6.4140625, "text": "温州沙城街道一民房今晨发生火灾已造成四人死亡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0392.wav", "duration": 3.5908125, "text": "也存在高危病毒危险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0461.wav", "duration": 2.901125, "text": "一辆宝马和一辆奔驰四次相撞"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0306.wav", "duration": 6.3930625, "text": "公司拟计划通过集中竞价交易方式回购公司股份"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0135.wav", "duration": 5.3769375, "text": "江苏省对省级机关住房公积金政策做出了调整"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0478.wav", "duration": 6.448, "text": "近日在违法事实认识清楚法律法规适用明确的基础上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0171.wav", "duration": 5.859, "text": "开发商只需选择继续降价"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0305.wav", "duration": 5.2049375, "text": "去年同期则是亏损二百四十二万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0287.wav", "duration": 7.1369375, "text": "因为春季的计算方式是从三月二十日到六月三十日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0206.wav", "duration": 8.3060625, "text": "对中小企业发行债务融资工具提供绿色通道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0495.wav", "duration": 3.479, "text": "警方证实周云露遇害"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0276.wav", "duration": 5.7679375, "text": "商务部裁定切销或补贴幅度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0480.wav", "duration": 9.661125, "text": "以高收入低风险和免缴税等好处利诱对方成为水货客"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0196.wav", "duration": 6.739, "text": "对考务费实行统一标准化管理后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0420.wav", "duration": 2.5190625, "text": "才有时间去探班"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0445.wav", "duration": 3.6330625, "text": "事故电梯仍处于拆解状态"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0159.wav", "duration": 3.5559375, "text": "帮助广告主找出目标用户"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0283.wav", "duration": 3.8050625, "text": "据新华社电印度官员透露"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0424.wav", "duration": 3.7998125, "text": "想不想他再次成家立室"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0289.wav", "duration": 4.735125, "text": "如何说服四大银行一起与之愉快合作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0342.wav", "duration": 5.1630625, "text": "我希望能通过这次田径世锦赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0348.wav", "duration": 5.5, "text": "主办方试图记录每一个跑友挥洒激情的每一个瞬间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0313.wav", "duration": 3.880875, "text": "使用户在刷机过程中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0201.wav", "duration": 5.7640625, "text": "组织了第一批七个地区城市开展三网融合试点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0153.wav", "duration": 4.998, "text": "并利好一二线城市的中高端住宅"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0394.wav", "duration": 5.603, "text": "总共有二千七百六十人来为这项大赛志愿服务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0328.wav", "duration": 3.057, "text": "这种说法到底有无科学依据呢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0293.wav", "duration": 4.5, "text": "国内移动支付需主要有两股力量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0143.wav", "duration": 4.624, "text": "整治资金被挤占挪用等一亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0137.wav", "duration": 5.457, "text": "一些楼盘新房价格出现微涨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0200.wav", "duration": 3.717875, "text": "对于中小企业的支持政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0489.wav", "duration": 2.859875, "text": "演员这个职业就是这样"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0267.wav", "duration": 4.5130625, "text": "也没有参与过任何产品的原始设计"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0350.wav", "duration": 6.370875, "text": "四乘一百米接力亚历山大布尔格哈德特"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0421.wav", "duration": 2.624, "text": "两人都是依赖电话沟通"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0310.wav", "duration": 3.616, "text": "在体积能耗上存在一定的不足"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0349.wav", "duration": 2.8679375, "text": "他们的步频大致相同"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0462.wav", "duration": 6.399875, "text": "晨报记者张佳琪晨报讯昨晚九时三零分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0440.wav", "duration": 7.24, "text": "自从中国内地的第一家网上药店一零年前开张以来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0375.wav", "duration": 6.114, "text": "有可靠消息称高桥很可能在近期正式宣布出柜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0192.wav", "duration": 3.0699375, "text": "城投债券收益率上升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0242.wav", "duration": 3.9239375, "text": "据国家发改委网站消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0395.wav", "duration": 4.9931875, "text": "而且多次参加过业馀排球比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0219.wav", "duration": 13.927, "text": "健全农作物种质资源和畜禽遗传资源保存体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0124.wav", "duration": 3.656, "text": "国家统计局公布的数据显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0134.wav", "duration": 4.282, "text": "利用公积金可以减少租赁者负担"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0163.wav", "duration": 3.601, "text": "超过五月七千套的水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0460.wav", "duration": 3.880125, "text": "目前当地警方正在追查这名司机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0409.wav", "duration": 2.598125, "text": "更有一手好厨艺"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0325.wav", "duration": 2.8298125, "text": "主营信息电子和环保"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0461.wav", "duration": 6.7170625, "text": "参考消息网七月二九日报道港媒称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0332.wav", "duration": 8.1609375, "text": "业内对其做法的解读是先凭着低价杀入市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0195.wav", "duration": 4.7480625, "text": "建立地方政府债务管理体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0418.wav", "duration": 3.4770625, "text": "但陈妍希在出席活动时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0280.wav", "duration": 10.0030625, "text": "再次对中国光伏产品发起双反调查并试图征收高额关税"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0143.wav", "duration": 4.903, "text": "目前公积金政策已经与去年等同了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0128.wav", "duration": 4.135, "text": "广州和深圳分别为五万元和七万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0322.wav", "duration": 3.9709375, "text": "研发投入是一个刚性指标"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0341.wav", "duration": 4.63, "text": "亲身感受沈阳当地浓郁的民俗文化内蕴"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0219.wav", "duration": 7.645, "text": "各有关部门和地方各级人民政府要围绕规划目标任务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0177.wav", "duration": 6.0, "text": "国务院总理李克强在二政府工作报告中表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0407.wav", "duration": 5.349125, "text": "将自导自演一部名为睡魔的科幻大片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0185.wav", "duration": 3.823, "text": "北京等城市在土地出让中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0277.wav", "duration": 2.657, "text": "还包括迈向中高端水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0191.wav", "duration": 6.523, "text": "引导企业围绕重点国家和地区在重点领域展开投资"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0147.wav", "duration": 3.6259375, "text": "据伟嘉安捷提供的数据显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0129.wav", "duration": 3.1340625, "text": "在近期房价持续回升的背景下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0226.wav", "duration": 5.15, "text": "中央企业实现营业总收入十六点八亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0138.wav", "duration": 4.552, "text": "推行标准化装配式装修"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0157.wav", "duration": 2.955, "text": "广泛应用于移动端"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0238.wav", "duration": 3.3200625, "text": "提高流通组织化程度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0153.wav", "duration": 3.283, "text": "据伟嘉安捷提供的数据显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0422.wav", "duration": 2.469, "text": "没想竟然惨败"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0151.wav", "duration": 3.661, "text": "而非某些功能的简单嫁接"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0409.wav", "duration": 4.02, "text": "搜狐娱乐讯七月十五日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0441.wav", "duration": 4.7951875, "text": "前往温州龙湾万达广场游玩的市民"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0254.wav", "duration": 6.3830625, "text": "甚至还不如原来的一点零版本系统好用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0323.wav", "duration": 3.49, "text": "成飞集成相关人士告诉记者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0452.wav", "duration": 5.5, "text": "法制晚报讯记者李洁今天傍晚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0323.wav", "duration": 4.993875, "text": "紫光股份在公告扩展云计算市场后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0420.wav", "duration": 2.464125, "text": "二人一脸笑容"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0161.wav", "duration": 3.435, "text": "加解密的措施如同虚设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0303.wav", "duration": 3.4160625, "text": "云计算和大数据时代"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0248.wav", "duration": 4.568, "text": "加快建设环境监测预警体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0381.wav", "duration": 7.073, "text": "他在二零一五年昆仑决诸神之战决赛圈的表现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0453.wav", "duration": 5.9148125, "text": "村庄晴天降奇冰十几斤重来历不明"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0122.wav", "duration": 3.915, "text": "明年初料迎供应淡季"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0369.wav", "duration": 5.0, "text": "很多六七十岁的跑者看到这个研究结果时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0235.wav", "duration": 4.072, "text": "避免中国企业境外恶性竞争"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0277.wav", "duration": 6.959, "text": "苹果作为消费数码产品的公司是否具备造车能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0331.wav", "duration": 5.1450625, "text": "同比增百分之十三点一一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0370.wav", "duration": 3.0788125, "text": "令对手不再敢贸然近身"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0364.wav", "duration": 4.698, "text": "可以防止运动员出发时手部滑落"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0283.wav", "duration": 8.2959375, "text": "乔斯维亚克还谈及了苹果涉足可穿戴设备市场的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0347.wav", "duration": 4.8239375, "text": "俄罗斯队十七分居榜首"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0166.wav", "duration": 3.669, "text": "积累在城镇购房首期付款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0424.wav", "duration": 4.3310625, "text": "陈妍希公司官方账号发表微博辟谣"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0233.wav", "duration": 3.7940625, "text": "国家审计署还专门组织力量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0330.wav", "duration": 4.5, "text": "将有利于增加威灵电器的收入和利润"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0362.wav", "duration": 4.5920625, "text": "失去了最稳定的得分手之后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0331.wav", "duration": 4.212875, "text": "大到空调电视机电脑微波炉加湿器"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0128.wav", "duration": 3.571, "text": "一线城市土地供应量减少"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0290.wav", "duration": 8.734125, "text": "每股下滑三点八八美元报收于一点一十五点零五美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0463.wav", "duration": 6.492875, "text": "游客三亚游泳致终身残疾向旅行社索赔一九六万"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0163.wav", "duration": 5.51, "text": "房企在一线城市拿地的热情还将提高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0147.wav", "duration": 3.956, "text": "各级政府安排财政资金一亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0351.wav", "duration": 5.068, "text": "并且介绍自己是如何通过实战调整状态而渐入佳境的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0195.wav", "duration": 6.094, "text": "充分发挥中国农业产业发展基金的引导作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0227.wav", "duration": 5.172, "text": "加强地方政府债务管理和风险防控"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0409.wav", "duration": 4.448, "text": "搜狐娱乐讯八月九日晚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0232.wav", "duration": 3.2630625, "text": "鼓励更多资金投资资本市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0388.wav", "duration": 4.9650625, "text": "加上惠若琪因伤缺席本届世界杯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0185.wav", "duration": 7.88, "text": "未来一年内中国房地产价格不太可能强劲反弹"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0148.wav", "duration": 4.138, "text": "降幅比四月份收窄六个百分点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0471.wav", "duration": 5.9450625, "text": "温州鞋业总经理遭追杀凶手行凶过程中被打死"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0468.wav", "duration": 8.2158125, "text": "村委会主任因经济问题两次被免第三次当选惹争议"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0386.wav", "duration": 7.224875, "text": "雅桑克莱并没有采取矮个子拳手惯用的闪击式打法"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0350.wav", "duration": 5.3098125, "text": "日本以小分优势暂列第三位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0171.wav", "duration": 3.985, "text": "购房者受惠于政策利好的同时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0268.wav", "duration": 4.1999375, "text": "以及是否能提升他们的历史地位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0193.wav", "duration": 6.708, "text": "对于保障全国生态安全具有不可代替的战略作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0465.wav", "duration": 6.1650625, "text": "参考消息网九月二二日报道港媒称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0454.wav", "duration": 5.287125, "text": "六名游客在海珠湖公园凉亭内躲雨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0361.wav", "duration": 5.099875, "text": "组委会工作机构共分为四部一室"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0273.wav", "duration": 3.589125, "text": "高频交易一直饱受诟病"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0432.wav", "duration": 4.8659375, "text": "杨爱明被兴安警方刑事拘留"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0122.wav", "duration": 4.902, "text": "加速今年楼市成交复苏回暖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0272.wav", "duration": 6.141, "text": "在最风光的时候看不见来自颠复者的威胁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0225.wav", "duration": 4.3049375, "text": "提高资源利用率和加工转化率"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0263.wav", "duration": 5.0399375, "text": "不仅在科技公司领域排名第一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0451.wav", "duration": 4.8459375, "text": "温州三学生为庆生爬上浙江第一高楼玩自拍"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0465.wav", "duration": 5.406, "text": "初步认定这是一起安全生产责任事故"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0376.wav", "duration": 6.462875, "text": "赛后主攻朱婷获最有价值球员和最受欢迎球员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0188.wav", "duration": 5.902, "text": "完善农产品流通税收政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0317.wav", "duration": 6.4299375, "text": "安丰公司的广告网页是他们推送的重要内容"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0455.wav", "duration": 5.9401875, "text": "涉事厂家生产的电梯此前曾发生多起事故"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0238.wav", "duration": 2.801, "text": "节假日最后一天结束"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0151.wav", "duration": 11.491, "text": "在兰州市北岸由广东房企开发的一个大型楼盘里"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0261.wav", "duration": 3.5810625, "text": "更现实的的困难在于"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0413.wav", "duration": 3.9721875, "text": "小洋装更衬托出她的纤细身材"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0225.wav", "duration": 3.5549375, "text": "一些没有直接收益的项目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0446.wav", "duration": 3.568125, "text": "新华社记者梁建强摄"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0356.wav", "duration": 5.2470625, "text": "奔跑中国系列竞跑赛事将转战广州"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0382.wav", "duration": 4.3349375, "text": "五千米理查德灵格"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0202.wav", "duration": 5.047, "text": "加快牲畜水产遗传改良进程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0357.wav", "duration": 3.573, "text": "冰壶项目在水立方进行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0477.wav", "duration": 8.156, "text": "龙湾永强中学一名高三男生从宿舍楼五楼楼顶坠楼身亡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0406.wav", "duration": 5.8720625, "text": "这个角色拥有一只白色的波斯猫作为自己的宠物"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0375.wav", "duration": 4.7470625, "text": "决赛一如期待般精彩绝伦"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0494.wav", "duration": 4.365, "text": "二零零多幅珍贵油画抵达南京"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0139.wav", "duration": 5.14, "text": "在加大新供用地保障力度方面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0236.wav", "duration": 9.8299375, "text": "使用地方政府的债务融资规模控制在安全范围内"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0462.wav", "duration": 4.5280625, "text": "山水湾小区斜对面的一处工地旁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0441.wav", "duration": 10.874, "text": "村书记骗补助被判一一年受审辩称不了解政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0231.wav", "duration": 6.5, "text": "同比增加迅速上缴税金三亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0253.wav", "duration": 4.401, "text": "应该也是个提醒中国再也不能仅仅满足于组装了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0315.wav", "duration": 6.5851875, "text": "乌云上有不少因联网漏洞可导致车辆被控制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0411.wav", "duration": 3.3779375, "text": "男友却仍然劈腿偷吃"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0322.wav", "duration": 3.0610625, "text": "锂电池市场也在向好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0203.wav", "duration": 8.041, "text": "以最急需最关键最薄弱的环节和领域为重点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0394.wav", "duration": 3.97, "text": "即当自己轮转到前排二号位时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0307.wav", "duration": 3.801, "text": "往往对网络安全意识也不强"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0382.wav", "duration": 3.311, "text": "但他的具体行踪成为谜团"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0345.wav", "duration": 5.2570625, "text": "通过冠军赛季后赛垫场赛等形式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0284.wav", "duration": 3.661, "text": "害得汪峰也不敢随便表白了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0332.wav", "duration": 7.4281875, "text": "预计汽车行业在网络安全方面投入往往较少"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0212.wav", "duration": 3.813, "text": "防范我国政府债务风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0131.wav", "duration": 3.9930625, "text": "难以在周边城市用公积金购房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0399.wav", "duration": 3.711875, "text": "深知世界杯夺冠是对过去努力的肯定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0198.wav", "duration": 5.822, "text": "农产品产销对接的经验介绍"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0434.wav", "duration": 9.249, "text": "村书记被村民驾车撞倒身亡肇事者已被刑拘"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0281.wav", "duration": 4.3000625, "text": "合并拓朗之后将推出新的产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0183.wav", "duration": 5.5350625, "text": "缴存者还可以在租房装修离退休时提取"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0432.wav", "duration": 6.692875, "text": "我们才按照正常程序给他转为副院长一职的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0328.wav", "duration": 3.775, "text": "除了产品功能必须不错之外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0269.wav", "duration": 5.478, "text": "将会在设备发售稳定的推出与更新"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0155.wav", "duration": 4.6969375, "text": "规划建筑面积约五万平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0435.wav", "duration": 7.2009375, "text": "湖北七人冒充福彩工作人员兜售中奖秘籍骗取三零零万"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0458.wav", "duration": 4.951875, "text": "李斯达表示自己跟周云露并没有深仇大恨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0306.wav", "duration": 3.744875, "text": "因此需要的人员大幅下降"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0378.wav", "duration": 3.7370625, "text": "法国冰协方面的态度有了缓和"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0250.wav", "duration": 2.9960625, "text": "但有关负责人认为我想"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0234.wav", "duration": 8.7569375, "text": "设定政府性债务风险控制指标和标准"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0255.wav", "duration": 5.078, "text": "苹果此举是为了节约用电量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0244.wav", "duration": 4.5, "text": "规划对十二五的投资规模未做预测"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0391.wav", "duration": 4.845, "text": "在八月二十六日中国队和韩国队的比赛中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0244.wav", "duration": 5.312, "text": "政府总体上具有较强的偿债能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0461.wav", "duration": 2.6999375, "text": "温州话到底有多难懂"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0208.wav", "duration": 5.6739375, "text": "徐林吸取欧美等国主权债务危机的教训"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0456.wav", "duration": 3.776125, "text": "目前黄某已被诊断为脑死亡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0448.wav", "duration": 5.021, "text": "村干部大闹天宫孙大圣口碑爆棚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0127.wav", "duration": 4.224, "text": "有些要与房企具体项目挂钩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0263.wav", "duration": 3.9449375, "text": "如果神雕大量服役和部署"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0197.wav", "duration": 2.881, "text": "中小企业经营困难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0286.wav", "duration": 5.8570625, "text": "主要是因为社会对可穿戴智能手表的期望太高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0312.wav", "duration": 4.735, "text": "主要在于将通信和定位的模块大大缩小到方寸之间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0190.wav", "duration": 4.257, "text": "推动农产品生产加工和流通企业建立诚信制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0185.wav", "duration": 4.108, "text": "此项政策对中国楼市影响有限"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0125.wav", "duration": 4.098, "text": "后续要加大公积金贷款的便利性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0393.wav", "duration": 3.7829375, "text": "主教练郎平都没有派她出场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0171.wav", "duration": 4.857, "text": "且低于七十平米的小户型住房成交明显上升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0401.wav", "duration": 3.9440625, "text": "但看两人比赛后的面部状况"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0140.wav", "duration": 6.167, "text": "其中广州深圳甚至出现了多个日光盘"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0444.wav", "duration": 4.286875, "text": "称事件系点餐过程中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0341.wav", "duration": 7.23, "text": "高清女排力擒俄罗斯夺冠占主动众将喜极而泣"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0318.wav", "duration": 7.406, "text": "美的集团对项目在一定年限内有投入产出的规定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0483.wav", "duration": 3.5649375, "text": "新京报快讯记者刘玮近日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0224.wav", "duration": 6.656, "text": "以建设区域内各类农产品优势产业带为重点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0144.wav", "duration": 5.576, "text": "在房企扎堆一二线城市时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0160.wav", "duration": 5.315, "text": "楼面价折合约一万元每平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0341.wav", "duration": 3.1899375, "text": "张蓉芳主持排管中心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0438.wav", "duration": 5.6499375, "text": "肇事者为紫各庄村民乔某"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0135.wav", "duration": 3.74, "text": "整个系统的安全就会出现问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0193.wav", "duration": 3.584, "text": "对债券投资人来说不是坏事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0192.wav", "duration": 5.735, "text": "在制度上对债券持有人的合法权益进行保护"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0183.wav", "duration": 4.688, "text": "从一月的一线城市的土地成交看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0350.wav", "duration": 6.4250625, "text": "新队长曾春蕾揭秘了角色转变前后的幕后故事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0271.wav", "duration": 3.046, "text": "手机网民近五点六亿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0127.wav", "duration": 6.591, "text": "在丰台樊家村一宗商业用地底价成交后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0324.wav", "duration": 4.365, "text": "国内几个服务器品牌的盘子还比较小"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0252.wav", "duration": 4.5759375, "text": "极有可能对债券持有人利益构成不利影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0159.wav", "duration": 4.002, "text": "未来政策层面将继续保持宽松"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0292.wav", "duration": 3.4250625, "text": "现在是不是也该长点心了吧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0384.wav", "duration": 3.991, "text": "将只参加奥运会团体赛的比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0194.wav", "duration": 3.682, "text": "北京科技大学教授刘澄表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0249.wav", "duration": 4.6120625, "text": "实行全口径统计和动态监测"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0213.wav", "duration": 5.6269375, "text": "鼓励各种社会力量与乡村结对帮扶"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0406.wav", "duration": 2.7309375, "text": "影片的上映日期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0235.wav", "duration": 4.75, "text": "所投项目必须经过合规性审查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0482.wav", "duration": 5.3090625, "text": "这样的斗争和考验有时就发生在我们身边"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0476.wav", "duration": 6.8100625, "text": "温州高三男生坠楼身亡事发前无异常刚从家返校"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0322.wav", "duration": 6.3140625, "text": "美芝压缩机是隶属于美的集团旗下的业务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0388.wav", "duration": 5.6340625, "text": "徐云丽透露在赛前队友曾经给自己发了一条短信"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0469.wav", "duration": 3.8769375, "text": "希望相关部门能处理此事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0240.wav", "duration": 4.072, "text": "政府还拥有较多的可变现资产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0146.wav", "duration": 4.7959375, "text": "已有一套住房并结清贷款馀额的家庭"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0267.wav", "duration": 4.053, "text": "而是会更加关注产品本身"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0406.wav", "duration": 5.255125, "text": "因此不得不放弃宾虚的演出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0278.wav", "duration": 4.235, "text": "车库虽然最能够代表初期创业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0320.wav", "duration": 9.1960625, "text": "由于向为民已获任威灵电机的董事会主席"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0331.wav", "duration": 3.0129375, "text": "很可能通过联网技术"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0299.wav", "duration": 3.8350625, "text": "难不成真能第三期发育"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0474.wav", "duration": 6.166, "text": "河南籍游客张某某手部受伤及表皮损伤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0425.wav", "duration": 4.999, "text": "下星期更进入结局周"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0306.wav", "duration": 3.782, "text": "沈阳机床董事长关锡友认为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0180.wav", "duration": 2.847, "text": "来自广州日报的报道称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0419.wav", "duration": 2.642125, "text": "也有情绪问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0288.wav", "duration": 4.5189375, "text": "而梅姐则可以陪陪小孩或者去搞搞政治"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0136.wav", "duration": 4.318, "text": "商业营业用房销售额下降了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0385.wav", "duration": 4.3190625, "text": "在今年的亚锦赛夺冠后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0404.wav", "duration": 6.1589375, "text": "曾以分歧者星运里的错窜红的谢琳伍德蕾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0363.wav", "duration": 9.9201875, "text": "随后还以百分之五十三点五六的得分率拿到了最佳进攻的大奖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0335.wav", "duration": 7.6379375, "text": "下称美的内部的组织架构二点一五年加大了调整力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0158.wav", "duration": 3.3550625, "text": "公积金贷款上限调整后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0455.wav", "duration": 6.2580625, "text": "温州苍南县看守所民警宿舍楼起火无人员伤亡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0455.wav", "duration": 3.0400625, "text": "昨日记者从医院了解到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0150.wav", "duration": 8.649, "text": "搜房网广州二手房电商集团市场部总监罗来平发现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0354.wav", "duration": 4.051, "text": "每个场馆又高端大气上档次"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0168.wav", "duration": 5.1639375, "text": "是国际上合作性办公品牌的代表"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0465.wav", "duration": 7.6679375, "text": "温州贩卖婴儿大案女医生假称婴儿已死然后卖掉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0250.wav", "duration": 5.0, "text": "加快鲜活农产品质量安全追溯体系建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0486.wav", "duration": 5.001, "text": "据新华社电七月四日一六时许"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0275.wav", "duration": 7.0970625, "text": "将创下该公司成立四七年来最大收购交易的记录"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0488.wav", "duration": 4.833, "text": "通报一个教育一批震灭一片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0234.wav", "duration": 6.0, "text": "各地要鼓励流通企业跨地区兼并重组和投资合作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0447.wav", "duration": 3.8151875, "text": "他辗转三所乡村学校"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0363.wav", "duration": 3.160875, "text": "而对于他的好友小林尊"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0171.wav", "duration": 5.786, "text": "规划建筑面积合计九百万平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0282.wav", "duration": 5.281, "text": "现在就下结论将原因推给高频交易"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0179.wav", "duration": 2.791, "text": "地下一万平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0390.wav", "duration": 3.6340625, "text": "因为想要捧起来冠军奖杯的欲望太强烈"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0397.wav", "duration": 6.011, "text": "民众自然会支持大韩体育会给他一个人修改规则"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0188.wav", "duration": 2.7460625, "text": "而是一条市内快速路"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0131.wav", "duration": 3.2909375, "text": "存销比已经见顶回落"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0324.wav", "duration": 4.662, "text": "这是今年上半年锂电池业务爆发的原因"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0292.wav", "duration": 4.5, "text": "高德纳咨询公司分析师马克黄说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0379.wav", "duration": 5.218, "text": "这其中一位身材高挑的女孩子颇为引人关注"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0303.wav", "duration": 6.2629375, "text": "现阶段管理创新和组织再造比任何的创新都重要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0197.wav", "duration": 3.8869375, "text": "入海污染物排放总量下降"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0192.wav", "duration": 3.347, "text": "推进主营业务整体上市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0316.wav", "duration": 2.735, "text": "小天才产品负责人表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0203.wav", "duration": 4.252, "text": "国资委还将支持企业走出去"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0219.wav", "duration": 6.645, "text": "要加大保障性安居工程建设资计划落实力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0175.wav", "duration": 3.412, "text": "购房的扶持力度在加大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0344.wav", "duration": 3.958, "text": "恰恰在风格打法和比赛理念上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0438.wav", "duration": 5.6550625, "text": "每句歌词都蕴含一段李姓历史文化在里头"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0396.wav", "duration": 4.51, "text": "但是上周公布的水质检测显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0407.wav", "duration": 5.502, "text": "雷诺兹持枪的造型和他在冥界警局里的颇为相似"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0128.wav", "duration": 5.5610625, "text": "北京今年的土地出让金锁定在两千亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0389.wav", "duration": 5.22, "text": "但喜欢欧美音乐爱吃西红柿意大利面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0485.wav", "duration": 3.741, "text": "更是扭转日本旅游赤字"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0312.wav", "duration": 5.833, "text": "盘中有两千六百八十六万元资金净流入"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0216.wav", "duration": 3.811, "text": "从事当地的基础设施建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0495.wav", "duration": 6.7221875, "text": "李嘉诚军师抛售马云一五亿买香港最贵单价豪宅"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0285.wav", "duration": 5.567125, "text": "在美国一上线就造成大轰动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0132.wav", "duration": 4.952, "text": "土地出入收入累计结馀五千亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0430.wav", "duration": 4.235125, "text": "但现在又有别的女孩坐上他的大腿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0261.wav", "duration": 4.963, "text": "随着四克网络的在中国的展开"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0272.wav", "duration": 2.8770625, "text": "他是一个杰出的商人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0255.wav", "duration": 6.4810625, "text": "占总营收的二十六点百分之六十点六十七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0262.wav", "duration": 5.172, "text": "瞬间将苹果估价拉低了至少百分之六"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0424.wav", "duration": 5.225125, "text": "搜狐娱乐讯北京时间七月二十八日消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0152.wav", "duration": 4.6050625, "text": "各项目标任务已分解至各区县"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0332.wav", "duration": 3.6240625, "text": "已经花费了一定的资源和成本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0220.wav", "duration": 4.0299375, "text": "大力开展小型农田水利建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0266.wav", "duration": 2.957, "text": "没人知道他在干什么"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0271.wav", "duration": 5.725125, "text": "更大的野心在于深刻变革人类的支付习惯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0448.wav", "duration": 3.401125, "text": "宝马奔驰连续四次相撞"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0390.wav", "duration": 4.964125, "text": "在这场亚洲国家锁定胜局的申办博弈中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0257.wav", "duration": 5.918, "text": "苹果公司一直在秘密从事电汽汽车的研发"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0474.wav", "duration": 4.9250625, "text": "该镇农办一名主管水利负责人介绍"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0374.wav", "duration": 4.4239375, "text": "毕竟她本人是经历过伦敦奥运会的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0342.wav", "duration": 4.937, "text": "比赛的节奏始终被中国队控制在手中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0345.wav", "duration": 3.5, "text": "伴随着专业啦啦队的加油声"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0489.wav", "duration": 3.453875, "text": "不是她的戏或是她的八卦"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0243.wav", "duration": 8.069, "text": "提高大型农机具和农药化肥农膜等农资生产水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0368.wav", "duration": 2.8310625, "text": "无法参加奥运会的比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0188.wav", "duration": 3.1700625, "text": "进一步完善环境政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0395.wav", "duration": 6.2580625, "text": "她几乎担当起了场上进攻加振奋士气的主力作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0356.wav", "duration": 4.0859375, "text": "在几度遇险的情况下顽强咬住"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0245.wav", "duration": 3.3940625, "text": "由各省区市人民政府决定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0428.wav", "duration": 3.6120625, "text": "照片中二人坐在沙发上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0404.wav", "duration": 5.4150625, "text": "业已正式启动斯诺登事件电影的拍摄"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0419.wav", "duration": 5.243875, "text": "现场试听无条件人生马拉松等六首歌曲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0377.wav", "duration": 5.6840625, "text": "但曾春蕾赛后还是以队长身份出席了新闻发布会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0219.wav", "duration": 5.9759375, "text": "提高公众参与渤海环境保护的积极性和主动性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0427.wav", "duration": 4.2949375, "text": "甜蜜恩爱的模样彷彿热恋中的情侣"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0345.wav", "duration": 5.767125, "text": "俄罗斯美国和日本三队均零封对手"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0211.wav", "duration": 6.7590625, "text": "调动农民参与农业农村基础设施建设的积极性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0405.wav", "duration": 4.036125, "text": "避免和新木乃伊正面较量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0422.wav", "duration": 3.0610625, "text": "感情事备受关注"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0406.wav", "duration": 6.193875, "text": "以一身越野军装黑框眼镜的造型出现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0472.wav", "duration": 3.8210625, "text": "其作案后身上有大量血迹"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0360.wav", "duration": 5.420875, "text": "关键的第四局一开始中国队便发生了意外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0151.wav", "duration": 7.8239375, "text": "公积金贷款首付比例降低的消息令购房者喜出望外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0251.wav", "duration": 4.0389375, "text": "但目前还存在服务架构不完善"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0368.wav", "duration": 2.944125, "text": "朱婷却是唯一的硕果"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0209.wav", "duration": 4.176, "text": "其中城投债券共发行七千亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0126.wav", "duration": 4.3039375, "text": "北京去年土地出让落下大幕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0161.wav", "duration": 3.669, "text": "避免房地产市场大起大落"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0126.wav", "duration": 4.885, "text": "还降低了首套房公积金首付"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0293.wav", "duration": 3.864, "text": "应慎重考虑上市时机和地点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0390.wav", "duration": 3.531, "text": "看到这一幕我控制不住自己了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0145.wav", "duration": 3.735, "text": "全国共有管理中心一百个"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0464.wav", "duration": 4.410125, "text": "大家到施工现场的临时大门外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0278.wav", "duration": 6.344, "text": "她们宁愿可花五个小时讨论是否买一条裙子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0253.wav", "duration": 7.24, "text": "商议向印度转移更多军事技术的事宜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0228.wav", "duration": 3.543, "text": "提高现代化生产水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0192.wav", "duration": 10.139, "text": "考试过程需要消耗相关材料或需聘请专业面试考官的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0409.wav", "duration": 3.646, "text": "她表示最重要的就是诚恳"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0485.wav", "duration": 3.301, "text": "看到该网友的曝光帖后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0235.wav", "duration": 6.15, "text": "全面实施和完善草原生态保护补助奖励政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0291.wav", "duration": 4.1160625, "text": "美国将不再生产大鸦无人机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0328.wav", "duration": 3.3630625, "text": "年龄或大或小的孩子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0302.wav", "duration": 5.3449375, "text": "是这类公司在美国市场估值长期受低估"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0327.wav", "duration": 5.682, "text": "同比增长百分之四净利润六点七八亿港元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0226.wav", "duration": 3.532, "text": "坚持确保国家粮食安全"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0180.wav", "duration": 3.435, "text": "一大数据云计算不是你谈的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0247.wav", "duration": 3.2369375, "text": "是南京往南的重要通道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0361.wav", "duration": 5.4821875, "text": "赢得了同行媒体和观众的敬意"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0252.wav", "duration": 3.625, "text": "物质装备水平明显提高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0206.wav", "duration": 5.9870625, "text": "地方投融资平台公司通过发行债券进行融资"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0477.wav", "duration": 3.1259375, "text": "目前仍未发现失踪船员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0277.wav", "duration": 4.291, "text": "通常只是算法交易造成的影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0205.wav", "duration": 4.7470625, "text": "耕种收综合机械化水平百分之五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0467.wav", "duration": 5.288125, "text": "永远的紫霞仙子朱茵的亮相引起粉丝的热捧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0364.wav", "duration": 6.368875, "text": "张家口市的崇礼县从每年十一月初到第二年四月初"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0470.wav", "duration": 5.1789375, "text": "机器人服务员现身火锅店顾客直呼女神"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0359.wav", "duration": 5.390125, "text": "自二零一四年十二月五日正式启动志愿者招募工作以来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0231.wav", "duration": 7.5, "text": "落实对城市公共交通行业的成品油价格补贴政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0279.wav", "duration": 3.891, "text": "中国商务部已明确表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0177.wav", "duration": 4.91, "text": "美丽北京大型绿色公益品牌项目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0212.wav", "duration": 5.9140625, "text": "政府通过债务融资从事基础建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0311.wav", "duration": 4.808, "text": "公司股票于二零一五年七月八日复牌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0369.wav", "duration": 3.599125, "text": "营造出良好的比赛氛围"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0469.wav", "duration": 6.5649375, "text": "游客下桥拍照踩死植物水杉栈道仙境拉铁丝网"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0139.wav", "duration": 3.264, "text": "前年至今年期间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0384.wav", "duration": 5.6000625, "text": "这也是这项冰雪顶级盛事首次来到中国"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0414.wav", "duration": 3.0329375, "text": "搜狐娱乐讯九月二日凌晨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0490.wav", "duration": 7.603, "text": "一辆货车在金丽温高速温州段发生事故"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0370.wav", "duration": 4.594, "text": "此地春秋冬三季有雪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0247.wav", "duration": 5.321875, "text": "避免在最后一年累积过大的还本压力和风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0160.wav", "duration": 4.458, "text": "加之降息降准等政策组合拳"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0363.wav", "duration": 2.978, "text": "明天还剩最后一场比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0393.wav", "duration": 5.672125, "text": "我们也应该抱着更加长远和开阔的视角来看待"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0302.wav", "duration": 5.6219375, "text": "若定苹果第三期发育的立场已呼之欲出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0233.wav", "duration": 7.0560625, "text": "先后两批共八家商业银行设立或参股八家基金管理公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0239.wav", "duration": 6.817, "text": "普通公路以车辆通过收费站收费车道的时间为准"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0226.wav", "duration": 4.9809375, "text": "不能简单地用寅吃卯粮来作价值判断"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0220.wav", "duration": 3.2900625, "text": "加快基础设施建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0363.wav", "duration": 3.4140625, "text": "为做好志愿者服务工作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0386.wav", "duration": 7.0739375, "text": "对于工作中遇到的管理经验和能力欠缺问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0189.wav", "duration": 6.234, "text": "直接涉及到债劵持有人的利益保护问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0460.wav", "duration": 13.1850625, "text": "游戏主播花样作死声称天津是他炸的直播被抓游戏室老板因冲突开枪将人射伤致死"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0316.wav", "duration": 3.577, "text": "在全世界的产业格局看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0434.wav", "duration": 4.0839375, "text": "北京旅游服务热线反馈称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0400.wav", "duration": 4.4389375, "text": "而东道主日本队紧追在中国队之后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0138.wav", "duration": 4.3609375, "text": "住房公积金贷款因其利率较低的优势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0443.wav", "duration": 6.1640625, "text": "就到了薛孝文任教的学校金堂县平桥学校"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0215.wav", "duration": 5.6889375, "text": "在政府投融资体制改革过程中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0302.wav", "duration": 4.057, "text": "但这些厂商的产品都难以进入主流"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0461.wav", "duration": 6.3989375, "text": "在经过商场自动扶梯时会选择跳过视频中的跳板"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0232.wav", "duration": 6.5239375, "text": "扩大大中城市郊区菜篮子产品生产基地规模"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0495.wav", "duration": 9.1489375, "text": "其在出行成都打车时被司机找了四张同号的二元零元假币"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0359.wav", "duration": 4.271, "text": "这也意味着最晚在明年的各项赛事中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0411.wav", "duration": 3.576875, "text": "搜狐娱乐讯七月十日消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0485.wav", "duration": 6.313, "text": "一场考验道德与良知的大米保卫战悄然打响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0345.wav", "duration": 6.8139375, "text": "但她在中国队遇到困难的时候坚持带伤上阵"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0292.wav", "duration": 4.646, "text": "不过这些政策现在已经被废除"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0141.wav", "duration": 4.0229375, "text": "在公积金贷款额度上调后一个月内"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0457.wav", "duration": 4.979, "text": "本报讯记者范跃红通讯员瓯文为了卖相好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0233.wav", "duration": 2.823, "text": "坚持基本草原保护制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0447.wav", "duration": 6.1010625, "text": "温州美女学霸将赴非洲支教教当地小学生汉语"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0201.wav", "duration": 7.821875, "text": "落实农民专业合作社和农村金融有关税收优惠政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0257.wav", "duration": 3.813, "text": "问题是他也想不出谁能干得更好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0326.wav", "duration": 4.009, "text": "二十馀万部手机遭殃"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0227.wav", "duration": 10.7840625, "text": "收益用于公共交通基础设施建设和弥补运营亏损"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0363.wav", "duration": 6.9770625, "text": "而是坚持参加了今年三月的世界花滑锦标赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0411.wav", "duration": 6.187, "text": "对于疯癫陈奕迅所长的这些设定歌迷早已习惯了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0310.wav", "duration": 4.3088125, "text": "孩子带到学校既不会让孩子分心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0389.wav", "duration": 6.2209375, "text": "张常宁的幼稚嫩显然还不能立即挑起大梁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0484.wav", "duration": 4.0808125, "text": "七月一三日的葬礼上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0405.wav", "duration": 4.951875, "text": "原本计划在今年六月正式开机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0392.wav", "duration": 7.5070625, "text": "中国女排直落三周以三零取胜阿根廷拿到第七胜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0462.wav", "duration": 4.1938125, "text": "李银河写虐恋不会伤害小波"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0179.wav", "duration": 3.413, "text": "区域产品和业务三大层面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0394.wav", "duration": 6.23, "text": "斩获十五分冠全场并且拦网独得四分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0222.wav", "duration": 3.625, "text": "以转变农业发展方式为主线"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0217.wav", "duration": 5.9, "text": "努力探索出一条具有中国特色的农业现代化道路"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0200.wav", "duration": 5.0179375, "text": "畜牧业产值占农业总产值比重百分之"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0483.wav", "duration": 9.3320625, "text": "村官接连顶风违纪其子领证为热闹摆酒六七桌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0377.wav", "duration": 3.7569375, "text": "都要给队友们传递乐观和放松的讯号"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0141.wav", "duration": 2.5, "text": "零三年到去年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0321.wav", "duration": 3.364, "text": "一定年限内的投入产出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0424.wav", "duration": 3.5, "text": "节目推出至今收视很高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0178.wav", "duration": 5.1989375, "text": "也在于全面落实分类调控因城施策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0478.wav", "duration": 3.1010625, "text": "这是富林愚老人发自内心的一句话"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0461.wav", "duration": 3.8190625, "text": "至今未找到肇事者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0358.wav", "duration": 3.048125, "text": "如果真的想学习的话"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0490.wav", "duration": 3.6960625, "text": "该事件引发社会关注"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0140.wav", "duration": 5.3780625, "text": "与之相联系的土地市场也会受到影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0243.wav", "duration": 5.4129375, "text": "推动环保基础设施和服务向农村延伸"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0274.wav", "duration": 5.724, "text": "一堆不赚钱的公司赶着上市当然不是什么好事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0354.wav", "duration": 6.0019375, "text": "让朱婷最佳球员的身份和价值再度彰显"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0370.wav", "duration": 8.910875, "text": "中国双人滑项目的后续发展应当有了较为清晰的前景"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0156.wav", "duration": 5.379, "text": "以北京去年纯商品房成交结构为例"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0492.wav", "duration": 6.3139375, "text": "温州瑞安市发生一起违停女司机故意伤害交通协警案件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0380.wav", "duration": 5.243875, "text": "要求马塞洛特缴纳七万欧元的转国籍费用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0160.wav", "duration": 6.5909375, "text": "今年国有土地出让权收入四千亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0193.wav", "duration": 6.2790625, "text": "先后出台的战略性新兴产业的政策措施主要有六项"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0159.wav", "duration": 7.6989375, "text": "有望进一步激活买家在接近年底这段时间的入市积极性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0317.wav", "duration": 3.9460625, "text": "全世界排列的二加三格局"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0343.wav", "duration": 3.339, "text": "并与亲朋好友分享这份快乐"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0421.wav", "duration": 5.308125, "text": "看来他们需要身边的朋友保密他们的行踪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0170.wav", "duration": 5.979, "text": "这直接利好去库存目标的实现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0250.wav", "duration": 9.3360625, "text": "各地要按照天然气利用优先顺序加强需求侧管理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0217.wav", "duration": 4.889, "text": "引导建设优质农产品物流配送中心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0162.wav", "duration": 7.368, "text": "稳增长措施需更全面地考虑化解楼市风险问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0308.wav", "duration": 3.151, "text": "都必须要回答的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0294.wav", "duration": 6.5390625, "text": "就美国对中国产轮胎发起双坊调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0342.wav", "duration": 3.0488125, "text": "但湖水很脏也很浑浊"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0207.wav", "duration": 8.5, "text": "国务院国资委对央企境外投资的管理法规在逐渐完善"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0305.wav", "duration": 6.0400625, "text": "公司上半年营业收入六点三四亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0278.wav", "duration": 4.714, "text": "其中就包括沃尔玛和百思买"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0140.wav", "duration": 3.499, "text": "参照首套房贷款政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0192.wav", "duration": 6.4040625, "text": "完善农业科技创新体系和现代农业产业技术体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0393.wav", "duration": 4.4079375, "text": "全能里科费雷姆斯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0189.wav", "duration": 3.855, "text": "制订境外投资总体战略"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0218.wav", "duration": 5.9560625, "text": "大力发展粮食精深加工及仓储物流业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0207.wav", "duration": 5.5489375, "text": "这是这几年城投债券发行规模不断扩大的主要原因"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0165.wav", "duration": 3.022, "text": "带动了区域板块的扩张"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0147.wav", "duration": 4.1160625, "text": "商品房销售面积三亿平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0271.wav", "duration": 4.2739375, "text": "以前在高端智能手机市场领域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0463.wav", "duration": 4.3620625, "text": "肇事的大卡车车头仍然卡在工房内"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0297.wav", "duration": 3.8629375, "text": "起步价为三百四九美元十"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0364.wav", "duration": 3.739, "text": "全面引爆现场观众的激情"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0360.wav", "duration": 4.8420625, "text": "本次比赛使用最新的仰泳出发壁架"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0433.wav", "duration": 3.939, "text": "他叮嘱五千馀名毕业生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0437.wav", "duration": 5.29, "text": "早前通报的五名失联人员已全部找到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0154.wav", "duration": 5.35, "text": "邻近地铁十号线首竟贸站"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0143.wav", "duration": 7.851, "text": "可基本满足首套和改善性自住住房的低息贷款需求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0331.wav", "duration": 3.9250625, "text": "上述成飞集成人士告诉记者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0189.wav", "duration": 4.336, "text": "健全环境执法调协调机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0244.wav", "duration": 6.5799375, "text": "为了控制地方政府本届发债下届还钱的道德风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0300.wav", "duration": 3.1939375, "text": "以满足不同用户的需求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0137.wav", "duration": 6.0479375, "text": "现阶段市场上落地的产品大多对安全的认知都存在缺陷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0211.wav", "duration": 5.913, "text": "采取必要措施加强政府债务管理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0458.wav", "duration": 5.187, "text": "家居养娃的李娜又重新出现在媒体大众的面前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0441.wav", "duration": 4.6330625, "text": "大量资本已投入医药企业中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0456.wav", "duration": 7.349875, "text": "目前湖北省质监局已要求全省暂停使用涉事厂家电梯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0371.wav", "duration": 6.209, "text": "最终中国队以二五比二三拿下第四局"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0164.wav", "duration": 7.978, "text": "外商投资房地产企业注册资本与投资总额比例"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0244.wav", "duration": 5.2729375, "text": "引导和帮助农民科学处理垃圾和污水"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0279.wav", "duration": 3.626, "text": "至二十五点五万亿韩元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0495.wav", "duration": 8.265125, "text": "火锅店服务员朱某被温州市鹿城区检察院依法批准逮捕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0155.wav", "duration": 3.415, "text": "总体偏松部分地区过剩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0199.wav", "duration": 4.393, "text": "就国家方案我省还会进行再研究"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0125.wav", "duration": 5.931, "text": "百分之五的网友希望放开一线城市的限购政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0458.wav", "duration": 9.6481875, "text": "华商报讯记者张林实习生邓泽惠一夜之间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0391.wav", "duration": 4.5, "text": "看好她成为日本排球的新女神"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0361.wav", "duration": 3.417, "text": "这是我们每个人都应该做的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0407.wav", "duration": 4.4709375, "text": "在经历了无数次的导演和演员更换之后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0363.wav", "duration": 4.2680625, "text": "中国队进攻火力明显减弱"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0360.wav", "duration": 6.767125, "text": "当时身披八号战袍的她身高达到了一米九五公分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0475.wav", "duration": 4.7219375, "text": "政府曾多次叫停电站发电"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0226.wav", "duration": 6.006, "text": "虽然报道内容并没有具体的城投债券还本付息违约案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0482.wav", "duration": 3.201875, "text": "但问题至今没有解决"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0236.wav", "duration": 5.349, "text": "就不得再通过发行城投债券新增政府性债务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0392.wav", "duration": 2.8420625, "text": "希望得到想要的结果"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0170.wav", "duration": 4.388, "text": "主要目的是把后辈的婚姻风险隔断"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0207.wav", "duration": 6.865, "text": "农业与非农产业之间劳动生产率的差距也很大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0219.wav", "duration": 5.036, "text": "实施全国增长千亿斤粮食生产能力规划"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0323.wav", "duration": 4.015125, "text": "百分之百为国产品牌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0352.wav", "duration": 4.9660625, "text": "中国女排昨天下午在松本迎战韩国队"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0178.wav", "duration": 4.492, "text": "支持居民自住和改善住房需求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0171.wav", "duration": 5.156, "text": "如今房地产市场已经供需相对平衡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0482.wav", "duration": 3.8449375, "text": "又在船仓内发现四名船员遗体"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0389.wav", "duration": 5.9399375, "text": "全场比赛的焦点是休战三场后重新登场的名将朱婷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0300.wav", "duration": 6.453, "text": "但现在已经成为了习生活习惯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0173.wav", "duration": 5.852, "text": "但去年住宅土地成交建筑面积仅十二亿平米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0164.wav", "duration": 6.367, "text": "公积金政策调整对购房者心理层面影响较大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0376.wav", "duration": 3.9040625, "text": "也有经验丰富的老队员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0289.wav", "duration": 3.6319375, "text": "全球鹰并不能独占鳌头"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0273.wav", "duration": 5.623875, "text": "还没有任何一个用户真正遭受过此攻击"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0246.wav", "duration": 4.0959375, "text": "引导天然气合理消费"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0151.wav", "duration": 6.288, "text": "其中资金这一要素指基于信托登记的相关法规局限"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0197.wav", "duration": 6.505, "text": "推动创建不同层次特色鲜明的现代农业示范区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0130.wav", "duration": 5.248, "text": "北京仅新增住宅土地供应十宗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0394.wav", "duration": 3.837875, "text": "最终判决结果将在十一月出炉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0284.wav", "duration": 4.6849375, "text": "由于苹果要打压竞争对手"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0359.wav", "duration": 6.51, "text": "本赛季的各项赛事参赛名单上却都没有见到他的身影"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0344.wav", "duration": 4.845, "text": "曾春蕾和张常宁均拿到十六分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0436.wav", "duration": 6.649875, "text": "游客参与不合理低价游将被罚专家怎么判断"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0420.wav", "duration": 3.875, "text": "搜狐娱乐讯据台湾媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0350.wav", "duration": 4.5, "text": "这个娃娃打球时很有思想"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0123.wav", "duration": 4.408, "text": "这对于目前一线城市来说很紧要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0244.wav", "duration": 3.4509375, "text": "要大力推进产销衔接"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0483.wav", "duration": 7.355, "text": "通过网站团购了无锡江南丹青度假酒店一间套房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0390.wav", "duration": 2.698, "text": "我可以带着它回家了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0223.wav", "duration": 7.2739375, "text": "政府举债建设形成大量资金"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0405.wav", "duration": 4.241, "text": "亚当桑德勒成功卫冕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0396.wav", "duration": 5.9181875, "text": "这样既丰富了自己也增加了全队的进攻变化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0357.wav", "duration": 4.5019375, "text": "高桥在当地过着奢华享乐的生活"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0334.wav", "duration": 5.255875, "text": "这也是选购电话手表要注意关注的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0328.wav", "duration": 5.4968125, "text": "有两家表示能够诊断或者反馈黑客入侵后的情况"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0359.wav", "duration": 8.098125, "text": "也是其对于自身技术全面性提高程度的一次检验"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0261.wav", "duration": 5.353, "text": "这种技术很适合用来治疗胃溃疡等胃部疾病"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0264.wav", "duration": 2.7060625, "text": "其中一个回答就说过"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0464.wav", "duration": 5.837875, "text": "成都男子张呈亮化名旅行时到三亚海滩游泳"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0447.wav", "duration": 3.891125, "text": "延庆法院一审判决认为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0452.wav", "duration": 4.5090625, "text": "东方演艺集团大门口戒备森严"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0292.wav", "duration": 3.1428125, "text": "苹果有意进军汽车产业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0152.wav", "duration": 4.152, "text": "取消一万户家庭的保障资格"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0134.wav", "duration": 3.608, "text": "只要一个单品存在安全漏洞"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0251.wav", "duration": 3.5, "text": "依靠科技持续改进"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0250.wav", "duration": 4.834, "text": "并对债券市场形成了不小的冲击"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0128.wav", "duration": 4.0640625, "text": "住建部官员发表文章指出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0416.wav", "duration": 5.3840625, "text": "陈妍希回到台北代言悠游卡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0422.wav", "duration": 4.451875, "text": "不同于大家心中按部就班的乖乖女形象"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0487.wav", "duration": 4.713125, "text": "国内两地出现注胶虾踪迹"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0195.wav", "duration": 4.9749375, "text": "部分中小企业国内生产成本有所提高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0356.wav", "duration": 3.5810625, "text": "跑者从二十多岁到五十九岁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0362.wav", "duration": 4.1159375, "text": "外界认为这是一种另有深意的暗示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0264.wav", "duration": 4.8840625, "text": "用电脑进行战争比用核武器还有效"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0463.wav", "duration": 7.489, "text": "其中一些人是近年来国际拍卖会上艺术品的最大买家"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0411.wav", "duration": 3.181875, "text": "坦言刚开拍的一个月中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0229.wav", "duration": 2.884875, "text": "控制在合理的范围内"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0272.wav", "duration": 2.7940625, "text": "苹果有两个竞争对手"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0436.wav", "duration": 7.3769375, "text": "本周内动员部署全省九零零多家快递企业按要求执行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0338.wav", "duration": 5.8769375, "text": "强劲犀利的拳法与膝法破坏力惊人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0174.wav", "duration": 4.7319375, "text": "资金面紧张对楼市的影响开始显现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0357.wav", "duration": 2.8569375, "text": "打出一道深深的血口"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0396.wav", "duration": 3.667, "text": "赛后被评为当场最佳球员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0462.wav", "duration": 6.0608125, "text": "浙江省史上规模最大的户外救援行动开始了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0297.wav", "duration": 3.9448125, "text": "汽车是苹果下一个颠复目标"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0489.wav", "duration": 6.188, "text": "参考消息网九月二三日报道港媒称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0192.wav", "duration": 3.2459375, "text": "农村劳动力大量转移"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0265.wav", "duration": 5.5460625, "text": "在谷歌与苹果相机推出智能手表后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0380.wav", "duration": 3.8979375, "text": "师姐罗雪娟也忍不住落泪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0307.wav", "duration": 4.1469375, "text": "未来的制造业方向要实现无人化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0245.wav", "duration": 5.187, "text": "我们还安排了专门的偿债均摊机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0176.wav", "duration": 4.181, "text": "二全国两会或将楼市基调"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0232.wav", "duration": 5.6959375, "text": "我们对城投债券发行人的审核一直是比较严格的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0368.wav", "duration": 3.3359375, "text": "二零二二年冬奥会的举行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0313.wav", "duration": 8.449, "text": "以区域为中心建立客户经理负责制制造方面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0237.wav", "duration": 5.4859375, "text": "加强海外信息监测为企业提供对外投资指导"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0351.wav", "duration": 3.438, "text": "它都是女排精神的一部分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0495.wav", "duration": 3.354, "text": "可以考虑一下空中赏月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0492.wav", "duration": 7.657, "text": "村主任给狗盖房吞六万公款被判刑二年八个月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0278.wav", "duration": 6.1949375, "text": "须从他们公司的安全网站上进行下载并安装"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0436.wav", "duration": 5.5588125, "text": "其集团在全球拥有一三零零零间店铺"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0230.wav", "duration": 7.484, "text": "支持生禽规模化养殖场小区开展标准化改造和建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0356.wav", "duration": 5.100125, "text": "张春雨选择了加强压迫对手的力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0277.wav", "duration": 3.6899375, "text": "除了有时候让他们觉得那里像家"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0262.wav", "duration": 3.311875, "text": "与世界第二经济大国的地位还不相称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0342.wav", "duration": 4.375, "text": "二零一七年二零二二年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0181.wav", "duration": 6.0720625, "text": "可在境内限购一定面积的自住商品房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0489.wav", "duration": 6.8298125, "text": "省纪委要求新闻媒体主动参与到纠四风监督工作中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0309.wav", "duration": 5.928, "text": "老板电器的新增量创新需求追求极致搜狐科技"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0346.wav", "duration": 3.452125, "text": "丰富的战斗技巧是我的特色"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0347.wav", "duration": 6.9360625, "text": "二零一五年九月十二日星期六十一点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0199.wav", "duration": 3.4560625, "text": "避免海外一窝蜂上项目等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0292.wav", "duration": 7.0859375, "text": "要是詹妮弗劳伦斯也能在微博上说这个应用不错"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0209.wav", "duration": 4.5560625, "text": "调动各方发展粮食生产积极性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0170.wav", "duration": 6.5750625, "text": "当地新建商品住宅的房价多在每平方米三四千元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0334.wav", "duration": 5.5229375, "text": "经过前几年自动化生产线升级改造"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0238.wav", "duration": 5.5, "text": "加强公共交通优先车道的监控和管理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0262.wav", "duration": 5.9389375, "text": "不管是什么时候推出软件和开发一些超前的东西"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0128.wav", "duration": 3.767, "text": "而是我们对这个时代了解的太少"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0293.wav", "duration": 3.442, "text": "但亏损达到了一点七亿美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0294.wav", "duration": 4.290875, "text": "从今年的七月二十一日便开始了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0373.wav", "duration": 7.2570625, "text": "俄俄罗斯队以全胜战绩列积分榜首位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0135.wav", "duration": 4.927, "text": "在自身优势领域发力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0438.wav", "duration": 4.1369375, "text": "李嘉诚怎么回答与中央关系有变"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0254.wav", "duration": 5.8000625, "text": "但吃下去的药能否真正作用到病灶就很难说了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0240.wav", "duration": 5.2689375, "text": "鼓励使用生物农药高效低毒低残留农药和有机肥料"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0474.wav", "duration": 7.3571875, "text": "港媒中国城市告别血汗工厂经济转型见成效"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0220.wav", "duration": 3.635, "text": "山东潍坊的一位李先生告诉记者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0299.wav", "duration": 3.015, "text": "最近都在流行做预测"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0308.wav", "duration": 5.86, "text": "占全球空调压缩机市场三分之一的份额"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0387.wav", "duration": 6.608875, "text": "撑杆跳拉斐尔霍尔泽德斯佩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0314.wav", "duration": 5.0700625, "text": "家电企业机器人智造也正在加速进行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0362.wav", "duration": 3.249, "text": "如果能够战而胜之的话"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0190.wav", "duration": 8.4200625, "text": "人民银行多次提高存款准备金率和存贷款基准利率"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0364.wav", "duration": 3.8100625, "text": "被认为日本体育界的相关人士称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0420.wav", "duration": 3.8320625, "text": "似乎也让传言不攻自破"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0155.wav", "duration": 5.3189375, "text": "为促进房地产市场平稳健康发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0393.wav", "duration": 3.4829375, "text": "他们也是历届大赛的一个亮点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0487.wav", "duration": 3.98, "text": "城改拆迁对很多村民来说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0192.wav", "duration": 8.485, "text": "国务院已批准信贷资产证券化继续扩大试点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0181.wav", "duration": 4.1059375, "text": "从申请到最后的拨放款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0141.wav", "duration": 5.753, "text": "大部分刚需购房者都可以选择公积金贷款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0364.wav", "duration": 5.296125, "text": "在各城市都有至少百支队伍报名参加"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0236.wav", "duration": 4.896, "text": "加强鲜活农产品流通基础设施建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0482.wav", "duration": 6.6789375, "text": "港媒盘点亚洲千禧一代十大富豪九人是中国人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0195.wav", "duration": 3.348, "text": "向具有优势的行业集中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0342.wav", "duration": 4.6418125, "text": "恐怕又要传来不少女粉丝心碎的声音了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0277.wav", "duration": 6.4649375, "text": "可现在那些公司纷纷上市后疯狂是不是就暴露了呢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0124.wav", "duration": 7.4040625, "text": "而这一落地难题也会影响其对刚需市场的支持效力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0215.wav", "duration": 2.879, "text": "有关负责人告诉记者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0339.wav", "duration": 4.8269375, "text": "二零一五年初在南京的笼斗中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0194.wav", "duration": 3.5699375, "text": "二是政策支持将更加强化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0270.wav", "duration": 3.1750625, "text": "还有他对日本文化的迷恋"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0216.wav", "duration": 3.938, "text": "要加强对民间借贷的合理引导"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0406.wav", "duration": 3.177, "text": "来源时光网昨日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0252.wav", "duration": 3.708, "text": "另一个让南京市民特别关心的是"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0367.wav", "duration": 3.3189375, "text": "用实际行动来弥补不足"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0182.wav", "duration": 2.878, "text": "较去年明显下降"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0233.wav", "duration": 5.8159375, "text": "农产品质量安全检验检测能力建设工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0239.wav", "duration": 3.3979375, "text": "提高生产流通组织化程度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0297.wav", "duration": 5.1320625, "text": "不过苹果官方很快澄清了这个事情"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0398.wav", "duration": 4.187, "text": "在本次赛艇测试赛期间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0301.wav", "duration": 5.9770625, "text": "巨人网络盛大游戏以及完美世界均已选择了私有化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0424.wav", "duration": 3.4028125, "text": "满脸黑斑与大眼袋"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0451.wav", "duration": 5.859125, "text": "港媒上海成为亚洲奢华生活最昂贵的城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0391.wav", "duration": 5.6440625, "text": "并要为国内外运动员献上一张张北京最美的名片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0401.wav", "duration": 6.7150625, "text": "海信一汽大众等知名企业和品牌也依旧亮相赛场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0428.wav", "duration": 3.4929375, "text": "搜狐娱乐讯据香港媒体报导"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0157.wav", "duration": 6.133, "text": "市政府决定今年将全面加快棚户区改造步伐"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0341.wav", "duration": 5.0798125, "text": "刘晓彤替补上场打得缩手缩脚的情况下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0300.wav", "duration": 6.8200625, "text": "从台湾地区进口的此类产品存在倾销行为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0442.wav", "duration": 10.3620625, "text": "当地村民孙秋英在自家门口因是否垫路与邻居产生争执"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0463.wav", "duration": 9.183125, "text": "十四日开宝马来上班重庆晨报记者罗伟雷罗伟雷键摄"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0231.wav", "duration": 4.0129375, "text": "对重点地区行业和企业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0267.wav", "duration": 4.84, "text": "但它的确算不上是智能手表"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0174.wav", "duration": 6.6529375, "text": "远低于去年和前年平均的二十亿平米水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0433.wav", "duration": 5.746125, "text": "千面娇娃绝地反击拿下最后一席歌王头衔"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0379.wav", "duration": 6.1230625, "text": "甚至有日本的大牌经纪公司希望与其签约"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0172.wav", "duration": 3.369, "text": "购买的机会受时间的制约"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0190.wav", "duration": 6.683, "text": "债券市场所有品种发行利率整体上都表现出向上的走向"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0254.wav", "duration": 8.7530625, "text": "二零一四年三星期累计销售超过一百二十万块智能手表"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0207.wav", "duration": 7.4189375, "text": "事关全国农业现代化进程和国家粮食安全大局"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0322.wav", "duration": 4.5439375, "text": "如果许多传统制造行业中的企业一样"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0183.wav", "duration": 4.498, "text": "第一次在公积金上提出差别对待"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0201.wav", "duration": 4.412, "text": "积极推动优势农产品出口"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0167.wav", "duration": 5.811, "text": "政府对今年的土地出让金收入预期下降"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0495.wav", "duration": 6.9709375, "text": "该医院党委书记杨幼萍向晚报记者表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0178.wav", "duration": 2.8689375, "text": "约可供销售四年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0142.wav", "duration": 4.1130625, "text": "北京公积金贷款成交量上涨百分之五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0327.wav", "duration": 3.5, "text": "在接受调查的这些公司中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0212.wav", "duration": 3.8559375, "text": "农业社会化服务体系不健全"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0163.wav", "duration": 4.271, "text": "为利率市场化改革创造条件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0447.wav", "duration": 2.6440625, "text": "记者联系发微博男子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0283.wav", "duration": 4.5, "text": "也正是看中了中国消费者的消费潜力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0414.wav", "duration": 4.5129375, "text": "谢贤昨天庆祝七十九岁生日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0361.wav", "duration": 3.933, "text": "颜妮坦言今天俄罗斯表现很好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0312.wav", "duration": 3.722875, "text": "又未直接产生经济效益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0344.wav", "duration": 5.016125, "text": "北京冬奥会的硬件基础要强于阿拉木图"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0212.wav", "duration": 3.4859375, "text": "逐步恢复湿地生态功能"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0421.wav", "duration": 11.9509375, "text": "贵州都市报十月二十九日报道据台湾媒体报道艺人陈妍希认爱小四岁的大陆小生陈晓"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0307.wav", "duration": 2.8010625, "text": "除了能和手机一样接打电话"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0446.wav", "duration": 4.8630625, "text": "比如就中国游客热衷日本药品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0445.wav", "duration": 3.3559375, "text": "因此一篇似是而非的文章"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0295.wav", "duration": 5.3160625, "text": "但是作为一个仍在成长没有其他对手的市场来讲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0303.wav", "duration": 5.0489375, "text": "上述公司人士对每日经济新闻记者表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0124.wav", "duration": 6.011, "text": "公积金政策调整方式各异对楼市影响几何"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0122.wav", "duration": 6.578, "text": "引领中国房地产广告行业走向新的黄金时代"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0150.wav", "duration": 3.386, "text": "同比涨幅达到百分之四"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0182.wav", "duration": 3.7460625, "text": "转型后的今久整合营销集团"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0463.wav", "duration": 3.880125, "text": "她身上少了些以往的悍将拼劲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0279.wav", "duration": 3.4620625, "text": "全世界的报道已经蜂拥而至"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0189.wav", "duration": 3.5089375, "text": "公共娱乐场所清理整顿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0413.wav", "duration": 5.75, "text": "搜狐娱乐讯据香港媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0143.wav", "duration": 3.327, "text": "买家积极咨询看楼"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0182.wav", "duration": 3.968, "text": "上调公积金贷款额度对市场的刺激是短期的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0206.wav", "duration": 9.657, "text": "需要为各地的城市建设提供规范的融资渠道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0493.wav", "duration": 6.4050625, "text": "温州一村主任台风夜转移群众其妻子遇难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0465.wav", "duration": 4.432125, "text": "长沙县湘龙西路一处十字路口"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0182.wav", "duration": 3.7960625, "text": "以及营业税免征期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0345.wav", "duration": 3.5339375, "text": "因为每个人都需要呼吸"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0169.wav", "duration": 3.258, "text": "购房的扶持力度在加大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0171.wav", "duration": 4.911, "text": "广州还是在执行严厉的限购政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0343.wav", "duration": 6.6950625, "text": "我都会对站立技术进行重点强化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0161.wav", "duration": 5.1139375, "text": "羊年置业小调查的调查结果截图"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0127.wav", "duration": 4.453, "text": "中原地产首席分析师张大伟说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0381.wav", "duration": 5.202875, "text": "八百米罗宾斯切姆贝拉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0474.wav", "duration": 7.3449375, "text": "温州首家支付宝菜市场启动一周很多摊主不会用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0312.wav", "duration": 3.3519375, "text": "如何重新激活内部潜能"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0131.wav", "duration": 4.153, "text": "国家住房银行是否箭在弦上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0123.wav", "duration": 4.0, "text": "但因为聚集了过多公共资源"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0133.wav", "duration": 6.523, "text": "公积金大力度松绑相关商业银行信贷政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0205.wav", "duration": 4.597, "text": "发展现代农业的要求更加迫切"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0260.wav", "duration": 4.9289375, "text": "作为美国本土著名社交游戏开发商"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0231.wav", "duration": 4.338, "text": "积极推动基金产品审核制度改革"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0179.wav", "duration": 5.0530625, "text": "但可以肯定的他一定是最高成长的企行业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0125.wav", "duration": 3.156, "text": "由公积金中心向银行支付"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0433.wav", "duration": 7.962125, "text": "其中四名被告分别判即时监禁九至一一天"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0467.wav", "duration": 4.691875, "text": "公安局仍采取了取保候审的手段"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0348.wav", "duration": 3.573, "text": "表示未来会进入演艺圈发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0227.wav", "duration": 4.548, "text": "这并不意味着政府可以无节制地借债"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0233.wav", "duration": 5.038, "text": "并对政府性债务实行馀额管理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0254.wav", "duration": 5.146, "text": "作风向来无耻加强势苹果也因强势出名"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0186.wav", "duration": 4.3719375, "text": "公积金可贷额度受到严重冲击"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0338.wav", "duration": 5.149875, "text": "据悉他正在积极进修表演准备进入演艺圈"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0391.wav", "duration": 3.19675, "text": "还有三场非常重要的比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0401.wav", "duration": 8.192125, "text": "英国人保拉拉德克利夫公开了自己的血液检测结果"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0228.wav", "duration": 3.391, "text": "更好地适应了新形势的需要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0129.wav", "duration": 6.558, "text": "并对异地缴存住房公积金等政策作出调整"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0407.wav", "duration": 1.951875, "text": "值得一提的是"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0428.wav", "duration": 5.542, "text": "陈妍希曾在新版神鵰侠侣中演小龙女"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0304.wav", "duration": 4.7279375, "text": "美的家用空调事业部总裁吴文新表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0284.wav", "duration": 3.699, "text": "苹果能否摆脱王者魔咒"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0189.wav", "duration": 4.0820625, "text": "有关部门和社会各界积极响应"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0151.wav", "duration": 3.696, "text": "对购房者心理影响也非常大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0412.wav", "duration": 5.067875, "text": "搜狐娱乐讯北京时间七月二十日消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0198.wav", "duration": 3.251, "text": "发展混合所有制经济"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0478.wav", "duration": 7.9311875, "text": "村支书将两女儿家七口人列为搬迁户骗领搬迁款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0302.wav", "duration": 5.277125, "text": "这将是苹果零售店采用的全新模式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0390.wav", "duration": 7.868875, "text": "然而就在全场仅剩下莫利托一个人的最后一掷时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0331.wav", "duration": 3.291, "text": "未获得进网许可证的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0409.wav", "duration": 3.545875, "text": "此照片萌翻众网友"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0293.wav", "duration": 4.224125, "text": "如今则猛增到一两亿美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0442.wav", "duration": 7.5920625, "text": "目前该保安承认有人花二百元雇他进行拍照"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0435.wav", "duration": 9.45775, "text": "京华时报讯记者迟名常鑫前天中午近一一点半"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0287.wav", "duration": 3.0349375, "text": "那么未来的五年十年二十年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0457.wav", "duration": 5.0449375, "text": "被同方向行驶的一辆渣土车挂倒"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0380.wav", "duration": 4.6328125, "text": "计划在那里进行三个月的封闭训练"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0159.wav", "duration": 3.727, "text": "近来看到的许多创新型产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0176.wav", "duration": 3.477, "text": "各项费用的加总并不低"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0329.wav", "duration": 3.313, "text": "但是由于直销改为经销"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0212.wav", "duration": 7.084, "text": "为各地的基础设施建设提供有制度保障的融资渠道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0160.wav", "duration": 3.0300625, "text": "在信托收益的处置上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0329.wav", "duration": 8.6689375, "text": "成飞集成与常州市金坛区政府合作的项目将分三期完成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0417.wav", "duration": 2.667, "text": "希饭快来接住我"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0487.wav", "duration": 4.3759375, "text": "李晨秀才遇到兵发布会后回应称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0450.wav", "duration": 5.26, "text": "湖北吃人电梯品牌四年被曝光五次"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0406.wav", "duration": 4.281, "text": "约翰尼德普紧随其后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0133.wav", "duration": 3.67, "text": "还清首套房公积金贷款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0344.wav", "duration": 3.0918125, "text": "脚踝和小腿的能力变弱"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0289.wav", "duration": 6.9730625, "text": "本报记者纪佳鹏北京报道北京时间八月十二日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0318.wav", "duration": 4.702875, "text": "除了传统的书包文具以及辅导书外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0248.wav", "duration": 6.5390625, "text": "从城投债券发行监管部门的角度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0388.wav", "duration": 3.0, "text": "经历过夏奥会的沉淀"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0442.wav", "duration": 7.063, "text": "媒体再次盘点长假期间的各种热点新闻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0397.wav", "duration": 4.8979375, "text": "日本的排球训练是出了名的严厉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0489.wav", "duration": 7.1860625, "text": "湖北四名被捅法官脱离危险一女法官尚在哺乳期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0219.wav", "duration": 4.3630625, "text": "仍然会存在并具有发展空间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0413.wav", "duration": 3.7590625, "text": "甚至出现忧郁症状况"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0212.wav", "duration": 6.494, "text": "而针对浙江广东民间借贷丰沛的特点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0359.wav", "duration": 4.0650625, "text": "这场比赛前教练给我们布置了很多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0215.wav", "duration": 5.5, "text": "重点关注大型电子商务经营者的促销行为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0456.wav", "duration": 6.1650625, "text": "区市省三级疾控部门专家已介入调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0133.wav", "duration": 3.6100625, "text": "年内首次出现同比增长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0344.wav", "duration": 3.4350625, "text": "今后北京与天津两地可能会联合办赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0408.wav", "duration": 3.755875, "text": "柯震东去年经历吸毒风波"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0157.wav", "duration": 3.469, "text": "确保所设信托的合法性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0436.wav", "duration": 6.28, "text": "温州一网友造谣苏迪罗登陆期间水库崩塌被拘"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0219.wav", "duration": 2.879, "text": "发行规模还会稳步扩大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0168.wav", "duration": 6.379, "text": "通知指出除北上广深一线城市外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0303.wav", "duration": 3.9549375, "text": "如果融入移动互联的新时代"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0214.wav", "duration": 9.0090625, "text": "将在有效防范民间借贷的潜在风险的前提下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0423.wav", "duration": 4.574, "text": "这让自称游戏达人的他颇有些不好意思"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0386.wav", "duration": 4.418, "text": "顶级田径赛事再次落户鸟巢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0442.wav", "duration": 3.6179375, "text": "学校里有些同学家里条件不好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0217.wav", "duration": 6.3780625, "text": "强化地方政府和企业的主体意识法制意识"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0283.wav", "duration": 9.0, "text": "一起针对苹果的集体反垄断案两名原告的律师称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0397.wav", "duration": 5.194, "text": "这也是她在本届世界杯上第二次获得全场最佳"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0384.wav", "duration": 8.8840625, "text": "昆仑决雄霸山城在重庆江南体育馆重装上阵"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0285.wav", "duration": 5.647, "text": "后有消息称该款产品将于今年的情人节推出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0163.wav", "duration": 3.171, "text": "在多项政策的支持下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0277.wav", "duration": 3.667, "text": "刚开始微软因谨慎起见"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0344.wav", "duration": 5.839, "text": "此外她还凭借拦网和发球分别拿到七分和一分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0234.wav", "duration": 4.1340625, "text": "坚持科教兴农和人才强农"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0229.wav", "duration": 5.803, "text": "如建立规范透明的地方政府融资渠道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0330.wav", "duration": 4.49, "text": "在中低端市场或占有相应份额"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0221.wav", "duration": 3.9260625, "text": "而社会罢工劳资纠纷也时有发生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0427.wav", "duration": 8.348875, "text": "不过二人因给陈嘉宝把生日合照在网上公开才泄露恋情"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0209.wav", "duration": 4.432, "text": "为加快发展中等职业教育"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0124.wav", "duration": 3.769, "text": "很多人受限购政策的影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0457.wav", "duration": 3.5398125, "text": "当时他还不知道自己会被暗算"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0352.wav", "duration": 4.3838125, "text": "从举办大型体育赛事的经验来看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0467.wav", "duration": 3.568125, "text": "但是养老院建成至今已经有三年了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0336.wav", "duration": 4.093, "text": "随着锂电池产业链迎来井喷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0334.wav", "duration": 5.369125, "text": "虽然面对赔钱赚吆喝的质疑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0376.wav", "duration": 4.0229375, "text": "虽然在比赛中没有得到出场机会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0220.wav", "duration": 4.1690625, "text": "实施一村一品强村富民工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0217.wav", "duration": 3.5269375, "text": "随着我国资本市场的进一步发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0144.wav", "duration": 5.207, "text": "各区县各单位要按照下达的任务指标"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0210.wav", "duration": 5.0639375, "text": "研发推出不同的金融创新产品和服务方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0227.wav", "duration": 5.9549375, "text": "坚持立足国内实现粮食基本自给的方针"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0247.wav", "duration": 4.364, "text": "这体现出监管部门开放管理的思路"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0242.wav", "duration": 5.6860625, "text": "这在相当程度上控制了城投债劵的发行规模"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0380.wav", "duration": 3.681875, "text": "做客日本电视台的新闻节目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0292.wav", "duration": 3.48, "text": "毕竟还有许多人的心愿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0417.wav", "duration": 4.3620625, "text": "搜狐娱乐讯据香港媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0273.wav", "duration": 7.1059375, "text": "屏幕良品率仅在百分之三十至百分之四十之间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0375.wav", "duration": 4.082, "text": "让他们也可以有机会参与体育运动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0444.wav", "duration": 6.420875, "text": "湖北卷人电梯设计不合理同型号已售四六四八部"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0199.wav", "duration": 4.6900625, "text": "投资者对城投债券风险表现出的恐慌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0243.wav", "duration": 3.9, "text": "相对于目前的负债规模"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0475.wav", "duration": 6.5590625, "text": "淅川县上集镇一名村支书被指将年龄改小一零岁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0140.wav", "duration": 2.483, "text": "而在多时间里"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0130.wav", "duration": 3.144, "text": "我们的路也许会好走得多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0133.wav", "duration": 3.991, "text": "国家统计局数据显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0254.wav", "duration": 3.579, "text": "我们在科技创新方面的进步非常显着"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0259.wav", "duration": 3.495, "text": "它可以跨硬件平台传染"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0344.wav", "duration": 6.2160625, "text": "铅球克里斯蒂娜斯齐万兹"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0318.wav", "duration": 5.8100625, "text": "随着越来越多车企踊跃加入车联网浪潮中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0139.wav", "duration": 4.4100625, "text": "今年万科拿下九宗地块"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0236.wav", "duration": 8.349, "text": "今年国庆小长假期间私家车主们就可以免费上路了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0408.wav", "duration": 3.7890625, "text": "圆圆的脸蛋非常的可爱"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0348.wav", "duration": 4.3600625, "text": "不乏诸多脍炙人口的飙血之战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0283.wav", "duration": 6.582, "text": "领英在榜单上的成绩也是相当不错的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0470.wav", "duration": 4.0900625, "text": "一辆渣土车突然冲向逆向车道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0280.wav", "duration": 8.0, "text": "英特尔首席执行官布赖恩克尔扎尼奇在一份声明中说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0302.wav", "duration": 5.0600625, "text": "首先银联和苹果的合作谈判不会顺利"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0360.wav", "duration": 5.833, "text": "图片中他们一行人面对镜头尽显搞怪天赋"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0147.wav", "duration": 3.157, "text": "三四线城市依然冷清"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0384.wav", "duration": 6.3090625, "text": "一百一十米栏马特里亚斯布赫雷尔"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0357.wav", "duration": 6.0708125, "text": "无论年轻队员还是老队员都可能在比赛中出现起伏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0444.wav", "duration": 3.3789375, "text": "也就是我们常说的超级月亮"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0123.wav", "duration": 3.302, "text": "经济热点导读专家认为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0183.wav", "duration": 5.229, "text": "贷款最高额度由五万元升至七万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0390.wav", "duration": 4.969, "text": "而他们已经为这次田径世锦赛做好了准备"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0379.wav", "duration": 6.2800625, "text": "队伍凭借稳定的整体发挥获得了三零的胜利"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0472.wav", "duration": 6.033, "text": "一段游客暴打景区员工的视频开始在网上发酵"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0169.wav", "duration": 3.7790625, "text": "也佐证了公积金政策放宽刺激作用的显现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0465.wav", "duration": 7.943125, "text": "温州火锅先生后续涉案者父亲写公开道歉信"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0174.wav", "duration": 4.282, "text": "从目前上海住房公积金的具体政策看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0349.wav", "duration": 4.709, "text": "申奥过程本身已经推动了城际交通建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0251.wav", "duration": 4.1749375, "text": "完善农产品市场调控机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0129.wav", "duration": 5.81, "text": "如果我们懂得多一点智能家居产品市场的法则"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0121.wav", "duration": 3.601, "text": "公积金贷款额度的提高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0305.wav", "duration": 5.095, "text": "公司已将原有的直销模式改为经销模式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0411.wav", "duration": 4.6950625, "text": "称哈哈哈性感的不要不要的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0155.wav", "duration": 3.489, "text": "实现了大数据营销的创新"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0210.wav", "duration": 5.3139375, "text": "对非主业投资项目的有关决策文件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0286.wav", "duration": 4.344, "text": "而且苹果最早一批的用户积累"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0221.wav", "duration": 5.15, "text": "扩大东北优势区粳稻种植面积"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0133.wav", "duration": 4.121, "text": "以住房公积金制度为基础"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0486.wav", "duration": 5.0869375, "text": "酒店方承诺退还二零元马桶使用费"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0187.wav", "duration": 5.2960625, "text": "直接涉及到债券持有人利益的保护问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0392.wav", "duration": 4.93925, "text": "没有你们的支持我们该如何度过最挣扎的时期呢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0207.wav", "duration": 5.301, "text": "积极防范和妥善应对市场价格异常波动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0393.wav", "duration": 6.5, "text": "莎宾娜已经在今年八月秘密抵达日本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0321.wav", "duration": 5.2690625, "text": "撤销旗下高端产业集团和产品开发集团"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0157.wav", "duration": 3.196, "text": "产品的核心是客户的体验"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0305.wav", "duration": 4.4140625, "text": "该平台上显示的漏洞状态是"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0274.wav", "duration": 4.6049375, "text": "此次以一百六十七亿美元收购拓朗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0279.wav", "duration": 4.337, "text": "苹果一口气召开了两次新品发布会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0292.wav", "duration": 3.3899375, "text": "因此从全球的角度来看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0407.wav", "duration": 3.228, "text": "将双双加盟该片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0470.wav", "duration": 6.9931875, "text": "杀害女教师疑犯行凶后脸有伤警方悬赏五万缉拿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0285.wav", "duration": 5.4301875, "text": "这些资源的特点不单单是数目庞大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0439.wav", "duration": 4.953875, "text": "资料图王杰图片来源于网络"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0404.wav", "duration": 8.719, "text": "布拉德皮特新片狂怒接受了宣传媒体拍照"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0379.wav", "duration": 5.4140625, "text": "一百米塞文基尼菲尔斯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0194.wav", "duration": 7.098, "text": "组建一批产业技术创新战略联盟和国家农业科技园区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0263.wav", "duration": 3.3200625, "text": "他们真得赚了很多钱"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0272.wav", "duration": 3.8719375, "text": "客户回到苹果零售店后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0298.wav", "duration": 6.0, "text": "生态链中插入其他公司产品会造成问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0307.wav", "duration": 5.093, "text": "整个汽车体系都是随着汽车销量在变动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0200.wav", "duration": 3.156, "text": "支持龙头企业跨区域经营"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0269.wav", "duration": 4.6790625, "text": "游戏公司往往靠一款游戏在市场上火爆"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0191.wav", "duration": 3.104, "text": "长江隧道估计也顶不住"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0192.wav", "duration": 3.713, "text": "制定鲜活农产品调控办法"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0445.wav", "duration": 4.0239375, "text": "近日再度拒绝女方的逼婚后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0150.wav", "duration": 5.656, "text": "五月份商品房销售的面积同比数据由负转正"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0184.wav", "duration": 4.903, "text": "一线城市住宅用地的低价不断抬升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0233.wav", "duration": 4.537, "text": "推动苹果柑橘等优势园艺产品生产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0356.wav", "duration": 6.735125, "text": "参加全国竞走大奖赛暨世锦赛选拔赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0495.wav", "duration": 4.907, "text": "于二零一四年四月一九日晚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0182.wav", "duration": 5.156, "text": "各路开发商一致看好一线城市房地产市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0329.wav", "duration": 3.1210625, "text": "工人数量超过五万以上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0438.wav", "duration": 7.462875, "text": "因决定取消刁天恩的土地承包合同移栽地上树苗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0417.wav", "duration": 3.0600625, "text": "对着镜头嘟嘴吐舌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0211.wav", "duration": 3.5340625, "text": "棉油糖生产基地建设工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0129.wav", "duration": 5.073, "text": "此次出台的新政虽然放宽了条件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0361.wav", "duration": 5.772, "text": "高桥大辅则是噘着嘴做出索吻的动作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0305.wav", "duration": 5.4459375, "text": "对手表的大力普及也起到了至关重要的作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0201.wav", "duration": 3.4760625, "text": "提高科学饲养和经营水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0300.wav", "duration": 8.6530625, "text": "以上大多数专利都与计算软件及相关技术有关"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0395.wav", "duration": 4.5349375, "text": "临时客串接应在二号位参与强攻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0191.wav", "duration": 4.335, "text": "提高农业产业化和规模化经营水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0454.wav", "duration": 7.402125, "text": "港媒关注天价虾店停业破坏青岛形象"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0296.wav", "duration": 4.6020625, "text": "苹果市场价值达到七千亿美元刚刚过去几个月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0152.wav", "duration": 8.0350625, "text": "丰台区域潘家村危改三号地成为今年的收官地质块"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0484.wav", "duration": 7.7009375, "text": "浙江温州市一位市民一零零元买回三只斑节虾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0232.wav", "duration": 5.3149375, "text": "免征蔬菜流通环节增值税加强金融支持"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0216.wav", "duration": 4.6229375, "text": "加强园艺作物标准园建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0368.wav", "duration": 7.287125, "text": "万龙和云顶滑雪场都将根据赛事要求进行改造和扩建"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0209.wav", "duration": 4.099, "text": "记者昨日从省交通部门了解到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0224.wav", "duration": 9.166, "text": "推广土壤有机质提升测土配方施肥等培肥地力技术"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0341.wav", "duration": 6.506875, "text": "包括高原训练或身体过度消耗后立刻接受检测"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0135.wav", "duration": 4.039, "text": "该政策延续了去年新政以来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0217.wav", "duration": 5.329, "text": "相对于过去的体制而言是更加市场化的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0293.wav", "duration": 4.163, "text": "基于倾销幅度的初裁结果"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0130.wav", "duration": 7.794, "text": "北京市公积金管理中心明确取消新建商品房评估"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0204.wav", "duration": 4.1939375, "text": "我个人是这么认识的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0173.wav", "duration": 8.458, "text": "放松对外限制利用利好一二线城市中高端物业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0408.wav", "duration": 3.6059375, "text": "私底下对歌迷亲切和善"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0316.wav", "duration": 6.2580625, "text": "机器换人确实能够大大降低企业的用工数量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0490.wav", "duration": 4.1179375, "text": "而是因为她也中了天价的招"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0430.wav", "duration": 2.308125, "text": "获得粉丝祝福"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0161.wav", "duration": 6.168, "text": "广州二手住宅市场七月的网签量已达一千套"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0340.wav", "duration": 4.1279375, "text": "大家才安安稳稳地睡了一觉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0349.wav", "duration": 9.733125, "text": "著名双人滑运动员庞清和董健虽未正式宣布退役"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0320.wav", "duration": 6.6860625, "text": "紫光股份云计算股收涨停搜狐科技"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0226.wav", "duration": 8.0019375, "text": "尽快将中央补助投资和省级配套资金分解下达到市县"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0470.wav", "duration": 4.4311875, "text": "随后众人一起到东山派出所报案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0351.wav", "duration": 3.777125, "text": "朱婷扣球拿下一百一十三分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0284.wav", "duration": 4.563, "text": "美国将向印度转让两项军事技术"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0216.wav", "duration": 3.2009375, "text": "完善土地承包经营权流转市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0336.wav", "duration": 3.337875, "text": "公司继续推进云服务战略"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0468.wav", "duration": 3.4150625, "text": "大排档老板受伤更严重"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0416.wav", "duration": 5.313, "text": "由于谢霆锋亲为家人做大厨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0247.wav", "duration": 2.802, "text": "降低农产品流通成本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0457.wav", "duration": 3.660875, "text": "滕女士在云南购买的石斛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0483.wav", "duration": 3.827125, "text": "目前仍有八名失踪人员下落不明"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0261.wav", "duration": 6.336875, "text": "莫说跟其他创意十足的科技股相提并论"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0257.wav", "duration": 4.6059375, "text": "而且它们两个之间是非常对立的关系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0408.wav", "duration": 4.864, "text": "陈奕迅隔空发表爱的宣言也是啊"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0222.wav", "duration": 4.6490625, "text": "提高公共交通舒适性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0420.wav", "duration": 3.816875, "text": "手脚并用努力向往上爬"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0121.wav", "duration": 6.938, "text": "成本的转嫁使得商品房用地成本更高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0392.wav", "duration": 2.8461875, "text": "身为大队员就会去提醒大家"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0155.wav", "duration": 4.854, "text": "中原地产市场研究部数据显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0126.wav", "duration": 4.91, "text": "增速比一到六月回落一个百分点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0177.wav", "duration": 4.0450625, "text": "不得办理境内境外贷款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0188.wav", "duration": 5.254, "text": "证监会将协同有关部门落实相关工作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0366.wav", "duration": 3.318, "text": "作为老队员我要多承担"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0259.wav", "duration": 3.228, "text": "乔布斯几乎没发挥什么作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0417.wav", "duration": 2.786125, "text": "外传她可能已经怀孕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0479.wav", "duration": 5.701875, "text": "温州农贸市场现注胶虾业内人称为增加重量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0255.wav", "duration": 6.272, "text": "中国手游在退市之前的市盈率在十六十七倍左右"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0208.wav", "duration": 6.8940625, "text": "中央企业在境外从事非主业投资"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0343.wav", "duration": 6.771, "text": "美国东卡罗莱纳大学和维克森林大学的研究者认为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0436.wav", "duration": 3.3730625, "text": "面对游客质疑和退团要求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0202.wav", "duration": 4.9599375, "text": "扶持农业信贷担保组织发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0170.wav", "duration": 4.256, "text": "今年的房价还会有上升空间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0173.wav", "duration": 4.201, "text": "伟业我爱我家集团副总裁胡景晖分析"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0163.wav", "duration": 4.019, "text": "这是一帮精英自恋情怀的产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0349.wav", "duration": 4.542, "text": "全能詹妮弗奥赛尔"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0145.wav", "duration": 6.42, "text": "公积金贷款首付比例降低的消息令购房者喜出望外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0475.wav", "duration": 8.167, "text": "关于中国嵩山少林寺方丈齐永信的举报风波尚未停歇"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0276.wav", "duration": 4.108, "text": "正在寻求扩大移动市场份额"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0335.wav", "duration": 4.475875, "text": "黑客可利用这些漏洞远程打开车门"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0273.wav", "duration": 4.2170625, "text": "但是在欧洲受欢迎度较低"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0383.wav", "duration": 5.548125, "text": "他们对退役后的人生同样也有追求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0327.wav", "duration": 4.746, "text": "儿童电话手表的辐射对儿童的健康安全是否存在隐患呢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0131.wav", "duration": 3.9469375, "text": "确立了无人撼动的行业老大地位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0310.wav", "duration": 4.1628125, "text": "由于安丰公司的业务不景气"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0353.wav", "duration": 3.6811875, "text": "北京的经验比阿拉木图丰富"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0400.wav", "duration": 6.0, "text": "雅莱克斯欧帕拉迪尼门格"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0257.wav", "duration": 4.587875, "text": "证明他们真得没有手机用户信息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0295.wav", "duration": 4.5979375, "text": "中国商务部曾表示强烈反对"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0453.wav", "duration": 3.6159375, "text": "替人向境外转移资金"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0392.wav", "duration": 3.9719375, "text": "标枪拉尔斯哈曼恩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0449.wav", "duration": 5.2060625, "text": "判处有期徒刑一一年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0445.wav", "duration": 6.797875, "text": "所开拉土车辆是镇政府扣押车辆"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0269.wav", "duration": 5.4920625, "text": "快速建立以苹果产品服务为核心的生态系统"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0229.wav", "duration": 4.272, "text": "完善主产区利益补偿机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0451.wav", "duration": 3.3730625, "text": "经保险公司初步估算"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0190.wav", "duration": 4.09, "text": "主要指草原生态经济区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0431.wav", "duration": 6.661875, "text": "湖北六小伙温州偷硬币称代表诸葛后人战刘伯温后人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0304.wav", "duration": 4.8451875, "text": "裁员二千人是由于销售模式发生改变"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0233.wav", "duration": 8.1530625, "text": "由于我国还没有建立统一的地方政府债务风险管理制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0294.wav", "duration": 3.4389375, "text": "反复检视自身商业模式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0224.wav", "duration": 5.123875, "text": "相当部分资产具有长期的直接收益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0186.wav", "duration": 4.4500625, "text": "美丽北京大型绿色公益品牌项目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0152.wav", "duration": 8.049, "text": "主动退出和寻求并购的中小开发商增多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0352.wav", "duration": 3.1789375, "text": "研究者们选取了十九位跑者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0309.wav", "duration": 4.3139375, "text": "预计回购股份约一千万股"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0242.wav", "duration": 6.547, "text": "各地要依据城市总体规划和城市网点商业规划"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0216.wav", "duration": 5.8820625, "text": "当代人和后代人共同承担债务还本付息责任"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0464.wav", "duration": 3.073, "text": "父亲和孩子轮流上去躺"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0481.wav", "duration": 7.005875, "text": "渤海失事河北籍渔船已致四人遇难仍有八人失踪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0479.wav", "duration": 4.672875, "text": "为了一名坠入废井的男童"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0431.wav", "duration": 6.917, "text": "校长邱勇上任后首次参加学生毕业典礼并演讲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0428.wav", "duration": 3.516875, "text": "因此开香槟后要先离场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0230.wav", "duration": 5.443, "text": "一些专家学者提出了许多好的建议"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0331.wav", "duration": 5.031, "text": "工人数量已经缩减至二点六万人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0341.wav", "duration": 6.538125, "text": "迅即杀狠的站立技术令人惊叹不已"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0383.wav", "duration": 3.5241875, "text": "华西都市报记者陈甘露"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0333.wav", "duration": 5.572, "text": "杨某等人在明知插件功能的情况下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0344.wav", "duration": 5.223, "text": "而涂鸦墙上写满了跑友们的目标和愿望"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0393.wav", "duration": 4.968, "text": "对已是强弩之末的对手进行消耗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0224.wav", "duration": 5.477, "text": "加强公共交通用地综合开开发"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0307.wav", "duration": 4.396, "text": "这是当前所有中国家电企业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0156.wav", "duration": 5.8840625, "text": "境外个人购房应当符合当地政策规定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0243.wav", "duration": 4.65, "text": "大城市郊区多功能农业区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0260.wav", "duration": 7.2009375, "text": "可用于侦察缓慢移动的地面和海面目标"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0185.wav", "duration": 4.0589375, "text": "与其厌不其烦的谈论大数据云计算"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0482.wav", "duration": 6.9560625, "text": "村官借四零零多户居民三亿一携款失联"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0443.wav", "duration": 5.9230625, "text": "但是想让更多需要帮助的水高学子感受到温暖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0307.wav", "duration": 6.584, "text": "公司此次回购股份的价格不超过十五点一零七元股"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0473.wav", "duration": 6.515875, "text": "平阳法院内外已聚集了三零零多人等待开庭"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0319.wav", "duration": 7.05075, "text": "这个儿童电话手表以其强大的定位通话微聊等功能"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0145.wav", "duration": 3.467, "text": "制定完善制度一百多项"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0318.wav", "duration": 3.612875, "text": "随着锂电池产业链迎来井喷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0133.wav", "duration": 3.237, "text": "对楼市也有较大影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0295.wav", "duration": 3.39, "text": "中国经营网注有国外媒体报道称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0364.wav", "duration": 3.484125, "text": "年龄段的复盖范围比较窄"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0323.wav", "duration": 4.2049375, "text": "洛阳本部项目是一个增量投资"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0292.wav", "duration": 2.968, "text": "这也是影响股价的一大因素"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0459.wav", "duration": 8.5, "text": "旅游点餐时与海鲜店主起争执互殴二人被行政拘留"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0346.wav", "duration": 3.0, "text": "他们会拥有较快的速度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0190.wav", "duration": 3.7049375, "text": "采取了一系列的政策措施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0197.wav", "duration": 2.9459375, "text": "债券发行人是优质的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0310.wav", "duration": 3.619875, "text": "而选择国产的服务器"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0403.wav", "duration": 5.26, "text": "例如在竞赛部赛后控制中心的陈田希"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0435.wav", "duration": 4.3581875, "text": "获救第一句话就是我以为我活不了了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0486.wav", "duration": 3.6420625, "text": "该男子因影响航班正常秩序"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0406.wav", "duration": 3.8500625, "text": "可现在已经全部泡汤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0405.wav", "duration": 6.797125, "text": "其首脑恩斯特布鲁菲尔是邦德的最终敌人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0222.wav", "duration": 5.3320625, "text": "一路上很多省份的高速公路收费站都是免费放行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0159.wav", "duration": 5.291, "text": "优化和改进外商投资房地产管理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0271.wav", "duration": 7.262, "text": "先是价格昂贵功能鸡肋的特点遭到一众业内人士吐槽"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0309.wav", "duration": 4.4099375, "text": "电话手表的辐射主要来自天线"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0223.wav", "duration": 4.193, "text": "目前央企境外投资仍处在初级阶段"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0439.wav", "duration": 7.208, "text": "快报讯通讯员李欢乐记者王晓宇八月二六日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0265.wav", "duration": 5.7950625, "text": "亏损二千六百九十万美元相比上一季度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0202.wav", "duration": 5.243875, "text": "您如何看待城投债券这几年的发展和作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0240.wav", "duration": 6.5250625, "text": "培育一批产值过百亿元的大型加工和流通企业集团"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0145.wav", "duration": 11.4049375, "text": "互联网行动计划实实施用地实行过渡期政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0468.wav", "duration": 5.6601875, "text": "将小女孩抱在腿上并播放手机中的动画片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0308.wav", "duration": 6.0190625, "text": "虽然工信部很快就删除了后半句话"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0402.wav", "duration": 5.614, "text": "来自中国的赛艇选手崔帅豪说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0178.wav", "duration": 3.002, "text": "在过去六个月中处于高点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0330.wav", "duration": 3.718, "text": "同比增长四点百分之三十五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0312.wav", "duration": 3.509, "text": "每日经济新闻记者注意到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0433.wav", "duration": 3.8679375, "text": "旅行社为了盈利设置购物环节"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0484.wav", "duration": 5.4760625, "text": "冲突因空姐发餐时餐车碰到了一名旅客"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0411.wav", "duration": 2.3681875, "text": "她自言最近在拍戏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0143.wav", "duration": 3.127, "text": "北京信托作为受托人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0390.wav", "duration": 4.045875, "text": "在其左扫腿无情踢击之下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0180.wav", "duration": 9.245, "text": "而是北京上海广州深圳可在国家统一政策基础上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0144.wav", "duration": 3.5950625, "text": "以深圳智能锁业代表为例"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0226.wav", "duration": 3.521, "text": "提高脱毒种薯供给能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0350.wav", "duration": 6.0769375, "text": "但现在的生活已经进入了准退役状态"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0345.wav", "duration": 6.2590625, "text": "到时将会成为冬奥会志愿者的主力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0237.wav", "duration": 5.046, "text": "大力发展资本技术密集型农业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0171.wav", "duration": 5.9860625, "text": "房价的一涨一跌都牵动着购房者的神经"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0441.wav", "duration": 5.6811875, "text": "黄煜坤被警方送到附近医院接受检查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0473.wav", "duration": 3.326875, "text": "如果放弃学习没有追求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0327.wav", "duration": 3.7259375, "text": "这些挑战来自于四面八方"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0138.wav", "duration": 4.3, "text": "公积金对楼市的扶持力度不断加大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0160.wav", "duration": 4.146, "text": "除上述政策调整以外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0399.wav", "duration": 3.093, "text": "而第三次申办周期内"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0466.wav", "duration": 4.80175, "text": "警方先后解救了一六名婴儿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0307.wav", "duration": 3.228, "text": "不存在实际健康问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0134.wav", "duration": 4.693, "text": "可以重点关注如何做强"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0167.wav", "duration": 4.5, "text": "再由国家住房银行提供低息贷款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0269.wav", "duration": 5.7259375, "text": "苹果在成长为万亿美元市场的巨无霸之前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0161.wav", "duration": 9.605, "text": "此番公积金贷款政策调整将进一步提升振刚需"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0376.wav", "duration": 7.7780625, "text": "马刀抡击式的中距离组合拳法配合高位膝技"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0441.wav", "duration": 10.5029375, "text": "河南省新乡市封丘县留光镇政府东五零零米左右"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0310.wav", "duration": 5.5440625, "text": "新能源汽车的爆发带动了锂电池供不应求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0253.wav", "duration": 6.0059375, "text": "华尔街的半兽人已经为他的离开紧锣密鼓地敲起退堂鼓"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0254.wav", "duration": 5.2469375, "text": "这样可以加深苹果和消费者之间的关系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0221.wav", "duration": 4.771, "text": "提升公共交通设施装备水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0161.wav", "duration": 2.8459375, "text": "这一系列公积金政策的放宽"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0243.wav", "duration": 4.2430625, "text": "我们还安排了专门的偿债均摊机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0367.wav", "duration": 5.2629375, "text": "虽然扣球落地后朱婷依然一瘸一拐"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0445.wav", "duration": 6.947, "text": "将不应享受政府的两个女儿作为搬迁户上报"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0375.wav", "duration": 3.7639375, "text": "组建了花滑表演团队"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0273.wav", "duration": 3.9239375, "text": "他们的消费需求是拉动创新创业的巨大牵引力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0145.wav", "duration": 4.217, "text": "扬州杭州成都无锡等地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0422.wav", "duration": 2.390875, "text": "但由于风格不同"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0179.wav", "duration": 4.826, "text": "双降后首日在岸人民币由弱转强"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0201.wav", "duration": 3.699, "text": "有的媒体甚至用井喷来描述"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0353.wav", "duration": 4.146, "text": "回忆起当时临危受命接班队长一职的情况"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0434.wav", "duration": 6.428, "text": "目前正在根据海事部门的要求开往盐城大分港"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0327.wav", "duration": 4.542, "text": "就没有要求专业机构做可研报告"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0460.wav", "duration": 6.1589375, "text": "清洁工开宝马上下班真实身份为在逃诈骗犯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0413.wav", "duration": 2.6950625, "text": "据香港媒体报导"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0177.wav", "duration": 4.235, "text": "在经济下行压力加大的背景下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0461.wav", "duration": 5.0920625, "text": "游客在北京动物园内小树间拉吊床摇荡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0451.wav", "duration": 7.4289375, "text": "这事发生在福建省漳州市诏安县林头村"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0319.wav", "duration": 3.8159375, "text": "这对我们来说是个很大的挑战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0255.wav", "duration": 3.126125, "text": "想了解苹果最初的事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0286.wav", "duration": 5.068, "text": "根据陈昊芝在二零一四年八月提供的数据"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0334.wav", "duration": 5.2740625, "text": "这个方向的创新以后还有更多的东西可以发挥作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0407.wav", "duration": 3.9128125, "text": "这部正在酝酿中的续集敲定了导演"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0187.wav", "duration": 3.5560625, "text": "科技支撑能力显着增强"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0148.wav", "duration": 3.2699375, "text": "但大多是雷声大雨点小"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0444.wav", "duration": 3.8249375, "text": "乡间公路也就四米宽"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0464.wav", "duration": 5.1059375, "text": "一直被认为是全中国最难学习的方言之一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0484.wav", "duration": 5.597875, "text": "退房结账时却被告知扣了二零元马桶使用费"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0323.wav", "duration": 5.614, "text": "都是家电企业自动化升级需要面临的挑战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0397.wav", "duration": 5.163125, "text": "本次沈阳站赛场迎来了许多熟悉的面孔"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0248.wav", "duration": 4.4309375, "text": "允许各类资产管理公司同台竞技"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0488.wav", "duration": 6.275125, "text": "李彬彬喂大象喝水略显老态提醒网友夏天要补水"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0185.wav", "duration": 3.083, "text": "通过改革和政策调整"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0392.wav", "duration": 2.718, "text": "体育首尔的报道分析"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0422.wav", "duration": 3.4309375, "text": "曝出陈妍希拍戏时突然干呕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0355.wav", "duration": 4.891875, "text": "连身上的痛觉神经都进行了更换"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0418.wav", "duration": 4.2219375, "text": "二十九日晚间举办媒体听歌会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0377.wav", "duration": 4.941875, "text": "全民冰雪季奥运健儿助力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0162.wav", "duration": 5.0269375, "text": "广州二手住宅市场网签量达一千套"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0453.wav", "duration": 5.5639375, "text": "在空中以高速自转带给游客惊险刺激的体验"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0146.wav", "duration": 7.401, "text": "其中刚需要买入市积极性明显提高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0430.wav", "duration": 4.281, "text": "搜狐娱乐讯据香港媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0169.wav", "duration": 8.1859375, "text": "对拥有一套住房并已结清相应购房贷款的居民家庭"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0315.wav", "duration": 4.834125, "text": "多年来保持奇高市占率的老板电器"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0352.wav", "duration": 4.407, "text": "吉娜卢克肯科姆普尔"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0495.wav", "duration": 3.98, "text": "平时作为看家护院之用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0258.wav", "duration": 6.802, "text": "这一价格也是目前华尔街给出的最高估值"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0188.wav", "duration": 6.5589375, "text": "最近企业债券特别是城投债券的发行难度加大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0375.wav", "duration": 6.3769375, "text": "哈立以争议性的点数优势宣告获胜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0241.wav", "duration": 7.5, "text": "国务院常务会议听取了综合安全检查情况汇报"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0428.wav", "duration": 5.031, "text": "谢婷婷为服装拍摄时装宣传照"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0305.wav", "duration": 6.937, "text": "未来将搭建空气水营养等智能管家平台"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0370.wav", "duration": 2.6790625, "text": "还能够在情绪上带动队友"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0228.wav", "duration": 4.744, "text": "实行最严格的耕地保护和节约用地制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0186.wav", "duration": 6.5799375, "text": "招商银行同业金融部高级分析师刘东亮指出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0380.wav", "duration": 4.6069375, "text": "二百米罗宾埃尔瓦"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0492.wav", "duration": 5.4909375, "text": "李玉刚饰演的杨贵妃被指芳华绝代说到神曲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0449.wav", "duration": 3.8889375, "text": "食客该不该如此浪费"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0458.wav", "duration": 5.954125, "text": "该市苍南县公安局直属县看守所突发火情"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0424.wav", "duration": 2.5, "text": "据香港媒体报导"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0438.wav", "duration": 7.729, "text": "港报内地医院仍控制处方药销售电商盼网售解禁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0399.wav", "duration": 5.129875, "text": "进攻成功率达到百分之五十六点七六拦网"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0476.wav", "duration": 7.297125, "text": "港媒中国患者年底可在线上美国医生咨询病情"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0326.wav", "duration": 4.6259375, "text": "这类专业人才往往集中在互联网企业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0471.wav", "duration": 6.75, "text": "游客称在山东日照只因点海鲜少全家遭殴打恐吓"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0438.wav", "duration": 7.128875, "text": "渔船被其他船撞翻六人死海事部门悬赏五万寻肇事者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0421.wav", "duration": 4.646, "text": "搜狐娱乐讯据香港媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0394.wav", "duration": 5.28, "text": "北京申办冬奥强大实力成获胜武器"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0375.wav", "duration": 3.751, "text": "组委会特意举办隆重的开幕式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0419.wav", "duration": 4.5, "text": "陈奕迅在香港出席品牌活动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0450.wav", "duration": 7.771, "text": "孩子的奶奶正在参加村里的道路环境综合治理工作会议"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0183.wav", "duration": 6.463, "text": "投金或在经济增长速度放缓形势下加速外流"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0307.wav", "duration": 5.412125, "text": "由于去年底制定的销售战略是直销模式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0241.wav", "duration": 5.5, "text": "构建服务质量评价指标体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0384.wav", "duration": 4.5, "text": "能够保障他的职业生涯发展是我的荣幸"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0430.wav", "duration": 4.6420625, "text": "两人在台下分枱坐欠交流"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0143.wav", "duration": 3.43, "text": "二套首付降比百分之七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0271.wav", "duration": 3.339, "text": "而这种人通常是商业人士"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0308.wav", "duration": 3.6429375, "text": "在锂电业务爆发的情况下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0463.wav", "duration": 4.244875, "text": "用罂丽熬汤为丈夫止痛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0359.wav", "duration": 3.8830625, "text": "经过场上护理人员的医治后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0164.wav", "duration": 3.284, "text": "回报率普遍要求并不高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0285.wav", "duration": 10.006, "text": "而苹果的另一位联合创始人沃兹尼亚克还活跃在科技圈"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0189.wav", "duration": 4.0339375, "text": "建立农业投入稳定增长机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0141.wav", "duration": 3.482, "text": "中国证券报报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0427.wav", "duration": 5.787125, "text": "并感谢了各界对于陈妍希公开与陈晓恋情的祝福"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0367.wav", "duration": 2.71925, "text": "因为卷入兴奋剂丑闻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0387.wav", "duration": 3.7951875, "text": "但随着这一系列名将的退役"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0344.wav", "duration": 4.3620625, "text": "让自己的攻击变得更快更狠"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0346.wav", "duration": 5.0351875, "text": "在一连串的拳腿风暴过后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0315.wav", "duration": 5.7690625, "text": "今年初也在原来厂里新增了生产线"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0401.wav", "duration": 5.27, "text": "北京青年报记者昨日在鸟巢采访了一些志愿者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0393.wav", "duration": 4.906, "text": "早前意外崴伤脚踝的朱婷强势复出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0434.wav", "duration": 7.5180625, "text": "要有清晰的目标人文情怀和做到执着坚守"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0264.wav", "duration": 3.88, "text": "苹果的股价会随着销量相反"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0139.wav", "duration": 4.066, "text": "价格要到明年初才出现上涨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0492.wav", "duration": 4.0449375, "text": "永嘉县人谢某女"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0314.wav", "duration": 4.699, "text": "尽管政府对国产品牌有一定扶持"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0296.wav", "duration": 2.86, "text": "十年都还没赚钱的话"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0322.wav", "duration": 3.135, "text": "对于这种突破性的天线内置方案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0151.wav", "duration": 4.652, "text": "同比前年增长五成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0399.wav", "duration": 4.281, "text": "亚历山大克塞诺科夫"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0168.wav", "duration": 9.5610625, "text": "三四线城市可能在继续因高库存而承压"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0160.wav", "duration": 4.2009375, "text": "在公积金利率已降至历史低位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0165.wav", "duration": 3.586, "text": "房企应走差异化路线"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0356.wav", "duration": 5.198, "text": "播求的头部便被对方的肘击割破"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0381.wav", "duration": 5.28, "text": "在全民健身成为国家战略的大背景下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0478.wav", "duration": 4.0029375, "text": "努力处理好灌溉与发电之间的关系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0399.wav", "duration": 5.926, "text": "家人和哈排协也表明了全力支持她的态度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0341.wav", "duration": 5.2009375, "text": "除了第一局在开局阶段古巴队一度领先外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0355.wav", "duration": 4.120125, "text": "九月初顺利通过了考试"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0457.wav", "duration": 3.8669375, "text": "一零月一零日临近中午"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0273.wav", "duration": 3.366, "text": "跟星巴克的合作就是灾难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0145.wav", "duration": 4.921, "text": "在安全加解密认证等方面也做足了功夫"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0145.wav", "duration": 5.362, "text": "绝大部分三线城市房价仍然下降"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0331.wav", "duration": 6.2529375, "text": "而浪潮从二零一零坚持做到现在"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0179.wav", "duration": 3.776, "text": "国家住房银行是否箭在弦上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0475.wav", "duration": 4.639875, "text": "温州市治堵办的负责人表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0202.wav", "duration": 5.614, "text": "目前我国出现政府性债务违约可能性并不大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0129.wav", "duration": 4.971, "text": "公积金贷款首付款比例不低于百分之七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0389.wav", "duration": 6.542, "text": "倾尽全力将标枪掷到了六十六米一三"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0172.wav", "duration": 4.288, "text": "中原地产市场总监张大伟认为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0445.wav", "duration": 4.4148125, "text": "用智能秤称重将自动生成二维码"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0305.wav", "duration": 4.183, "text": "传统汽车业务并没有太大起色"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0156.wav", "duration": 5.01, "text": "也可以是委托人合法获得的过桥资金"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0248.wav", "duration": 7.682, "text": "开展草原自然保护区建设和南方草地综合治理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0376.wav", "duration": 7.76, "text": "用作雪车雪橇大项和滑雪大项中的高山滑雪比赛场地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0186.wav", "duration": 3.713, "text": "鼓励购房者积极缴纳公积金"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0191.wav", "duration": 4.647125, "text": "加大示范目建设投入力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0480.wav", "duration": 9.886, "text": "温州一夫妻非法集资五亿丈夫将赃款送给情妇洗钱"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0317.wav", "duration": 2.468, "text": "以小天才电话手表为例"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0217.wav", "duration": 7.882, "text": "解决中小企业生产经营困难需靠多方面共同努力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0359.wav", "duration": 6.8249375, "text": "逐渐控制住了局面并连扳两局以二比一优先"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0167.wav", "duration": 5.4920625, "text": "存销比见顶的态势基本确立"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0156.wav", "duration": 4.689, "text": "今年一线城市住宅用地价格涨五成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0362.wav", "duration": 4.1660625, "text": "庞清和佟健没有马上退役"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0152.wav", "duration": 5.5349375, "text": "北京市公积金额度提升后的元旦时期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0417.wav", "duration": 3.812, "text": "一个月内暴瘦了九至十三斤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0239.wav", "duration": 3.5639375, "text": "还本付息也是正常的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0462.wav", "duration": 7.1699375, "text": "菜单显示该饭店的荞麦窝窝头卖三八元一个"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0434.wav", "duration": 4.3789375, "text": "一人被判罚款一五零零元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0443.wav", "duration": 6.6110625, "text": "李磊灭门案遗产纠纷终结八零零馀万三人有份"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0225.wav", "duration": 5.4649375, "text": "积极开发和选育马铃薯优质专用高产品种"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0359.wav", "duration": 3.5, "text": "按照平时训练的速度进行跑步"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0490.wav", "duration": 6.880125, "text": "华西都市报讯记者杜恩湖一零月二四日中午一二时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0270.wav", "duration": 4.2580625, "text": "但它对开发者来说限制太多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0168.wav", "duration": 3.239, "text": "但目前的形势早已改变"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0202.wav", "duration": 4.8680625, "text": "中央企业控股境外上市公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0402.wav", "duration": 7.014125, "text": "借着北京将要举办二零二二年冬奥会的东风"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0169.wav", "duration": 6.481, "text": "此前外资购房主要集中在一线城市和几个热点二线城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0262.wav", "duration": 4.818, "text": "乔布斯在它出现之前都不知道它的存在"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0368.wav", "duration": 7.297125, "text": "从而确保高度精准地记录竞赛成绩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0314.wav", "duration": 4.2790625, "text": "汉能发布中期财报披露"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0446.wav", "duration": 5.3679375, "text": "截至九点四零分消防人员撤离时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0493.wav", "duration": 6.0549375, "text": "永嘉县人已被鹿城警方依法行政拘留"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0494.wav", "duration": 3.7511875, "text": "存在无法如期还贷的风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0304.wav", "duration": 3.8980625, "text": "我国的标准和国际差不多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0385.wav", "duration": 4.6159375, "text": "曾经在鸟巢服务的志愿者们"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0281.wav", "duration": 2.859, "text": "还希望拓展市场的话"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0437.wav", "duration": 9.2688125, "text": "温州多地商户拉横幅求降租导购不少店亏本经营"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0485.wav", "duration": 3.6520625, "text": "且时间已长达两年多了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0238.wav", "duration": 3.259875, "text": "保持耕地面积不减少"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0369.wav", "duration": 5.650875, "text": "转投到昔日恩师卢民相任教练的游泳俱乐部训练"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0400.wav", "duration": 4.322, "text": "佟健更希望能有实实在在的发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0251.wav", "duration": 5.85, "text": "明确农业科技的公共性基础社会性地位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0124.wav", "duration": 2.2249375, "text": "并已实施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0481.wav", "duration": 6.197, "text": "有走私奢侈品的人士月入高达八万港元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0360.wav", "duration": 5.213125, "text": "因为本次赛事比赛周期长赛区跨度大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0428.wav", "duration": 6.5229375, "text": "许茹芸突然闪婚让当时的娱乐圈也惊起了一阵小波澜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0483.wav", "duration": 5.3471875, "text": "其中上半年中国访日游客接近翻倍"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0256.wav", "duration": 3.9460625, "text": "不断刷新中国创造的精度高度深度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0393.wav", "duration": 4.8310625, "text": "霸气外露的朱婷是不可或缺的绝对核心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0336.wav", "duration": 6.282, "text": "浪潮集团与海关总署启动战略合作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0465.wav", "duration": 4.492875, "text": "朱茵说紫霞仙子谁来演不是我可以决定的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0420.wav", "duration": 2.512, "text": "她回应是么"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0393.wav", "duration": 3.6069375, "text": "记者查阅相关资料发现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0250.wav", "duration": 6.0850625, "text": "徐林出于对地方政府债务风险的担忧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0431.wav", "duration": 5.3141875, "text": "为了给自己的爱犬盖狗舍及休息场所"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0259.wav", "duration": 4.229, "text": "该网站根据雇员的反馈"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0309.wav", "duration": 4.48, "text": "还针对性的设置了上课禁用等功能"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0396.wav", "duration": 4.2519375, "text": "本报讯记者李晖经过两天转场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0187.wav", "duration": 8.4700625, "text": "分档制定了中央部门收取的考务费统一上限标准"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0484.wav", "duration": 5.494875, "text": "一名老师才发现学生坠楼摔落在教学楼前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0462.wav", "duration": 5.129875, "text": "王思聪将朱圣祎诉至北京朝阳法院"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0327.wav", "duration": 4.938, "text": "汽车模具实现营收一点一零一亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0368.wav", "duration": 8.1809375, "text": "庞清和佟健仍肩负着扛起中国双人滑大旗的重任"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0253.wav", "duration": 9.187, "text": "神雕的机身四周装有分布式有源相控阵雷达天线"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0304.wav", "duration": 5.0, "text": "有黑客在网络上兜售车主信"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0470.wav", "duration": 4.76975, "text": "希望警方尽快给出公平调查结果"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0399.wav", "duration": 4.724125, "text": "不时还施以非常巧妙的吊球"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0320.wav", "duration": 3.4499375, "text": "深受家长和儿童欢迎"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0410.wav", "duration": 2.876, "text": "可说是超完美女神"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0302.wav", "duration": 4.646, "text": "肯德尔定于二月二十三日访问印度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0357.wav", "duration": 6.005125, "text": "彭博一英里接力赛将在十月十五日首次登陆上海"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0308.wav", "duration": 5.6909375, "text": "用于回购的资金总额不超过一点五一七亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0127.wav", "duration": 3.925, "text": "贷款最高额度仍为一百万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0226.wav", "duration": 4.802, "text": "对于如何建立规范的地方政府融资渠道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0237.wav", "duration": 3.614, "text": "免费时段从节假日第一天开始"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0279.wav", "duration": 4.9239375, "text": "我们也许不用像以前那样为了追求某个数字赶紧赶慢了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0244.wav", "duration": 5.1429375, "text": "加大动物疫病防控经费投入"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0300.wav", "duration": 4.5, "text": "从这些零售商的等级来看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0271.wav", "duration": 3.7109375, "text": "客户会再次收到短信提醒"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0133.wav", "duration": 3.557, "text": "目前挂牌的只有几宗土地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0155.wav", "duration": 6.992, "text": "中粮集团违规投资四亿元对原培训中心进行改扩建"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0488.wav", "duration": 7.9970625, "text": "游客西安遭天价玛卡商家四零零零元一价合理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0280.wav", "duration": 5.3239375, "text": "零售商最终都会向消费者妥协"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0483.wav", "duration": 3.207, "text": "现场喊打声持续不断"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0159.wav", "duration": 5.3880625, "text": "才能提振开发商拿地和开工的积极性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0469.wav", "duration": 7.162125, "text": "来自全球四七个国家和地区的二零零零多名选手参赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0137.wav", "duration": 5.133, "text": "尽管降息等利好政策出台"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0122.wav", "duration": 4.115, "text": "一二线城市虽然也处于调整中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0277.wav", "duration": 9.386, "text": "消费者会在特定情况下牺牲安全性来提升支付的便捷性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0130.wav", "duration": 5.777, "text": "金融市场总体平稳鲁指冲高回落"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0446.wav", "duration": 7.457, "text": "温州二名已婚男为争美女驾豪车互撞四个回合"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0261.wav", "duration": 5.2099375, "text": "苹果涉足汽车行业并不是一个好主意"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0407.wav", "duration": 3.014875, "text": "他确实拿下了这个角色"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0429.wav", "duration": 2.5649375, "text": "在许茹芸看来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0165.wav", "duration": 5.062, "text": "有些客户只要求收益率超过利率即可"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0257.wav", "duration": 6.7100625, "text": "本报记者纪佳鹏北京报道北京时间八月十二日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0379.wav", "duration": 5.03, "text": "二百米的高强度无氧到一千五百米的有氧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0236.wav", "duration": 4.2009375, "text": "加强渔港和渔政执法能力建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0239.wav", "duration": 3.8950625, "text": "探索实施报废更新补助"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0416.wav", "duration": 1.979, "text": "这个程度是美的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0370.wav", "duration": 4.711875, "text": "现场参赛企业誓言要打破这项记录"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0405.wav", "duration": 3.543, "text": "影片发布了第一批定装照"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0476.wav", "duration": 4.947, "text": "但是干旱原因主要系降水减少"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0179.wav", "duration": 3.981, "text": "这使得一线城市的土地竞争激烈"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0187.wav", "duration": 7.1899375, "text": "完善玉米大豆油菜籽棉花等农产品临时收储政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0244.wav", "duration": 5.4079375, "text": "具备一定的严重事故预防和缓解能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0344.wav", "duration": 6.1540625, "text": "比赛很快便呈向一边倒的局面第二回合"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0441.wav", "duration": 3.9909375, "text": "薛孝文在学生家中家访"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0170.wav", "duration": 4.266, "text": "但主要还是体现在贷款成本的降低"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0493.wav", "duration": 7.802, "text": "涉嫌编造谣言非法拘禁被刑拘"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0165.wav", "duration": 3.9160625, "text": "将农民工纳入住房公积金制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0279.wav", "duration": 7.1469375, "text": "目前大部分华尔街分析师们都对苹果的未来保持乐观"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0392.wav", "duration": 4.505875, "text": "美貌和实力并存的选手太稀罕了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0446.wav", "duration": 7.5859375, "text": "网络上一张永嘉桥头国际饭店的结帐单十分引人注目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0316.wav", "duration": 7.9079375, "text": "公司不仅可以向手机推送软件广告等商业性电子信息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0144.wav", "duration": 6.9969375, "text": "自今年初至今上涨幅度超过了十百分之"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0425.wav", "duration": 3.0659375, "text": "据香港媒体报导"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0455.wav", "duration": 4.900875, "text": "昌平法院开庭审理了这起案件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0304.wav", "duration": 6.4350625, "text": "已获任美的部品事业部的总裁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0406.wav", "duration": 6.827125, "text": "在原定男主角卢克伊万斯退出剧组之后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0131.wav", "duration": 5.287, "text": "房地产企业的整体资金状况超紧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0451.wav", "duration": 7.151875, "text": "村干部靠打架成名被抓后喊我是市人大代表"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0203.wav", "duration": 6.413, "text": "制定了可再生能源电价附加补贴和配额交易方案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0139.wav", "duration": 7.683, "text": "即使限外令放开也不会出现大规模外资买房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0329.wav", "duration": 8.0639375, "text": "一季度营收为二十一八点七亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0444.wav", "duration": 7.3730625, "text": "五零岁港商疑与其工厂的同龄女主管偷情多年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0366.wav", "duration": 3.390875, "text": "充分做到公平公正公开"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0133.wav", "duration": 4.5940625, "text": "相关公司股票走势招商银行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0319.wav", "duration": 5.9880625, "text": "是自二零一一年借壳上市以来首次出现亏损"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0400.wav", "duration": 7.876, "text": "视频中国三一大胜俄罗斯独占女排世界杯榜首"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0224.wav", "duration": 6.9930625, "text": "逐步完善农业生产关键技术应用与服务支持政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0218.wav", "duration": 7.203, "text": "当代人和后代人共同承担债务还本付息责任"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0145.wav", "duration": 8.115, "text": "更致命的是中小房企在融资方面的短板"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0452.wav", "duration": 5.0451875, "text": "游客在公园躲雨遭雷击已脑死亡至今无人负责"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0310.wav", "duration": 4.0, "text": "实现净利营收双增长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0399.wav", "duration": 3.553, "text": "将举行隆重的颁奖仪式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0382.wav", "duration": 4.119125, "text": "马塞洛特来到法国花样滑冰联合会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0449.wav", "duration": 4.8508125, "text": "公安机关并未查出其身上还背着命案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0170.wav", "duration": 4.7979375, "text": "万科获选性价比最高的房企"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0304.wav", "duration": 3.735, "text": "我们凭什么征战全世界"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0402.wav", "duration": 4.5449375, "text": "以此证明自己并没有使用过违禁药物"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0180.wav", "duration": 3.9969375, "text": "关于明年的房价走势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0239.wav", "duration": 2.501, "text": "加强农业生态环境治理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0472.wav", "duration": 6.3679375, "text": "省市区三三级疾控部门专家已介入调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0195.wav", "duration": 4.2799375, "text": "主要是如何提供服务及做好监管"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0344.wav", "duration": 4.221875, "text": "网友大呼她帅过林丹"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0209.wav", "duration": 3.902, "text": "但农业现代化明显滞后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0327.wav", "duration": 6.2979375, "text": "第二期股票回购方案不晚于二零一七年六月三十日推出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0462.wav", "duration": 7.5190625, "text": "杀害中传女生嫌犯曾私藏刺刀同学称其特立独行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0148.wav", "duration": 3.618, "text": "要重点加大政策支持"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0485.wav", "duration": 7.3249375, "text": "在虾体内发现疑似胶状物质七月二十一日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0189.wav", "duration": 5.068, "text": "免征蔬菜流通环节增值税"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0236.wav", "duration": 4.1800625, "text": "东部沿海先导农业区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0362.wav", "duration": 3.745125, "text": "已经有过不少关于这方面的研究"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0466.wav", "duration": 3.667, "text": "但在张关押了三七天后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0319.wav", "duration": 5.651, "text": "还没体现在香港上市公司威灵电器的业务层面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0247.wav", "duration": 2.833, "text": "您如何看待这一现象"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0322.wav", "duration": 3.0800625, "text": "我们必须要有衡量标准"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0454.wav", "duration": 4.8518125, "text": "两个村子之间的长江江面上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0464.wav", "duration": 6.0300625, "text": "清洁工被电梯咬断腿曾反映这样擦电源危险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0320.wav", "duration": 2.869125, "text": "失孤等影片的上映"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0445.wav", "duration": 3.484125, "text": "这一天还将上演月全食"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0441.wav", "duration": 5.8300625, "text": "本月二八日超级月亮和最圆中秋月喜相逢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0312.wav", "duration": 8.8930625, "text": "车企在信息安全方面的投入不足已经越来越成为其软肋"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0140.wav", "duration": 3.779, "text": "而最高额度提升至一百万后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0252.wav", "duration": 3.8610625, "text": "发挥财政资金引导示范作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0469.wav", "duration": 5.0129375, "text": "温州体育局官员逼女教练陪酒当地纪委介入调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0327.wav", "duration": 6.8400625, "text": "机器人后期维护运行成本及技术也是一个高门槛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0273.wav", "duration": 4.063, "text": "除却土豪式的生意属性之外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0450.wav", "duration": 5.1699375, "text": "为了实现退休后能建一座养老机构"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0260.wav", "duration": 5.9609375, "text": "给出了前五十名的公司排名"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0350.wav", "duration": 8.318125, "text": "队员们也对于她在技术上和心理上都颇为依赖和信服"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0404.wav", "duration": 4.5749375, "text": "上周在北美电影市场上遭遇票房惨剧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0435.wav", "duration": 9.4350625, "text": "港京航班延误九小时六名内地乘客推撞地勤被捕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0289.wav", "duration": 7.3099375, "text": "据新华社电美国商务部二十一日宣布初裁结果"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0246.wav", "duration": 4.6440625, "text": "针对目前职业资格考试收费项目增加"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0198.wav", "duration": 2.656, "text": "推进龙头企业集群发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0434.wav", "duration": 7.8989375, "text": "兴安县法院判杨爱明拘役四个月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0447.wav", "duration": 4.723125, "text": "港商疑恼羞成怒将她杀害"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0391.wav", "duration": 5.495875, "text": "郎平也认为这样去打世界高水平的球队是不够的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0321.wav", "duration": 4.6689375, "text": "现在汽车与网络的联系越来越紧密"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0262.wav", "duration": 6.688, "text": "因为快速发展的业务和不断膨胀的营收受资本市场亲睐"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0284.wav", "duration": 6.0129375, "text": "势必使用中美光伏贸易纠纷再度升级"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0399.wav", "duration": 4.160875, "text": "朴泰桓会面临更加严峻的舆论环境"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0483.wav", "duration": 3.2880625, "text": "直至晚上一零时左右"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0339.wav", "duration": 5.5490625, "text": "提升战绩为九胜一负反超至榜首位置"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0146.wav", "duration": 3.5530625, "text": "实现三四线城市去库存"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0177.wav", "duration": 3.268, "text": "据伟业我爱我家市场研究院测算"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0288.wav", "duration": 5.5, "text": "最大难点在于如何改变国内的消费习惯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0385.wav", "duration": 4.108875, "text": "恭喜他与萨维申科走上正确的道路"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0418.wav", "duration": 2.967, "text": "问及最近是否有跟男友见面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0455.wav", "duration": 6.4350625, "text": "但曾经的中国网球一姐李娜仍然没有淡出媒体的关注"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0136.wav", "duration": 6.479, "text": "发现无论是千亿巨头地产商"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0333.wav", "duration": 6.9658125, "text": "海信科龙一季报营收为六十四点三亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0213.wav", "duration": 6.7829375, "text": "但在具体评估我国地方政府债务风险程度时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0453.wav", "duration": 3.312, "text": "并在铁塔上借助自拍杆合影"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0272.wav", "duration": 4.8309375, "text": "微软正在向外界推广一次编写"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0439.wav", "duration": 7.521, "text": "游客赴港游买瑞士表半个月停摆旅行社久拖不管"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0455.wav", "duration": 7.689, "text": "有一块面积近五零零零面积的沙洲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0427.wav", "duration": 4.9609375, "text": "各样都平衡得好处理得好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0375.wav", "duration": 4.552, "text": "小青椒用热情和真诚打动了每位运动员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0122.wav", "duration": 3.146, "text": "是当今广告行业的需要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0220.wav", "duration": 3.8759375, "text": "强化企业管理和风险管控"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0170.wav", "duration": 4.327, "text": "五月份更是增加了七百万平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0314.wav", "duration": 4.5979375, "text": "而体现在服务器产业上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0282.wav", "duration": 5.509, "text": "并接受消费者想要使用的支付方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0123.wav", "duration": 4.1369375, "text": "彩虹之门建筑净高三十米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0463.wav", "duration": 4.131125, "text": "一家三口在两棵树间拉起了一张吊床"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0423.wav", "duration": 3.1340625, "text": "并大呼我自己也非常期待他回来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0315.wav", "duration": 5.0660625, "text": "原压缩机事业部各工厂保持不变"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0191.wav", "duration": 5.118875, "text": "加强农业科研基地和重点实验室建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0220.wav", "duration": 3.4500625, "text": "一些国家经济出现大的波动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0322.wav", "duration": 3.459, "text": "题材股继续扮演黑马角色"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0149.wav", "duration": 5.4490625, "text": "还有一亿元被套取或用于弥补经费不足等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0144.wav", "duration": 3.88, "text": "国家统计局公布的数据显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0403.wav", "duration": 4.910875, "text": "退役之后的高桥大辅并未远离公众视线"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0433.wav", "duration": 4.428, "text": "运气好时一天能偷几千枚一元硬币"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0293.wav", "duration": 4.25, "text": "该网站根据雇员的反馈"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0381.wav", "duration": 3.8469375, "text": "备战明年的里约奥运"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0490.wav", "duration": 7.0551875, "text": "李玉刚张学友黄琦雯入选一零大最涨姿势歌曲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0318.wav", "duration": 3.8869375, "text": "工人数量减少近一半"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0339.wav", "duration": 3.7419375, "text": "看到了有关这里水污染的报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0127.wav", "duration": 4.014, "text": "成为圈子里首屈一指的超大企业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0460.wav", "duration": 5.6110625, "text": "权义澎湃资料李银河在现实中是柔软的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0441.wav", "duration": 5.0659375, "text": "京汇佳律师事务所律师邱宝昌表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0493.wav", "duration": 5.427, "text": "事后才了解他们遭遇的只是普通连环车祸"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0143.wav", "duration": 8.1709375, "text": "也在厦门拿下几宗商住用地和济南几宗居住用地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0477.wav", "duration": 4.661875, "text": "李开复经历死亡这一课学会看透和放下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0297.wav", "duration": 5.2150625, "text": "而是寻求收购规模较小更为灵活的公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0311.wav", "duration": 5.1238125, "text": "美的整合事业部精简组织架构"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0312.wav", "duration": 4.2729375, "text": "上述成飞集成人士表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0290.wav", "duration": 6.6120625, "text": "继二零一一年出现独特的连翼造型的翔龙无人机以后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0252.wav", "duration": 7.41, "text": "通知按照不同考生规模考试类类别的合理平均成本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0122.wav", "duration": 4.636, "text": "背后可能蕴含着开发商更多的窘境"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0489.wav", "duration": 5.068125, "text": "而橄榄形结构是以中产为主的结构"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0322.wav", "duration": 5.4869375, "text": "作为企业理念和产品技术必须要走在时代的前面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0199.wav", "duration": 6.3979375, "text": "下一步我国的城投债券还需要做哪些完善"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0415.wav", "duration": 3.375, "text": "搜狐娱乐讯九月十二日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0249.wav", "duration": 4.438, "text": "加快实施游牧民定居工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0352.wav", "duration": 3.3940625, "text": "总共贡献了一百四十一分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0218.wav", "duration": 4.947, "text": "克服当期建设资金不足的瓶颈制约"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0130.wav", "duration": 6.2779375, "text": "市政府决定今年将全面加快棚户区改造步伐"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0388.wav", "duration": 4.0698125, "text": "该球队在官方博客上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0486.wav", "duration": 5.996125, "text": "出席活动时笑称今后拍激情戏会征求男友李晨的意见"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0289.wav", "duration": 4.6599375, "text": "选择套现或也是情理之中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0304.wav", "duration": 3.3940625, "text": "由于该项目尚处于保密期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0368.wav", "duration": 4.509, "text": "最后取全队用时最少者为胜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0367.wav", "duration": 5.150875, "text": "加之其半身浴血的黝黑健美体魄"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0409.wav", "duration": 2.407, "text": "演艺事业受挫"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0348.wav", "duration": 3.1791875, "text": "并让年轻跑者作为参照"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0191.wav", "duration": 3.468, "text": "现代农业建设取得突破性进展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0162.wav", "duration": 3.327, "text": "今久在大举创新的同时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0314.wav", "duration": 3.1010625, "text": "还要保证与手机一样的通话质量呢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0308.wav", "duration": 5.208, "text": "美的已将风扇加湿器等空气类产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0284.wav", "duration": 3.767, "text": "连这些人都预测不准的话"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0346.wav", "duration": 5.120125, "text": "凭借十三分位列本队和扣球榜第二位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0302.wav", "duration": 4.5439375, "text": "越多人讲往往越难成事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0170.wav", "duration": 3.671, "text": "楼市进展仍需进一步观望"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0310.wav", "duration": 6.8979375, "text": "质变中的世界工厂中国正在由中国制造向中国智造蜕变"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0142.wav", "duration": 4.3350625, "text": "宋芳本人为信托的发起人和委托人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0202.wav", "duration": 5.156, "text": "加强城投债监管完善制度建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0202.wav", "duration": 3.4960625, "text": "四是外部环境将更加优化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0146.wav", "duration": 6.072, "text": "审计已向有关部门移送重大违法违纪问题三百起"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0447.wav", "duration": 4.876, "text": "车子被撞得破烂不堪七月四日凌晨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0448.wav", "duration": 4.712875, "text": "并肢解尸体分成多袋抛入河中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0316.wav", "duration": 4.0039375, "text": "汽车厂商纷纷转型新能源汽车"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0171.wav", "duration": 5.8009375, "text": "即使限外令放开也不会出现外资大规模买房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0218.wav", "duration": 4.854, "text": "面对上述这些问题山东是怎么免费放行的呢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0397.wav", "duration": 6.3400625, "text": "五度世锦赛冠军萨维申科联手年轻新搭档马塞洛特"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0491.wav", "duration": 4.797875, "text": "被导游介绍到一家购物点后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0193.wav", "duration": 3.7440625, "text": "建立地方政府债务管理体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0183.wav", "duration": 3.803, "text": "百分之五的网友认为不会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0184.wav", "duration": 3.5, "text": "内地产投资比例有限"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0324.wav", "duration": 3.994125, "text": "电话手表正是瞄准了这一需求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0447.wav", "duration": 7.8920625, "text": "时年二三岁的杨柱军在北京抢劫杀害了一名出租车司机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0256.wav", "duration": 4.864, "text": "他们开发出一种只有二十微米长的机器人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0232.wav", "duration": 6.447, "text": "该区域交通区位市场和人力资源优势明显"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0372.wav", "duration": 3.3728125, "text": "朱婷两场比赛担任首发"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0176.wav", "duration": 5.8219375, "text": "一二线城市特别是京沪这样的核心城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0403.wav", "duration": 6.911125, "text": "冰雪运动在中国势必会有一次发展高潮"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0260.wav", "duration": 5.703, "text": "苹果股票每分钟交易量已超过六百七十万股"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0254.wav", "duration": 4.704125, "text": "无止境地重复过去十年的惊人增长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0351.wav", "duration": 4.8239375, "text": "我们应该抱着更加长远和开阔的视角来看待"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0447.wav", "duration": 5.274875, "text": "事件中的女方昨日被判一二个月感化令"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0183.wav", "duration": 3.7270625, "text": "大数据云计算是非常烧钱的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0259.wav", "duration": 3.636, "text": "它是软件集成的一种方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0177.wav", "duration": 5.422, "text": "未来住宅价格会企稳回升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0136.wav", "duration": 6.928, "text": "上周末成为潜在买家们争相咨询看楼的时机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0157.wav", "duration": 4.2069375, "text": "可以解决贷款难和贷款贵问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0270.wav", "duration": 3.3819375, "text": "政府失控的可不是什么隐私了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0347.wav", "duration": 3.7878125, "text": "在数百场真枪实弹的巅峰对决中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0416.wav", "duration": 4.3159375, "text": "曝出陈妍希拍戏时突然干呕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0471.wav", "duration": 7.635, "text": "门头沟雁翅镇村民李冬梅因不服行政批复"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0184.wav", "duration": 3.691, "text": "百分之五的网友认为会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0302.wav", "duration": 4.5290625, "text": "移动支付肯定会有井喷式的发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0432.wav", "duration": 4.4609375, "text": "称涉事男子为某街道协管员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0405.wav", "duration": 3.3198125, "text": "忙碌成本可想而知"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0345.wav", "duration": 4.389875, "text": "无论帆船赛艇还是公开水域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0325.wav", "duration": 4.7209375, "text": "比如现在的汽车一般采用了哪些新技术"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0408.wav", "duration": 5.988, "text": "至于有传拍台庆剧很容易获奖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0464.wav", "duration": 7.7009375, "text": "此次事故调查组组长荆州市安监局局长陈观鑫通报称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0387.wav", "duration": 2.801, "text": "打日本从来都不需要动员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0253.wav", "duration": 8.527, "text": "业界首次开始认真讨论苹果市值晋升万亿大关的潜力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0409.wav", "duration": 3.8200625, "text": "不过天下无不散之筵席"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0201.wav", "duration": 5.99, "text": "渔业产值占农业总产值比重百分之"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0487.wav", "duration": 6.24025, "text": "李克强集众智汇众力攻坚克难激发活力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0282.wav", "duration": 6.207, "text": "苹果市场价值达到七千亿美元刚刚过去几个月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0217.wav", "duration": 3.9759375, "text": "完善现代农业产业体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0453.wav", "duration": 5.6630625, "text": "李娜不想大家一直记得我那说明中国网球没突破"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0281.wav", "duration": 3.5340625, "text": "全世界的报道已经蜂拥而至"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0431.wav", "duration": 3.775875, "text": "数万只黄色小鸡散落路上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0284.wav", "duration": 6.28, "text": "这家公司就在挖角当地游戏公司高管建立分公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0136.wav", "duration": 7.6189375, "text": "也延续了公积金担当扶持楼市主力军的政策选择"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0187.wav", "duration": 4.2800625, "text": "无序竞争甚至恶意竞争时常发生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0195.wav", "duration": 5.0589375, "text": "随着我国综合国力和财政实力不断增强"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0281.wav", "duration": 8.6809375, "text": "四大天王平均累计回报高达一千二百分之八十二"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0310.wav", "duration": 3.5659375, "text": "对用户信息做足了保密工作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0168.wav", "duration": 7.4179375, "text": "特别是一至四月土地出让金即破千亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0175.wav", "duration": 5.9830625, "text": "而智能家居产品的特殊属性决定了销售渠道的模式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0378.wav", "duration": 3.203, "text": "面对日本队的魔鬼主场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0158.wav", "duration": 3.0299375, "text": "涨幅据十大城市之首"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0352.wav", "duration": 6.5020625, "text": "后两轮死磕俄罗斯和日本更是有红了眼的感觉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0309.wav", "duration": 6.3620625, "text": "三巨头中的格力海尔均出现不同程度下滑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0181.wav", "duration": 6.5, "text": "标普在基准情景假设下的预期是"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0397.wav", "duration": 3.1791875, "text": "前两次申办的过程中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0159.wav", "duration": 4.269, "text": "点击进入股友会参与讨论"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0347.wav", "duration": 7.2260625, "text": "也对地面技术和防摔技术上做了很多针对性的训练"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0205.wav", "duration": 3.9560625, "text": "符合提高直接融资比重的要求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0138.wav", "duration": 4.374, "text": "建设用地方面也暴露了不少问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0274.wav", "duration": 5.1219375, "text": "但至今唯独没有提升智能手表平台"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0144.wav", "duration": 6.141, "text": "南京武汉市放宽第二套房公积金贷款门槛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0149.wav", "duration": 4.259, "text": "这种分化情况会更剧烈"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0439.wav", "duration": 6.1020625, "text": "被法院以故意毁坏财物罪判刑或处罚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0151.wav", "duration": 3.27, "text": "清理收回住房二十套"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0336.wav", "duration": 5.1230625, "text": "七月成立了美的部品事业部"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0436.wav", "duration": 4.3359375, "text": "是因为国民抢习惯了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0448.wav", "duration": 3.496125, "text": "男方则将于下月庭审"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0435.wav", "duration": 4.0229375, "text": "进一步导致肢体冲突"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0410.wav", "duration": 7.3481875, "text": "陈冠希前女友嫩模黄榕在香港书展出席写真宣传活动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0271.wav", "duration": 3.4, "text": "而不仅仅是早期市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0127.wav", "duration": 7.497, "text": "改善型二套房比例比约为百分之五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0349.wav", "duration": 5.1059375, "text": "颜值颇高的他今年四月远赴美国纽约"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0222.wav", "duration": 3.7099375, "text": "其他主要农产品优势区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0313.wav", "duration": 6.3149375, "text": "便是区别行业龙头企业经营智慧高低的关键时刻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0374.wav", "duration": 4.1480625, "text": "今晚的比赛中朱婷独得二十七分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0247.wav", "duration": 3.3559375, "text": "损害债券持有人利益的事件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0178.wav", "duration": 6.542, "text": "最低首付款比例由百分之七降低至百分之五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0465.wav", "duration": 6.881125, "text": "村庄遭人倾倒数百吨化工废料附近植物全空死"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0397.wav", "duration": 6.194125, "text": "财政能力和硬件设施的优势是我们最终取胜的关键原因"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0200.wav", "duration": 4.7530625, "text": "进一步强化贸易促进公共服务能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0374.wav", "duration": 5.328125, "text": "成为了国际体育运动大家庭中的一员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0339.wav", "duration": 4.0, "text": "而是要明确落实在数字上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0291.wav", "duration": 4.343, "text": "证明了其向主流妥协的姿态"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0393.wav", "duration": 3.5708125, "text": "有一些临时组建的球队"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0294.wav", "duration": 5.0819375, "text": "中国正在研制一种世界上尺寸最大的无人机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0289.wav", "duration": 4.376, "text": "扩大它们在新的芯片市场的份额"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0158.wav", "duration": 4.411, "text": "外资管制放松是大势所趋"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0368.wav", "duration": 4.163125, "text": "远比单纯的胜负有意义得多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0473.wav", "duration": 7.7839375, "text": "游客突破八万人限流大关故宫首次提前禁止售票"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0285.wav", "duration": 8.5340625, "text": "其中包括美国大鸦无人机今后将由印度工厂制造"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0254.wav", "duration": 6.411, "text": "可以提供三六零度无死角的早期预警"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0430.wav", "duration": 5.5390625, "text": "中新网五月七日电据台湾中国时报消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0242.wav", "duration": 4.616, "text": "政府还拥有较多的可变现资产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0214.wav", "duration": 5.3579375, "text": "参与农村产业发展和公共设施建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0152.wav", "duration": 5.826, "text": "其中刚需买家入市积极性明显提高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0391.wav", "duration": 8.9760625, "text": "祖耶夫的右肋很快便被踢出大片鲜红的淤血斑痕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0254.wav", "duration": 6.553, "text": "它必须尽量做到只针对敌对国家的计算机和网络"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0151.wav", "duration": 3.5, "text": "三线城市签约十六万套"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0128.wav", "duration": 5.13, "text": "三套以上投资性购房占百分之五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0375.wav", "duration": 5.099125, "text": "这两种方式的结合能够有效锻炼小腿肌肉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0475.wav", "duration": 3.9018125, "text": "清风正在吹散互联网雾霾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0317.wav", "duration": 3.5190625, "text": "每日经济新闻记者注意到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0491.wav", "duration": 4.256875, "text": "一对来自浙江温州的医生夫妇涉案被捕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0207.wav", "duration": 5.6, "text": "制定更加严格的地方水污染排放标准"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0235.wav", "duration": 2.646, "text": "实施草原保护重大工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0156.wav", "duration": 10.857, "text": "尤其组合贷的咨询量较上月月初一周上涨百分之五左右"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0432.wav", "duration": 3.3359375, "text": "经调查核实相关情况"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0487.wav", "duration": 5.2109375, "text": "浙江温岭市大溪镇发生鞋厂厂房倒塌事故"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0337.wav", "duration": 7.2370625, "text": "家电企业要建立数字化工厂才能真正提升生产效率"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0340.wav", "duration": 3.97, "text": "擂台上的黑王子肌肉强健"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0324.wav", "duration": 3.5900625, "text": "自动化是未来唯一出路"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0194.wav", "duration": 6.043, "text": "全面加强海洋环境监视监测和监督管理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0480.wav", "duration": 4.8530625, "text": "在新书向死而生我修的死亡学分中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0419.wav", "duration": 3.8200625, "text": "她笑说我觉得蛮好的啊"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0128.wav", "duration": 4.152, "text": "另外要处理公积金异地使用的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0386.wav", "duration": 3.3779375, "text": "然而就是这最后一掷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0163.wav", "duration": 6.5449375, "text": "开发商均面临不均衡的复苏前景"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0158.wav", "duration": 4.857, "text": "扶持刚需客群已经成为北京房地产调控的主要方向"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0387.wav", "duration": 6.7729375, "text": "共有三百二十三名业馀排球爱好者报名参加比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0259.wav", "duration": 5.65, "text": "该机的雷达还具备合成孔径工作能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0378.wav", "duration": 3.9260625, "text": "也被送往医院进行抢救"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0149.wav", "duration": 6.125, "text": "房企除了像千亿地产一样做大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0384.wav", "duration": 7.0700625, "text": "来自全国各地的业馀排球爱好者纷纷前来踊跃报名"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0408.wav", "duration": 2.6630625, "text": "对男友有什么条件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0184.wav", "duration": 5.7300625, "text": "包括上海广州厦门南京在内的重点城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0297.wav", "duration": 5.5288125, "text": "排名从第十三位上升至第十一位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0184.wav", "duration": 4.428, "text": "溢价率楼面价均处于高位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0332.wav", "duration": 5.9980625, "text": "可以和我们的消费者有很多的互动并提供超值服务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0365.wav", "duration": 4.2739375, "text": "但多年来关于他的形婚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0311.wav", "duration": 5.1169375, "text": "几乎所有锂电厂商都在满负荷生产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0367.wav", "duration": 5.2851875, "text": "每人分别完成一英里即约一点六公里的路程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0149.wav", "duration": 8.332, "text": "同时对申请公积金贷款的缴纳时限调整为五个月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0170.wav", "duration": 6.121, "text": "去年北京共出让五十宗居住楼用地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0394.wav", "duration": 5.4650625, "text": "比污染严重的瓜内巴拉湾相比"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0301.wav", "duration": 3.4669375, "text": "苹果的目标股价也开始相应地上涨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0334.wav", "duration": 4.118875, "text": "是火在行业的科技创新"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0401.wav", "duration": 2.8899375, "text": "也知道了未来需要努力的方向"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0486.wav", "duration": 4.089125, "text": "可比黄金的沉香价格每年倍增"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0469.wav", "duration": 6.183125, "text": "省城政务区习友路与怀宁路交叉口"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0240.wav", "duration": 5.061, "text": "考虑到我国正处在经济快速增长期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0139.wav", "duration": 5.8810625, "text": "违规以租代征改变规划条件等用地一万公顷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0144.wav", "duration": 4.523, "text": "建设创业创新平台用地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0401.wav", "duration": 5.3920625, "text": "当地华人团体组织了不少球迷为中国队加油"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0270.wav", "duration": 4.984, "text": "苹果高端市场已经确立了一个独一无二的地位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0152.wav", "duration": 3.8760625, "text": "四线城市成交量有轻微下调"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0173.wav", "duration": 5.5759375, "text": "中国经济增速放缓的背景下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0357.wav", "duration": 5.3390625, "text": "步幅长度和跑步速度大约下降了百分之二十"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0477.wav", "duration": 8.0979375, "text": "温州开水浇头服务员被批捕涉嫌故意伤害罪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0407.wav", "duration": 4.056875, "text": "也从原计划的二零一六年七月一日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0427.wav", "duration": 2.4260625, "text": "此视频曝光后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0136.wav", "duration": 4.153, "text": "兰州房地产市场销量增加明显"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0325.wav", "duration": 4.0019375, "text": "他们的硬件技术研发等力量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0196.wav", "duration": 6.158, "text": "抓紧研究完善海洋环境保护的法律法规"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0228.wav", "duration": 3.4360625, "text": "改善养殖业生产条件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0134.wav", "duration": 3.083, "text": "我想把房产留给儿女"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0154.wav", "duration": 5.4560625, "text": "委托人以其持有的资金设立一个单一资金信托"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0302.wav", "duration": 6.547875, "text": "该季度苹果大中华区营收为一百三十二点三亿美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0124.wav", "duration": 5.23, "text": "百分之五的网友倾向于房产税的开征"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0230.wav", "duration": 4.0810625, "text": "切实加强重金属污染防治"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0485.wav", "duration": 5.6130625, "text": "温岭倒塌厂房系违章建筑涉事负责人已被控制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0449.wav", "duration": 5.0239375, "text": "致力优化营商环境有信心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0282.wav", "duration": 5.2010625, "text": "美方对中国产品进行限制的做法"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0398.wav", "duration": 4.1289375, "text": "为期五天的比赛全部结束后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0457.wav", "duration": 8.407, "text": "村医研发神奇止痛药网销全全国获刑三年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0432.wav", "duration": 4.3039375, "text": "村民蜂拥而至捉小鸡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0432.wav", "duration": 7.229, "text": "他指使他人虚开发票六万馀元用公款报销"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0241.wav", "duration": 3.3509375, "text": "责任编辑廖一宁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0142.wav", "duration": 5.357, "text": "中原地产首席分析师张大伟分析"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0290.wav", "duration": 5.5959375, "text": "意味着只要用户要选择高端手机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0218.wav", "duration": 5.3360625, "text": "发改委多渠道筹集保障房建设资金到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0228.wav", "duration": 2.9569375, "text": "加大政府投入"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0425.wav", "duration": 2.582, "text": "并送上真挚祝福"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0163.wav", "duration": 3.328, "text": "保持原有业务的正常运作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0197.wav", "duration": 4.086, "text": "免费新规究竟啥时能享受到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0461.wav", "duration": 8.0500625, "text": "网络上一张永嘉桥头国际饭店的结帐单十分引人注目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0197.wav", "duration": 3.069, "text": "在加大要素支持方面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0233.wav", "duration": 4.0240625, "text": "所投项目必须经过合规性审查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0147.wav", "duration": 5.268, "text": "这将使更多购房者具备买房支付能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0473.wav", "duration": 5.2580625, "text": "办案民警检查作案设备金华警方供图昨天"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0479.wav", "duration": 7.671125, "text": "游客美签被废因访美停留太久称从没到过欧洲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0167.wav", "duration": 6.495, "text": "广州五月二手房均价为一千元每平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0127.wav", "duration": 5.384, "text": "开发商投资增速处于不断下降的状态"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0231.wav", "duration": 4.2430625, "text": "提出完善农产品流通税收政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0166.wav", "duration": 7.647125, "text": "五月份的供求关系是今年前五个月最均衡的一次"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0269.wav", "duration": 3.49, "text": "我们迎来了赶超发达国家的难得机遇"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0449.wav", "duration": 4.183125, "text": "可是我遇见这事还不够添堵的呢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0239.wav", "duration": 5.89, "text": "十一五期间我国累计境外投资七千亿美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0415.wav", "duration": 5.816875, "text": "甚至被外界揣测是因为和阮经天分手后所刺"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0453.wav", "duration": 4.797125, "text": "将接团的两家旅行社起诉至法院"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0129.wav", "duration": 4.142, "text": "房价起飞前购置了十几套房产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0351.wav", "duration": 4.033, "text": "安娜莱纳法拉塞"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0387.wav", "duration": 3.087, "text": "朱婷表示其实我也想"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0438.wav", "duration": 6.0, "text": "京华时报讯记者卫张宁昨天上午"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0343.wav", "duration": 4.204125, "text": "铁定会有助于提升我国的冰球水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0149.wav", "duration": 4.0290625, "text": "通过信托实现了财产的隔离保护"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0493.wav", "duration": 8.829125, "text": "村官私刻公章侵占二八万粮补派人殴打上访村民"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0168.wav", "duration": 3.763, "text": "这暗示房地产的库存大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0182.wav", "duration": 4.3719375, "text": "上周五的双降政策让市场担忧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0406.wav", "duration": 5.7009375, "text": "搜狐娱乐讯文耷子备受关注的重拍版乌鸦"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0476.wav", "duration": 4.3679375, "text": "该案也被列为公安部督办大案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0233.wav", "duration": 3.0599375, "text": "拓宽投资渠道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0139.wav", "duration": 3.2150625, "text": "一直以来广受购房者青睐"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0137.wav", "duration": 5.499, "text": "北京将继续改进住宅产业化推进方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0474.wav", "duration": 4.0031875, "text": "企业应该做好的投资"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0168.wav", "duration": 3.372, "text": "他们说不定又有离婚风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0161.wav", "duration": 5.258, "text": "楼市调控供的行政手段宜减不宜加"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0398.wav", "duration": 2.6450625, "text": "曾春蕾保持着清醒的头脑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0203.wav", "duration": 8.334, "text": "下一步将进一步完善城投债券发行制度和防范风险机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0454.wav", "duration": 8.296875, "text": "才七个月大的女童腾腾化名已昏迷了两天时间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0410.wav", "duration": 2.901125, "text": "力证自己没有怀孕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0441.wav", "duration": 5.4760625, "text": "她一直假冒的林某竟是她的女儿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0215.wav", "duration": 6.9339375, "text": "建立渤海海洋环境预警机制和突发事件应对机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0124.wav", "duration": 4.519, "text": "催生了广告领域新的变革和创新"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0157.wav", "duration": 2.846, "text": "从一系列公积金政策看来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0401.wav", "duration": 5.0539375, "text": "这同样需要有效的办法和手段"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0194.wav", "duration": 3.353, "text": "加强农业科技交流合作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0122.wav", "duration": 5.8660625, "text": "这个政策的出台是希望刺激房地产投资"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0351.wav", "duration": 5.3820625, "text": "赛后有媒体发布了他几乎扭曲的背部肌肉的照片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0325.wav", "duration": 3.0920625, "text": "当务之急是扭转业绩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0236.wav", "duration": 4.6069375, "text": "加强主要农产品优势产区加工基地建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0367.wav", "duration": 3.7690625, "text": "其中国际级裁判员两名"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0441.wav", "duration": 3.5239375, "text": "当时游客出言不逊在先"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0193.wav", "duration": 5.39, "text": "制定扶持农业产业化龙头企业发展的综合性政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0272.wav", "duration": 6.108875, "text": "这种状态是苹果颠复现有市场格局的根基"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0410.wav", "duration": 4.864, "text": "却被曝出在机场大发飙"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0419.wav", "duration": 6.0290625, "text": "却多次被身边的人将他们的行踪暴露出来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0453.wav", "duration": 10.876, "text": "温州七人涉嫌百倍抬杠非法经营期货三二亿被批货"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0416.wav", "duration": 3.354, "text": "由潮男陈冠希打头阵"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0250.wav", "duration": 2.6530625, "text": "人工种草五亿亩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0170.wav", "duration": 5.348, "text": "而且提供各项行生的福利性服务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0215.wav", "duration": 4.1109375, "text": "大规模开展高标准农田建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0222.wav", "duration": 9.751, "text": "由于目前城投债劵的发行需要符合企业的债劵发行的条件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0136.wav", "duration": 5.104, "text": "一些地方土地出让收支核算不够规范"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0153.wav", "duration": 6.0849375, "text": "这宗零售商业用地位于南三环外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0445.wav", "duration": 4.001, "text": "因惠民路南段从去年开通后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0331.wav", "duration": 4.451875, "text": "但是由于该项业务占比较小"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0375.wav", "duration": 7.832, "text": "中国队三比二力克美国队收获分站赛九连胜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0317.wav", "duration": 4.348, "text": "新能源汽车的爆发使得锂电池供不应求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0456.wav", "duration": 2.764875, "text": "专家没有科学依据"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0364.wav", "duration": 2.323, "text": "是心智上的一个考验"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0276.wav", "duration": 4.1169375, "text": "一般不会给消费者带来巨大损失"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0303.wav", "duration": 7.7320625, "text": "手机辐射的比吸收率最高限值为二瓦特每千克"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0316.wav", "duration": 6.1280625, "text": "预计在三四季度会有陆续新增产能"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0284.wav", "duration": 5.193125, "text": "提供免费房地产估价服务的网站"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0135.wav", "duration": 4.2939375, "text": "很多人需要支付大额首付"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0240.wav", "duration": 7.375, "text": "高速公路以车辆驶离出口收费车车道的时间为准"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0151.wav", "duration": 4.2979375, "text": "市场上约有两成业主反价"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0380.wav", "duration": 4.723125, "text": "为振兴三大球贡献自己的一份力量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0153.wav", "duration": 6.901, "text": "全国已有超百个城市发布了不同力度的公积金松绑政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0495.wav", "duration": 8.6809375, "text": "温州一男子在医院放置假炸弹被判处有期徒刑一年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0367.wav", "duration": 6.272, "text": "其中主要集中于冰雪运动本身实力上的有所欠缺"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0433.wav", "duration": 3.2988125, "text": "称一篇似是而非的文章"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0460.wav", "duration": 4.0810625, "text": "虽然海滩上设置了众多垃圾桶"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0288.wav", "duration": 11.1069375, "text": "苹果股价下跌百分之五分析师出现重大分歧搜狐科技"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0235.wav", "duration": 3.8770625, "text": "建设水产健康养殖示范场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0172.wav", "duration": 3.803, "text": "尤其是在三四线城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0236.wav", "duration": 6.1170625, "text": "补充建设一批部级专业质检中心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0281.wav", "duration": 6.6108125, "text": "苹果领头的股价闪崩原因可能比想象中的更为复杂"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0223.wav", "duration": 3.328, "text": "稳定增加玉米播种面积"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0330.wav", "duration": 8.906, "text": "每日经济新闻记者杨建江南嘉捷六万一千一百三十一三"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0303.wav", "duration": 4.2310625, "text": "且达到情节特别严重程度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0169.wav", "duration": 5.412, "text": "你要懂既然不是电子产品不是易损品不是玩品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0375.wav", "duration": 8.1540625, "text": "中国和多米尼加同积九分排在第四和第五位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0265.wav", "duration": 6.801, "text": "在苹果发布靓丽的第四财季业绩报告后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0140.wav", "duration": 6.881, "text": "全国房地产开发投资增速仍然延续了增速放缓的渠势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0293.wav", "duration": 5.8200625, "text": "老毕于跟苹果押注太阳能一文问过大家"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0337.wav", "duration": 5.1240625, "text": "根据国际非电离辐射防护委员会制定的标准"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0336.wav", "duration": 5.2539375, "text": "在无开灯照明的情况下也能正常稳定运行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0359.wav", "duration": 5.443875, "text": "今天作为队长我更多是在精神层面上提醒大家"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0419.wav", "duration": 4.7900625, "text": "阮经天和许玮甯交往八年屡传婚讯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0153.wav", "duration": 4.701, "text": "调整公积金年度缴存上下限和缴存比例"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0472.wav", "duration": 8.673125, "text": "游戏网站频遭攻击每周交二零零零元保护费息事宁人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0308.wav", "duration": 6.0019375, "text": "中国的中高端嵌入式芯片全部从德国日本进口"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0377.wav", "duration": 4.536125, "text": "日本网友也是众说纷纭一点儿也不吃惊"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0468.wav", "duration": 3.521, "text": "图为其中一名被解救的孩子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0404.wav", "duration": 8.004875, "text": "去年美国队长二寒冬战士就曾在四月登陆"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0361.wav", "duration": 5.215125, "text": "普鲁申科被诊断患上了一种新的脊椎疾病"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0254.wav", "duration": 5.5, "text": "据新华社电印度官员透露"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0463.wav", "duration": 8.1648125, "text": "湖北省荆州市安监局召开安良百货电梯事故情报通报会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0270.wav", "duration": 3.2370625, "text": "乔布斯想成为重要人物"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0315.wav", "duration": 4.7580625, "text": "由于中国政府的大力扶持"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0280.wav", "duration": 5.5, "text": "雇员们也在很大程度上受到了鼓舞"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0267.wav", "duration": 6.9460625, "text": "苹果在二零一四年营收为二百二十二亿美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0206.wav", "duration": 3.8089375, "text": "相关公司股票走势农产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0276.wav", "duration": 6.1689375, "text": "对于苹果公司来说这是很关键的一年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0129.wav", "duration": 2.5550625, "text": "服务项目几千个"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0470.wav", "duration": 2.756875, "text": "以给编制五险一金等为借口"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0306.wav", "duration": 4.011, "text": "近日的走势也强于大盘"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0153.wav", "duration": 2.5190625, "text": "同比下降不少"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0246.wav", "duration": 4.817, "text": "落实鲜活农产品运输绿化通道政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0134.wav", "duration": 4.857, "text": "再次申请公积金贷款购买第二套房的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0388.wav", "duration": 3.3198125, "text": "都无法代表韩国参加国际比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0419.wav", "duration": 6.511, "text": "被问到有传其胞兄谢霆锋将与王菲结婚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0466.wav", "duration": 4.938, "text": "一语回击一次性参赛这种说法是一种侮辱"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0320.wav", "duration": 4.2110625, "text": "时代力量正在颠复着家电行业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0274.wav", "duration": 5.0119375, "text": "规模超大的人才群体更是创新创造无与伦比的重要资源"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0348.wav", "duration": 3.405, "text": "在第四轮与韩国队的比赛中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0373.wav", "duration": 3.0239375, "text": "需要不停地告诫自己要淡定下来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0197.wav", "duration": 4.8239375, "text": "对丰富债券市场品种也具有积极意义"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0455.wav", "duration": 6.619875, "text": "以一一零倍的杠杆吸引社会公众投资"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0442.wav", "duration": 6.119875, "text": "李嘉诚正式回应撤资指控不相信文革式思维复苏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0155.wav", "duration": 5.6780625, "text": "各方原因的叠加导致了房企拿地量的明显减少"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0343.wav", "duration": 5.1689375, "text": "本场比赛朱婷三七次扣球得到二十一分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0414.wav", "duration": 7.447, "text": "搜狐娱乐讯陈妍希传出和陈晓的恋情之后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0155.wav", "duration": 4.02, "text": "对房地产市场的心理影响比较大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0318.wav", "duration": 4.844, "text": "而去年同期盈利十六点七六亿港元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0201.wav", "duration": 9.324, "text": "国务院已经批准信贷资产证券化继续扩大试点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0174.wav", "duration": 3.72, "text": "会对市场造成新一轮的干扰"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0389.wav", "duration": 5.563, "text": "加上近几年承办诸多国际性赛事的经验积累"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0129.wav", "duration": 3.9449375, "text": "叠加春节因素的影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0339.wav", "duration": 2.796875, "text": "对阵俄罗斯的比赛中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0462.wav", "duration": 6.5, "text": "从二八日凌晨四点半至六点半这整整二个小时里"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0390.wav", "duration": 5.76975, "text": "更直观的体现是在冰雪运动的核心项目冰球上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0131.wav", "duration": 3.7049375, "text": "这些房产全由宋芳自己打理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0156.wav", "duration": 4.156, "text": "还是不再区分普通和非普通住房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0388.wav", "duration": 5.406, "text": "让我们能够来一次说走就走的冬奥之行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0268.wav", "duration": 3.3030625, "text": "它依旧要面对政府的刁难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0263.wav", "duration": 3.7430625, "text": "避免不了出现一些漏洞"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0457.wav", "duration": 6.271, "text": "湖北咬人电梯厂家曾为盖板支架申请专利"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0204.wav", "duration": 3.3139375, "text": "组织实施一批重大工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0233.wav", "duration": 6.175875, "text": "全面取消主产区粮食风险基金地方资金配套"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0316.wav", "duration": 7.057, "text": "在成名三十馀年后仍在竭力寻求业态的新鲜化和可能性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0221.wav", "duration": 6.766, "text": "有利于加快完善基础设施和投资环境"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0490.wav", "duration": 6.177, "text": "渔民投诉遭离奇执法被派出所讨价还价式罚款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0213.wav", "duration": 6.665875, "text": "鼓励外出务工农农民带技术带资金回乡创业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0332.wav", "duration": 9.056875, "text": "除了在顺德工厂建成全自动遥控器生产线外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0261.wav", "duration": 3.74, "text": "他们很快提供了修复软件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0206.wav", "duration": 5.0710625, "text": "丰富和解调解仲裁诉诉讼等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0477.wav", "duration": 6.083, "text": "参考消息网九月二五日报道港媒称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0192.wav", "duration": 4.114, "text": "但禁止改变用途和性质"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0412.wav", "duration": 2.469, "text": "后来突然冒出头来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0284.wav", "duration": 4.3189375, "text": "原创张驰乔布斯逝世已久"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0294.wav", "duration": 7.0698125, "text": "苹果背后那行字应该在每个中国人心里搜狐科技"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0276.wav", "duration": 4.668, "text": "双目标不仅包括保持中高速增长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0487.wav", "duration": 8.012, "text": "村民为解决问题给领导建庙官员其诉求不合规"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0137.wav", "duration": 5.347, "text": "改进住房公积金提取使用监管机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0197.wav", "duration": 4.4260625, "text": "大力发展现代农作物种业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0326.wav", "duration": 5.4250625, "text": "宽带和服务器的采购量也水涨船高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0224.wav", "duration": 3.8010625, "text": "积极恢复和稳定大豆种植面积"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0168.wav", "duration": 6.9349375, "text": "领头羊一线城市分别下降百分之一和百分之七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0198.wav", "duration": 3.598, "text": "起到了非常积极的作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0320.wav", "duration": 4.739, "text": "成飞集成的锂电池业务在前两年情况并不好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0480.wav", "duration": 4.5070625, "text": "在严查四风的高压态势下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0465.wav", "duration": 4.7839375, "text": "数十名市民赶到越秀区一酒家维权"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0374.wav", "duration": 6.379875, "text": "多国大神级搏击王者论剑昆仑武道之巅"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0370.wav", "duration": 5.0910625, "text": "电子科大的小青椒早上六点起床"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0421.wav", "duration": 3.396, "text": "她说之前打电话给医生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0361.wav", "duration": 3.3730625, "text": "朱婷斩获了一六七分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0439.wav", "duration": 3.061, "text": "该事件引发广泛关注"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0388.wav", "duration": 5.36, "text": "女排三零阿根廷朱婷复出扣杀状态神勇"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0354.wav", "duration": 3.9150625, "text": "还有二零一五年的田径世锦赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0310.wav", "duration": 4.116, "text": "围绕几大智能管家平台"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0358.wav", "duration": 4.201875, "text": "脚踝的能力损失了大约百分之四十八"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0355.wav", "duration": 3.906, "text": "他每周二三天来学校"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0429.wav", "duration": 2.650875, "text": "谢霆锋戴着帽子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0318.wav", "duration": 3.626, "text": "手机是直接贴着耳朵使用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0137.wav", "duration": 5.658, "text": "公积金贷款最高额度亦不同程度上调"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0133.wav", "duration": 6.0740625, "text": "建议房企不要一味强调做大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0445.wav", "duration": 3.8139375, "text": "吸引众多市民驻足观看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0483.wav", "duration": 7.828875, "text": "游客被黑导游拉进农家宴消费蘑菇炖鸡卖九零零元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0352.wav", "duration": 6.251, "text": "北京市体育局副局长孙学才宣布比赛开幕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0430.wav", "duration": 5.5600625, "text": "因而痛斩情丝她除了拥有模特儿火辣身材"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0148.wav", "duration": 3.46, "text": "由国土资源部联合国家"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0166.wav", "duration": 3.8119375, "text": "七月北京公积金贷款成交量提升了百分之五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0330.wav", "duration": 4.4309375, "text": "家电企业自动化升级改造必须进行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0243.wav", "duration": 3.557, "text": "治理和控制农业面源污染"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0305.wav", "duration": 7.392, "text": "紫光股份曾经出现一连波连续十六个一字涨停的狂飙行市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0298.wav", "duration": 3.067125, "text": "这行字值得我们深思"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0223.wav", "duration": 6.139, "text": "确保保障性安居工程年度建设任务的完成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0317.wav", "duration": 3.8359375, "text": "实现自动化升级也没那么简单"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0414.wav", "duration": 2.798125, "text": "不与无线续约"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0452.wav", "duration": 3.957, "text": "两车损失高达三四十万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0366.wav", "duration": 5.375, "text": "每支报名队伍以企业为单位每队十名成员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0438.wav", "duration": 3.233875, "text": "火灾造成四人死亡一人受伤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0339.wav", "duration": 6.3618125, "text": "三千米障碍吉萨费里欣塔斯卡鲁塞"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0424.wav", "duration": 8.6008125, "text": "搜狐娱乐讯近日频频传出陈晓向陈妍希求婚成功的消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0393.wav", "duration": 3.2900625, "text": "将去年输球的原因作为教训反思"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0230.wav", "duration": 7.1899375, "text": "国务院总理温家宝五日主持召开国务院常务会议"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0218.wav", "duration": 6.848, "text": "城投债劵作为投融资平台公司最透明的直接融资工具"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0204.wav", "duration": 4.0660625, "text": "农业生产条件具有良好基础"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0424.wav", "duration": 4.5180625, "text": "希望送上歌曲今日为受害者打气"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0187.wav", "duration": 3.6270625, "text": "示范带动周边地区发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0283.wav", "duration": 5.3510625, "text": "是对贸易救济措施的滥用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0162.wav", "duration": 3.767, "text": "没有智慧手机的成员无法开门"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0153.wav", "duration": 7.061, "text": "大开发商有机会借此提高行业集中程度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0307.wav", "duration": 6.198, "text": "美芝压缩机已是全球最大空调压缩机企业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0217.wav", "duration": 3.0590625, "text": "营造良好的消费环境"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0341.wav", "duration": 3.708, "text": "阿拉木图都无法和北京相比"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0176.wav", "duration": 5.77, "text": "他不能按电子产品或传统居家产品的模式去销售"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0401.wav", "duration": 3.437, "text": "为参加联赛的吸引力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0201.wav", "duration": 3.8310625, "text": "农产品流通加工标准化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0488.wav", "duration": 6.614, "text": "港媒中式教学不可复制中国学生在哪都能拿高分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0311.wav", "duration": 4.1469375, "text": "截至中国经营报记者发稿前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0267.wav", "duration": 3.3469375, "text": "苹果设备的用户应当注意"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0452.wav", "duration": 5.431875, "text": "但指纹比对识别系统会出现一定概率的遗漏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0249.wav", "duration": 8.7320625, "text": "合理确定耐贮蔬菜的流通动态库存数量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0430.wav", "duration": 3.242875, "text": "一家人很难有机会团聚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0272.wav", "duration": 3.0, "text": "按照国内消费者的习惯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0287.wav", "duration": 3.5559375, "text": "苹果在高端市场击溃了对手"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0437.wav", "duration": 4.3220625, "text": "个人寄快递必须登记有效的身份证件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0460.wav", "duration": 5.3288125, "text": "目前李斯达被关押在朝阳区看守所"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0335.wav", "duration": 4.6679375, "text": "中国电力科学研究院高级工程师邬雄表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0220.wav", "duration": 6.196875, "text": "中国证券报面对市场对城投债券风险的担忧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0295.wav", "duration": 3.150875, "text": "而库克若真有此意"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0292.wav", "duration": 4.6599375, "text": "对于游戏这种地域属性较重的产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0335.wav", "duration": 6.594, "text": "随着国家在科技创新方面的投入和关注度的增加"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0425.wav", "duration": 3.609125, "text": "一怒之下把大叔身份证扔在地上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0490.wav", "duration": 4.673125, "text": "内江人张先生在这次国庆期间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0423.wav", "duration": 2.563, "text": "但不至于要吃药"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0286.wav", "duration": 5.8619375, "text": "印度斯坦时报二十四日援引消息人士的话报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0190.wav", "duration": 5.832, "text": "按照总量持续增长比例稳步提高的要求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0130.wav", "duration": 4.6339375, "text": "这种情况在二月可能较明显"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0166.wav", "duration": 8.0, "text": "将生活社区与科技园区两种空间组织融合"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0163.wav", "duration": 3.232, "text": "从我们遇到的客户来看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0243.wav", "duration": 3.76, "text": "由各省区市人民政府决定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0216.wav", "duration": 4.0689375, "text": "坚持用现代物质条件装备农业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0324.wav", "duration": 4.8840625, "text": "要跟上互联网发展的步伐不太容易"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0146.wav", "duration": 6.286, "text": "房地产的投资增速目前不到五百分之"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0286.wav", "duration": 4.458, "text": "而且以喜欢点评各家公司着称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0430.wav", "duration": 2.7099375, "text": "嘟嘴作亲吻状"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0153.wav", "duration": 8.832, "text": "近郊小户型楼盘及城区部分公房社区客户咨询量上升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0157.wav", "duration": 5.751, "text": "对于实施住房限购政策的城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0171.wav", "duration": 4.4049375, "text": "在宋芳的资金信托购买其房产时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0472.wav", "duration": 4.0590625, "text": "却为了发电断了灌溉农田的水"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0289.wav", "duration": 5.7370625, "text": "却完全不足以彰显编制机构与时并进"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0374.wav", "duration": 3.355, "text": "腿长足足十二厘米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0305.wav", "duration": 8.6630625, "text": "这个在美的空调的南沙工厂武汉工厂已全面试点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0258.wav", "duration": 8.012, "text": "二零一五年最适宜供职的公司仍在科技领域"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0258.wav", "duration": 4.89, "text": "安全性的提升需要牺牲一定的便携性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0452.wav", "duration": 4.0790625, "text": "让一零月的天空有点甜蜜蜜的味道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0236.wav", "duration": 8.5920625, "text": "扩大草原生态保护面源污染防控生态奖补范围和规模"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0301.wav", "duration": 9.1180625, "text": "但新贵移动支付具绝对能更深层次地改变用户的生活"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0231.wav", "duration": 5.068, "text": "国务院高度重视防范地方政府债务风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0245.wav", "duration": 5.9869375, "text": "完善市场监测预警和信息发布机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0204.wav", "duration": 9.2530625, "text": "进一步完善农业产业损害监测预警机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0156.wav", "duration": 5.747, "text": "预计还有其他城市将发布同类型松绑政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0483.wav", "duration": 5.715125, "text": "南海的渔民在捕鱼的时候就曾捞出过一个奇怪的东西"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0316.wav", "duration": 3.6689375, "text": "这将会导致行车安全问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0147.wav", "duration": 4.471, "text": "市场上就出现了各类新型技术软件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0342.wav", "duration": 4.2949375, "text": "却可以演绎出撼人心魄的体育大美"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0477.wav", "duration": 5.583, "text": "董某某所受损伤程度属二重伤二级"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0223.wav", "duration": 3.365, "text": "城投债作为一个信用产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0264.wav", "duration": 4.629, "text": "最基本的逻辑就是我们不读取信息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0495.wav", "duration": 3.5649375, "text": "被称为二零一五年第一神曲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0180.wav", "duration": 3.5, "text": "其成立需具备哪些条件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0127.wav", "duration": 4.798, "text": "普通住宅很可能仍将限购"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0415.wav", "duration": 2.4860625, "text": "称为了演好戏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0251.wav", "duration": 8.5610625, "text": "鼓励优先类支持允许类天然气利用项目发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0313.wav", "duration": 7.257125, "text": "国家信息安全的问题被推到了风口浪尖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0207.wav", "duration": 5.2900625, "text": "占非金融企业直接债务融资总额之比"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0442.wav", "duration": 5.7729375, "text": "消费者根本很难判断什么叫做不合理低价"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0345.wav", "duration": 3.803, "text": "对于这场比赛的备战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0390.wav", "duration": 3.699, "text": "废除这个第五条第六项"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0373.wav", "duration": 6.488, "text": "这一项目将为神农架林区的孩子筹建开放式体育空间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0139.wav", "duration": 3.331, "text": "国家统计局的数据显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0158.wav", "duration": 5.8990625, "text": "境外个人购房应当符合当地政策规定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0423.wav", "duration": 5.927, "text": "又透露去年曾在天津举办演唱会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0290.wav", "duration": 2.9339375, "text": "长期处在产业链的末端"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0195.wav", "duration": 4.5630625, "text": "国务院及五部门并没有明确实施时间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0232.wav", "duration": 4.093, "text": "核电重启的曙光越来越近"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0284.wav", "duration": 3.298, "text": "微芯片科技公司表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0346.wav", "duration": 5.400875, "text": "作为有史以来天赋最高的花样滑冰运动员之一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0121.wav", "duration": 3.174, "text": "实现数字化整合营销"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0383.wav", "duration": 5.296125, "text": "一万米阿尔恩加比乌斯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0284.wav", "duration": 3.6010625, "text": "不断提高技术创新对经济发展的贡献率"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0376.wav", "duration": 5.457, "text": "我国选手才实现了冬奥奖牌零的突破"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0291.wav", "duration": 4.38, "text": "期待着越来越多中国设计的产品不断涌现并享誉国际"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0417.wav", "duration": 4.953125, "text": "背后意义竟只是不要忘记自己从哪里来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0471.wav", "duration": 8.297875, "text": "奉化江口儒江村村委会却带头盖起了违法建筑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0247.wav", "duration": 5.0959375, "text": "有关部门和企业迅速组织整改"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0268.wav", "duration": 6.0550625, "text": "这些被市场唱空的游戏公司本身业务模式遇到了困境"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0412.wav", "duration": 4.594, "text": "搜狐娱乐讯十月九日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0322.wav", "duration": 4.77, "text": "以后将能够与周围环境交流"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0200.wav", "duration": 5.491, "text": "结合地方政府债务管理制度的完善"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0410.wav", "duration": 3.212125, "text": "对于姊弟恋也不排斥"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0348.wav", "duration": 4.1291875, "text": "开幕式举行了庄严的入场仪式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0205.wav", "duration": 6.5809375, "text": "全面分实现代农业发展的物质基础"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0405.wav", "duration": 6.2468125, "text": "但最终却因为出品公司相对论影业申请破产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0436.wav", "duration": 4.8449375, "text": "湖北省黄冈市公安局通报称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0162.wav", "duration": 8.5, "text": "二的向境外投资方出售国内资产征税规定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0214.wav", "duration": 6.4499375, "text": "将公共交通放在城市交通发展的首要位置"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0263.wav", "duration": 3.97, "text": "不过这话他在去年就说过"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0247.wav", "duration": 5.6589375, "text": "债卷市场城投债卷发行不畅"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0348.wav", "duration": 4.73, "text": "对于综合能力的严苛要求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0417.wav", "duration": 5.8151875, "text": "不开心时会找太太徐濠所倾诉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0342.wav", "duration": 4.208, "text": "也是我喜欢的格斗方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0188.wav", "duration": 5.257, "text": "督促责任单位彻底排查溢油风险点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0368.wav", "duration": 2.6389375, "text": "搜狐体育郭健文"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0446.wav", "duration": 3.7880625, "text": "用支付宝扫一下就能付款"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0320.wav", "duration": 6.0710625, "text": "较上年同期增长八十四点百分之三十九"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0459.wav", "duration": 3.327125, "text": "带着辛吉斯逛完了黄鹤楼"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0136.wav", "duration": 8.1439375, "text": "未来房企拿地投资新开工等指标可能受到影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0129.wav", "duration": 3.461, "text": "同比去年增长五成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0154.wav", "duration": 4.932, "text": "在对央企的审计也发现了不少问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0317.wav", "duration": 3.9449375, "text": "目前美芝与威灵的合并"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0131.wav", "duration": 8.223, "text": "国管住房公积金中心则表示取消担保服务费"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0371.wav", "duration": 4.501, "text": "是去年备战亚运会选拔赛期间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0426.wav", "duration": 10.823, "text": "曾江谢贤四哥及胡枫修哥大谈往日情时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0427.wav", "duration": 4.7900625, "text": "不同于大家心中按部就班的乖乖女形象"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0467.wav", "duration": 10.5649375, "text": "村妇将一零万元现金埋地底四年多已腐烂成碎块"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0204.wav", "duration": 5.9030625, "text": "需要为各地的城市建设提供规范的融资渠道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0356.wav", "duration": 3.7629375, "text": "而这一次击败他的不是对手"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0493.wav", "duration": 3.4648125, "text": "公司却遇到了资金困难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0145.wav", "duration": 4.772, "text": "一直以来广受购房者青睐"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0402.wav", "duration": 3.5080625, "text": "为中国战队打响第一枪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0311.wav", "duration": 5.8408125, "text": "正规厂家生产的电话手表辐射一般符合国家标准"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0332.wav", "duration": 4.4670625, "text": "随着产品快速进入家长和孩童的视野"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0214.wav", "duration": 5.3609375, "text": "要继续开展商贸零售领域价格秩序整治"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0427.wav", "duration": 5.5500625, "text": "中新网五月二十一日报道据香港明报消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0305.wav", "duration": 5.751, "text": "每日经济新闻记者从美的家用空调事业部了解到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0359.wav", "duration": 3.3730625, "text": "播求头部的伤口进一步扩大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0482.wav", "duration": 4.3059375, "text": "四人鞠躬道歉据瓜沥人网"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0423.wav", "duration": 5.313, "text": "有网友日前目击他俩在大稻埕分食炒饭"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0226.wav", "duration": 3.9450625, "text": "切实加强央企境外投资监管"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0250.wav", "duration": 4.4050625, "text": "增强农业科技自主创新能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0443.wav", "duration": 4.78, "text": "小区外的空置地上填满垃圾近日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0360.wav", "duration": 4.8459375, "text": "让他们能在工作之馀释放对于体育的热情"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0301.wav", "duration": 5.188, "text": "根据近期公布的苹果第三财季业业绩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0214.wav", "duration": 5.2930625, "text": "特别是地方投融资平台公司形成的债务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0241.wav", "duration": 4.803, "text": "难以满足发行城投债券的资格和条件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0239.wav", "duration": 3.87, "text": "完善流通链条和市场布局"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0305.wav", "duration": 4.645, "text": "在前段时间的上海家电展上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0188.wav", "duration": 5.3410625, "text": "我们立即与云投集团进行了沟通"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0468.wav", "duration": 3.620875, "text": "没有发生任何肢体冲突"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0178.wav", "duration": 6.151, "text": "稳增长措施需更全面地考虑化解楼市风险问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0332.wav", "duration": 3.8889375, "text": "除了后期技术维护能力外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0481.wav", "duration": 5.4399375, "text": "参考消息网八月二日报道外媒称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0415.wav", "duration": 5.229, "text": "搜狐娱乐讯据香港明晚九月十日报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0445.wav", "duration": 3.267125, "text": "车辆载有数十名乘客"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0121.wav", "duration": 2.922, "text": "从房地产的角度来看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0140.wav", "duration": 4.273, "text": "住建部等三部委再次联合发"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0140.wav", "duration": 4.057, "text": "包括五个一二线城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0381.wav", "duration": 4.4409375, "text": "在二零二二年冬季奥运会的竞选当中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0145.wav", "duration": 5.397, "text": "主要目的是通过激励改善型住房需求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0289.wav", "duration": 5.457, "text": "二零零三年以来在阿富汗得到了广泛应用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0455.wav", "duration": 4.775875, "text": "视频截图新京报快讯记者杨锋昨日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0281.wav", "duration": 3.891, "text": "中方对此表示强烈不满"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0150.wav", "duration": 4.147, "text": "比去年底增加了七万平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0303.wav", "duration": 4.713125, "text": "今后所有空调产品还将实现联机运行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0154.wav", "duration": 3.625, "text": "设立住房银行好处多多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0428.wav", "duration": 4.208, "text": "结婚都只是一张纸同戒指"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0201.wav", "duration": 4.272, "text": "现代农业发展的动力更加强劲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0457.wav", "duration": 3.5, "text": "网上流传的视频可见"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0372.wav", "duration": 3.3398125, "text": "目前报名仍在进行中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0161.wav", "duration": 5.6440625, "text": "为促进房地产市场平稳健康发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0264.wav", "duration": 7.725125, "text": "而且在整个榜单也位居首位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0360.wav", "duration": 6.110125, "text": "几乎全部被鲜血复盖的半边身体令人触目惊心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0387.wav", "duration": 3.55325, "text": "作为经验最为丰富的老大哥"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0439.wav", "duration": 3.732875, "text": "涉案金额三零零多万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0458.wav", "duration": 6.1760625, "text": "高招本科二批今天开始进行征集志愿录取"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0131.wav", "duration": 5.229, "text": "增速比一月份回落零点九个百分点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0480.wav", "duration": 3.926, "text": "凶手在郫县安靖镇被抓"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0276.wav", "duration": 4.4930625, "text": "但相对于传统的汽车制造工业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0340.wav", "duration": 4.473125, "text": "在张常宁一度进行进攻受阻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0478.wav", "duration": 4.119125, "text": "四川广安一一岁女孩的失踪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0489.wav", "duration": 8.2890625, "text": "释放出中央执纪必严紧抓不放的强烈信号"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0319.wav", "duration": 3.108, "text": "锂电需求带动业绩增长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0238.wav", "duration": 4.946875, "text": "考虑到我国正处在经济快速增长期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0332.wav", "duration": 3.604, "text": "为使股价与公司价值匹配"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0326.wav", "duration": 5.496125, "text": "除了之前提到的关于辐射的测试报告外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0134.wav", "duration": 5.0, "text": "设立政策性住宅金融机构"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0466.wav", "duration": 3.391125, "text": "还卖了自己在杭州和乐清的房子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0411.wav", "duration": 3.093, "text": "很多演员都非常棒"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0156.wav", "duration": 4.199, "text": "潘家村地块体量较小"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0486.wav", "duration": 5.640875, "text": "经国家安全部门会同有关技术权威部门鉴定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0141.wav", "duration": 4.235, "text": "美丽北京大型绿色公益品牌项目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0360.wav", "duration": 4.251, "text": "正是治疗他心悸不适症状的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0468.wav", "duration": 3.26, "text": "面对第一财经日报记者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0443.wav", "duration": 3.1699375, "text": "买菜用支付宝扫码付钱"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0252.wav", "duration": 5.307, "text": "必须从我国国情和农业发展实际出发"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0219.wav", "duration": 8.537, "text": "加快大中型灌区排灌泵站配套改造"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0389.wav", "duration": 3.0920625, "text": "就此事征求她的意见"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0451.wav", "duration": 4.1909375, "text": "天龙座流星雨猎户座流星雨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0415.wav", "duration": 3.2219375, "text": "并称攀岩太难会晃"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0360.wav", "duration": 4.2680625, "text": "其实在二零一四年女排大奖赛的总决赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0395.wav", "duration": 6.793, "text": "二零千米竞走尼尔斯布莱姆巴号"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0239.wav", "duration": 4.708, "text": "提高化学品生产的环境准入门槛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0191.wav", "duration": 7.8720625, "text": "完善生猪棉花食糖边销茶等调控预案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0147.wav", "duration": 5.091, "text": "尽管全国商品房销售面积持续回升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0361.wav", "duration": 5.5021875, "text": "双方的肘击对轰场面接连上演"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0397.wav", "duration": 3.0349375, "text": "自言就应该去承担更多的任务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0311.wav", "duration": 3.7900625, "text": "电话手表就相当于一部简化的智能手机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0304.wav", "duration": 4.0119375, "text": "儿童电话手表还推出了其他更多人性化的创新功能"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0235.wav", "duration": 5.6889375, "text": "建设部级水产品质量安全研究中心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0217.wav", "duration": 3.427, "text": "大规模改造中低产田"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0285.wav", "duration": 5.5910625, "text": "苹果晋身道指固属众望所归"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0323.wav", "duration": 9.5849375, "text": "车企诚待转化互联网思维以及加强互联网安全管控等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0353.wav", "duration": 3.533, "text": "全都是手术缝合的痕迹"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0421.wav", "duration": 2.743875, "text": "虽然未知去向"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0421.wav", "duration": 4.369875, "text": "陈冠希坦言认为陈奕迅是k歌之王"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0263.wav", "duration": 3.5, "text": "是威力巨大的定时炸弹"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0287.wav", "duration": 3.078125, "text": "苹果能否第三期发育"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0156.wav", "duration": 3.643, "text": "当供给远快于需求时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0306.wav", "duration": 5.0031875, "text": "事业部制一直是美的快速成长的法宝"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0219.wav", "duration": 4.3139375, "text": "随着我国资本市场的进一步发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0389.wav", "duration": 5.8269375, "text": "义不容辞地想拯救运动生涯在绝境中的朴泰桓"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0158.wav", "duration": 3.904, "text": "房企促销力度也在加大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0329.wav", "duration": 4.897, "text": "获取到的通讯录近两千万条"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0147.wav", "duration": 3.7360625, "text": "进一步加速了消费者的入市节奏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0396.wav", "duration": 3.1711875, "text": "二零一五年八月十五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0187.wav", "duration": 5.04, "text": "但是却不在国家文件所指的收费公路范围内"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0165.wav", "duration": 4.5229375, "text": "房价不太可能强劲反弹"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0450.wav", "duration": 5.907, "text": "深圳警方查获的一个地下钱庄窝点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0137.wav", "duration": 3.3660625, "text": "此番公积金政策调整"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0471.wav", "duration": 7.8610625, "text": "大众网河南游客爆料在日照旅游团因吃海鲜太少被围殴"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0306.wav", "duration": 4.1689375, "text": "自动化制造是未来唯一的出路"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0146.wav", "duration": 10.78, "text": "按新用途新权利类型市场价办理用地手续"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0392.wav", "duration": 3.5, "text": "她进攻的变化逐渐多了起来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0219.wav", "duration": 8.8059375, "text": "促进城市内外交通便利衔接和城乡公共交通一体化发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0169.wav", "duration": 3.9800625, "text": "将有效缓解购房能力不足矛盾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0312.wav", "duration": 5.884, "text": "将成立压缩机开发研究院和微电机开发研究院"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0384.wav", "duration": 4.3579375, "text": "冰雪爱好者不得不选择出国"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0389.wav", "duration": 3.1369375, "text": "对于这个万众期待的消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0447.wav", "duration": 2.636, "text": "踩一下就掉下来了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0218.wav", "duration": 4.2729375, "text": "从事当地基础建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0202.wav", "duration": 7.272, "text": "禁止在可能造成生态严重失衡的地方进行围填海活动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0212.wav", "duration": 5.266125, "text": "加强农田水利和高标准农田建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0244.wav", "duration": 3.6789375, "text": "培育门类丰富层次齐用的综合利用产业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0157.wav", "duration": 5.768, "text": "一百平均单套总价约一百万元左右"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0155.wav", "duration": 3.812, "text": "将公积金贷款利率下调"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0280.wav", "duration": 5.2270625, "text": "就在会场的凳子和垃圾尚未收拾干净的时候"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0260.wav", "duration": 3.557, "text": "苹果市盈率仅一五倍"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0306.wav", "duration": 6.406, "text": "对生活中的电磁辐射进行了全面健康风险评估"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0185.wav", "duration": 4.827, "text": "现在公积金贷款办理需要一个月左右的时间"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0311.wav", "duration": 4.375, "text": "如何借力拥抱互联网加这一全新变量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0148.wav", "duration": 3.446, "text": "但房企调价幅度有限"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0322.wav", "duration": 6.4460625, "text": "而不少品牌的电话手表量销售量更是突破百万大关"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0179.wav", "duration": 4.942, "text": "促成了今年北京土地市场的走高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0196.wav", "duration": 4.598, "text": "从您刚才的介绍中我们了解到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0359.wav", "duration": 3.1850625, "text": "仰泳选手在比赛中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0424.wav", "duration": 3.546875, "text": "搜狐娱乐讯九月五日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0147.wav", "duration": 3.529, "text": "但您和您的儿女能自由支配"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0394.wav", "duration": 7.5390625, "text": "此时的祖耶夫右眼已经肿胀得完全封闭"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0483.wav", "duration": 4.1020625, "text": "但愿望总是照不进现实"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0267.wav", "duration": 5.8400625, "text": "苹果的拿手好戏是把市场上原霸主拉下马"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0309.wav", "duration": 5.26, "text": "美的将美芝压缩机威灵电机合并"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0376.wav", "duration": 5.322, "text": "在世锦赛决赛检录前突感不适"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0269.wav", "duration": 5.6030625, "text": "不要在弹出窗口点击安装打开应用时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0324.wav", "duration": 5.01, "text": "他们需要的是智能厨房智能家居与家电"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0181.wav", "duration": 4.864, "text": "预计明年全国土地市场仍难复苏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0167.wav", "duration": 4.632, "text": "十位网友参与了本次调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0346.wav", "duration": 6.7569375, "text": "跑友们在奔跑中国沈阳站的赛道上尽情的展示自己"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0179.wav", "duration": 4.453, "text": "促进房地产市场平稳健康发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0264.wav", "duration": 6.3050625, "text": "成为苹果近三个月以来股价下跌最严重的一次"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0298.wav", "duration": 5.85, "text": "避免破坏两国相关产业的贸易与合作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0326.wav", "duration": 2.932125, "text": "公司昨日发布公告称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0323.wav", "duration": 4.057125, "text": "为孩子多了一份强有力的保障"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0261.wav", "duration": 3.791, "text": "而这都是我自己的努力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0417.wav", "duration": 4.6889375, "text": "网友纷纷留言越来越像潮流教父了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0490.wav", "duration": 6.0549375, "text": "宣传的重点是中国教育和英国教育之战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0409.wav", "duration": 6.2060625, "text": "谢婷婷九月七日三十三岁生日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0321.wav", "duration": 3.913, "text": "才解决电话手表的内线内置问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0344.wav", "duration": 4.3989375, "text": "朱婷在中韩之战中一度受伤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0172.wav", "duration": 5.8139375, "text": "公积金首付的再次降低实际影响有限"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0420.wav", "duration": 6.6110625, "text": "现场他透露道近日忙于内地巡演"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0402.wav", "duration": 4.3249375, "text": "但总的来说还是高兴多于遗憾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0332.wav", "duration": 5.6020625, "text": "海信科龙和惠而浦则是营收增"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0447.wav", "duration": 4.224125, "text": "错过了这次就要到二零三三年了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0348.wav", "duration": 2.7480625, "text": "说到今天获胜的原因"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0138.wav", "duration": 6.564, "text": "而现在这类城市的房价已经很高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0348.wav", "duration": 3.478, "text": "美国队十六分排第二"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0297.wav", "duration": 3.8720625, "text": "希望美方吸取前车之鉴"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0242.wav", "duration": 9.1479375, "text": "对进一步深入检查及落实整改措施作了部署"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0362.wav", "duration": 5.062, "text": "萨维申科宣布会再坚持一个冬奥会周期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0470.wav", "duration": 4.1000625, "text": "不知不觉我成为一个八零后的老头"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0162.wav", "duration": 3.197, "text": "促使更多购房者积极入市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0475.wav", "duration": 4.503875, "text": "店主陈某头皮裂创二处"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0167.wav", "duration": 6.5, "text": "一线城市或将复苏率先复苏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0252.wav", "duration": 4.48, "text": "更好地保护债券投资人的利益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0325.wav", "duration": 3.079, "text": "对于创新成果的实证和检验"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0200.wav", "duration": 5.891, "text": "全球绿色经济低碳技术正在兴起"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0422.wav", "duration": 3.0, "text": "如此高难度的动作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0319.wav", "duration": 3.7459375, "text": "投入巨资研究经费攻关"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0128.wav", "duration": 4.946, "text": "这些地区批准建设用地二百万公顷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0181.wav", "duration": 5.4499375, "text": "记者从北京市国土局网站看到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0436.wav", "duration": 7.1699375, "text": "沙城街道七五村永安路一二五号一民房发生火灾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0478.wav", "duration": 7.2690625, "text": "湖北一七二名教师转岗当保安其中有人曾是校长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0223.wav", "duration": 3.902, "text": "加快基层农技推广体系改革和建施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0200.wav", "duration": 7.4200625, "text": "切实改变沿海地区重化工比重过大过于集中的状况"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0461.wav", "duration": 3.089125, "text": "李娜一身素色休闲装"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0298.wav", "duration": 9.0390625, "text": "包括迪斯尼耐克麦当劳梅西百货公司等巨头企业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0123.wav", "duration": 3.103, "text": "抛售三线城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0456.wav", "duration": 7.5, "text": "东莞常平一地盘两日两度地陷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0350.wav", "duration": 3.126, "text": "去年的索契冬奥会上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0462.wav", "duration": 5.021, "text": "专家排除了冰雹和飞机上落冰的两种可能"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0237.wav", "duration": 2.8680625, "text": "强化水生生态修复和建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0161.wav", "duration": 4.9930625, "text": "上海易居房地产研究院数据显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0124.wav", "duration": 6.021, "text": "土地供应往往呈现前松后紧的态势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0267.wav", "duration": 4.261, "text": "新系统可根据难易程度进行排序"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0448.wav", "duration": 6.8200625, "text": "麻丽贤等一七位志愿者将远赴非洲支教"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0122.wav", "duration": 5.143, "text": "确实降低了刚需人群购房成本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0353.wav", "duration": 3.5, "text": "既免去了不必要的花费"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0310.wav", "duration": 4.6530625, "text": "前两年锂电池行业整体处于市场培育期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0317.wav", "duration": 7.594, "text": "同比减少约百分之四十六亏损额为五百九十三二万港元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0406.wav", "duration": 6.1328125, "text": "丛林之书则将在二零一六年四月十五日登场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0238.wav", "duration": 7.321875, "text": "加快推进水稻栽插收获和玉米收获机械化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0432.wav", "duration": 3.9350625, "text": "蒙面歌王迎来初赛的收官之战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0412.wav", "duration": 4.1379375, "text": "搜狐娱乐讯据香港媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0433.wav", "duration": 3.3669375, "text": "台港警方追查一个月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0126.wav", "duration": 6.407, "text": "购买一百平方米以上非政策性住房或第二套住房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0279.wav", "duration": 5.9819375, "text": "这两家公司目前正在开发自己的移动支付系统"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0426.wav", "duration": 3.709, "text": "对于重回舞台夺下当日歌王"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0247.wav", "duration": 4.652, "text": "鼓励有条件地区率先实现农业现代化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0306.wav", "duration": 5.641, "text": "美的集团总裁方洪波提出了上述三个问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0406.wav", "duration": 5.4150625, "text": "与奥斯卡影帝本金斯利同时出现在海报中央"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0132.wav", "duration": 6.284, "text": "特别是在海外热钱有外流预期的情况下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0395.wav", "duration": 5.907125, "text": "重新以首发身份登场的朱婷迅速找回比赛的感觉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0224.wav", "duration": 2.5, "text": "制定和发布办法"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0206.wav", "duration": 5.173, "text": "各地区要对公路收费站现有车道进行全面调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0438.wav", "duration": 8.1179375, "text": "港媒评助学达人性侵女童案加强监管是关键"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0374.wav", "duration": 3.714875, "text": "离不开广大媒体的支持"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0392.wav", "duration": 5.7378125, "text": "在每次大型赛事中志愿者都是必不可少的一部分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0190.wav", "duration": 4.1900625, "text": "燃气经经营市场清理整顿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0417.wav", "duration": 5.4980625, "text": "中新网六月二十四日电六月二十三日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0456.wav", "duration": 6.553, "text": "八月三日上午一一时左右"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0456.wav", "duration": 6.0290625, "text": "杀害中传女学生犯罪嫌疑人从小家庭教育严格"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0492.wav", "duration": 5.772, "text": "温岭医院助理殴打女病人五年后提拔为副院长"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0250.wav", "duration": 6.0350625, "text": "也通过机构间的竞争促进保险资管公司的转型发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0167.wav", "duration": 2.901, "text": "贷款需求将在下个月继续释放"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0231.wav", "duration": 6.1950625, "text": "由于我国还没有建立统一的地方政府债务风险管理制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0165.wav", "duration": 4.133, "text": "将加速今年楼市成交复苏回暖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0371.wav", "duration": 5.9260625, "text": "撑杆跳选手拉斐尔霍尔泽德佩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0418.wav", "duration": 3.9189375, "text": "两人不想恋情变得高调"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0400.wav", "duration": 3.433125, "text": "比赛地的湖水比较浑浊"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0414.wav", "duration": 3.5241875, "text": "问及男友郑嘉颖会不会介意这么性感"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0254.wav", "duration": 5.9609375, "text": "谁是苹果进军汽车市场的合作伙伴收购对象"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0224.wav", "duration": 4.9560625, "text": "城投债劵的发行期限和利率"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0474.wav", "duration": 4.150875, "text": "记者从金华市公安局获悉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0203.wav", "duration": 7.3830625, "text": "丰富和解调仲裁诉等维权内容和方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0213.wav", "duration": 5.78, "text": "扶持合作社建设农产品仓储冷藏初加工等设施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0214.wav", "duration": 3.003875, "text": "城市文化和体育设施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0450.wav", "duration": 4.672125, "text": "其人工岛被指移动六七米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0459.wav", "duration": 8.714125, "text": "村民地里二六零馀棵正在挂果的梨树被连根推倒"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0332.wav", "duration": 3.735, "text": "从本年度第一份季报来看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0443.wav", "duration": 4.8681875, "text": "广东高院审理后驳回了关某的申诉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0345.wav", "duration": 3.1438125, "text": "温哥华冬奥会拿到铜牌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0305.wav", "duration": 5.5, "text": "而威灵电器七月九日下午也公告透露"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0158.wav", "duration": 8.3110625, "text": "再加上央行降息以及公积金新政等利好的叠加效应"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0314.wav", "duration": 5.7790625, "text": "部分传统的车企或许还没有注意到这点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0289.wav", "duration": 3.8460625, "text": "让当地更多的人知道这家公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0137.wav", "duration": 4.559, "text": "减免或返还土地出让收入一亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0191.wav", "duration": 5.4040625, "text": "并严格按照合规程序进行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0482.wav", "duration": 3.4970625, "text": "并向其发送银行账号"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0495.wav", "duration": 6.761, "text": "王女士与旅行社签订四天五晚的旅行合同"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0414.wav", "duration": 3.625, "text": "并做陈凯琳背后的男人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0265.wav", "duration": 4.5810625, "text": "核武器并不能征服类似美国这样的国家"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0351.wav", "duration": 2.798125, "text": "使得他们的速度变慢了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0141.wav", "duration": 3.319, "text": "设立一个单一资金信托"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0379.wav", "duration": 3.0031875, "text": "也温暖和感动着志愿者"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0450.wav", "duration": 4.2370625, "text": "起因是为了一名年轻的刘姓美女"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0378.wav", "duration": 4.6438125, "text": "湖北运动员的家长给小青椒写来致谢信"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0306.wav", "duration": 3.6689375, "text": "从而获取用户信息的案件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0195.wav", "duration": 4.156, "text": "完善农业科技评价机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0171.wav", "duration": 6.18, "text": "帮助创新创业者聚合各方面资源"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0224.wav", "duration": 3.8360625, "text": "非主业投资存在不少经营风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0174.wav", "duration": 3.541, "text": "从创业者真正的需求出发"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0414.wav", "duration": 7.0439375, "text": "刚与阮经天传出情变不久的许玮甯近日接拍恐怖片"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0316.wav", "duration": 5.5, "text": "各公司市场部都在卖场忙活"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0480.wav", "duration": 6.1130625, "text": "在许多人眼里这都是小说和电影里才会出现的情节"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0305.wav", "duration": 6.574125, "text": "这些措施在一定程度上将可防止用户数据泄露"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0479.wav", "duration": 4.4711875, "text": "不期而至的阴霾让他被迫抛下工作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0464.wav", "duration": 7.349125, "text": "村庄现两名村支书假支书无名有实村内掌权"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0376.wav", "duration": 4.037125, "text": "此消息一出迅速引发外界强烈关注"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0342.wav", "duration": 5.381, "text": "许多跑友争先恐后穿上沈阳花棉袄拍照"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0485.wav", "duration": 3.5090625, "text": "今日二二日晨凌晨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0233.wav", "duration": 3.694, "text": "相关公司股票走势农产品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0420.wav", "duration": 2.937, "text": "引发众多粉丝围堵"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0449.wav", "duration": 4.412125, "text": "目前该男子已将微博内容全部删除"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0382.wav", "duration": 2.8039375, "text": "如果输了就不太好说了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0378.wav", "duration": 5.161125, "text": "在首都国际机场受到了各界人士的欢迎"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0292.wav", "duration": 3.6210625, "text": "又一次引爆坊间议论"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0280.wav", "duration": 4.3929375, "text": "他还吐槽过乔布斯电影中的桥段"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0137.wav", "duration": 7.058, "text": "外资购房主要集中在一线城市和几个热点二线城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0332.wav", "duration": 5.2020625, "text": "小到吹风机充电器甚至接线板都会产生电磁辐射"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0239.wav", "duration": 3.4309375, "text": "加大强农惠农富农力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0211.wav", "duration": 5.2060625, "text": "科技创新和推广新应用能力不强"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0425.wav", "duration": 3.3630625, "text": "也祝福伤者早日康复"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0238.wav", "duration": 3.48, "text": "使得很多投融资平台公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0183.wav", "duration": 3.808, "text": "销售额则将维持不变"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0472.wav", "duration": 5.566875, "text": "上传读取和下载里面的信息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0309.wav", "duration": 3.7209375, "text": "如果不回答这三个课题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0240.wav", "duration": 10.52, "text": "加大对秸秆机械化还田和收集打捆机具配套的支持力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0200.wav", "duration": 3.2950625, "text": "还本付息也是正常的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0337.wav", "duration": 4.7578125, "text": "另外今年上半年个别订单的价格也比较低"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0246.wav", "duration": 5.5, "text": "严格农村工矿企业环境监管"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0284.wav", "duration": 6.0090625, "text": "明显跑输标普五百指数的一百分之九十九"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0130.wav", "duration": 7.4750625, "text": "公积金新政加速楼市库存消化至搜狐财经"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0219.wav", "duration": 4.5500625, "text": "免费期间收费员还是按照正常放行的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0448.wav", "duration": 3.6899375, "text": "他表示我没想到弄这么大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0345.wav", "duration": 7.8100625, "text": "鄂美蝶继续将自己所学到的新搏击技能尽情展现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0450.wav", "duration": 7.1159375, "text": "温州女协管员侮辱环卫工行尸走肉已辞职"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0420.wav", "duration": 4.228, "text": "打算看医生寻求纾缓方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0307.wav", "duration": 3.087, "text": "工人数量减少近一半"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0353.wav", "duration": 5.9460625, "text": "响应北京市振兴三大球战略的号召"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0212.wav", "duration": 8.110125, "text": "加强新疆黄淮海地区长江流域棉花生产基地建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0181.wav", "duration": 2.8519375, "text": "报七千亿美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0220.wav", "duration": 6.1960625, "text": "引导龙头企业向优势产区集聚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0290.wav", "duration": 3.803, "text": "苹果固然不会因此而升格"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0219.wav", "duration": 5.9179375, "text": "可以更好地体现代际公平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0140.wav", "duration": 5.1579375, "text": "本轮本轮住房公积金房贷政策调整"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0479.wav", "duration": 6.517125, "text": "村支书违法占地建加油站多部门介入处罚仍未拆"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0443.wav", "duration": 7.131125, "text": "港校两名内地生酒后街头野战当事人被起底"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0231.wav", "duration": 7.4389375, "text": "加快草原围栏棚圈和牧区水利建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0201.wav", "duration": 3.9930625, "text": "严格控制新上石化项目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0371.wav", "duration": 2.312, "text": "谈及当队长的责任感"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0411.wav", "duration": 5.557875, "text": "陈冠希开始一直把镜头对着帽子上的皮卡丘"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0187.wav", "duration": 9.7330625, "text": "徐林发债企业在债劵存续期内进行资产转移"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0209.wav", "duration": 5.797, "text": "积极推动建立城乡要素平等交换关系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0445.wav", "duration": 3.6169375, "text": "薛孝文还在给学生上课"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0440.wav", "duration": 9.7270625, "text": "游客参与不合理低价游也将受到受处难执行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0475.wav", "duration": 6.5539375, "text": "湖北一中学教师体罚学生致重伤被判刑三年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0343.wav", "duration": 5.422125, "text": "三十三岁的大滨芳美在面对强大的火力下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0242.wav", "duration": 3.4299375, "text": "扶持农机服务组织发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0343.wav", "duration": 5.6550625, "text": "以及未来几年更多志愿经历"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0464.wav", "duration": 4.9028125, "text": "六三岁的李银河拿着钥匙袋走了进来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0134.wav", "duration": 5.562, "text": "一些地方和单位少支付补偿一亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0364.wav", "duration": 4.8940625, "text": "北京申办冬奥影响远超承办本身"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0199.wav", "duration": 5.479, "text": "引导龙头企业采取兼并重组参股收购等方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0152.wav", "duration": 4.576, "text": "必须具有高度习惯融合性和耐用性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0333.wav", "duration": 3.427, "text": "其实儿童电话手表的火"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0302.wav", "duration": 5.437, "text": "乃至颠复现有的经济形态和支付格局"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0187.wav", "duration": 6.0, "text": "及时发现产业发展中的倾向性苗头性问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0205.wav", "duration": 5.6609375, "text": "我国还处于城市化快速发展期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0437.wav", "duration": 6.298125, "text": "杀人犯出狱后喊冤被驳回供述与鉴定相印证"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0208.wav", "duration": 3.7650625, "text": "有力地支持了中小企业的发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0361.wav", "duration": 5.8559375, "text": "经过网络测试综合面试专业技能体能测试等环节"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0213.wav", "duration": 2.75, "text": "薛之谦的歌儿很棒"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0451.wav", "duration": 4.0029375, "text": "这个意外可能进一步影响工期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0185.wav", "duration": 4.2000625, "text": "以及前几次公积金新政的实施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0361.wav", "duration": 3.4719375, "text": "也第一次被媒体关注"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0179.wav", "duration": 3.8929375, "text": "房价继续下行的可能性仍然比较大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0167.wav", "duration": 4.3139375, "text": "取消外商投资房地产企业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0414.wav", "duration": 3.885, "text": "诞下很像天华的小宝贝"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0176.wav", "duration": 2.735, "text": "人民币中间价"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0353.wav", "duration": 4.3149375, "text": "反超张常宁成为中国队的得分王"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0144.wav", "duration": 4.272, "text": "此次公积金政策大力度调整"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0290.wav", "duration": 3.4399375, "text": "在韩国股市低迷情况下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0174.wav", "duration": 3.369, "text": "产品的升级速度一定加快"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0158.wav", "duration": 3.179, "text": "按公司持有房产计税"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0305.wav", "duration": 5.0651875, "text": "美的摆稳棋局过冬搜狐科技"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0376.wav", "duration": 8.099125, "text": "今天中国队将迎战第一阶段的最后一个对手秘鲁队"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0447.wav", "duration": 7.1010625, "text": "湖北吃人同型号电梯全国四六四八部分布三一省市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0494.wav", "duration": 6.166, "text": "此关于滕灵方此后晋升为副院长一事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0450.wav", "duration": 6.5, "text": "崔先生带家人随团前往泰国晋吉岛游玩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0416.wav", "duration": 6.035875, "text": "中新网七月二十八日电据香港明报消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0136.wav", "duration": 4.721, "text": "随着广州住房公积金贷款政策的调整实施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0132.wav", "duration": 5.281, "text": "汇率较大概率维持双向"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0208.wav", "duration": 5.5710625, "text": "城投债券也适应了发行人和投资人的需要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0342.wav", "duration": 3.6700625, "text": "赛后主攻手朱婷对记者说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0149.wav", "duration": 4.4649375, "text": "组建国家住房银行分行和支行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0378.wav", "duration": 3.441875, "text": "便将对手的眼部击伤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0412.wav", "duration": 2.2949375, "text": "只不过好景不常"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0231.wav", "duration": 7.183, "text": "建设四级农作物病虫疫情监测防控体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0245.wav", "duration": 3.8050625, "text": "提高防汛抗旱减灾能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0159.wav", "duration": 3.163, "text": "完善宏观调控机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0433.wav", "duration": 3.3779375, "text": "再次吸引了众人的目光"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0367.wav", "duration": 3.2120625, "text": "好在队友们相互弥补得非常出色"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0487.wav", "duration": 5.151125, "text": "进一步加大舆论监督力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0152.wav", "duration": 4.467, "text": "为了购买自己想要传承给子女的房产"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0220.wav", "duration": 6.9919375, "text": "克服当期建设资金不足的瓶颈制约"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0295.wav", "duration": 5.822, "text": "该公司于上个月简单地宣布了智能手表相关的情况"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0412.wav", "duration": 4.7219375, "text": "再度经营他的粉丝团与粉丝互动六日昨晚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0467.wav", "duration": 5.161125, "text": "有六个被送往苍南福利院"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0477.wav", "duration": 8.645, "text": "位于温州苍南龙港镇水门村的一个仓库发生火灾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0322.wav", "duration": 6.547875, "text": "三百六十软件识别出了麦德公司的插件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0402.wav", "duration": 3.0400625, "text": "提升参赛队的积极性"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0160.wav", "duration": 5.367, "text": "从而有利于抑制楼市过快上涨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0405.wav", "duration": 9.573, "text": "搜狐娱乐赛文耷子备受关注重拍版乌鸦"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0164.wav", "duration": 5.6079375, "text": "目前市场上的低价房源已基本消耗完毕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0149.wav", "duration": 5.164, "text": "不过他认为这种增幅并不算太明显"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0391.wav", "duration": 5.172125, "text": "竞争对手哈萨克斯坦在这一点上要强过我们"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0439.wav", "duration": 6.521, "text": "李嘉诚或再抛售内地地产项目拟出售上海办公楼"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0237.wav", "duration": 5.714, "text": "远低于发生债务危机的欧美国家"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0278.wav", "duration": 5.266, "text": "此款健康设备将延迟到明年推出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0205.wav", "duration": 5.9600625, "text": "农业与非农产业之间劳动生产率的差距也很大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0178.wav", "duration": 4.782, "text": "伟嘉安捷对中新网房产频道表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0204.wav", "duration": 6.214, "text": "广大农民的积极性创造性将得到进一步激发和释放"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0348.wav", "duration": 2.838875, "text": "他屡次受到伤病的困扰"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0291.wav", "duration": 5.3980625, "text": "艾维现为苹果主管设计业务的高级副总裁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0294.wav", "duration": 4.5, "text": "这样的成绩已经比二零一三年要好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0371.wav", "duration": 6.876, "text": "当时郎平率队三战全胜名列第一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0214.wav", "duration": 5.2380625, "text": "也要看到我国与欧美国家的不同之处"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0386.wav", "duration": 7.5, "text": "此次里约奥运会也将会是其第三次征战奥运会比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0148.wav", "duration": 3.49, "text": "各地公积金政策步入频繁调整期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0141.wav", "duration": 6.121, "text": "保利地产开始进军成都珠海"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0388.wav", "duration": 3.004125, "text": "他们几乎都是九零后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0130.wav", "duration": 7.09, "text": "房地产商需要解决毛利率低的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0435.wav", "duration": 7.439, "text": "浙江台州温岭市一一零指挥中心接警称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0459.wav", "duration": 6.2849375, "text": "李银河的文学梦将出版虐恋小说三卷本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0161.wav", "duration": 5.4240625, "text": "站在金九银十即将来临的起点上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0276.wav", "duration": 7.0761875, "text": "系统会使用不同编码来转移用户凭据和支付数据"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0418.wav", "duration": 3.1791875, "text": "黄宗泽绯闻女友等女星"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0441.wav", "duration": 2.7270625, "text": "据两名知情人透露"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0134.wav", "duration": 5.249, "text": "各地对公积金贷款的松绑力度更大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0439.wav", "duration": 3.204125, "text": "不仅赢得观众好口碑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0193.wav", "duration": 7.5689375, "text": "国资委接二连三对此表态或意味着国企将迎来上市高峰"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0328.wav", "duration": 3.8669375, "text": "有利于降低公司运营成本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0180.wav", "duration": 4.817, "text": "而申请办理组合贷款的手续则更为复杂"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0397.wav", "duration": 7.043, "text": "这一届北京市业馀排球联赛一定会精彩纷呈"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0244.wav", "duration": 4.1650625, "text": "加强农业防灾减灾能力建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0383.wav", "duration": 5.099125, "text": "以往想要见识奥运级别的比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0451.wav", "duration": 9.3620625, "text": "温州女协管员发伪辱性文字环卫节一群行尸走肉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0357.wav", "duration": 5.056125, "text": "此举却导致了一次擂台意外的发生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0127.wav", "duration": 5.55, "text": "地方政府倾向于频繁推出优质地块"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0238.wav", "duration": 3.723, "text": "债劵发行人是优质的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0352.wav", "duration": 5.3288125, "text": "更要期待着中国冰雪运动真正强大起来的那一天"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0343.wav", "duration": 4.3239375, "text": "中国队直落三局零封对手"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0227.wav", "duration": 3.142, "text": "环评过程要公开透明"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0401.wav", "duration": 3.3810625, "text": "作为一个主攻手非常不易"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0427.wav", "duration": 2.431875, "text": "每一天都要快乐喔"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0270.wav", "duration": 3.5, "text": "还有很多阻碍要解决"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0230.wav", "duration": 6.2069375, "text": "并对地方政府债务进行监控和风险防范等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0366.wav", "duration": 4.6071875, "text": "组委会设计了具有四川特色的志愿者服装"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0165.wav", "duration": 5.059, "text": "中新网房产频道推置业小调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0313.wav", "duration": 5.297875, "text": "根据权威机构检测报告显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0257.wav", "duration": 3.1009375, "text": "成为一个个响亮的中国品牌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0135.wav", "duration": 4.208, "text": "使其缓冲过度到买房阶段"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0150.wav", "duration": 5.858, "text": "但是整体回暖和好转态势已经确定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0321.wav", "duration": 4.6889375, "text": "公司目前看好锂电池行业的发展渠势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0362.wav", "duration": 5.859125, "text": "而在谈及此次应敌的策略时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0231.wav", "duration": 6.7879375, "text": "如建立规范透明的地方政府融资渠道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0394.wav", "duration": 3.9548125, "text": "各地跑步爱好者齐聚一堂"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0303.wav", "duration": 5.5900625, "text": "成飞集成百二十一九十"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0161.wav", "duration": 5.01, "text": "不同的客户对收益再投资的需求差别较大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0335.wav", "duration": 4.238, "text": "空调产品越来越追求个性化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0286.wav", "duration": 3.608, "text": "不过目前看来不大可能"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0218.wav", "duration": 3.9130625, "text": "建设旱涝保收高标准农田"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0156.wav", "duration": 10.5659375, "text": "没有雄厚的资金良好的业绩以及成熟的融资平台"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0378.wav", "duration": 2.8159375, "text": "又是十年的空白期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0121.wav", "duration": 6.354, "text": "境外个人购买应当符合当地政策规定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0155.wav", "duration": 3.0739375, "text": "提高家庭购房能力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0467.wav", "duration": 8.5749375, "text": "村民生活因此发生巨变井水变味田地减产前日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0400.wav", "duration": 5.3469375, "text": "朱婷得到七分同样全队最高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0311.wav", "duration": 4.0451875, "text": "杨某等四人经过商议"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0200.wav", "duration": 8.4520625, "text": "促使考试单位自觉降低成本由于形不成规模效益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0150.wav", "duration": 7.207, "text": "尤其组合贷的咨询量较上月月初一上涨百分之七左右"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0330.wav", "duration": 4.239, "text": "像车上的信息娱乐系统和导航系统"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0337.wav", "duration": 6.2790625, "text": "紫光集团和员工持股计划参与非公开增发"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0305.wav", "duration": 3.5949375, "text": "为使股价与公司价值匹配"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0157.wav", "duration": 5.654, "text": "房价下跌压力缓解各地救市政策不断"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0379.wav", "duration": 4.77, "text": "夺冠的同时摘得本次世界杯的冠军"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0385.wav", "duration": 3.3059375, "text": "我为她们感到骄傲和自豪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0325.wav", "duration": 2.838125, "text": "随着互联网快速发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0402.wav", "duration": 5.3420625, "text": "吉娜卢克肯科姆普尔"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0480.wav", "duration": 4.5, "text": "华商报讯记者杨德合买了两个肉夹馍"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0135.wav", "duration": 3.7569375, "text": "万一以后儿女的婚姻出了问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0456.wav", "duration": 7.1059375, "text": "非法经营期货金额共计人民币三二亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0488.wav", "duration": 7.8769375, "text": "湖北三亿打造亚洲玫瑰基地多个种植园杂草丛生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0189.wav", "duration": 4.8420625, "text": "健全重要农产品储备制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0448.wav", "duration": 3.531, "text": "姥姥继承二六六万馀元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0232.wav", "duration": 6.4500625, "text": "配套发展节水高效灌溉词草基地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0277.wav", "duration": 5.259, "text": "企业用户在安装定制应用程序时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0300.wav", "duration": 8.8830625, "text": "这三个优势能在短时间内颠复美国移动支付市场的格局"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0145.wav", "duration": 3.88, "text": "这样也为开发商节省了运营成本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0288.wav", "duration": 7.9350625, "text": "而这对于未来苹果保持高利润和利润率至关重要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0155.wav", "duration": 4.024, "text": "市场不可能那么快有反应"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0479.wav", "duration": 6.8930625, "text": "村主任发环卫工一六零零元工资含一四张假钞"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0180.wav", "duration": 6.962, "text": "这也从宏观层面明确了政府对于房地产市场的态度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0482.wav", "duration": 5.708, "text": "南京市民张女士化姓去无锡旅游时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0200.wav", "duration": 6.5040625, "text": "加快农业新品种新技术转化应用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0370.wav", "duration": 3.635, "text": "但遭到了韩国国内舆论的非议"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0199.wav", "duration": 4.275, "text": "转变畜牧业发展方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0209.wav", "duration": 4.511, "text": "加强用水总量控制与调度管理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0121.wav", "duration": 8.434, "text": "住宅土地出让金及成交面积均大幅下降"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0179.wav", "duration": 5.287, "text": "外资在华房地产投资购房限制被松绑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0243.wav", "duration": 2.99, "text": "农业信息化建设工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0360.wav", "duration": 3.938, "text": "我们就能看到这对强大组合的身影"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0269.wav", "duration": 10.167, "text": "又一款个性十足的双机身气动外形的大型无人机神雕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0380.wav", "duration": 4.48, "text": "朱婷表示我想日本肯定也会拼我们"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0209.wav", "duration": 5.938, "text": "农业产业化组织带动农户数量亿户"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0236.wav", "duration": 5.3629375, "text": "我们还控制了投融资平台公司发债的范围"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0324.wav", "duration": 4.1960625, "text": "车辆可能会发生严重的交通事故"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0215.wav", "duration": 5.1220625, "text": "优先将农业大县纳入改革范围"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0121.wav", "duration": 6.297, "text": "所以审批加上放款的时间最快也要在七个半月左右"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0454.wav", "duration": 5.459, "text": "背部撞断了游乐场场边的三根不锈钢护栏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0221.wav", "duration": 2.8780625, "text": "大力发展农业社会化服务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0189.wav", "duration": 3.526, "text": "加强农业科技领域国际合作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0379.wav", "duration": 4.6450625, "text": "对于任何一个目睹了整场比赛过程的人来讲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0164.wav", "duration": 8.719, "text": "今年中国房地产开发商仍将面临供应过剩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0274.wav", "duration": 4.087, "text": "而不是拿着主卡到处刷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0419.wav", "duration": 3.6791875, "text": "谢婷婷将头挨着父亲的头"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0173.wav", "duration": 4.7470625, "text": "类似的补贴政策常常是短效刺激"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0238.wav", "duration": 5.87, "text": "应该建立风险可控的规范化地方政府融资机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0209.wav", "duration": 6.9499375, "text": "您如何看待政府的举债行为和债务风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0347.wav", "duration": 3.5080625, "text": "我希望自己可以像卡梅隆一样"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0208.wav", "duration": 4.3880625, "text": "农村实用人才总量万人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0369.wav", "duration": 5.5800625, "text": "尽管也一度以二一比一七领先四分之多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0245.wav", "duration": 4.125, "text": "科学使用农药化肥和农膜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0356.wav", "duration": 5.577875, "text": "此次昆罗决中俄对抗赛上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0395.wav", "duration": 4.1061875, "text": "如果该医院罪名被判成立的话"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0229.wav", "duration": 5.513875, "text": "这并不意味着政府可以无节制地借债"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0268.wav", "duration": 10.1760625, "text": "继二零一一年出现独特的连翼造型的翔龙无人机以后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0393.wav", "duration": 3.731, "text": "首先是增加了二号位的进攻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0129.wav", "duration": 3.071, "text": "公积金贷款额度的提高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0245.wav", "duration": 5.218, "text": "完善病死动物无害化处理补贴制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0223.wav", "duration": 7.3159375, "text": "这使得我国城投债劵的发行利率相对偏高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0282.wav", "duration": 2.801, "text": "就是在创新驱动上下功夫"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0171.wav", "duration": 4.419, "text": "改进住房公积金管理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0430.wav", "duration": 3.735125, "text": "穿着白背心黑色短裤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0403.wav", "duration": 5.8828125, "text": "并在各自领域中享受着各自粉丝们帝王般的顶礼膜拜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0429.wav", "duration": 3.219, "text": "一度让外界以为两人复合"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0478.wav", "duration": 4.098875, "text": "物价部门工商部门已介入调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0205.wav", "duration": 5.7589375, "text": "承担着主要农产品供给保证的主体功能"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0427.wav", "duration": 4.1159375, "text": "称这二人总是可以把自己逗笑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0372.wav", "duration": 3.396, "text": "二零一五年二月一日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0340.wav", "duration": 8.51, "text": "只是本次田径世锦志愿者这个大群体的一个缩影"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0490.wav", "duration": 7.5170625, "text": "武汉网友胡琦的一条短信微博引起众人关注"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0234.wav", "duration": 6.38, "text": "稳步提高粮食主产区县级人均财力水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0179.wav", "duration": 5.4770625, "text": "不得购买非自用非自住商品房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0363.wav", "duration": 7.420875, "text": "在制定竞赛规程方面严格遵循规范化专业化原则"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0121.wav", "duration": 4.5879375, "text": "时刻保持创新和变革意识"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0137.wav", "duration": 3.238, "text": "支持新产业新业态"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0432.wav", "duration": 6.692875, "text": "四零零元左右的低价两日游在当地非常普遍"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0489.wav", "duration": 3.4001875, "text": "现代快报记者赵书伶"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0484.wav", "duration": 5.52, "text": "由于电影王朝的女人杨贵妃中的一场激情戏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0353.wav", "duration": 6.332, "text": "主攻手朱婷不慎扭伤脚踝后依然带伤奋战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0251.wav", "duration": 4.229, "text": "新型农村人才培养工程"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0259.wav", "duration": 3.0490625, "text": "该系统包含一套算法"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0473.wav", "duration": 3.243875, "text": "大喊我一脚方言"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0184.wav", "duration": 4.4090625, "text": "大量外资希望进入我国市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0363.wav", "duration": 2.598875, "text": "直肘反肘交替使用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0150.wav", "duration": 5.626, "text": "多个楼盘仍然采取的是低价走量的策略"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0404.wav", "duration": 3.400875, "text": "不仅在全球收回十亿美元票房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0250.wav", "duration": 3.594, "text": "更好地保护债券投资人的利益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0177.wav", "duration": 6.0430625, "text": "如果申请公积金贷款及公积金贷款与商业贷款的组合贷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0124.wav", "duration": 5.237, "text": "为了规避三四线城市明显过剩的市场风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0440.wav", "duration": 10.156, "text": "村小老师自掏腰包八零零零元为贫困生设奖学金"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0437.wav", "duration": 7.052, "text": "打掉一个以传授彩票中奖秘籍为名的特大电信诈骗团伙"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0247.wav", "duration": 4.651, "text": "完善农产品跨区调运调剂机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0408.wav", "duration": 6.838875, "text": "谈到前日爸爸谢贤在宣传活动上出手打曾江"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0466.wav", "duration": 5.2380625, "text": "一辆红色的卡车和一辆黄色的渣土车发生碰撞"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0366.wav", "duration": 3.8298125, "text": "但对于每一位观赛者来讲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0138.wav", "duration": 3.357, "text": "集中释放用地政策红利"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0342.wav", "duration": 4.0329375, "text": "跳远莱纳马尔库斯"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0138.wav", "duration": 4.924, "text": "但房地产市场仍处于调整期"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0366.wav", "duration": 4.109875, "text": "这也让他们虽然可以参加小型赛事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0285.wav", "duration": 4.751, "text": "两家公司是联网汽车的主要芯片供应商"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0210.wav", "duration": 3.3000625, "text": "防范我国政府债务风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0136.wav", "duration": 4.7259375, "text": "对楼市消化库存起到正面作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0426.wav", "duration": 4.691875, "text": "更是郑嘉颖愿意公开承认的女友"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0262.wav", "duration": 2.864, "text": "销量都会有一定的影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0407.wav", "duration": 2.765875, "text": "科林也退出了剧组"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0353.wav", "duration": 5.3449375, "text": "位列球队发球榜首位和拦网榜的第二位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0225.wav", "duration": 6.3420625, "text": "完善高标准农田建后管护支持政策和制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0125.wav", "duration": 5.492, "text": "唯有实力雄厚又颇具现代创新意识的广告企业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0413.wav", "duration": 2.8400625, "text": "据香港媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0249.wav", "duration": 3.625, "text": "全面提高农业现代化水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0157.wav", "duration": 6.097, "text": "未必吸引太多擅长上规模开发的企业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0484.wav", "duration": 6.968, "text": "杀害宝鸡夜跑教师嫌犯落网是否为拾荒者尚无定论"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0219.wav", "duration": 4.213, "text": "大力培育和发展种养大户家庭农牧场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0440.wav", "duration": 8.416, "text": "村支书村民被政府工作人员土埋系邻里纠纷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0182.wav", "duration": 5.783, "text": "此举对促进外企在华投资房地产有积极作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0216.wav", "duration": 7.259, "text": "按照统筹规划分工协作集中投入连片推进的思想"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0487.wav", "duration": 9.24, "text": "蜈蚣资料图参考消息网一零月二二日报道中国科学家称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0188.wav", "duration": 6.2480625, "text": "考虑到地方组织考试的成本相对比较固定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0218.wav", "duration": 3.036, "text": "都起到了积极的作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0373.wav", "duration": 3.163125, "text": "备战明年的里约奥运会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0454.wav", "duration": 2.9360625, "text": "虽然已经退役近一年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0408.wav", "duration": 4.0959375, "text": "让体重维持在四十五公斤左右"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0390.wav", "duration": 2.957, "text": "对我们来说比赛很困难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0322.wav", "duration": 3.0490625, "text": "儿童电话手表的诞生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0121.wav", "duration": 5.39, "text": "在最希望国家实施的调控政策这一问题上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0299.wav", "duration": 6.0, "text": "这会危及用户体验和产品质量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0251.wav", "duration": 5.0129375, "text": "粮食等主要农产品供给得到有效保障"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0186.wav", "duration": 10.0, "text": "虽然过去一年一些获评级开发商的信用状况变差"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0412.wav", "duration": 4.3720625, "text": "除了看见陈嘉宝及赖慰玲外"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0278.wav", "duration": 6.229, "text": "而现在的股票市场也已经达到创纪录的新高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0358.wav", "duration": 4.516125, "text": "这无疑又是一次严峻的考验"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0413.wav", "duration": 2.6630625, "text": "表示决定辞职"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0382.wav", "duration": 5.672125, "text": "北京和张家口最终击败了强大的对手阿拉木图"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0273.wav", "duration": 3.0799375, "text": "一个公司不能缺少两种人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0329.wav", "duration": 4.8581875, "text": "自今年六月电话手表行业兴起起来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0328.wav", "duration": 3.5749375, "text": "毛利率为十八点百分之三"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0321.wav", "duration": 7.275875, "text": "研发支出主要用于服务器产品的研究开发和升级换代"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0355.wav", "duration": 5.937, "text": "当搏击界的勒布朗与卡梅隆狭路相逢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0485.wav", "duration": 5.8371875, "text": "吕某于一零月一四日晚从家中外出锻炼失踪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0313.wav", "duration": 7.64725, "text": "广东东莞顺德等城市已经掀起大量机器换人计划"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0199.wav", "duration": 3.3050625, "text": "吸引社会资本七亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0373.wav", "duration": 8.8659375, "text": "现年十八岁的莎宾娜身高达一百八十二厘米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0467.wav", "duration": 5.3899375, "text": "男医生为了安抚即将做手术的小女孩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0226.wav", "duration": 3.555, "text": "所以倒也没产生收费站排队的现象"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0229.wav", "duration": 3.561, "text": "如何在五天内筹集到七万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0297.wav", "duration": 8.474125, "text": "对于谋求转型发展怀揣创新型国家梦想的中国来说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0193.wav", "duration": 7.499, "text": "立即部署开展海洋石油勘探开发安全生产检查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0388.wav", "duration": 3.5090625, "text": "在比赛中确实非常有利"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0363.wav", "duration": 4.902, "text": "这位北京姑娘直言在三大赛当队长的感觉很特殊"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0269.wav", "duration": 3.6420625, "text": "可对于一个成年人来说算什么"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0143.wav", "duration": 4.865, "text": "公积金贷款最高额度也不同程度上调"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0364.wav", "duration": 6.547875, "text": "不仅能够将业馀排球与职业排球严格地区分开"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0132.wav", "duration": 6.1390625, "text": "每月光租金收入便已远大于自己和子女的总开销"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0456.wav", "duration": 6.3620625, "text": "但嵩县德亭镇大王沟村村民们仍感到好奇"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0264.wav", "duration": 6.5, "text": "在战区上空形成有效韧的信息网络"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0208.wav", "duration": 3.449, "text": "我国工业化城镇化快速发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0134.wav", "duration": 5.034, "text": "一个以互联网和大数据为核心的时代已经到来"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0176.wav", "duration": 4.568, "text": "但主要还是体现在贷款成本的降低"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0255.wav", "duration": 3.5910625, "text": "一项项领先世界的科技成果"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0288.wav", "duration": 4.3570625, "text": "未来上市能够放大公司的品牌效益"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0339.wav", "duration": 4.475125, "text": "也恰恰符合播求的个人风格"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0249.wav", "duration": 2.9339375, "text": "大力推进农业节能减排"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0151.wav", "duration": 5.0030625, "text": "作为三四线城市最为集中的中部地区来说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0303.wav", "duration": 6.938, "text": "第一财经日报记者七月十三日从美的内部获悉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0142.wav", "duration": 5.2430625, "text": "随着广州住房公积金贷款政策的调整实施"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0377.wav", "duration": 8.8239375, "text": "中国女排三十一日本四夺世界杯冠军直通里约奥运"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0354.wav", "duration": 4.0769375, "text": "在前两局僵持不下的情况下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0418.wav", "duration": 3.865, "text": "搜狐娱乐讯据台湾媒体报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0311.wav", "duration": 3.432, "text": "美的部品事业部建立后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0136.wav", "duration": 3.304, "text": "在多项政策的支持下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0480.wav", "duration": 7.712125, "text": "开水淋顾客的火锅店服务员朱某被依法批准逮捕"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0317.wav", "duration": 4.7469375, "text": "收盘价四点九九元也于七月八日公告"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0185.wav", "duration": 6.8089375, "text": "是对过去住房公积金制度不作为方式的纠正"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0382.wav", "duration": 3.9199375, "text": "在分站赛总得分榜上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0387.wav", "duration": 6.0969375, "text": "其一米九五的身高三米二七的扣球高度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0201.wav", "duration": 3.5169375, "text": "他就上述关注问题指出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0273.wav", "duration": 3.502, "text": "害怕其掌握国家金融命脉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0243.wav", "duration": 3.5649375, "text": "也降低了城投债劵的风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0334.wav", "duration": 4.8310625, "text": "净利润出现百分之一的下滑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0225.wav", "duration": 7.4809375, "text": "提高农业现代化水平农民生活水平和新农村建设水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0452.wav", "duration": 6.385, "text": "该村支委李某因涉嫌猥亵儿童被警方传唤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0126.wav", "duration": 5.728, "text": "共审计二十个省本级和二百个市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0398.wav", "duration": 7.376, "text": "还增加了直线直线和斜线之间的所谓二直线"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0129.wav", "duration": 3.635, "text": "以住房公积金制度为基础"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0215.wav", "duration": 4.616125, "text": "增长速度按可比价格计算"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0122.wav", "duration": 4.702, "text": "开发商进驻一二线城市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0174.wav", "duration": 7.316, "text": "可以有效提高资金管理集约化专业化和精细化水平"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0127.wav", "duration": 3.127, "text": "进而选择此类方式购房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0121.wav", "duration": 7.743, "text": "将进一步提振刚需购房者入市信心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0216.wav", "duration": 3.917, "text": "修订完善相关应急预案"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0255.wav", "duration": 4.656, "text": "可参照中国移动和苹果的合作传闻中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0268.wav", "duration": 4.3570625, "text": "对于高中生来说这会有点令人尴尬罢了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0441.wav", "duration": 6.3681875, "text": "温州惊现最牛菜场温州的状元农贸市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0237.wav", "duration": 7.671, "text": "允许机场巴士校车班车使用公共交通优先车道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0381.wav", "duration": 5.624, "text": "回忆起自己从前训练时因心脏不适被抢救的事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0468.wav", "duration": 5.3740625, "text": "该村村民黎胜明向楚天快报求助"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0484.wav", "duration": 4.6889375, "text": "由此引出一起重大安全案件"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0136.wav", "duration": 4.528, "text": "他们的财产和生活不会受到太大影响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0186.wav", "duration": 4.0, "text": "据记者从多个渠道了解"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0471.wav", "duration": 6.1008125, "text": "村支书上班时间带彩娱乐神秘人曝光视频证据"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0405.wav", "duration": 4.3371875, "text": "影片将在二零一七年登陆全国"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0377.wav", "duration": 3.8349375, "text": "成为宅男心目中的排球女神"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0399.wav", "duration": 4.6899375, "text": "中国女排从第三轮开始便被挤出了三甲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0252.wav", "duration": 4.84, "text": "稳步提高稻谷小麦最低收购价"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0426.wav", "duration": 6.931875, "text": "连男方在法国包游艇求婚的照片都被网友扒出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0330.wav", "duration": 4.24, "text": "空调业务总营收接近七百亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0411.wav", "duration": 8.0, "text": "有传他离开是因黎明不满其在挽留艺人方面没有尽力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0392.wav", "duration": 5.75, "text": "经验丰富的雅桑克莱开始刻意放缓节奏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0173.wav", "duration": 6.49, "text": "注册资本金不得低于投资总额的百分之五十"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0374.wav", "duration": 2.865, "text": "而在今年的香港站上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0326.wav", "duration": 5.3320625, "text": "这是目前我们中国家电企业面临的具体挑战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0474.wav", "duration": 8.207, "text": "游客乌鲁木齐吃自助被罚二四零零元工商部门介入"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0128.wav", "duration": 3.773, "text": "该政策在七月份实施一周后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0178.wav", "duration": 2.545, "text": "实现区域扩张"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0368.wav", "duration": 5.824, "text": "曾春蕾通过自我调节而让竞技状态渐入佳境"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0373.wav", "duration": 3.699, "text": "休赛期内他们参加了小型赛事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0299.wav", "duration": 4.1379375, "text": "人气不逊乔布斯在世之时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0211.wav", "duration": 4.5, "text": "加强海陆过渡区生态建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0163.wav", "duration": 3.2230625, "text": "楼市调控将去向何方"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0384.wav", "duration": 6.093, "text": "佟健给自己定下了要做就做到最好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0252.wav", "duration": 3.1529375, "text": "坚持法治严格监管"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0300.wav", "duration": 3.504875, "text": "中国游戏公司纷纷忙着退市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0135.wav", "duration": 5.593, "text": "编造虚假资料等套取或骗取补偿一亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0437.wav", "duration": 4.348875, "text": "一时一零分火势完全扑灭"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0468.wav", "duration": 5.8390625, "text": "港媒中国人启动营养革命养生书籍热卖"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0439.wav", "duration": 3.8398125, "text": "自己和家人因点的海鲜较少"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0415.wav", "duration": 5.963125, "text": "两人于异国拍外景晨夕相对"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0316.wav", "duration": 5.9909375, "text": "影响学习虽说功能手机可以阻止孩子玩游戏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0459.wav", "duration": 5.920875, "text": "但渣土车司机肇事后不仅没有下车救援"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0172.wav", "duration": 7.019875, "text": "投资总额超过一千万美元含一千万美元的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0210.wav", "duration": 3.729, "text": "自秋季学期起"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0175.wav", "duration": 4.318, "text": "大型房企实施低迷期拿地的策略"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0210.wav", "duration": 4.6789375, "text": "改善河口和近岸海域生态环境"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0225.wav", "duration": 3.302, "text": "中国老龄十二五规划"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0260.wav", "duration": 4.0230625, "text": "从而推动机器人在胃部前行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0199.wav", "duration": 4.594, "text": "完善农民专业合作社管理方法"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0453.wav", "duration": 3.9389375, "text": "严厉谴责这一不文明应为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0300.wav", "duration": 2.6079375, "text": "于是他也来凑凑热闹"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0355.wav", "duration": 4.3261875, "text": "尚不足十八岁的她身高为一米八六"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0329.wav", "duration": 4.947, "text": "预计可回购不少于七百九十一万股"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0148.wav", "duration": 4.9209375, "text": "把顾客个人资料全部归客户自己保管"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0486.wav", "duration": 4.1369375, "text": "目前正在进行一步工作中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0487.wav", "duration": 5.3161875, "text": "温州一家六口误食毒菌五人已死亡"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0266.wav", "duration": 7.4079375, "text": "这些力量的结合将会推动苹果的市盈率大幅上正"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0487.wav", "duration": 9.8149375, "text": "五名涉嫌参与抢米的犯罪嫌疑人先后被抓获并拘留"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0142.wav", "duration": 5.282, "text": "整合营销实现了从策略到执行的系统化服务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0162.wav", "duration": 3.753, "text": "今年土地收入再维持稳定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0465.wav", "duration": 9.099875, "text": "制图黄欣晨报记者佟继萍王亦菲实习生张诗欢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0317.wav", "duration": 5.141875, "text": "二零一五年紫光集团预计收入约四百亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0310.wav", "duration": 7.241, "text": "乌云网合伙人邬迪接受第一财经日报记者采访时称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0241.wav", "duration": 4.5820625, "text": "完善现代农业产业技术体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0401.wav", "duration": 5.339125, "text": "为观众们奉上昆仑决鏖战香江的精彩赛事"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0158.wav", "duration": 3.223, "text": "顾客体验的核心是真善美"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0429.wav", "duration": 6.3840625, "text": "温兆伦许飞欧弟等明星也通过微博表示支持力挺"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0255.wav", "duration": 5.015, "text": "它的雷达可能采用了双波段设计"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0262.wav", "duration": 5.218, "text": "高效精准投送药物不仅可降低用药量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0444.wav", "duration": 7.738, "text": "多家媒体就这组图片中的场景和现象作出评论"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0338.wav", "duration": 7.0, "text": "对于我而言现在已经成为了一种习惯与本能"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0476.wav", "duration": 3.6799375, "text": "图为时上集镇派出所"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0470.wav", "duration": 10.2111875, "text": "村委会在农田搭起违法建筑每年收租金一四万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0296.wav", "duration": 3.9869375, "text": "其将提供三种版本的智能手表"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0275.wav", "duration": 3.9129375, "text": "何况是一个来自美帝的小苹果呢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0428.wav", "duration": 3.525125, "text": "陈妍希在微博发布跳绳视频"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0473.wav", "duration": 3.234125, "text": "本报讯记者杨柳昨天"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0270.wav", "duration": 2.792, "text": "透过不断的更新换代"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0334.wav", "duration": 3.4350625, "text": "并非所有的电磁辐射都会对人体产生危害"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0298.wav", "duration": 5.2750625, "text": "我们甚至都没有来得及反抗就被完全征服了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0364.wav", "duration": 5.1689375, "text": "这次比赛我会用胜利证明自己的实力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0287.wav", "duration": 5.692, "text": "今年芯片行业并购交易额在八百亿美元以上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0382.wav", "duration": 3.129125, "text": "更大的战场还在里约"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0291.wav", "duration": 3.6059375, "text": "搜狐消息外媒消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0411.wav", "duration": 5.358125, "text": "日前在初赛收官战中返场的她加盟猜评团"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0245.wav", "duration": 5.5699375, "text": "统筹推进新一轮菜篮子工程建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0317.wav", "duration": 3.228, "text": "小天才负责人介绍说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0368.wav", "duration": 5.25125, "text": "随着赛会推进被越来越多的人所熟知"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0310.wav", "duration": 4.115, "text": "即由直销模式转变为经销模式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0477.wav", "duration": 5.865, "text": "警方已抓获一五名犯罪嫌疑人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0175.wav", "duration": 3.464, "text": "充分发挥住房公积金作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0153.wav", "duration": 4.6260625, "text": "市民对连续多次降息已经麻木了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0331.wav", "duration": 5.225125, "text": "公司已经暂停或终止部分关联交易项目"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0331.wav", "duration": 3.2160625, "text": "但伴随一定的投资风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0260.wav", "duration": 4.098, "text": "但却鲜有人会像苹果的服务付费"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0446.wav", "duration": 4.983875, "text": "保安得知自己被骗后表示我真的很恨他们"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0402.wav", "duration": 4.625, "text": "发现他们中间真有不少是志愿达人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0353.wav", "duration": 6.2539375, "text": "法国冰协同于放人五度世界冠军即将复出搜狐体育"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0240.wav", "duration": 4.548, "text": "这在相当程度上控制了城投债券的发行规模"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0488.wav", "duration": 5.722875, "text": "民警仍在对其馀涉事人员进行调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0446.wav", "duration": 10.259, "text": "村支委办公室猥亵女童被刑拘的孩子奶奶在隔壁开会"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0138.wav", "duration": 4.629, "text": "普遍认为现在的市场很小且还是单品"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0165.wav", "duration": 4.9100625, "text": "五月份多地楼市的成交量明显上涨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0341.wav", "duration": 3.317875, "text": "正是冰球运动员的黄金年龄"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0122.wav", "duration": 6.611, "text": "外资在华房地产投资限制松绑已成大势"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0212.wav", "duration": 3.2120625, "text": "占比只有百分之七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0372.wav", "duration": 3.3519375, "text": "全队上下面对了巨大困难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0122.wav", "duration": 6.5, "text": "东地产财经周刊新一年度审计工作报告出炉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0293.wav", "duration": 3.7120625, "text": "苹果打压了市场竞争"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0162.wav", "duration": 3.782, "text": "中新网十月二十一日前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0299.wav", "duration": 4.525125, "text": "众多跨国品牌在中国都有生产基地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0230.wav", "duration": 7.8209375, "text": "健全兽药质量安全监管和动物防疫技术支撑体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0325.wav", "duration": 3.8039375, "text": "也是众多家长特别想了解的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0157.wav", "duration": 4.8660625, "text": "似乎难以在一二线城市站稳"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0141.wav", "duration": 4.987, "text": "当大家习惯安全的问题留以后解决的时候"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0494.wav", "duration": 8.838875, "text": "村民举报县城干部建十馀栋别墅纪检委部门介入调查"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0335.wav", "duration": 4.834, "text": "一方面是由于上半年模具的比较基数较低"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0432.wav", "duration": 6.4030625, "text": "日前遭人绑架并勒索七零零零万港元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0420.wav", "duration": 2.9929375, "text": "搜狐娱乐讯日前"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0315.wav", "duration": 6.630125, "text": "并一举成为中国最大全球第三大通讯芯片设计公司"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0207.wav", "duration": 3.3310625, "text": "引导社会资本投入农业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0447.wav", "duration": 6.311, "text": "中新网九月三零日电据香港文汇报报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0402.wav", "duration": 3.8288125, "text": "一度让不少粉丝心碎不已"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0203.wav", "duration": 5.667, "text": "销售给资本市场投资者的一种融资方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0338.wav", "duration": 4.1479375, "text": "十多天压抑的情感终于爆发"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0315.wav", "duration": 4.0930625, "text": "之前很多家长会给孩子买手机"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0343.wav", "duration": 4.3049375, "text": "对手给我们制造了非常多的困难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0463.wav", "duration": 3.8559375, "text": "这块天降奇冰究竟是何物"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0421.wav", "duration": 5.266875, "text": "玩心大起的许绍洋与玩家一起比拼游戏"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0442.wav", "duration": 4.1630625, "text": "并未将游客脱光衣服殴打"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0164.wav", "duration": 4.318, "text": "国家发改委也发出过通知"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0492.wav", "duration": 3.645, "text": "现场有人喊有车要爆炸"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0160.wav", "duration": 4.0589375, "text": "平均价格为十万元每平方米"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0322.wav", "duration": 3.8579375, "text": "两大龙头企业格力和海尔"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0333.wav", "duration": 7.754875, "text": "美的空调还在其他地区工厂建有三条全自动生产线"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0240.wav", "duration": 4.8549375, "text": "充分发挥农民的主体作用和首创精神"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0363.wav", "duration": 3.7519375, "text": "孙杨就出现过心脏问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0336.wav", "duration": 5.52, "text": "将有助于美的洗碗机开拓国内市场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0398.wav", "duration": 3.2219375, "text": "有的人还会八国语言"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0213.wav", "duration": 6.094, "text": "支持南方甘蔗和北方甜菜生产基地建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0336.wav", "duration": 4.982875, "text": "新兴行业对于创新的热情也不断增加"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0412.wav", "duration": 5.9821875, "text": "谈及前男友陈冠希近日被指外貌衰老了不少"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0137.wav", "duration": 3.076, "text": "从去年三部委发文"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0200.wav", "duration": 4.224, "text": "加强城投债监管完善制度建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0285.wav", "duration": 7.391, "text": "价格高于六百美元的占比从百分之七十增加到了百分之八十"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0446.wav", "duration": 5.472875, "text": "李嘉诚首次回应撤资传闻对中国发展充满信心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0423.wav", "duration": 5.5900625, "text": "搜狐娱乐讯北京时间六月三十日消息"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0353.wav", "duration": 3.493875, "text": "年龄从二十三岁到五十九岁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0388.wav", "duration": 5.9240625, "text": "中国队的快速打法给自己的球队制造了很大的麻烦"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0326.wav", "duration": 3.7690625, "text": "而由直销模式改为经销模式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0129.wav", "duration": 7.9339375, "text": "北上广深四个一线城市已经全部放开公积金房贷业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0261.wav", "duration": 3.4620625, "text": "病毒武器的隐蔽性极佳"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0340.wav", "duration": 7.326875, "text": "正是得益于我国女子散打名将鄂美蝶的惊艳一击"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0303.wav", "duration": 4.6369375, "text": "对频频的骚扰电话显示无可奈何"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0336.wav", "duration": 5.1320625, "text": "宝马方面表示已经升级该数字系统"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0304.wav", "duration": 6.542, "text": "以及与经销商汽车垂直网站等签署保密协议等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0206.wav", "duration": 5.2109375, "text": "灵活有效调控农业产品进出口"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0389.wav", "duration": 3.73, "text": "像她们这样的亚洲对手速度很快"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0371.wav", "duration": 5.739, "text": "研究者们希望年龄大的跑者能够注意脚踝的锻炼"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0491.wav", "duration": 6.4660625, "text": "机组成功处置深航机上纵火事件获奖二五零万"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0230.wav", "duration": 3.6269375, "text": "免征蔬菜流通环节的增值税"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0343.wav", "duration": 4.0, "text": "她以最帅国手走红网络"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0334.wav", "duration": 9.0, "text": "未经用户同意将该插件预置到呃用户手机中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0157.wav", "duration": 3.591, "text": "按照这一趋势发展下去"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0361.wav", "duration": 4.975125, "text": "一脸痛苦的朱婷当即被换下场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0213.wav", "duration": 3.6330625, "text": "构建良好的旅游市场环境"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0279.wav", "duration": 4.2169375, "text": "但是在那没做任何设计工作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0434.wav", "duration": 7.6010625, "text": "新京报快讯记者杨锋七月四日下午四时零八分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0396.wav", "duration": 5.249, "text": "比例超过百分之九十四的志愿者是九零后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0466.wav", "duration": 6.733125, "text": "网络时代信息的存在有了新方式"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0317.wav", "duration": 6.3041875, "text": "自二零一一年事业部启动自动化升级至今的四年里"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0240.wav", "duration": 7.8570625, "text": "应该建立风险可控的规范化地方政府融资机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0384.wav", "duration": 4.109875, "text": "这就是竞技体育的魅力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0227.wav", "duration": 6.251, "text": "确保农田综合生产能力长期持续稳定提升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0245.wav", "duration": 5.4389375, "text": "应当立即停止生产销售进口"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0188.wav", "duration": 5.683, "text": "完善主要农产品吞吐和调节机制"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0248.wav", "duration": 4.4100625, "text": "目前已取得阶段性成效"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0461.wav", "duration": 2.746125, "text": "彭某下班后准备开车离开"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0461.wav", "duration": 6.7060625, "text": "朱圣祎爆王思聪女朋友被诉法官送达起诉书遇阻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0341.wav", "duration": 3.714875, "text": "这个湖虽然没有漂浮的垃圾"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0219.wav", "duration": 4.687, "text": "有利于加快完善基础设施和投资环境"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0413.wav", "duration": 7.9350625, "text": "早前有传媒更拍到陈凯琳直上嘉颖住所短聚"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0394.wav", "duration": 5.4020625, "text": "令我满意的是球队能够以一个积极的态度进行比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0383.wav", "duration": 6.6210625, "text": "颜色则是由代表着运动精神的奥运五环色组成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0263.wav", "duration": 5.6840625, "text": "孙永杰对二十一世纪报道记者表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0403.wav", "duration": 4.0, "text": "而阿拉木图仅为四百亿美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0455.wav", "duration": 7.822, "text": "参考消息网一零月八日报道港媒称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0439.wav", "duration": 5.657, "text": "温州一路虎店隐瞒新车维修史被判赔三一四万"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0317.wav", "duration": 4.693, "text": "能否找到厨电行业下一个未知的增量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0169.wav", "duration": 10.37, "text": "由此拉开了跨境共享创新生态平台化发展的新时代"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0363.wav", "duration": 4.2529375, "text": "我不会改变自己擅长的风格"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0438.wav", "duration": 3.5949375, "text": "丈夫关某身负多处刀伤"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0385.wav", "duration": 6.6169375, "text": "扣球成功率五十四点百分之十高居榜首"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0448.wav", "duration": 3.8999375, "text": "安良百货商场正常营业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0328.wav", "duration": 6.2578125, "text": "二零一一年美的空调达到五百亿元营收规模时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0408.wav", "duration": 3.147, "text": "两人合作长达二十年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0394.wav", "duration": 3.907, "text": "在队长惠若琪缺阵的情况下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0360.wav", "duration": 5.5, "text": "张春雨在全场观众的喝彩声中再次投入比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0254.wav", "duration": 6.6269375, "text": "由此可见苹果现在的业务确实比汽车行业更加赚钱"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0323.wav", "duration": 4.110125, "text": "如果车辆被黑客软件侵袭"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0477.wav", "duration": 3.4509375, "text": "三个月内连生两个儿子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0318.wav", "duration": 8.197, "text": "他们通过这个插件已获利广告收入二十馀万元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0369.wav", "duration": 5.182875, "text": "冠军皆由麦格理集团获得"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0268.wav", "duration": 3.8930625, "text": "在科技领域排名第二"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0178.wav", "duration": 5.5, "text": "设立国家住房银行条件已经基本成熟"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0314.wav", "duration": 6.907, "text": "小天才电话手表辐射远小于国家标准二瓦特每千克"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0125.wav", "duration": 9.732, "text": "公积金松绑接棒释压房价下跌动力趋缓至搜狐财经"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0178.wav", "duration": 3.882, "text": "加上优质地块的连续供应"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0323.wav", "duration": 3.25, "text": "电话手表应如何选购"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0135.wav", "duration": 3.583, "text": "此机构即是住房银行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0358.wav", "duration": 5.1789375, "text": "二零一四年索契冬奥会上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0368.wav", "duration": 7.5, "text": "主教练对于这支以老带新的队伍也充满了自信"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0326.wav", "duration": 3.509, "text": "比如降低人工费用运作费用等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0235.wav", "duration": 4.9920625, "text": "远低于发生债务危机的欧美国家"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0210.wav", "duration": 7.3250625, "text": "以建设小麦玉米水稻大豆优势产业带为重点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0370.wav", "duration": 4.3840625, "text": "和夏季奥运会上的斩金夺银不同"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0387.wav", "duration": 3.485875, "text": "交通住宿花费大大降低"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0249.wav", "duration": 3.709, "text": "您如何看待这一现象"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0211.wav", "duration": 2.89, "text": "在自愿基础上组建联合社"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0473.wav", "duration": 4.3339375, "text": "三改一拆可以说是一条红线"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0268.wav", "duration": 3.949, "text": "乔帮主并没有他说的那么不堪"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0309.wav", "duration": 4.5659375, "text": "归到家用空调事业部旗下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0162.wav", "duration": 3.9030625, "text": "据中国指数研究院最新数据显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0466.wav", "duration": 4.495125, "text": "在朝阳区百子湾阳光嘉园小区遇害"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0371.wav", "duration": 5.3889375, "text": "增强参赛者的荣誉感与积极性的同时"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0121.wav", "duration": 3.8409375, "text": "进而选择此类方式购房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0472.wav", "duration": 4.3720625, "text": "将市区两级政府告上法庭"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0411.wav", "duration": 7.979, "text": "陈嘉宝昨天六月二十三日将大合照上传个人主页"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0288.wav", "duration": 6.9189375, "text": "甚至包括了一些明星意见领袖和政府官员"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0480.wav", "duration": 5.2729375, "text": "而被美国海关移民官遣返"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0143.wav", "duration": 4.933, "text": "一线城市土地市场成交火热"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0212.wav", "duration": 6.593, "text": "支持高校毕业生和各类优秀人才投身现代农业建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0363.wav", "duration": 4.5498125, "text": "成为市民体验冰上运动的乐园"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0283.wav", "duration": 3.832, "text": "这种做法很容易误导客服"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0471.wav", "duration": 5.583, "text": "湖北飞踢女居民车道办主任被停职"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0197.wav", "duration": 4.757, "text": "选建一批农业产业化示范基地"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0423.wav", "duration": 6.1840625, "text": "但两人关系比一般夫妻更加紧密"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0156.wav", "duration": 5.3739375, "text": "今年北京还将加大社会单位泵租力度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0395.wav", "duration": 5.214875, "text": "我们或许就将看到他们征战各类大型赛事的身影"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0467.wav", "duration": 4.673125, "text": "张先生在青羊法院提起诉讼"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0351.wav", "duration": 5.0029375, "text": "一场众星闪耀的群龙赛事震撼打响"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0424.wav", "duration": 2.5300625, "text": "我叫他不要吓我"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0420.wav", "duration": 3.957, "text": "许茹芸与韩籍男朋友举行了婚礼"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0345.wav", "duration": 4.521, "text": "铁饼沙尼斯克拉夫特"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0461.wav", "duration": 4.1789375, "text": "捡拾一些冰块回家冰冻保存"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0361.wav", "duration": 4.068, "text": "曾春蕾就曾经临时客串过队长职务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0364.wav", "duration": 4.9289375, "text": "而看到了希望的韩国队也趁机拼命反击"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0166.wav", "duration": 9.28, "text": "中新网八月二十七日电据商务部官网公布的文件显示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0280.wav", "duration": 4.1070625, "text": "在安卓手机的总体交付量中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0404.wav", "duration": 5.4868125, "text": "提前一周至二零一六年六月二十四日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0316.wav", "duration": 7.1599375, "text": "每日经济新闻记者从美的家用空调事业部了解到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0424.wav", "duration": 4.660875, "text": "金陵晚报八月十二日报道二零一四年"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0466.wav", "duration": 5.025875, "text": "资料图片在湖南卫视上周开播的偶像来了中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0491.wav", "duration": 3.4960625, "text": "是社会稳定的主要力量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0152.wav", "duration": 5.255, "text": "呈现购房者积入市的行情"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0347.wav", "duration": 7.583, "text": "二零二二年北京冬奥会计划使用一二个比赛场馆"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0426.wav", "duration": 3.161875, "text": "迎来了人生崭新阶段"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0134.wav", "duration": 6.84, "text": "各区县力争完成十五万套开工任务竣工八万套"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0284.wav", "duration": 5.19825, "text": "苹果积累了海量的绑定信息卡用户"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0381.wav", "duration": 5.128875, "text": "随后冰迷们自发为其网上募集资金"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0186.wav", "duration": 5.3559375, "text": "对购买住房的数量也未做要求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0199.wav", "duration": 6.5590625, "text": "农产品质量安全例行监测总体合格率百分之五十"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0339.wav", "duration": 5.6591875, "text": "作为唯一能够入选五大飙血之战的女子比赛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0215.wav", "duration": 4.5660625, "text": "主要用于各地基础设施的投资建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0222.wav", "duration": 5.412, "text": "努力开创我国农业现代化发展新局面"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0186.wav", "duration": 4.2459375, "text": "实现我国房地产市场的平稳运行"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0232.wav", "duration": 7.822, "text": "规范粮食主产县涉农投资项目地方资金配套"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0183.wav", "duration": 6.3259375, "text": "从一线城市及存销比在七个月以下的城市来看"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0138.wav", "duration": 4.992, "text": "一系列楼市新政效果逐步显现"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0181.wav", "duration": 5.5, "text": "中房指数研究所院长陈晟表示"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0439.wav", "duration": 7.8720625, "text": "大兴警方以涉嫌交通肇事罪将肇事者刑事拘留"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0360.wav", "duration": 3.6159375, "text": "设有座位一万两千个"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0237.wav", "duration": 3.4089375, "text": "促进基金行业规范发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0229.wav", "duration": 5.886, "text": "健全六级动物疫病防控体系"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0314.wav", "duration": 3.4830625, "text": "资金来源为自有资金"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0444.wav", "duration": 6.8188125, "text": "南都讯记者王睦广发自香港今年四月初"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0429.wav", "duration": 3.7800625, "text": "并写道每天早上二十零下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0450.wav", "duration": 10.099125, "text": "清华附小昨迎百年校庆校长诠释成志教育理念"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0362.wav", "duration": 6.187, "text": "这也让他必须在明年春天进行一次小手术来加以治疗"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0264.wav", "duration": 4.4969375, "text": "这还不包括改造过程中的渠道分食"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0468.wav", "duration": 5.3520625, "text": "永远的紫霞仙子朱茵的亮相引起粉丝的热捧"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0291.wav", "duration": 5.142, "text": "美商务部当天发表声明说"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0170.wav", "duration": 4.641, "text": "申请公积金购买第二套住房"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0483.wav", "duration": 7.2419375, "text": "新京报记者从首都国际机场公安分局相关人员处获悉"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0446.wav", "duration": 3.646, "text": "对一块闲置地监管没有跟上"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0281.wav", "duration": 5.817, "text": "他从未对产品被偷发表过任何评论"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0261.wav", "duration": 3.1900625, "text": "具有重大影响的科技产品还不是很多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0394.wav", "duration": 2.671, "text": "一日晚的中阿之战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0218.wav", "duration": 8.062, "text": "全面落实耕地和基本农田保护领导干部离任审计制度"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0467.wav", "duration": 2.944125, "text": "犯罪嫌疑人已被抓获"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0259.wav", "duration": 3.8459375, "text": "锌就会与胃酸发生反应"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0180.wav", "duration": 11.01, "text": "由二十二栋企业独栋和二栋二十层的五a级写字楼组成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0381.wav", "duration": 3.4559375, "text": "做了很多很多困难准备"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0266.wav", "duration": 7.0849375, "text": "利用电脑病毒却可以在一秒钟内从银行盗走过亿美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0333.wav", "duration": 4.0559375, "text": "以品质和服务黏住用户"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0440.wav", "duration": 6.7260625, "text": "港媒评中国游客全球爆买旅游幼稚病"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0265.wav", "duration": 5.8209375, "text": "但吃下去的药能否真正作用到病灶就很难说了"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0321.wav", "duration": 7.4240625, "text": "是白电上市企业今年的一季报几乎全部沦陷"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0330.wav", "duration": 6.161875, "text": "汉能对自身产品的议价能力推广力都将减弱"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0444.wav", "duration": 4.8349375, "text": "大兴灭门案的凶犯李磊被执行死刑后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0335.wav", "duration": 6.2270625, "text": "来自广西的苏女士说家长对孩子安全的关心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0443.wav", "duration": 3.688, "text": "李嘉诚首次对撤资做出回应"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0252.wav", "duration": 8.879, "text": "加强国家级农业标准化整建制推进示范县场建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0246.wav", "duration": 4.283, "text": "由其生产者实施召回"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0190.wav", "duration": 4.271, "text": "发挥骨干企业稳定市场的作用"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0178.wav", "duration": 8.797, "text": "外汇管理部门不予批准该企业的外汇借款结汇"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0174.wav", "duration": 3.4769375, "text": "来自广州日报的报道称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0463.wav", "duration": 3.3830625, "text": "李斯达手持尖刀的自拍照"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0455.wav", "duration": 3.0029375, "text": "集团新领导已经上任"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0220.wav", "duration": 3.3830625, "text": "建设动植物基因信息库"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0475.wav", "duration": 4.8820625, "text": "故宫博物院接待的观众量也日益攀升"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0366.wav", "duration": 5.5, "text": "加上一个仍在建的太舞四季滑雪场"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0185.wav", "duration": 3.1130625, "text": "原本短期内不考虑购房的客群"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0174.wav", "duration": 8.787, "text": "外商投资房地产企业注册资本金未全部缴付的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0464.wav", "duration": 3.327125, "text": "多了初为人母的幸福光彩"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0298.wav", "duration": 3.9500625, "text": "但是瑞士联合银行分析师估计"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0472.wav", "duration": 4.743875, "text": "网曝视频截图当街飞踢女群众"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0129.wav", "duration": 5.303, "text": "一二线城市用地紧张"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0148.wav", "duration": 4.271, "text": "根据中原地产研究中心最新数据"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0491.wav", "duration": 2.922875, "text": "想办法扑上去咬一口"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0313.wav", "duration": 7.4040625, "text": "对于小天才电话手表上课禁用功能"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0135.wav", "duration": 3.668, "text": "再结合近期限外政策全面松绑"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0232.wav", "duration": 5.6310625, "text": "完善监测防控监管等设施设备"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0270.wav", "duration": 7.1960625, "text": "同时将苹果持股比例由百分之四下调至百分之三"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0254.wav", "duration": 3.3189375, "text": "系涨幅最为明显的地区"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0385.wav", "duration": 4.269, "text": "在昨晚的女子标枪决赛中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0383.wav", "duration": 4.483875, "text": "这么多年一直要压抑自己的性取向"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0422.wav", "duration": 4.407, "text": "艺人谢婷婷从小就成为媒体焦点"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0130.wav", "duration": 3.1349375, "text": "目前总估值已过亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0473.wav", "duration": 4.0, "text": "参考消息网七月八日报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0325.wav", "duration": 4.313, "text": "也对美的集团的总体业绩影响不大"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0440.wav", "duration": 6.025875, "text": "中国日报网八月三日电据华尔街日报三日报道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0330.wav", "duration": 2.907, "text": "都会目不转睛的盯着"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0146.wav", "duration": 3.745, "text": "一线楼市成交量激增"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0371.wav", "duration": 5.6008125, "text": "女排三零阿根廷朱婷复出扣杀状态神勇"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0279.wav", "duration": 3.8410625, "text": "流动性从未得到足够的重视"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0327.wav", "duration": 5.8518125, "text": "专家提醒相关的产品认证也是消费者必须要关注的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0409.wav", "duration": 3.655, "text": "与陈妍希分别看向对方"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0350.wav", "duration": 9.115, "text": "下面小编将盘点本年度迄今为止昆仑决五大惨烈血战"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0272.wav", "duration": 4.1009375, "text": "反映了芯片行业出现整合热潮"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0407.wav", "duration": 5.532, "text": "科林之前已经积极的支持影片拍摄"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0441.wav", "duration": 4.3310625, "text": "关某先后被判死刑死缓"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0254.wav", "duration": 4.3150625, "text": "苹果股票价格创下历史新高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0248.wav", "duration": 3.375, "text": "推动其他地区加快发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0240.wav", "duration": 5.5179375, "text": "随着对商业银行设立基金管理公司门槛放宽"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0472.wav", "duration": 3.2009375, "text": "并贴出多张聊天记录截图"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0450.wav", "duration": 4.5839375, "text": "犯罪嫌疑人刘德怀等六人被刑拘"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0243.wav", "duration": 6.0970625, "text": "核安全法规标准体系与国际接轨"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0418.wav", "duration": 2.2480625, "text": "这裙子娇艳"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0331.wav", "duration": 3.9289375, "text": "但高端市场仍然难以企及"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0340.wav", "duration": 2.928, "text": "今天大家打得都挺好的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0281.wav", "duration": 6.114, "text": "价格高于六百美元的高端手机占比为百分之一"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0459.wav", "duration": 5.2260625, "text": "神秘气体成分及来源正在进一步核实"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0296.wav", "duration": 4.1319375, "text": "往往连最直接的目标都无法达成"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0226.wav", "duration": 3.012, "text": "加强农业资源和生态环境保护"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0474.wav", "duration": 3.9658125, "text": "一个人的精神生命就将走向衰老"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0197.wav", "duration": 8.3309375, "text": "加强以节水灌溉饲草地为重点的牧区水利建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0348.wav", "duration": 5.6479375, "text": "其中北京市区仅需要新建一座速滑场馆"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0321.wav", "duration": 4.3618125, "text": "自己只是执行公司的工作要求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0427.wav", "duration": 5.776875, "text": "陈奕迅双手合十认真地向蛋糕许愿"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0268.wav", "duration": 3.8350625, "text": "确认消费者喜新厌旧后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0210.wav", "duration": 2.8889375, "text": "占比只有百分之七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0411.wav", "duration": 2.822, "text": "近期他积极复出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0299.wav", "duration": 6.287, "text": "我根本无法想象每天在朋友圈上花两个小时的情景"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0360.wav", "duration": 3.827125, "text": "我这次的对手水平很高"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0168.wav", "duration": 3.25, "text": "在参与调查的网友中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0446.wav", "duration": 4.365, "text": "在年轻时也有着跳龙门的梦"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0330.wav", "duration": 3.9360625, "text": "判处有期徒刑三年六个月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0185.wav", "duration": 6.0919375, "text": "助力中国房地产开发企业发掘并实现更大的价值需求"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0290.wav", "duration": 4.3249375, "text": "预计从二零一五年下半年开始"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0244.wav", "duration": 7.1020625, "text": "也就是将债券还本压力在债券存续期内进行合理分摊"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0431.wav", "duration": 5.094, "text": "李玉刚离开蒙面歌王网友遗憾没听见神曲"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0433.wav", "duration": 9.0329375, "text": "贾某被市三中院终审判处有期徒刑两年八个月"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0243.wav", "duration": 6.2889375, "text": "采取积极有效的措施化解部分地区和领域的债务风险"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0258.wav", "duration": 4.5, "text": "为提高苹果零售商店的服务质量"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0396.wav", "duration": 3.5710625, "text": "半决赛对阵俄罗斯的比赛中"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0175.wav", "duration": 8.0, "text": "石榴中心位于丰台区宋家庄交通枢纽商圈"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0328.wav", "duration": 5.746125, "text": "往往在采购过程中尽量压低报价"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0437.wav", "duration": 5.391125, "text": "关于低价游旅行团因强制购物产生的纠纷事件频出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0180.wav", "duration": 3.6590625, "text": "瑞银分析师丁晓预测"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0161.wav", "duration": 3.871, "text": "唯独这样才能盘活公积金资源"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0177.wav", "duration": 3.0850625, "text": "此次公积金政策调整"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0304.wav", "duration": 7.033, "text": "加速推进中国服务器市场份额的第一目标"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0309.wav", "duration": 5.173, "text": "公司的汽车业务应该会有一些弱化"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0216.wav", "duration": 4.8609375, "text": "但是还需要进一步改进"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0418.wav", "duration": 4.7470625, "text": "他直言不想看见自己变作一潭死水"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0251.wav", "duration": 5.1900625, "text": "针对近期各种环境事件暴露出的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0471.wav", "duration": 4.058125, "text": "遇害女教师昨晚七时五七分"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0916/BAC009S0916W0253.wav", "duration": 3.0379375, "text": "中国的银行居垄断地位"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0376.wav", "duration": 2.5449375, "text": "因此一个眼神一个动作"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0324.wav", "duration": 3.499, "text": "美的空调进行自动化升级"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0395.wav", "duration": 5.380875, "text": "以前接触比较多的巴西队速度也很快"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0184.wav", "duration": 5.4390625, "text": "投资者担心这将加重人民币所面临的压力"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0492.wav", "duration": 4.661125, "text": "因火锅加水问题与顾客发生争执"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0477.wav", "duration": 5.303, "text": "参考消息网七月二九日报道港媒称"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0315.wav", "duration": 4.4079375, "text": "而手机被安装上这一插件后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0410.wav", "duration": 4.381125, "text": "众人一起为寿寿星女庆生"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0155.wav", "duration": 5.289, "text": "无论是降低二套房公积金首付比例"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0381.wav", "duration": 3.791, "text": "根据韩国乒乓球协会的相关规定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0143.wav", "duration": 3.961, "text": "还加大棚户区的改造任务"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0387.wav", "duration": 4.3149375, "text": "阿根廷队队长索萨认为"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0169.wav", "duration": 5.442, "text": "而重点城市的供应也在七月份下滑了百分之七"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0426.wav", "duration": 4.3049375, "text": "搜狐娱乐讯四月三十日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0316.wav", "duration": 6.1289375, "text": "同比减少百分之三十四毛利十四点六一亿港元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0142.wav", "duration": 4.992, "text": "广州调整住房公积金个人住房贷款政策"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0154.wav", "duration": 5.021, "text": "而其房源多在一百平方米以下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0240.wav", "duration": 3.729, "text": "规范技术和产品标准"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0327.wav", "duration": 4.0590625, "text": "由于各家之间竞争激烈"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0176.wav", "duration": 3.85, "text": "住建部官员发表文章指出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0908/BAC009S0908W0182.wav", "duration": 6.7559375, "text": "此次住建部财政部和中央联合发文"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0253.wav", "duration": 6.298, "text": "其在纳斯达克上市时的发行价为一六美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0456.wav", "duration": 7.993875, "text": "备受关注的青岛三八元一只大虾事件有最新发展"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0335.wav", "duration": 11.4340625, "text": "浪潮与海关总署启动战略合作助推智慧海关搜狐科技"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0143.wav", "duration": 8.189, "text": "但包括鄂尔多斯温州等地的去库存还是非常困难"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0473.wav", "duration": 5.52, "text": "被警方确认为新农村党支部书记毛家文"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0121.wav", "duration": 3.0920625, "text": "一线城市出现日光盘"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0463.wav", "duration": 6.6850625, "text": "日照市公安局官方微博通报了这一事件的调查情况"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0410.wav", "duration": 2.786125, "text": "她在台湾出席活动"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0123.wav", "duration": 5.151, "text": "土地市场交易火热的局面可能降温"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0326.wav", "duration": 7.666, "text": "其中第一期回购资金上限为二零一四年净利润的百分之二十五"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0365.wav", "duration": 4.5290625, "text": "最令德维塔感到不可思议的是"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0256.wav", "duration": 4.379, "text": "企业于某个领域称王称霸的一刻"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0312.wav", "duration": 6.506875, "text": "核心技术待突破自棱镜门事件之后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0342.wav", "duration": 3.9399375, "text": "成就了中国女排五连冠伟业"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0417.wav", "duration": 2.15575, "text": "他应该也是喜欢"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0398.wav", "duration": 3.3659375, "text": "在俄罗斯队的严密拦防下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0428.wav", "duration": 3.045875, "text": "是否会请教男友拍戏上的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0154.wav", "duration": 4.7530625, "text": "北京公积金贷款首付比例松绑一周后"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0401.wav", "duration": 4.9929375, "text": "要说一点儿没有遗憾和失落是假的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0337.wav", "duration": 4.9980625, "text": "公司上半年营业收入六点三四亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0338.wav", "duration": 5.364, "text": "医生此次将对惠若琪的心脏进行微创手术"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0309.wav", "duration": 6.390125, "text": "将家用空调事业部员工工人数缩减至两万人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0370.wav", "duration": 6.444125, "text": "但朱婷与队友们合力打出了一波八比二的高潮"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0490.wav", "duration": 5.001, "text": "至七月一六日中午已有五人去世"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0372.wav", "duration": 3.9350625, "text": "曾春蕾认为中国女排的困难体现在伤病多"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0228.wav", "duration": 4.537, "text": "多油并举稳定食用植物油自给率"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0433.wav", "duration": 8.3520625, "text": "游客抢订冬奥运旅游团因遭遇订票难住房等"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0140.wav", "duration": 4.875, "text": "公积金贷款利率也数次下调"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0199.wav", "duration": 6.548, "text": "以七区二十三带农业战略格局为核心"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0433.wav", "duration": 4.355, "text": "这种低价游自称费用全包"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0133.wav", "duration": 6.245, "text": "选择恒大世茂富力的网友均不足百分之十"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0446.wav", "duration": 5.9179375, "text": "遭追讨欠款和抚养费共四零万元人民币"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0398.wav", "duration": 3.6909375, "text": "卢卡斯亚库比泽克"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0244.wav", "duration": 5.7270625, "text": "在我国出现政府性债务违约的可能性是不大的"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0382.wav", "duration": 8.322, "text": "自己和庞清曾在赛场上努力地追求优秀更优秀"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0373.wav", "duration": 7.254875, "text": "他是否接受外卡参赛要视情况而定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0249.wav", "duration": 4.2839375, "text": "省交通部门称目前未定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0165.wav", "duration": 6.77, "text": "将依照中外合资经营企业的相关暂行规定"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0450.wav", "duration": 3.8210625, "text": "现代快报记者注意到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0901/BAC009S0901W0327.wav", "duration": 6.344, "text": "各方本着互惠互利优势互补合作共赢的原则"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0177.wav", "duration": 4.5979375, "text": "投资价值更好房企看好"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0354.wav", "duration": 2.994875, "text": "终于得到了释放的样子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0340.wav", "duration": 5.114, "text": "称高桥大辅可能在一段时间里出柜"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0906/BAC009S0906W0383.wav", "duration": 2.8930625, "text": "二零一五年六月七日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0488.wav", "duration": 4.6911875, "text": "且产地均指向广东省湛江市"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0907/BAC009S0907W0286.wav", "duration": 5.5739375, "text": "乔斯维亚克还为苹果平板电脑业务做了辩护"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0399.wav", "duration": 2.7690625, "text": "搜狐体育郭健文"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0124.wav", "duration": 5.019, "text": "因此操作环节的快捷性与便捷性非常重要"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0369.wav", "duration": 4.6469375, "text": "心肌同位素扫描显示局部灌注差"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0293.wav", "duration": 5.5, "text": "电池的技术难题最终导致了它的延迟推出"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0332.wav", "duration": 4.937, "text": "一位股份制银行科技部负责人如此讲述"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0912/BAC009S0912W0234.wav", "duration": 4.6500625, "text": "严格化学品环境管理"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0456.wav", "duration": 3.902125, "text": "沙洲几乎年年被淹"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0382.wav", "duration": 5.1540625, "text": "分别是发接传垫扣"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0132.wav", "duration": 4.34, "text": "全国商品房销售额两万亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0214.wav", "duration": 10.608, "text": "为各地的基础建设设提供有制度保障的融资渠道"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0266.wav", "duration": 6.5300625, "text": "每股报价报收于一百一十一点二七美元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0331.wav", "duration": 5.6739375, "text": "收盘价十三点六五元于七月八日发布公告"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0902/BAC009S0902W0493.wav", "duration": 5.026875, "text": "法晚深度即时记者杜雯雯实习生张明明近日"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0354.wav", "duration": 4.5659375, "text": "身体质量指数平均为二十三点四"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0298.wav", "duration": 4.796, "text": "这家市值离万亿美元不远的股王"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0914/BAC009S0914W0260.wav", "duration": 3.906, "text": "才能显得像个知识分子"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0904/BAC009S0904W0247.wav", "duration": 3.802, "text": "大力推进农村清洁工程建设"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0194.wav", "duration": 5.5550625, "text": "中国证券报从您刚才的介绍中我们了解到"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0402.wav", "duration": 8.2741875, "text": "北京和张家口两地的生产总值是二万二千七百三十点八亿元"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0903/BAC009S0903W0251.wav", "duration": 5.145, "text": "推行统一的标准操作规程和技术规范"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0915/BAC009S0915W0260.wav", "duration": 7.162, "text": "这也影响着移动支付市场的总体进程和发展方向"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0770/BAC009S0770W0162.wav", "duration": 4.9929375, "text": "政策放松和高库存背景下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0913/BAC009S0913W0339.wav", "duration": 5.828, "text": "剪纸皮影戏等特色节目更是吸引了一批批观众围观"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0210.wav", "duration": 3.9279375, "text": "切实降低农产品流通成本"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0905/BAC009S0905W0125.wav", "duration": 6.2209375, "text": "这一公积金新政实际上仍然存在很多门槛"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0769/BAC009S0769W0151.wav", "duration": 4.834, "text": "对于今后棚户区改造中遇到的问题"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0766/BAC009S0766W0126.wav", "duration": 3.575, "text": "今久整合营销集团就是如此"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0767/BAC009S0767W0124.wav", "duration": 3.778, "text": "今久从最初的几十个人"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0275.wav", "duration": 10.801, "text": "美商务部与国际贸易委员会都需作出肯定性终裁"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0765/BAC009S0765W0146.wav", "duration": 3.4330625, "text": "虽然房产是在信托的名下"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0768/BAC009S0768W0412.wav", "duration": 4.1630625, "text": "自小卖得一脸好萌"} +{"audio_filepath": "aishell-test-dev-manifests/aishell/data_aishell/wav/test/S0764/BAC009S0764W0454.wav", "duration": 3.4309375, "text": "现代快报记者胡玉梅"} diff --git a/funasr/runtime/triton_gpu/client/decode_manifest_triton.py b/funasr/runtime/triton_gpu/client/decode_manifest_triton.py new file mode 100644 index 000000000..3a8d57fed --- /dev/null +++ b/funasr/runtime/triton_gpu/client/decode_manifest_triton.py @@ -0,0 +1,541 @@ +#!/usr/bin/env python3 +# Copyright 2022 Xiaomi Corp. (authors: Fangjun Kuang) +# 2023 Nvidia (authors: Yuekai Zhang) +# See LICENSE for clarification regarding multiple authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" +This script loads a manifest in lhotse format and sends it to the server +for decoding, in parallel. + +Usage: +# For offline wenet server +./decode_manifest_triton.py \ + --server-addr localhost \ + --compute-cer \ + --model-name attention_rescoring \ + --num-tasks 300 \ + --manifest-filename ./aishell-test-dev-manifests/data/fbank/aishell_cuts_test.jsonl.gz # noqa + +# For streaming wenet server +./decode_manifest_triton.py \ + --server-addr localhost \ + --streaming \ + --compute-cer \ + --context 7 \ + --model-name streaming_wenet \ + --num-tasks 300 \ + --manifest-filename ./aishell-test-dev-manifests/data/fbank/aishell_cuts_test.jsonl.gz # noqa + +# For simulate streaming mode wenet server +./decode_manifest_triton.py \ + --server-addr localhost \ + --simulate-streaming \ + --compute-cer \ + --context 7 \ + --model-name streaming_wenet \ + --num-tasks 300 \ + --manifest-filename ./aishell-test-dev-manifests/data/fbank/aishell_cuts_test.jsonl.gz # noqa + +# For test container: +docker run -it --rm --name "wenet_client_test" --net host --gpus all soar97/triton-k2:22.12.1 # noqa + +# For aishell manifests: +apt-get install git-lfs +git-lfs install +git clone https://huggingface.co/csukuangfj/aishell-test-dev-manifests +sudo mkdir -p /root/fangjun/open-source/icefall-aishell/egs/aishell/ASR/download/aishell +tar xf ./aishell-test-dev-manifests/data_aishell.tar.gz -C /root/fangjun/open-source/icefall-aishell/egs/aishell/ASR/download/aishell/ # noqa + +""" + +import argparse +import asyncio +import math +import time +import types +from pathlib import Path +import json +import numpy as np +import tritonclient +import tritonclient.grpc.aio as grpcclient +from lhotse import CutSet, load_manifest +from tritonclient.utils import np_to_triton_dtype + +from icefall.utils import store_transcripts, write_error_stats + +DEFAULT_MANIFEST_FILENAME = "/mnt/samsung-t7/yuekai/aishell-test-dev-manifests/data/fbank/aishell_cuts_test.jsonl.gz" # noqa + + +def get_args(): + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter + ) + + parser.add_argument( + "--server-addr", + type=str, + default="localhost", + help="Address of the server", + ) + + parser.add_argument( + "--server-port", + type=int, + default=8001, + help="Port of the server", + ) + + parser.add_argument( + "--manifest-filename", + type=str, + default=DEFAULT_MANIFEST_FILENAME, + help="Path to the manifest for decoding", + ) + + parser.add_argument( + "--model-name", + type=str, + default="transducer", + help="triton model_repo module name to request", + ) + + parser.add_argument( + "--num-tasks", + type=int, + default=50, + help="Number of tasks to use for sending", + ) + + parser.add_argument( + "--log-interval", + type=int, + default=5, + help="Controls how frequently we print the log.", + ) + + parser.add_argument( + "--compute-cer", + action="store_true", + default=False, + help="""True to compute CER, e.g., for Chinese. + False to compute WER, e.g., for English words. + """, + ) + + parser.add_argument( + "--streaming", + action="store_true", + default=False, + help="""True for streaming ASR. + """, + ) + + parser.add_argument( + "--simulate-streaming", + action="store_true", + default=False, + help="""True for strictly simulate streaming ASR. + Threads will sleep to simulate the real speaking scene. + """, + ) + + parser.add_argument( + "--chunk_size", + type=int, + required=False, + default=16, + help="chunk size default is 16", + ) + + parser.add_argument( + "--context", + type=int, + required=False, + default=-1, + help="subsampling context for wenet", + ) + + parser.add_argument( + "--encoder_right_context", + type=int, + required=False, + default=2, + help="encoder right context", + ) + + parser.add_argument( + "--subsampling", + type=int, + required=False, + default=4, + help="subsampling rate", + ) + + parser.add_argument( + "--stats_file", + type=str, + required=False, + default="./stats.json", + help="output of stats anaylasis", + ) + + return parser.parse_args() + + +async def send( + cuts: CutSet, + name: str, + triton_client: tritonclient.grpc.aio.InferenceServerClient, + protocol_client: types.ModuleType, + log_interval: int, + compute_cer: bool, + model_name: str, +): + total_duration = 0.0 + results = [] + + for i, c in enumerate(cuts): + if i % log_interval == 0: + print(f"{name}: {i}/{len(cuts)}") + + waveform = c.load_audio().reshape(-1).astype(np.float32) + sample_rate = 16000 + + # padding to nearset 10 seconds + samples = np.zeros( + ( + 1, + 10 * sample_rate * (int(len(waveform) / sample_rate // 10) + 1), + ), + dtype=np.float32, + ) + samples[0, : len(waveform)] = waveform + + lengths = np.array([[len(waveform)]], dtype=np.int32) + + inputs = [ + protocol_client.InferInput( + "WAV", samples.shape, np_to_triton_dtype(samples.dtype) + ), + protocol_client.InferInput( + "WAV_LENS", lengths.shape, np_to_triton_dtype(lengths.dtype) + ), + ] + inputs[0].set_data_from_numpy(samples) + inputs[1].set_data_from_numpy(lengths) + outputs = [protocol_client.InferRequestedOutput("TRANSCRIPTS")] + sequence_id = 10086 + i + + response = await triton_client.infer( + model_name, inputs, request_id=str(sequence_id), outputs=outputs + ) + + decoding_results = response.as_numpy("TRANSCRIPTS")[0] + if type(decoding_results) == np.ndarray: + decoding_results = b" ".join(decoding_results).decode("utf-8") + else: + # For wenet + decoding_results = decoding_results.decode("utf-8") + + total_duration += c.duration + + if compute_cer: + ref = c.supervisions[0].text.split() + hyp = decoding_results.split() + ref = list("".join(ref)) + hyp = list("".join(hyp)) + results.append((c.id, ref, hyp)) + else: + results.append( + ( + c.id, + c.supervisions[0].text.split(), + decoding_results.split(), + ) + ) # noqa + + return total_duration, results + + +async def send_streaming( + cuts: CutSet, + name: str, + triton_client: tritonclient.grpc.aio.InferenceServerClient, + protocol_client: types.ModuleType, + log_interval: int, + compute_cer: bool, + model_name: str, + first_chunk_in_secs: float, + other_chunk_in_secs: float, + task_index: int, + simulate_mode: bool = False, +): + total_duration = 0.0 + results = [] + latency_data = [] + + for i, c in enumerate(cuts): + if i % log_interval == 0: + print(f"{name}: {i}/{len(cuts)}") + + waveform = c.load_audio().reshape(-1).astype(np.float32) + sample_rate = 16000 + + wav_segs = [] + + j = 0 + while j < len(waveform): + if j == 0: + stride = int(first_chunk_in_secs * sample_rate) + wav_segs.append(waveform[j : j + stride]) + else: + stride = int(other_chunk_in_secs * sample_rate) + wav_segs.append(waveform[j : j + stride]) + j += len(wav_segs[-1]) + + sequence_id = task_index + 10086 + + for idx, seg in enumerate(wav_segs): + chunk_len = len(seg) + + if simulate_mode: + await asyncio.sleep(chunk_len / sample_rate) + + chunk_start = time.time() + if idx == 0: + chunk_samples = int(first_chunk_in_secs * sample_rate) + expect_input = np.zeros((1, chunk_samples), dtype=np.float32) + else: + chunk_samples = int(other_chunk_in_secs * sample_rate) + expect_input = np.zeros((1, chunk_samples), dtype=np.float32) + + expect_input[0][0:chunk_len] = seg + input0_data = expect_input + input1_data = np.array([[chunk_len]], dtype=np.int32) + + inputs = [ + protocol_client.InferInput( + "WAV", + input0_data.shape, + np_to_triton_dtype(input0_data.dtype), + ), + protocol_client.InferInput( + "WAV_LENS", + input1_data.shape, + np_to_triton_dtype(input1_data.dtype), + ), + ] + + inputs[0].set_data_from_numpy(input0_data) + inputs[1].set_data_from_numpy(input1_data) + + outputs = [protocol_client.InferRequestedOutput("TRANSCRIPTS")] + end = False + if idx == len(wav_segs) - 1: + end = True + + response = await triton_client.infer( + model_name, + inputs, + outputs=outputs, + sequence_id=sequence_id, + sequence_start=idx == 0, + sequence_end=end, + ) + idx += 1 + + decoding_results = response.as_numpy("TRANSCRIPTS") + if type(decoding_results) == np.ndarray: + decoding_results = b" ".join(decoding_results).decode("utf-8") + else: + # For wenet + decoding_results = response.as_numpy("TRANSCRIPTS")[0].decode( + "utf-8" + ) + chunk_end = time.time() - chunk_start + latency_data.append((chunk_end, chunk_len / sample_rate)) + + total_duration += c.duration + + if compute_cer: + ref = c.supervisions[0].text.split() + hyp = decoding_results.split() + ref = list("".join(ref)) + hyp = list("".join(hyp)) + results.append((c.id, ref, hyp)) + else: + results.append( + ( + c.id, + c.supervisions[0].text.split(), + decoding_results.split(), + ) + ) # noqa + + return total_duration, results, latency_data + + +async def main(): + args = get_args() + filename = args.manifest_filename + server_addr = args.server_addr + server_port = args.server_port + url = f"{server_addr}:{server_port}" + num_tasks = args.num_tasks + log_interval = args.log_interval + compute_cer = args.compute_cer + + cuts = load_manifest(filename) + cuts_list = cuts.split(num_tasks) + tasks = [] + + triton_client = grpcclient.InferenceServerClient(url=url, verbose=False) + protocol_client = grpcclient + + if args.streaming or args.simulate_streaming: + frame_shift_ms = 10 + frame_length_ms = 25 + add_frames = math.ceil( + (frame_length_ms - frame_shift_ms) / frame_shift_ms + ) + # decode_window_length: input sequence length of streaming encoder + if args.context > 0: + # decode window length calculation for wenet + decode_window_length = ( + args.chunk_size - 1 + ) * args.subsampling + args.context + else: + # decode window length calculation for icefall + decode_window_length = ( + args.chunk_size + 2 + args.encoder_right_context + ) * args.subsampling + 3 + + first_chunk_ms = (decode_window_length + add_frames) * frame_shift_ms + + start_time = time.time() + for i in range(num_tasks): + if args.streaming: + assert not args.simulate_streaming + task = asyncio.create_task( + send_streaming( + cuts=cuts_list[i], + name=f"task-{i}", + triton_client=triton_client, + protocol_client=protocol_client, + log_interval=log_interval, + compute_cer=compute_cer, + model_name=args.model_name, + first_chunk_in_secs=first_chunk_ms / 1000, + other_chunk_in_secs=args.chunk_size + * args.subsampling + * frame_shift_ms + / 1000, + task_index=i, + ) + ) + elif args.simulate_streaming: + task = asyncio.create_task( + send_streaming( + cuts=cuts_list[i], + name=f"task-{i}", + triton_client=triton_client, + protocol_client=protocol_client, + log_interval=log_interval, + compute_cer=compute_cer, + model_name=args.model_name, + first_chunk_in_secs=first_chunk_ms / 1000, + other_chunk_in_secs=args.chunk_size + * args.subsampling + * frame_shift_ms + / 1000, + task_index=i, + simulate_mode=True, + ) + ) + else: + task = asyncio.create_task( + send( + cuts=cuts_list[i], + name=f"task-{i}", + triton_client=triton_client, + protocol_client=protocol_client, + log_interval=log_interval, + compute_cer=compute_cer, + model_name=args.model_name, + ) + ) + tasks.append(task) + + ans_list = await asyncio.gather(*tasks) + + end_time = time.time() + elapsed = end_time - start_time + + results = [] + total_duration = 0.0 + latency_data = [] + for ans in ans_list: + total_duration += ans[0] + results += ans[1] + if args.streaming or args.simulate_streaming: + latency_data += ans[2] + + rtf = elapsed / total_duration + + s = f"RTF: {rtf:.4f}\n" + s += f"total_duration: {total_duration:.3f} seconds\n" + s += f"({total_duration/3600:.2f} hours)\n" + s += ( + f"processing time: {elapsed:.3f} seconds " + f"({elapsed/3600:.2f} hours)\n" + ) + + if args.streaming or args.simulate_streaming: + latency_list = [ + chunk_end for (chunk_end, chunk_duration) in latency_data + ] + latency_ms = sum(latency_list) / float(len(latency_list)) * 1000.0 + latency_variance = np.var(latency_list, dtype=np.float64) * 1000.0 + s += f"latency_variance: {latency_variance:.2f}\n" + s += f"latency_50_percentile: {np.percentile(latency_list, 50) * 1000.0:.2f}\n" + s += f"latency_90_percentile: {np.percentile(latency_list, 90) * 1000.0:.2f}\n" + s += f"latency_99_percentile: {np.percentile(latency_list, 99) * 1000.0:.2f}\n" + s += f"average_latency_ms: {latency_ms:.2f}\n" + + print(s) + + with open("rtf.txt", "w") as f: + f.write(s) + + name = Path(filename).stem.split(".")[0] + results = sorted(results) + store_transcripts(filename=f"recogs-{name}.txt", texts=results) + + with open(f"errs-{name}.txt", "w") as f: + write_error_stats(f, "test-set", results, enable_log=True) + + with open(f"errs-{name}.txt", "r") as f: + print(f.readline()) # WER + print(f.readline()) # Detailed errors + + if args.stats_file: + stats = await triton_client.get_inference_statistics( + model_name="", as_json=True + ) + with open(args.stats_file, "w") as f: + json.dump(stats, f) + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/funasr/runtime/triton_gpu/client/decode_manifest_triton_wo_cuts.py b/funasr/runtime/triton_gpu/client/decode_manifest_triton_wo_cuts.py new file mode 100644 index 000000000..ad121c60d --- /dev/null +++ b/funasr/runtime/triton_gpu/client/decode_manifest_triton_wo_cuts.py @@ -0,0 +1,561 @@ +#!/usr/bin/env python3 +# Copyright 2022 Xiaomi Corp. (authors: Fangjun Kuang) +# 2023 Nvidia (authors: Yuekai Zhang) +# 2023 Recurrent.ai (authors: Songtao Shi) +# See LICENSE for clarification regarding multiple authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" +This script loads a manifest in nemo format and sends it to the server +for decoding, in parallel. + +{'audio_filepath':'','text':'',duration:}\n +{'audio_filepath':'','text':'',duration:}\n + +Usage: +# For aishell manifests: +apt-get install git-lfs +git-lfs install +git clone https://huggingface.co/csukuangfj/aishell-test-dev-manifests +sudo mkdir -p ./aishell-test-dev-manifests/aishell +tar xf ./aishell-test-dev-manifests/data_aishell.tar.gz -C ./aishell-test-dev-manifests/aishell # noqa + + +# cmd run +manifest_path='./client/aishell_test.txt' +serveraddr=localhost +num_task=60 +python3 client/decode_manifest_triton_wo_cuts.py \ + --server-addr $serveraddr \ + --compute-cer \ + --model-name infer_pipeline \ + --num-tasks $num_task \ + --manifest-filename $manifest_path \ +""" + +from pydub import AudioSegment +import argparse +import asyncio +import math +import time +import types +from pathlib import Path +import json +import os +import numpy as np +import tritonclient +import tritonclient.grpc.aio as grpcclient +from tritonclient.utils import np_to_triton_dtype + +from icefall.utils import store_transcripts, write_error_stats + +DEFAULT_MANIFEST_FILENAME = "./aishell_test.txt" # noqa +DEFAULT_ROOT = './' +DEFAULT_ROOT = '/mfs/songtao/researchcode/FunASR/data/' + + +def get_args(): + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter + ) + + parser.add_argument( + "--server-addr", + type=str, + default="localhost", + help="Address of the server", + ) + + parser.add_argument( + "--server-port", + type=int, + default=8001, + help="Port of the server", + ) + + parser.add_argument( + "--manifest-filename", + type=str, + default=DEFAULT_MANIFEST_FILENAME, + help="Path to the manifest for decoding", + ) + + parser.add_argument( + "--model-name", + type=str, + default="transducer", + help="triton model_repo module name to request", + ) + + parser.add_argument( + "--num-tasks", + type=int, + default=50, + help="Number of tasks to use for sending", + ) + + parser.add_argument( + "--log-interval", + type=int, + default=5, + help="Controls how frequently we print the log.", + ) + + parser.add_argument( + "--compute-cer", + action="store_true", + default=False, + help="""True to compute CER, e.g., for Chinese. + False to compute WER, e.g., for English words. + """, + ) + + parser.add_argument( + "--streaming", + action="store_true", + default=False, + help="""True for streaming ASR. + """, + ) + + parser.add_argument( + "--simulate-streaming", + action="store_true", + default=False, + help="""True for strictly simulate streaming ASR. + Threads will sleep to simulate the real speaking scene. + """, + ) + + parser.add_argument( + "--chunk_size", + type=int, + required=False, + default=16, + help="chunk size default is 16", + ) + + parser.add_argument( + "--context", + type=int, + required=False, + default=-1, + help="subsampling context for wenet", + ) + + parser.add_argument( + "--encoder_right_context", + type=int, + required=False, + default=2, + help="encoder right context", + ) + + parser.add_argument( + "--subsampling", + type=int, + required=False, + default=4, + help="subsampling rate", + ) + + parser.add_argument( + "--stats_file", + type=str, + required=False, + default="./stats.json", + help="output of stats anaylasis", + ) + + return parser.parse_args() + + +def load_manifest(fp): + data = [] + with open(fp) as f: + for i, dp in enumerate(f.readlines()): + dp = eval(dp) + dp['id'] = i + data.append(dp) + return data + + +def split_dps(dps, num_tasks): + dps_splited = [] + # import pdb;pdb.set_trace() + assert len(dps) > num_tasks + + one_task_num = len(dps)//num_tasks + for i in range(0, len(dps), one_task_num): + if i+one_task_num >= len(dps): + for k, j in enumerate(range(i, len(dps))): + dps_splited[k].append(dps[j]) + else: + dps_splited.append(dps[i:i+one_task_num]) + return dps_splited + + +def load_audio(path): + audio = AudioSegment.from_wav(path).set_frame_rate(16000).set_channels(1) + audiop_np = np.array(audio.get_array_of_samples())/32768.0 + return audiop_np.astype(np.float32), audio.duration_seconds + + +async def send( + dps: list, + name: str, + triton_client: tritonclient.grpc.aio.InferenceServerClient, + protocol_client: types.ModuleType, + log_interval: int, + compute_cer: bool, + model_name: str, +): + total_duration = 0.0 + results = [] + + for i, dp in enumerate(dps): + if i % log_interval == 0: + print(f"{name}: {i}/{len(dps)}") + + waveform, duration = load_audio( + os.path.join(DEFAULT_ROOT, dp['audio_filepath'])) + sample_rate = 16000 + + # padding to nearset 10 seconds + samples = np.zeros( + ( + 1, + 10 * sample_rate * + (int(len(waveform) / sample_rate // 10) + 1), + ), + dtype=np.float32, + ) + samples[0, : len(waveform)] = waveform + + lengths = np.array([[len(waveform)]], dtype=np.int32) + + inputs = [ + protocol_client.InferInput( + "WAV", samples.shape, np_to_triton_dtype(samples.dtype) + ), + protocol_client.InferInput( + "WAV_LENS", lengths.shape, np_to_triton_dtype(lengths.dtype) + ), + ] + inputs[0].set_data_from_numpy(samples) + inputs[1].set_data_from_numpy(lengths) + outputs = [protocol_client.InferRequestedOutput("TRANSCRIPTS")] + sequence_id = 10086 + i + + response = await triton_client.infer( + model_name, inputs, request_id=str(sequence_id), outputs=outputs + ) + + decoding_results = response.as_numpy("TRANSCRIPTS")[0] + if type(decoding_results) == np.ndarray: + decoding_results = b" ".join(decoding_results).decode("utf-8") + else: + # For wenet + decoding_results = decoding_results.decode("utf-8") + + total_duration += duration + + if compute_cer: + ref = dp['text'].split() + hyp = decoding_results.split() + ref = list("".join(ref)) + hyp = list("".join(hyp)) + results.append((dp['id'], ref, hyp)) + else: + results.append( + ( + dp['id'], + dp['text'].split(), + decoding_results.split(), + ) + ) # noqa + + return total_duration, results + + +async def send_streaming( + dps: list, + name: str, + triton_client: tritonclient.grpc.aio.InferenceServerClient, + protocol_client: types.ModuleType, + log_interval: int, + compute_cer: bool, + model_name: str, + first_chunk_in_secs: float, + other_chunk_in_secs: float, + task_index: int, + simulate_mode: bool = False, +): + total_duration = 0.0 + results = [] + latency_data = [] + + for i, dp in enumerate(dps): + if i % log_interval == 0: + print(f"{name}: {i}/{len(dps)}") + + waveform, duration = load_audio(dp['audio_filepath']) + sample_rate = 16000 + + wav_segs = [] + + j = 0 + while j < len(waveform): + if j == 0: + stride = int(first_chunk_in_secs * sample_rate) + wav_segs.append(waveform[j: j + stride]) + else: + stride = int(other_chunk_in_secs * sample_rate) + wav_segs.append(waveform[j: j + stride]) + j += len(wav_segs[-1]) + + sequence_id = task_index + 10086 + + for idx, seg in enumerate(wav_segs): + chunk_len = len(seg) + + if simulate_mode: + await asyncio.sleep(chunk_len / sample_rate) + + chunk_start = time.time() + if idx == 0: + chunk_samples = int(first_chunk_in_secs * sample_rate) + expect_input = np.zeros((1, chunk_samples), dtype=np.float32) + else: + chunk_samples = int(other_chunk_in_secs * sample_rate) + expect_input = np.zeros((1, chunk_samples), dtype=np.float32) + + expect_input[0][0:chunk_len] = seg + input0_data = expect_input + input1_data = np.array([[chunk_len]], dtype=np.int32) + + inputs = [ + protocol_client.InferInput( + "WAV", + input0_data.shape, + np_to_triton_dtype(input0_data.dtype), + ), + protocol_client.InferInput( + "WAV_LENS", + input1_data.shape, + np_to_triton_dtype(input1_data.dtype), + ), + ] + + inputs[0].set_data_from_numpy(input0_data) + inputs[1].set_data_from_numpy(input1_data) + + outputs = [protocol_client.InferRequestedOutput("TRANSCRIPTS")] + end = False + if idx == len(wav_segs) - 1: + end = True + + response = await triton_client.infer( + model_name, + inputs, + outputs=outputs, + sequence_id=sequence_id, + sequence_start=idx == 0, + sequence_end=end, + ) + idx += 1 + + decoding_results = response.as_numpy("TRANSCRIPTS") + if type(decoding_results) == np.ndarray: + decoding_results = b" ".join(decoding_results).decode("utf-8") + else: + # For wenet + decoding_results = response.as_numpy("TRANSCRIPTS")[0].decode( + "utf-8" + ) + chunk_end = time.time() - chunk_start + latency_data.append((chunk_end, chunk_len / sample_rate)) + + total_duration += duration + + if compute_cer: + ref = dp['text'].split() + hyp = decoding_results.split() + ref = list("".join(ref)) + hyp = list("".join(hyp)) + results.append((dp['id'], ref, hyp)) + else: + results.append( + ( + dp['id'], + dp['text'].split(), + decoding_results.split(), + ) + ) # noqa + + return total_duration, results, latency_data + + +async def main(): + args = get_args() + filename = args.manifest_filename + server_addr = args.server_addr + server_port = args.server_port + url = f"{server_addr}:{server_port}" + num_tasks = args.num_tasks + log_interval = args.log_interval + compute_cer = args.compute_cer + + dps = load_manifest(filename) + dps_list = split_dps(dps, num_tasks) + tasks = [] + + triton_client = grpcclient.InferenceServerClient(url=url, verbose=False) + protocol_client = grpcclient + + if args.streaming or args.simulate_streaming: + frame_shift_ms = 10 + frame_length_ms = 25 + add_frames = math.ceil( + (frame_length_ms - frame_shift_ms) / frame_shift_ms + ) + # decode_window_length: input sequence length of streaming encoder + if args.context > 0: + # decode window length calculation for wenet + decode_window_length = ( + args.chunk_size - 1 + ) * args.subsampling + args.context + else: + # decode window length calculation for icefall + decode_window_length = ( + args.chunk_size + 2 + args.encoder_right_context + ) * args.subsampling + 3 + + first_chunk_ms = (decode_window_length + add_frames) * frame_shift_ms + + start_time = time.time() + for i in range(num_tasks): + if args.streaming: + assert not args.simulate_streaming + task = asyncio.create_task( + send_streaming( + dps=dps_list[i], + name=f"task-{i}", + triton_client=triton_client, + protocol_client=protocol_client, + log_interval=log_interval, + compute_cer=compute_cer, + model_name=args.model_name, + first_chunk_in_secs=first_chunk_ms / 1000, + other_chunk_in_secs=args.chunk_size + * args.subsampling + * frame_shift_ms + / 1000, + task_index=i, + ) + ) + elif args.simulate_streaming: + task = asyncio.create_task( + send_streaming( + dps=dps_list[i], + name=f"task-{i}", + triton_client=triton_client, + protocol_client=protocol_client, + log_interval=log_interval, + compute_cer=compute_cer, + model_name=args.model_name, + first_chunk_in_secs=first_chunk_ms / 1000, + other_chunk_in_secs=args.chunk_size + * args.subsampling + * frame_shift_ms + / 1000, + task_index=i, + simulate_mode=True, + ) + ) + else: + task = asyncio.create_task( + send( + dps=dps_list[i], + name=f"task-{i}", + triton_client=triton_client, + protocol_client=protocol_client, + log_interval=log_interval, + compute_cer=compute_cer, + model_name=args.model_name, + ) + ) + tasks.append(task) + + ans_list = await asyncio.gather(*tasks) + + end_time = time.time() + elapsed = end_time - start_time + + results = [] + total_duration = 0.0 + latency_data = [] + for ans in ans_list: + total_duration += ans[0] + results += ans[1] + if args.streaming or args.simulate_streaming: + latency_data += ans[2] + + rtf = elapsed / total_duration + + s = f"RTF: {rtf:.4f}\n" + s += f"total_duration: {total_duration:.3f} seconds\n" + s += f"({total_duration/3600:.2f} hours)\n" + s += ( + f"processing time: {elapsed:.3f} seconds " + f"({elapsed/3600:.2f} hours)\n" + ) + + if args.streaming or args.simulate_streaming: + latency_list = [ + chunk_end for (chunk_end, chunk_duration) in latency_data + ] + latency_ms = sum(latency_list) / float(len(latency_list)) * 1000.0 + latency_variance = np.var(latency_list, dtype=np.float64) * 1000.0 + s += f"latency_variance: {latency_variance:.2f}\n" + s += f"latency_50_percentile: {np.percentile(latency_list, 50) * 1000.0:.2f}\n" + s += f"latency_90_percentile: {np.percentile(latency_list, 90) * 1000.0:.2f}\n" + s += f"latency_99_percentile: {np.percentile(latency_list, 99) * 1000.0:.2f}\n" + s += f"average_latency_ms: {latency_ms:.2f}\n" + + print(s) + + with open("rtf.txt", "w") as f: + f.write(s) + + name = Path(filename).stem.split(".")[0] + results = sorted(results) + store_transcripts(filename=f"recogs-{name}.txt", texts=results) + + with open(f"errs-{name}.txt", "w") as f: + write_error_stats(f, "test-set", results, enable_log=True) + + with open(f"errs-{name}.txt", "r") as f: + print(f.readline()) # WER + print(f.readline()) # Detailed errors + + if args.stats_file: + stats = await triton_client.get_inference_statistics( + model_name="", as_json=True + ) + with open(args.stats_file, "w") as f: + json.dump(stats, f) + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/encoder/config.pbtxt b/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/encoder/config.pbtxt index 8d8999340..3cb657e5c 100644 --- a/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/encoder/config.pbtxt +++ b/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/encoder/config.pbtxt @@ -40,7 +40,7 @@ output [ }, { name: "token_num" - data_type: TYPE_INT64 + data_type: TYPE_INT32 dims: [1] reshape: { shape: [ ] } } diff --git a/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/feature_extractor/1/model.py b/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/feature_extractor/1/model.py index 6464964fd..2f84bb8fc 100644 --- a/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/feature_extractor/1/model.py +++ b/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/feature_extractor/1/model.py @@ -105,8 +105,8 @@ class WavFrontend(): frame_shift: int = 10, filter_length_min: int = -1, filter_length_max: float = -1, - lfr_m: int = 1, - lfr_n: int = 1, + lfr_m: int = 7, + lfr_n: int = 6, dither: float = 1.0 ) -> None: # check_argument_types() @@ -229,22 +229,24 @@ class TritonPythonModel: if key == "config_path": with open(str(value), 'rb') as f: config = yaml.load(f, Loader=yaml.Loader) + if key == "cmvn_path": + cmvn_path = str(value) opts = kaldifeat.FbankOptions() opts.frame_opts.dither = 1.0 # TODO: 0.0 or 1.0 - opts.frame_opts.window_type = config['WavFrontend']['frontend_conf']['window'] - opts.mel_opts.num_bins = int(config['WavFrontend']['frontend_conf']['n_mels']) - opts.frame_opts.frame_shift_ms = float(config['WavFrontend']['frontend_conf']['frame_shift']) - opts.frame_opts.frame_length_ms = float(config['WavFrontend']['frontend_conf']['frame_length']) - opts.frame_opts.samp_freq = int(config['WavFrontend']['frontend_conf']['fs']) + opts.frame_opts.window_type = config['frontend_conf']['window'] + opts.mel_opts.num_bins = int(config['frontend_conf']['n_mels']) + opts.frame_opts.frame_shift_ms = float(config['frontend_conf']['frame_shift']) + opts.frame_opts.frame_length_ms = float(config['frontend_conf']['frame_length']) + opts.frame_opts.samp_freq = int(config['frontend_conf']['fs']) opts.device = torch.device(self.device) self.opts = opts self.feature_extractor = Fbank(self.opts) self.feature_size = opts.mel_opts.num_bins self.frontend = WavFrontend( - cmvn_file=config['WavFrontend']['cmvn_file'], - **config['WavFrontend']['frontend_conf']) + cmvn_file=cmvn_path, + **config['frontend_conf']) def extract_feat(self, waveform_list: List[np.ndarray] diff --git a/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/feature_extractor/config.pbtxt b/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/feature_extractor/config.pbtxt index 8b5318389..44bfcd44f 100644 --- a/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/feature_extractor/config.pbtxt +++ b/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/feature_extractor/config.pbtxt @@ -33,6 +33,10 @@ parameters [ key: "sample_rate" value: { string_value: "16000"} }, + { + key: "cmvn_path" + value: { string_value: "./model_repo_paraformer_large_offline/feature_extractor/am.mvn"} + }, { key: "config_path" value: { string_value: "./model_repo_paraformer_large_offline/feature_extractor/config.yaml"} diff --git a/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/feature_extractor/config.yaml b/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/feature_extractor/config.yaml deleted file mode 100644 index a4a66c37a..000000000 --- a/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/feature_extractor/config.yaml +++ /dev/null @@ -1,30 +0,0 @@ -TokenIDConverter: - token_path: resources/models/token_list.pkl - unk_symbol: - -CharTokenizer: - symbol_value: - space_symbol: - remove_non_linguistic_symbols: false - -WavFrontend: - cmvn_file: /raid/dgxsa/yuekaiz/pull_requests/FunASR/funasr/runtime/python/onnxruntime/resources/models/am.mvn - frontend_conf: - fs: 16000 - window: hamming - n_mels: 80 - frame_length: 25 - frame_shift: 10 - lfr_m: 7 - lfr_n: 6 - filter_length_max: -.inf - -Model: - model_path: resources/models/model.onnx - use_cuda: false - CUDAExecutionProvider: - device_id: 0 - arena_extend_strategy: kNextPowerOfTwo - cudnn_conv_algo_search: EXHAUSTIVE - do_copy_in_default_stream: true - batch_size: 3 \ No newline at end of file diff --git a/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/scoring/1/model.py b/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/scoring/1/model.py index dfbaa52f4..ef6278dc8 100644 --- a/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/scoring/1/model.py +++ b/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/scoring/1/model.py @@ -21,8 +21,7 @@ from torch.utils.dlpack import from_dlpack import json import os - -import pickle +import yaml class TritonPythonModel: """Your Python model must use the same class name. Every Python model @@ -76,8 +75,8 @@ class TritonPythonModel: load lang_char.txt """ with open(str(vocab_file), 'rb') as f: - token_list = pickle.load(f) - return token_list + config = yaml.load(f, Loader=yaml.Loader) + return config['token_list'] def execute(self, requests): """`execute` must be implemented in every Python model. `execute` diff --git a/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/scoring/config.pbtxt b/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/scoring/config.pbtxt index 6b43fe48b..85082f44d 100644 --- a/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/scoring/config.pbtxt +++ b/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/scoring/config.pbtxt @@ -23,7 +23,7 @@ parameters [ }, { key: "vocabulary", - value: { string_value: "./model_repo_paraformer_large_offline/scoring/token_list.pkl"} + value: { string_value: "./model_repo_paraformer_large_offline/feature_extractor/config.yaml"} }, { key: "lm_path" @@ -43,7 +43,7 @@ input [ }, { name: "token_num" - data_type: TYPE_INT64 + data_type: TYPE_INT32 dims: [1] reshape: { shape: [ ] } } diff --git a/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/scoring/token_list.pkl b/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/scoring/token_list.pkl deleted file mode 100644 index f1a2ce778..000000000 Binary files a/funasr/runtime/triton_gpu/model_repo_paraformer_large_offline/scoring/token_list.pkl and /dev/null differ diff --git a/funasr/tasks/abs_task.py b/funasr/tasks/abs_task.py index a643acb78..3f20b4f4c 100644 --- a/funasr/tasks/abs_task.py +++ b/funasr/tasks/abs_task.py @@ -639,12 +639,12 @@ class AbsTask(ABC): "and exclude_keys excludes keys of model states for the initialization." "e.g.\n" " # Load all parameters" - " --init_param some/where/model.pth\n" + " --init_param some/where/model.pb\n" " # Load only decoder parameters" - " --init_param some/where/model.pth:decoder:decoder\n" + " --init_param some/where/model.pb:decoder:decoder\n" " # Load only decoder parameters excluding decoder.embed" - " --init_param some/where/model.pth:decoder:decoder:decoder.embed\n" - " --init_param some/where/model.pth:decoder:decoder:decoder.embed\n", + " --init_param some/where/model.pb:decoder:decoder:decoder.embed\n" + " --init_param some/where/model.pb:decoder:decoder:decoder.embed\n", ) group.add_argument( "--ignore_init_mismatch", @@ -1576,6 +1576,7 @@ class AbsTask(ABC): preprocess=iter_options.preprocess_fn, max_cache_size=iter_options.max_cache_size, max_cache_fd=iter_options.max_cache_fd, + dest_sample_rate=args.frontend_conf["fs"], ) cls.check_task_requirements( dataset, args.allow_variable_data_keys, train=iter_options.train @@ -1847,6 +1848,7 @@ class AbsTask(ABC): key_file: str = None, batch_size: int = 1, fs: dict = None, + mc: bool = False, dtype: str = np.float32, num_workers: int = 1, allow_variable_data_keys: bool = False, @@ -1865,6 +1867,7 @@ class AbsTask(ABC): data_path_and_name_and_type, float_dtype=dtype, fs=fs, + mc=mc, preprocess=preprocess_fn, key_file=key_file, ) diff --git a/funasr/tasks/asr.py b/funasr/tasks/asr.py index 23ac97657..e15147332 100644 --- a/funasr/tasks/asr.py +++ b/funasr/tasks/asr.py @@ -40,6 +40,7 @@ from funasr.models.decoder.transformer_decoder import TransformerDecoder from funasr.models.decoder.contextual_decoder import ContextualParaformerDecoder from funasr.models.e2e_asr import ESPnetASRModel from funasr.models.e2e_asr_paraformer import Paraformer, ParaformerBert, BiCifParaformer, ContextualParaformer +from funasr.models.e2e_tp import TimestampPredictor from funasr.models.e2e_asr_mfcca import MFCCA from funasr.models.e2e_uni_asr import UniASR from funasr.models.encoder.abs_encoder import AbsEncoder @@ -124,6 +125,7 @@ model_choices = ClassChoices( bicif_paraformer=BiCifParaformer, contextual_paraformer=ContextualParaformer, mfcca=MFCCA, + timestamp_prediction=TimestampPredictor, ), type_check=AbsESPnetModel, default="asr", @@ -824,7 +826,7 @@ class ASRTaskUniASR(ASRTask): if "model.ckpt-" in model_name or ".bin" in model_name: model_name_pth = os.path.join(model_dir, model_name.replace('.bin', '.pb')) if ".bin" in model_name else os.path.join( - model_dir, "{}.pth".format(model_name)) + model_dir, "{}.pb".format(model_name)) if os.path.exists(model_name_pth): logging.info("model_file is load from pth: {}".format(model_name_pth)) model_dict = torch.load(model_name_pth, map_location=device) @@ -1071,7 +1073,7 @@ class ASRTaskParaformer(ASRTask): if "model.ckpt-" in model_name or ".bin" in model_name: model_name_pth = os.path.join(model_dir, model_name.replace('.bin', '.pb')) if ".bin" in model_name else os.path.join( - model_dir, "{}.pth".format(model_name)) + model_dir, "{}.pb".format(model_name)) if os.path.exists(model_name_pth): logging.info("model_file is load from pth: {}".format(model_name_pth)) model_dict = torch.load(model_name_pth, map_location=device) @@ -1244,3 +1246,88 @@ class ASRTaskMFCCA(ASRTask): return model +class ASRTaskAligner(ASRTaskParaformer): + # If you need more than one optimizers, change this value + num_optimizers: int = 1 + + # Add variable objects configurations + class_choices_list = [ + # --frontend and --frontend_conf + frontend_choices, + # --model and --model_conf + model_choices, + # --encoder and --encoder_conf + encoder_choices, + # --decoder and --decoder_conf + decoder_choices, + ] + + # If you need to modify train() or eval() procedures, change Trainer class here + trainer = Trainer + + @classmethod + def build_model(cls, args: argparse.Namespace): + assert check_argument_types() + if isinstance(args.token_list, str): + with open(args.token_list, encoding="utf-8") as f: + token_list = [line.rstrip() for line in f] + + # Overwriting token_list to keep it as "portable". + args.token_list = list(token_list) + elif isinstance(args.token_list, (tuple, list)): + token_list = list(args.token_list) + else: + raise RuntimeError("token_list must be str or list") + + # 1. frontend + if args.input_size is None: + # Extract features in the model + frontend_class = frontend_choices.get_class(args.frontend) + if args.frontend == 'wav_frontend': + frontend = frontend_class(cmvn_file=args.cmvn_file, **args.frontend_conf) + else: + frontend = frontend_class(**args.frontend_conf) + input_size = frontend.output_size() + else: + # Give features from data-loader + args.frontend = None + args.frontend_conf = {} + frontend = None + input_size = args.input_size + + # 2. Encoder + encoder_class = encoder_choices.get_class(args.encoder) + encoder = encoder_class(input_size=input_size, **args.encoder_conf) + + # 3. Predictor + predictor_class = predictor_choices.get_class(args.predictor) + predictor = predictor_class(**args.predictor_conf) + + # 10. Build model + try: + model_class = model_choices.get_class(args.model) + except AttributeError: + model_class = model_choices.get_class("asr") + + # 8. Build model + model = model_class( + frontend=frontend, + encoder=encoder, + predictor=predictor, + token_list=token_list, + **args.model_conf, + ) + + # 11. Initialize + if args.init is not None: + initialize(model, args.init) + + assert check_return_type(model) + return model + + @classmethod + def required_data_names( + cls, train: bool = True, inference: bool = False + ) -> Tuple[str, ...]: + retval = ("speech", "text") + return retval diff --git a/funasr/tasks/diar.py b/funasr/tasks/diar.py index 73c51e350..096a5c83c 100644 --- a/funasr/tasks/diar.py +++ b/funasr/tasks/diar.py @@ -20,19 +20,19 @@ from funasr.datasets.collate_fn import CommonCollateFn from funasr.datasets.preprocessor import CommonPreprocessor from funasr.layers.abs_normalize import AbsNormalize from funasr.layers.global_mvn import GlobalMVN -from funasr.layers.utterance_mvn import UtteranceMVN from funasr.layers.label_aggregation import LabelAggregate -from funasr.models.ctc import CTC -from funasr.models.encoder.resnet34_encoder import ResNet34Diar -from funasr.models.encoder.ecapa_tdnn_encoder import ECAPA_TDNN -from funasr.models.encoder.opennmt_encoders.conv_encoder import ConvEncoder -from funasr.models.encoder.opennmt_encoders.fsmn_encoder import FsmnEncoder -from funasr.models.encoder.opennmt_encoders.self_attention_encoder import SelfAttentionEncoder -from funasr.models.encoder.opennmt_encoders.ci_scorers import DotScorer, CosScorer +from funasr.layers.utterance_mvn import UtteranceMVN from funasr.models.e2e_diar_sond import DiarSondModel +from funasr.models.e2e_diar_eend_ola import DiarEENDOLAModel from funasr.models.encoder.abs_encoder import AbsEncoder from funasr.models.encoder.conformer_encoder import ConformerEncoder from funasr.models.encoder.data2vec_encoder import Data2VecEncoder +from funasr.models.encoder.ecapa_tdnn_encoder import ECAPA_TDNN +from funasr.models.encoder.opennmt_encoders.ci_scorers import DotScorer, CosScorer +from funasr.models.encoder.opennmt_encoders.conv_encoder import ConvEncoder +from funasr.models.encoder.opennmt_encoders.fsmn_encoder import FsmnEncoder +from funasr.models.encoder.opennmt_encoders.self_attention_encoder import SelfAttentionEncoder +from funasr.models.encoder.resnet34_encoder import ResNet34Diar, ResNet34SpL2RegDiar from funasr.models.encoder.rnn_encoder import RNNEncoder from funasr.models.encoder.sanm_encoder import SANMEncoder, SANMEncoderChunkOpt from funasr.models.encoder.transformer_encoder import TransformerEncoder @@ -41,17 +41,13 @@ from funasr.models.frontend.default import DefaultFrontend from funasr.models.frontend.fused import FusedFrontends from funasr.models.frontend.s3prl import S3prlFrontend from funasr.models.frontend.wav_frontend import WavFrontend +from funasr.models.frontend.wav_frontend import WavFrontendMel23 from funasr.models.frontend.windowing import SlidingWindow -from funasr.models.postencoder.abs_postencoder import AbsPostEncoder -from funasr.models.postencoder.hugging_face_transformers_postencoder import ( - HuggingFaceTransformersPostEncoder, # noqa: H301 -) -from funasr.models.preencoder.abs_preencoder import AbsPreEncoder -from funasr.models.preencoder.linear import LinearProjection -from funasr.models.preencoder.sinc import LightweightSincConvs from funasr.models.specaug.abs_specaug import AbsSpecAug from funasr.models.specaug.specaug import SpecAug from funasr.models.specaug.specaug import SpecAugLFR +from funasr.modules.eend_ola.encoder import EENDOLATransformerEncoder +from funasr.modules.eend_ola.encoder_decoder_attractor import EncoderDecoderAttractor from funasr.tasks.abs_task import AbsTask from funasr.torch_utils.initialize import initialize from funasr.train.abs_espnet_model import AbsESPnetModel @@ -70,6 +66,7 @@ frontend_choices = ClassChoices( s3prl=S3prlFrontend, fused=FusedFrontends, wav_frontend=WavFrontend, + wav_frontend_mel23=WavFrontendMel23, ), type_check=AbsFrontend, default="default", @@ -107,6 +104,7 @@ model_choices = ClassChoices( "model", classes=dict( sond=DiarSondModel, + eend_ola=DiarEENDOLAModel, ), type_check=AbsESPnetModel, default="sond", @@ -122,9 +120,11 @@ encoder_choices = ClassChoices( fsmn=FsmnEncoder, conv=ConvEncoder, resnet34=ResNet34Diar, + resnet34_sp_l2reg=ResNet34SpL2RegDiar, sanm_chunk_opt=SANMEncoderChunkOpt, data2vec_encoder=Data2VecEncoder, ecapa_tdnn=ECAPA_TDNN, + eend_ola_transformer=EENDOLATransformerEncoder, ), type_check=torch.nn.Module, default="resnet34", @@ -160,6 +160,7 @@ ci_scorer_choices = ClassChoices( classes=dict( dot=DotScorer, cosine=CosScorer, + conv=ConvEncoder, ), type_check=torch.nn.Module, default=None, @@ -175,6 +176,15 @@ decoder_choices = ClassChoices( type_check=torch.nn.Module, default="fsmn", ) +# encoder_decoder_attractor is used for EEND-OLA +encoder_decoder_attractor_choices = ClassChoices( + "encoder_decoder_attractor", + classes=dict( + eda=EncoderDecoderAttractor, + ), + type_check=torch.nn.Module, + default="eda", +) class DiarTask(AbsTask): @@ -497,7 +507,7 @@ class DiarTask(AbsTask): config_file: Union[Path, str] = None, model_file: Union[Path, str] = None, cmvn_file: Union[Path, str] = None, - device: str = "cpu", + device: Union[str, torch.device] = "cpu", ): """Build model from the files. @@ -543,7 +553,7 @@ class DiarTask(AbsTask): if ".bin" in model_name: model_name_pth = os.path.join(model_dir, model_name.replace('.bin', '.pb')) else: - model_name_pth = os.path.join(model_dir, "{}.pth".format(model_name)) + model_name_pth = os.path.join(model_dir, "{}.pb".format(model_name)) if os.path.exists(model_name_pth): logging.info("model_file is load from pth: {}".format(model_name_pth)) model_dict = torch.load(model_name_pth, map_location=device) @@ -552,6 +562,7 @@ class DiarTask(AbsTask): model.load_state_dict(model_dict) else: model_dict = torch.load(model_file, map_location=device) + model_dict = cls.fileter_model_dict(model_dict, model.state_dict()) model.load_state_dict(model_dict) if model_name_pth is not None and not os.path.exists(model_name_pth): torch.save(model_dict, model_name_pth) @@ -559,6 +570,20 @@ class DiarTask(AbsTask): return model, args + @classmethod + def fileter_model_dict(cls, src_dict: dict, dest_dict: dict): + from collections import OrderedDict + new_dict = OrderedDict() + for key, value in src_dict.items(): + if key in dest_dict: + new_dict[key] = value + else: + logging.info("{} is no longer needed in this model.".format(key)) + for key, value in dest_dict.items(): + if key not in new_dict: + logging.warning("{} is missed in checkpoint.".format(key)) + return new_dict + @classmethod def convert_tf2torch( cls, @@ -571,19 +596,315 @@ class DiarTask(AbsTask): var_dict_torch = model.state_dict() var_dict_torch_update = dict() # speech encoder - var_dict_torch_update_local = model.encoder.convert_tf2torch(var_dict_tf, var_dict_torch) - var_dict_torch_update.update(var_dict_torch_update_local) + if model.encoder is not None: + var_dict_torch_update_local = model.encoder.convert_tf2torch(var_dict_tf, var_dict_torch) + var_dict_torch_update.update(var_dict_torch_update_local) # speaker encoder - var_dict_torch_update_local = model.speaker_encoder.convert_tf2torch(var_dict_tf, var_dict_torch) - var_dict_torch_update.update(var_dict_torch_update_local) + if model.speaker_encoder is not None: + var_dict_torch_update_local = model.speaker_encoder.convert_tf2torch(var_dict_tf, var_dict_torch) + var_dict_torch_update.update(var_dict_torch_update_local) # cd scorer - var_dict_torch_update_local = model.cd_scorer.convert_tf2torch(var_dict_tf, var_dict_torch) - var_dict_torch_update.update(var_dict_torch_update_local) + if model.cd_scorer is not None: + var_dict_torch_update_local = model.cd_scorer.convert_tf2torch(var_dict_tf, var_dict_torch) + var_dict_torch_update.update(var_dict_torch_update_local) # ci scorer - var_dict_torch_update_local = model.ci_scorer.convert_tf2torch(var_dict_tf, var_dict_torch) - var_dict_torch_update.update(var_dict_torch_update_local) + if model.ci_scorer is not None: + var_dict_torch_update_local = model.ci_scorer.convert_tf2torch(var_dict_tf, var_dict_torch) + var_dict_torch_update.update(var_dict_torch_update_local) # decoder - var_dict_torch_update_local = model.decoder.convert_tf2torch(var_dict_tf, var_dict_torch) - var_dict_torch_update.update(var_dict_torch_update_local) + if model.decoder is not None: + var_dict_torch_update_local = model.decoder.convert_tf2torch(var_dict_tf, var_dict_torch) + var_dict_torch_update.update(var_dict_torch_update_local) return var_dict_torch_update + + +class EENDOLADiarTask(AbsTask): + # If you need more than 1 optimizer, change this value + num_optimizers: int = 1 + + # Add variable objects configurations + class_choices_list = [ + # --frontend and --frontend_conf + frontend_choices, + # --specaug and --specaug_conf + model_choices, + # --encoder and --encoder_conf + encoder_choices, + # --speaker_encoder and --speaker_encoder_conf + encoder_decoder_attractor_choices, + ] + + # If you need to modify train() or eval() procedures, change Trainer class here + trainer = Trainer + + @classmethod + def add_task_arguments(cls, parser: argparse.ArgumentParser): + group = parser.add_argument_group(description="Task related") + + # NOTE(kamo): add_arguments(..., required=True) can't be used + # to provide --print_config mode. Instead of it, do as + # required = parser.get_default("required") + # required += ["token_list"] + + group.add_argument( + "--token_list", + type=str_or_none, + default=None, + help="A text mapping int-id to token", + ) + group.add_argument( + "--split_with_space", + type=str2bool, + default=True, + help="whether to split text using ", + ) + group.add_argument( + "--seg_dict_file", + type=str, + default=None, + help="seg_dict_file for text processing", + ) + group.add_argument( + "--init", + type=lambda x: str_or_none(x.lower()), + default=None, + help="The initialization method", + choices=[ + "chainer", + "xavier_uniform", + "xavier_normal", + "kaiming_uniform", + "kaiming_normal", + None, + ], + ) + + group.add_argument( + "--input_size", + type=int_or_none, + default=None, + help="The number of input dimension of the feature", + ) + + group = parser.add_argument_group(description="Preprocess related") + group.add_argument( + "--use_preprocessor", + type=str2bool, + default=True, + help="Apply preprocessing to data or not", + ) + group.add_argument( + "--token_type", + type=str, + default="char", + choices=["char"], + help="The text will be tokenized in the specified level token", + ) + parser.add_argument( + "--speech_volume_normalize", + type=float_or_none, + default=None, + help="Scale the maximum amplitude to the given value.", + ) + parser.add_argument( + "--rir_scp", + type=str_or_none, + default=None, + help="The file path of rir scp file.", + ) + parser.add_argument( + "--rir_apply_prob", + type=float, + default=1.0, + help="THe probability for applying RIR convolution.", + ) + parser.add_argument( + "--cmvn_file", + type=str_or_none, + default=None, + help="The file path of noise scp file.", + ) + parser.add_argument( + "--noise_scp", + type=str_or_none, + default=None, + help="The file path of noise scp file.", + ) + parser.add_argument( + "--noise_apply_prob", + type=float, + default=1.0, + help="The probability applying Noise adding.", + ) + parser.add_argument( + "--noise_db_range", + type=str, + default="13_15", + help="The range of noise decibel level.", + ) + + for class_choices in cls.class_choices_list: + # Append -- and --_conf. + # e.g. --encoder and --encoder_conf + class_choices.add_arguments(group) + + @classmethod + def build_collate_fn( + cls, args: argparse.Namespace, train: bool + ) -> Callable[ + [Collection[Tuple[str, Dict[str, np.ndarray]]]], + Tuple[List[str], Dict[str, torch.Tensor]], + ]: + assert check_argument_types() + # NOTE(kamo): int value = 0 is reserved by CTC-blank symbol + return CommonCollateFn(float_pad_value=0.0, int_pad_value=-1) + + @classmethod + def build_preprocess_fn( + cls, args: argparse.Namespace, train: bool + ) -> Optional[Callable[[str, Dict[str, np.array]], Dict[str, np.ndarray]]]: + assert check_argument_types() + # if args.use_preprocessor: + # retval = CommonPreprocessor( + # train=train, + # token_type=args.token_type, + # token_list=args.token_list, + # bpemodel=None, + # non_linguistic_symbols=None, + # text_cleaner=None, + # g2p_type=None, + # split_with_space=args.split_with_space if hasattr(args, "split_with_space") else False, + # seg_dict_file=args.seg_dict_file if hasattr(args, "seg_dict_file") else None, + # # NOTE(kamo): Check attribute existence for backward compatibility + # rir_scp=args.rir_scp if hasattr(args, "rir_scp") else None, + # rir_apply_prob=args.rir_apply_prob + # if hasattr(args, "rir_apply_prob") + # else 1.0, + # noise_scp=args.noise_scp if hasattr(args, "noise_scp") else None, + # noise_apply_prob=args.noise_apply_prob + # if hasattr(args, "noise_apply_prob") + # else 1.0, + # noise_db_range=args.noise_db_range + # if hasattr(args, "noise_db_range") + # else "13_15", + # speech_volume_normalize=args.speech_volume_normalize + # if hasattr(args, "rir_scp") + # else None, + # ) + # else: + # retval = None + # assert check_return_type(retval) + return None + + @classmethod + def required_data_names( + cls, train: bool = True, inference: bool = False + ) -> Tuple[str, ...]: + if not inference: + retval = ("speech", ) + else: + # Recognition mode + retval = ("speech", ) + return retval + + @classmethod + def optional_data_names( + cls, train: bool = True, inference: bool = False + ) -> Tuple[str, ...]: + retval = () + assert check_return_type(retval) + return retval + + @classmethod + def build_model(cls, args: argparse.Namespace): + assert check_argument_types() + + # 1. frontend + if args.input_size is None or args.frontend == "wav_frontend_mel23": + # Extract features in the model + frontend_class = frontend_choices.get_class(args.frontend) + if args.frontend == 'wav_frontend': + frontend = frontend_class(cmvn_file=args.cmvn_file, **args.frontend_conf) + else: + frontend = frontend_class(**args.frontend_conf) + input_size = frontend.output_size() + else: + # Give features from data-loader + args.frontend = None + args.frontend_conf = {} + frontend = None + input_size = args.input_size + + # 2. Encoder + encoder_class = encoder_choices.get_class(args.encoder) + encoder = encoder_class(**args.encoder_conf) + + # 3. EncoderDecoderAttractor + encoder_decoder_attractor_class = encoder_decoder_attractor_choices.get_class(args.encoder_decoder_attractor) + encoder_decoder_attractor = encoder_decoder_attractor_class(**args.encoder_decoder_attractor_conf) + + # 9. Build model + model_class = model_choices.get_class(args.model) + model = model_class( + frontend=frontend, + encoder=encoder, + encoder_decoder_attractor=encoder_decoder_attractor, + **args.model_conf, + ) + + # 10. Initialize + if args.init is not None: + initialize(model, args.init) + + assert check_return_type(model) + return model + + # ~~~~~~~~~ The methods below are mainly used for inference ~~~~~~~~~ + @classmethod + def build_model_from_file( + cls, + config_file: Union[Path, str] = None, + model_file: Union[Path, str] = None, + cmvn_file: Union[Path, str] = None, + device: str = "cpu", + ): + """Build model from the files. + + This method is used for inference or fine-tuning. + + Args: + config_file: The yaml file saved when training. + model_file: The model file saved when training. + cmvn_file: The cmvn file for front-end + device: Device type, "cpu", "cuda", or "cuda:N". + + """ + assert check_argument_types() + if config_file is None: + assert model_file is not None, ( + "The argument 'model_file' must be provided " + "if the argument 'config_file' is not specified." + ) + config_file = Path(model_file).parent / "config.yaml" + else: + config_file = Path(config_file) + + with config_file.open("r", encoding="utf-8") as f: + args = yaml.safe_load(f) + args = argparse.Namespace(**args) + model = cls.build_model(args) + if not isinstance(model, AbsESPnetModel): + raise RuntimeError( + f"model must inherit {AbsESPnetModel.__name__}, but got {type(model)}" + ) + if model_file is not None: + if device == "cuda": + device = f"cuda:{torch.cuda.current_device()}" + checkpoint = torch.load(model_file, map_location=device) + if "state_dict" in checkpoint.keys(): + model.load_state_dict(checkpoint["state_dict"]) + else: + model.load_state_dict(checkpoint) + model.to(device) + return model, args diff --git a/funasr/tasks/sv.py b/funasr/tasks/sv.py index 16384a7ad..bef5dc588 100644 --- a/funasr/tasks/sv.py +++ b/funasr/tasks/sv.py @@ -1,14 +1,18 @@ import argparse import logging +import os +from pathlib import Path from typing import Callable from typing import Collection from typing import Dict from typing import List from typing import Optional from typing import Tuple +from typing import Union import numpy as np import torch +import yaml from typeguard import check_argument_types from typeguard import check_return_type @@ -21,7 +25,7 @@ from funasr.models.e2e_asr import ESPnetASRModel from funasr.models.decoder.abs_decoder import AbsDecoder from funasr.models.encoder.abs_encoder import AbsEncoder from funasr.models.encoder.rnn_encoder import RNNEncoder -from funasr.models.encoder.resnet34_encoder import ResNet34 +from funasr.models.encoder.resnet34_encoder import ResNet34, ResNet34_SP_L2Reg from funasr.models.pooling.statistic_pooling import StatisticPooling from funasr.models.decoder.sv_decoder import DenseDecoder from funasr.models.e2e_sv import ESPnetSVModel @@ -103,6 +107,7 @@ encoder_choices = ClassChoices( "encoder", classes=dict( resnet34=ResNet34, + resnet34_sp_l2reg=ResNet34_SP_L2Reg, rnn=RNNEncoder, ), type_check=AbsEncoder, @@ -394,9 +399,16 @@ class SVTask(AbsTask): # 7. Pooling layer pooling_class = pooling_choices.get_class(args.pooling_type) + pooling_dim = (2, 3) + eps = 1e-12 + if hasattr(args, "pooling_type_conf"): + if "pooling_dim" in args.pooling_type_conf: + pooling_dim = args.pooling_type_conf["pooling_dim"] + if "eps" in args.pooling_type_conf: + eps = args.pooling_type_conf["eps"] pooling_layer = pooling_class( - pooling_dim=(2, 3), - eps=1e-12, + pooling_dim=pooling_dim, + eps=eps, ) if args.pooling_type == "statistic": encoder_output_size *= 2 @@ -435,3 +447,95 @@ class SVTask(AbsTask): assert check_return_type(model) return model + + # ~~~~~~~~~ The methods below are mainly used for inference ~~~~~~~~~ + @classmethod + def build_model_from_file( + cls, + config_file: Union[Path, str] = None, + model_file: Union[Path, str] = None, + cmvn_file: Union[Path, str] = None, + device: str = "cpu", + ): + """Build model from the files. + + This method is used for inference or fine-tuning. + + Args: + config_file: The yaml file saved when training. + model_file: The model file saved when training. + cmvn_file: The cmvn file for front-end + device: Device type, "cpu", "cuda", or "cuda:N". + + """ + assert check_argument_types() + if config_file is None: + assert model_file is not None, ( + "The argument 'model_file' must be provided " + "if the argument 'config_file' is not specified." + ) + config_file = Path(model_file).parent / "config.yaml" + else: + config_file = Path(config_file) + + with config_file.open("r", encoding="utf-8") as f: + args = yaml.safe_load(f) + if cmvn_file is not None: + args["cmvn_file"] = cmvn_file + args = argparse.Namespace(**args) + model = cls.build_model(args) + if not isinstance(model, AbsESPnetModel): + raise RuntimeError( + f"model must inherit {AbsESPnetModel.__name__}, but got {type(model)}" + ) + model.to(device) + model_dict = dict() + model_name_pth = None + if model_file is not None: + logging.info("model_file is {}".format(model_file)) + if device == "cuda": + device = f"cuda:{torch.cuda.current_device()}" + model_dir = os.path.dirname(model_file) + model_name = os.path.basename(model_file) + if "model.ckpt-" in model_name or ".bin" in model_name: + if ".bin" in model_name: + model_name_pth = os.path.join(model_dir, model_name.replace('.bin', '.pb')) + else: + model_name_pth = os.path.join(model_dir, "{}.pb".format(model_name)) + if os.path.exists(model_name_pth): + logging.info("model_file is load from pth: {}".format(model_name_pth)) + model_dict = torch.load(model_name_pth, map_location=device) + else: + model_dict = cls.convert_tf2torch(model, model_file) + model.load_state_dict(model_dict) + else: + model_dict = torch.load(model_file, map_location=device) + model.load_state_dict(model_dict) + if model_name_pth is not None and not os.path.exists(model_name_pth): + torch.save(model_dict, model_name_pth) + logging.info("model_file is saved to pth: {}".format(model_name_pth)) + + return model, args + + @classmethod + def convert_tf2torch( + cls, + model, + ckpt, + ): + logging.info("start convert tf model to torch model") + from funasr.modules.streaming_utils.load_fr_tf import load_tf_dict + var_dict_tf = load_tf_dict(ckpt) + var_dict_torch = model.state_dict() + var_dict_torch_update = dict() + # speech encoder + var_dict_torch_update_local = model.encoder.convert_tf2torch(var_dict_tf, var_dict_torch) + var_dict_torch_update.update(var_dict_torch_update_local) + # pooling layer + var_dict_torch_update_local = model.pooling_layer.convert_tf2torch(var_dict_tf, var_dict_torch) + var_dict_torch_update.update(var_dict_torch_update_local) + # decoder + var_dict_torch_update_local = model.decoder.convert_tf2torch(var_dict_tf, var_dict_torch) + var_dict_torch_update.update(var_dict_torch_update_local) + + return var_dict_torch_update diff --git a/funasr/torch_utils/load_pretrained_model.py b/funasr/torch_utils/load_pretrained_model.py index 8e3f05e1e..e9b18cd0d 100644 --- a/funasr/torch_utils/load_pretrained_model.py +++ b/funasr/torch_utils/load_pretrained_model.py @@ -52,13 +52,13 @@ def load_pretrained_model( init_param: ::: Examples: - >>> load_pretrained_model("somewhere/model.pth", model) - >>> load_pretrained_model("somewhere/model.pth:decoder:decoder", model) - >>> load_pretrained_model("somewhere/model.pth:decoder:decoder:", model) + >>> load_pretrained_model("somewhere/model.pb", model) + >>> load_pretrained_model("somewhere/model.pb:decoder:decoder", model) + >>> load_pretrained_model("somewhere/model.pb:decoder:decoder:", model) >>> load_pretrained_model( - ... "somewhere/model.pth:decoder:decoder:decoder.embed", model + ... "somewhere/model.pb:decoder:decoder:decoder.embed", model ... ) - >>> load_pretrained_model("somewhere/decoder.pth::decoder", model) + >>> load_pretrained_model("somewhere/decoder.pb::decoder", model) """ sps = init_param.split(":", 4) if len(sps) == 4: diff --git a/funasr/train/trainer.py b/funasr/train/trainer.py index 50bce477a..efe2009c4 100644 --- a/funasr/train/trainer.py +++ b/funasr/train/trainer.py @@ -205,9 +205,9 @@ class Trainer: else: scaler = None - if trainer_options.resume and (output_dir / "checkpoint.pth").exists(): + if trainer_options.resume and (output_dir / "checkpoint.pb").exists(): cls.resume( - checkpoint=output_dir / "checkpoint.pth", + checkpoint=output_dir / "checkpoint.pb", model=model, optimizers=optimizers, schedulers=schedulers, @@ -361,7 +361,7 @@ class Trainer: }, buffer, ) - trainer_options.oss_bucket.put_object(os.path.join(trainer_options.output_dir, "checkpoint.pth"), buffer.getvalue()) + trainer_options.oss_bucket.put_object(os.path.join(trainer_options.output_dir, "checkpoint.pb"), buffer.getvalue()) else: torch.save( { @@ -374,7 +374,7 @@ class Trainer: ], "scaler": scaler.state_dict() if scaler is not None else None, }, - output_dir / "checkpoint.pth", + output_dir / "checkpoint.pb", ) # 5. Save and log the model and update the link to the best model @@ -382,22 +382,22 @@ class Trainer: buffer = BytesIO() torch.save(model.state_dict(), buffer) trainer_options.oss_bucket.put_object(os.path.join(trainer_options.output_dir, - f"{iepoch}epoch.pth"),buffer.getvalue()) + f"{iepoch}epoch.pb"),buffer.getvalue()) else: - torch.save(model.state_dict(), output_dir / f"{iepoch}epoch.pth") + torch.save(model.state_dict(), output_dir / f"{iepoch}epoch.pb") - # Creates a sym link latest.pth -> {iepoch}epoch.pth + # Creates a sym link latest.pb -> {iepoch}epoch.pb if trainer_options.use_pai: - p = os.path.join(trainer_options.output_dir, "latest.pth") + p = os.path.join(trainer_options.output_dir, "latest.pb") if trainer_options.oss_bucket.object_exists(p): trainer_options.oss_bucket.delete_object(p) trainer_options.oss_bucket.copy_object(trainer_options.oss_bucket.bucket_name, - os.path.join(trainer_options.output_dir, f"{iepoch}epoch.pth"), p) + os.path.join(trainer_options.output_dir, f"{iepoch}epoch.pb"), p) else: - p = output_dir / "latest.pth" + p = output_dir / "latest.pb" if p.is_symlink() or p.exists(): p.unlink() - p.symlink_to(f"{iepoch}epoch.pth") + p.symlink_to(f"{iepoch}epoch.pb") _improved = [] for _phase, k, _mode in trainer_options.best_model_criterion: @@ -407,16 +407,16 @@ class Trainer: # Creates sym links if it's the best result if best_epoch == iepoch: if trainer_options.use_pai: - p = os.path.join(trainer_options.output_dir, f"{_phase}.{k}.best.pth") + p = os.path.join(trainer_options.output_dir, f"{_phase}.{k}.best.pb") if trainer_options.oss_bucket.object_exists(p): trainer_options.oss_bucket.delete_object(p) trainer_options.oss_bucket.copy_object(trainer_options.oss_bucket.bucket_name, - os.path.join(trainer_options.output_dir, f"{iepoch}epoch.pth"),p) + os.path.join(trainer_options.output_dir, f"{iepoch}epoch.pb"),p) else: - p = output_dir / f"{_phase}.{k}.best.pth" + p = output_dir / f"{_phase}.{k}.best.pb" if p.is_symlink() or p.exists(): p.unlink() - p.symlink_to(f"{iepoch}epoch.pth") + p.symlink_to(f"{iepoch}epoch.pb") _improved.append(f"{_phase}.{k}") if len(_improved) == 0: logging.info("There are no improvements in this epoch") @@ -438,7 +438,7 @@ class Trainer: type="model", metadata={"improved": _improved}, ) - artifact.add_file(str(output_dir / f"{iepoch}epoch.pth")) + artifact.add_file(str(output_dir / f"{iepoch}epoch.pb")) aliases = [ f"epoch-{iepoch}", "best" if best_epoch == iepoch else "", @@ -473,12 +473,12 @@ class Trainer: for e in range(1, iepoch): if trainer_options.use_pai: - p = os.path.join(trainer_options.output_dir, f"{e}epoch.pth") + p = os.path.join(trainer_options.output_dir, f"{e}epoch.pb") if trainer_options.oss_bucket.object_exists(p) and e not in nbests: trainer_options.oss_bucket.delete_object(p) _removed.append(str(p)) else: - p = output_dir / f"{e}epoch.pth" + p = output_dir / f"{e}epoch.pb" if p.exists() and e not in nbests: p.unlink() _removed.append(str(p)) diff --git a/funasr/utils/timestamp_tools.py b/funasr/utils/timestamp_tools.py index 4a367f8ec..423110cdc 100644 --- a/funasr/utils/timestamp_tools.py +++ b/funasr/utils/timestamp_tools.py @@ -1,59 +1,80 @@ import torch import copy +import codecs import logging +import edit_distance +import argparse +import pdb import numpy as np from typing import Any, List, Tuple, Union -def time_stamp_lfr6_pl(us_alphas, us_cif_peak, char_list, begin_time=0.0, end_time=None): +def ts_prediction_lfr6_standard(us_alphas, + us_peaks, + char_list, + vad_offset=0.0, + force_time_shift=-1.5, + sil_in_str=True + ): if not len(char_list): return [] START_END_THRESHOLD = 5 + MAX_TOKEN_DURATION = 12 TIME_RATE = 10.0 * 6 / 1000 / 3 # 3 times upsampled - if len(us_alphas.shape) == 3: - alphas, cif_peak = us_alphas[0], us_cif_peak[0] # support inference batch_size=1 only + if len(us_alphas.shape) == 2: + _, peaks = us_alphas[0], us_peaks[0] # support inference batch_size=1 only else: - alphas, cif_peak = us_alphas, us_cif_peak - num_frames = cif_peak.shape[0] + _, peaks = us_alphas, us_peaks + num_frames = peaks.shape[0] if char_list[-1] == '': char_list = char_list[:-1] - # char_list = [i for i in text] timestamp_list = [] + new_char_list = [] # for bicif model trained with large data, cif2 actually fires when a character starts # so treat the frames between two peaks as the duration of the former token - fire_place = torch.where(cif_peak>1.0-1e-4)[0].cpu().numpy() - 1.5 + fire_place = torch.where(peaks>1.0-1e-4)[0].cpu().numpy() + force_time_shift # total offset num_peak = len(fire_place) assert num_peak == len(char_list) + 1 # number of peaks is supposed to be number of tokens + 1 # begin silence if fire_place[0] > START_END_THRESHOLD: - char_list.insert(0, '') + # char_list.insert(0, '') timestamp_list.append([0.0, fire_place[0]*TIME_RATE]) + new_char_list.append('') # tokens timestamp for i in range(len(fire_place)-1): - # the peak is always a little ahead of the start time - # timestamp_list.append([(fire_place[i]-1.2)*TIME_RATE, fire_place[i+1]*TIME_RATE]) - timestamp_list.append([(fire_place[i])*TIME_RATE, fire_place[i+1]*TIME_RATE]) - # cut the duration to token and sil of the 0-weight frames last long + new_char_list.append(char_list[i]) + if MAX_TOKEN_DURATION < 0 or fire_place[i+1] - fire_place[i] <= MAX_TOKEN_DURATION: + timestamp_list.append([fire_place[i]*TIME_RATE, fire_place[i+1]*TIME_RATE]) + else: + # cut the duration to token and sil of the 0-weight frames last long + _split = fire_place[i] + MAX_TOKEN_DURATION + timestamp_list.append([fire_place[i]*TIME_RATE, _split*TIME_RATE]) + timestamp_list.append([_split*TIME_RATE, fire_place[i+1]*TIME_RATE]) + new_char_list.append('') # tail token and end silence + # new_char_list.append(char_list[-1]) if num_frames - fire_place[-1] > START_END_THRESHOLD: - _end = (num_frames + fire_place[-1]) / 2 + _end = (num_frames + fire_place[-1]) * 0.5 + # _end = fire_place[-1] timestamp_list[-1][1] = _end*TIME_RATE timestamp_list.append([_end*TIME_RATE, num_frames*TIME_RATE]) - char_list.append("") + new_char_list.append("") else: timestamp_list[-1][1] = num_frames*TIME_RATE - if begin_time: # add offset time in model with vad + if vad_offset: # add offset time in model with vad for i in range(len(timestamp_list)): - timestamp_list[i][0] = timestamp_list[i][0] + begin_time / 1000.0 - timestamp_list[i][1] = timestamp_list[i][1] + begin_time / 1000.0 + timestamp_list[i][0] = timestamp_list[i][0] + vad_offset / 1000.0 + timestamp_list[i][1] = timestamp_list[i][1] + vad_offset / 1000.0 res_txt = "" - for char, timestamp in zip(char_list, timestamp_list): - res_txt += "{} {} {};".format(char, timestamp[0], timestamp[1]) + for char, timestamp in zip(new_char_list, timestamp_list): + #if char != '': + if not sil_in_str and char == '': continue + res_txt += "{} {} {};".format(char, str(timestamp[0]+0.0005)[:5], str(timestamp[1]+0.0005)[:5]) res = [] - for char, timestamp in zip(char_list, timestamp_list): + for char, timestamp in zip(new_char_list, timestamp_list): if char != '': res.append([int(timestamp[0] * 1000), int(timestamp[1] * 1000)]) - return res + return res_txt, res def time_stamp_sentence(punc_id_list, time_stamp_postprocessed, text_postprocessed): @@ -107,4 +128,181 @@ def time_stamp_sentence(punc_id_list, time_stamp_postprocessed, text_postprocess return res +class AverageShiftCalculator(): + def __init__(self): + logging.warning("Calculating average shift.") + def __call__(self, file1, file2): + uttid_list1, ts_dict1 = self.read_timestamps(file1) + uttid_list2, ts_dict2 = self.read_timestamps(file2) + uttid_intersection = self._intersection(uttid_list1, uttid_list2) + res = self.as_cal(uttid_intersection, ts_dict1, ts_dict2) + logging.warning("Average shift of {} and {}: {}.".format(file1, file2, str(res)[:8])) + logging.warning("Following timestamp pair differs most: {}, detail:{}".format(self.max_shift, self.max_shift_uttid)) + + def _intersection(self, list1, list2): + set1 = set(list1) + set2 = set(list2) + if set1 == set2: + logging.warning("Uttid same checked.") + return set1 + itsc = list(set1 & set2) + logging.warning("Uttid differs: file1 {}, file2 {}, lines same {}.".format(len(list1), len(list2), len(itsc))) + return itsc + + def read_timestamps(self, file): + # read timestamps file in standard format + uttid_list = [] + ts_dict = {} + with codecs.open(file, 'r') as fin: + for line in fin.readlines(): + text = '' + ts_list = [] + line = line.rstrip() + uttid = line.split()[0] + uttid_list.append(uttid) + body = " ".join(line.split()[1:]) + for pd in body.split(';'): + if not len(pd): continue + # pdb.set_trace() + char, start, end = pd.lstrip(" ").split(' ') + text += char + ',' + ts_list.append((float(start), float(end))) + # ts_lists.append(ts_list) + ts_dict[uttid] = (text[:-1], ts_list) + logging.warning("File {} read done.".format(file)) + return uttid_list, ts_dict + + def _shift(self, filtered_timestamp_list1, filtered_timestamp_list2): + shift_time = 0 + for fts1, fts2 in zip(filtered_timestamp_list1, filtered_timestamp_list2): + shift_time += abs(fts1[0] - fts2[0]) + abs(fts1[1] - fts2[1]) + num_tokens = len(filtered_timestamp_list1) + return shift_time, num_tokens + + def as_cal(self, uttid_list, ts_dict1, ts_dict2): + # calculate average shift between timestamp1 and timestamp2 + # when characters differ, use edit distance alignment + # and calculate the error between the same characters + self._accumlated_shift = 0 + self._accumlated_tokens = 0 + self.max_shift = 0 + self.max_shift_uttid = None + for uttid in uttid_list: + (t1, ts1) = ts_dict1[uttid] + (t2, ts2) = ts_dict2[uttid] + _align, _align2, _align3 = [], [], [] + fts1, fts2 = [], [] + _t1, _t2 = [], [] + sm = edit_distance.SequenceMatcher(t1.split(','), t2.split(',')) + s = sm.get_opcodes() + for j in range(len(s)): + if s[j][0] == "replace" or s[j][0] == "insert": + _align.append(0) + if s[j][0] == "replace" or s[j][0] == "delete": + _align3.append(0) + elif s[j][0] == "equal": + _align.append(1) + _align3.append(1) + else: + continue + # use s to index t2 + for a, ts , t in zip(_align, ts2, t2.split(',')): + if a: + fts2.append(ts) + _t2.append(t) + sm2 = edit_distance.SequenceMatcher(t2.split(','), t1.split(',')) + s = sm2.get_opcodes() + for j in range(len(s)): + if s[j][0] == "replace" or s[j][0] == "insert": + _align2.append(0) + elif s[j][0] == "equal": + _align2.append(1) + else: + continue + # use s2 tp index t1 + for a, ts, t in zip(_align3, ts1, t1.split(',')): + if a: + fts1.append(ts) + _t1.append(t) + if len(fts1) == len(fts2): + shift_time, num_tokens = self._shift(fts1, fts2) + self._accumlated_shift += shift_time + self._accumlated_tokens += num_tokens + if shift_time/num_tokens > self.max_shift: + self.max_shift = shift_time/num_tokens + self.max_shift_uttid = uttid + else: + logging.warning("length mismatch") + return self._accumlated_shift / self._accumlated_tokens + + +def convert_external_alphas(alphas_file, text_file, output_file): + from funasr.models.predictor.cif import cif_wo_hidden + with open(alphas_file, 'r') as f1, open(text_file, 'r') as f2, open(output_file, 'w') as f3: + for line1, line2 in zip(f1.readlines(), f2.readlines()): + line1 = line1.rstrip() + line2 = line2.rstrip() + assert line1.split()[0] == line2.split()[0] + uttid = line1.split()[0] + alphas = [float(i) for i in line1.split()[1:]] + new_alphas = np.array(remove_chunk_padding(alphas)) + new_alphas[-1] += 1e-4 + text = line2.split()[1:] + if len(text) + 1 != int(new_alphas.sum()): + # force resize + new_alphas *= (len(text) + 1) / int(new_alphas.sum()) + peaks = cif_wo_hidden(torch.Tensor(new_alphas).unsqueeze(0), 1.0-1e-4) + if " " in text: + text = text.split() + else: + text = [i for i in text] + res_str, _ = ts_prediction_lfr6_standard(new_alphas, peaks[0], text, + force_time_shift=-7.0, + sil_in_str=False) + f3.write("{} {}\n".format(uttid, res_str)) + + +def remove_chunk_padding(alphas): + # remove the padding part in alphas if using chunk paraformer for GPU + START_ZERO = 45 + MID_ZERO = 75 + REAL_FRAMES = 360 # for chunk based encoder 10-120-10 and fsmn padding 5 + alphas = alphas[START_ZERO:] # remove the padding at beginning + new_alphas = [] + while True: + new_alphas = new_alphas + alphas[:REAL_FRAMES] + alphas = alphas[REAL_FRAMES+MID_ZERO:] + if len(alphas) < REAL_FRAMES: break + return new_alphas + +SUPPORTED_MODES = ['cal_aas', 'read_ext_alphas'] + + +def main(args): + if args.mode == 'cal_aas': + asc = AverageShiftCalculator() + asc(args.input, args.input2) + elif args.mode == 'read_ext_alphas': + convert_external_alphas(args.input, args.input2, args.output) + else: + logging.error("Mode {} not in SUPPORTED_MODES: {}.".format(args.mode, SUPPORTED_MODES)) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='timestamp tools') + parser.add_argument('--mode', + default=None, + type=str, + choices=SUPPORTED_MODES, + help='timestamp related toolbox') + parser.add_argument('--input', default=None, type=str, help='input file path') + parser.add_argument('--output', default=None, type=str, help='output file name') + parser.add_argument('--input2', default=None, type=str, help='input2 file path') + parser.add_argument('--kaldi-ts-type', + default='v2', + type=str, + choices=['v0', 'v1', 'v2'], + help='kaldi timestamp to write') + args = parser.parse_args() + main(args) diff --git a/funasr/utils/wav_utils.py b/funasr/utils/wav_utils.py index d7afe4acc..4a764a9d1 100644 --- a/funasr/utils/wav_utils.py +++ b/funasr/utils/wav_utils.py @@ -309,7 +309,7 @@ def filter_wav_text(data_dir, dataset): if len(parts) < 2: continue sample_name = parts[0] - text_dict[sample_name] = " ".join(parts[1:]) + text_dict[sample_name] = " ".join(parts[1:]).lower() filter_count = 0 with open(wav_file, "w") as f_wav, open(text_file, "w") as f_text: for sample_name, wav_path in wav_dict.items(): diff --git a/funasr/version.txt b/funasr/version.txt index ee1372d33..0d91a54c7 100644 --- a/funasr/version.txt +++ b/funasr/version.txt @@ -1 +1 @@ -0.2.2 +0.3.0 diff --git a/setup.py b/setup.py index 087d90d26..6bb3ac36a 100644 --- a/setup.py +++ b/setup.py @@ -13,11 +13,11 @@ requirements = { "install": [ "setuptools>=38.5.1", # "configargparse>=1.2.1", - "typeguard>=2.7.0", + "typeguard==2.13.3", "humanfriendly", "scipy>=1.4.1", # "filelock", - "librosa>=0.8.0", + "librosa==0.8.1", "jamo==0.4.1", # For kss "PyYAML>=5.1.2", "soundfile>=0.10.2", @@ -41,6 +41,8 @@ requirements = { # PAI "oss2", "kaldi-native-fbank", + # timestamp + "edit-distance" ], # train: The modules invoked when training only. "train": [ diff --git a/tests/test_asr_inference_pipeline.py b/tests/test_asr_inference_pipeline.py new file mode 100644 index 000000000..32b8af5ec --- /dev/null +++ b/tests/test_asr_inference_pipeline.py @@ -0,0 +1,473 @@ +import unittest + +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks +from modelscope.utils.logger import get_logger + +logger = get_logger() + + +class TestConformerInferencePipelines(unittest.TestCase): + def test_funasr_path(self): + import funasr + import os + logger.info("run_dir:{0} ; funasr_path: {1}".format(os.getcwd(), funasr.__file__)) + + def test_aishell1(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_conformer_asr_nat-zh-cn-16k-aishell1-vocab4234-pytorch') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav') + logger.info("asr inference result: {0}".format(rec_result)) + + def test_aishell2(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_conformer_asr_nat-zh-cn-16k-aishell2-vocab5212-pytorch') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav') + logger.info("asr inference result: {0}".format(rec_result)) + + +class TestData2vecInferencePipelines(unittest.TestCase): + def test_funasr_path(self): + import funasr + import os + logger.info("run_dir:{0} ; funasr_path: {1}".format(os.getcwd(), funasr.__file__)) + + def test_transformer(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_data2vec_pretrain-zh-cn-aishell2-16k-pytorch') + rec_result = inference_pipeline( + audio_in='https://modelscope.oss-cn-beijing.aliyuncs.com/test/audios/asr_example.wav') + logger.info("asr inference result: {0}".format(rec_result)) + + def test_paraformer(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_data2vec_pretrain-paraformer-zh-cn-aishell2-16k') + rec_result = inference_pipeline( + audio_in='https://modelscope.oss-cn-beijing.aliyuncs.com/test/audios/asr_example.wav') + logger.info("asr inference result: {0}".format(rec_result)) + + +class TestMfccaInferencePipelines(unittest.TestCase): + def test_funasr_path(self): + import funasr + import os + logger.info("run_dir:{0} ; funasr_path: {1}".format(os.getcwd(), funasr.__file__)) + + def test_alimeeting(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='NPU-ASLP/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950', + model_revision='v3.0.0') + rec_result = inference_pipeline( + audio_in='https://pre.modelscope.cn/api/v1/models/NPU-ASLP/speech_mfcca_asr-zh-cn-16k-alimeeting-vocab4950/repo?Revision=master&FilePath=example/asr_example_mc.wav') + logger.info("asr inference result: {0}".format(rec_result)) + + +class TestParaformerInferencePipelines(unittest.TestCase): + def test_funasr_path(self): + import funasr + import os + logger.info("run_dir:{0} ; funasr_path: {1}".format(os.getcwd(), funasr.__file__)) + + def test_paraformer_large_contextual_common(self): + param_dict = dict() + param_dict['hotword'] = "https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/hotword.txt" + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_paraformer-large-contextual_asr_nat-zh-cn-16k-common-vocab8404', + param_dict=param_dict) + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_hotword.wav') + logger.info("asr inference result: {0}".format(rec_result)) + + def test_paraformer_large_aishell1(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_paraformer-large_asr_nat-zh-cn-16k-aishell1-vocab8404-pytorch') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav') + logger.info("asr inference result: {0}".format(rec_result)) + + def test_paraformer_large_aishell2(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_paraformer-large_asr_nat-zh-cn-16k-aishell2-vocab8404-pytorch') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav') + logger.info("asr inference result: {0}".format(rec_result)) + + def test_paraformer_large_common(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav') + logger.info("asr inference result: {0}".format(rec_result)) + + def test_paraformer_tiny_commandword(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_paraformer-tiny-commandword_asr_nat-zh-cn-16k-vocab544-pytorch') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh_command.wav') + logger.info("asr inference result: {0}".format(rec_result)) + + def test_paraformer_8k(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_paraformer_asr_nat-zh-cn-8k-common-vocab8358-tensorflow1') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_8K.wav') + logger.info("asr inference result: {0}".format(rec_result)) + + def test_paraformer_aishell1(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_paraformer_asr_nat-zh-cn-16k-aishell1-vocab4234-pytorch') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav') + logger.info("asr inference result: {0}".format(rec_result)) + + def test_paraformer_aishell2(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_paraformer_asr_nat-zh-cn-16k-aishell2-vocab5212-pytorch') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav') + logger.info("asr inference result: {0}".format(rec_result)) + + +class TestParaformerBertInferencePipelines(unittest.TestCase): + def test_funasr_path(self): + import funasr + import os + logger.info("run_dir:{0} ; funasr_path: {1}".format(os.getcwd(), funasr.__file__)) + + def test_aishell1(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_paraformerbert_asr_nat-zh-cn-16k-aishell1-vocab4234-pytorch') + rec_result = inference_pipeline( + audio_in='https://modelscope.oss-cn-beijing.aliyuncs.com/test/audios/asr_example.wav') + logger.info("asr inference result: {0}".format(rec_result)) + + def test_aishell2(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_paraformerbert_asr_nat-zh-cn-16k-aishell2-vocab5212-pytorch') + rec_result = inference_pipeline( + audio_in='https://modelscope.oss-cn-beijing.aliyuncs.com/test/audios/asr_example.wav') + logger.info("asr inference result: {0}".format(rec_result)) + + +class TestUniasrInferencePipelines(unittest.TestCase): + def test_funasr_path(self): + import funasr + import os + logger.info("run_dir:{0} ; funasr_path: {1}".format(os.getcwd(), funasr.__file__)) + + def test_uniasr_2pass_cantonese_chs_16k_common_offline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-cantonese-CHS-16k-common-vocab1468-tensorflow1-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_cantonese-CHS.wav', + param_dict={"decoding_model": "offline"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_cantonese_chs_16k_common_online(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-cantonese-CHS-16k-common-vocab1468-tensorflow1-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_cantonese-CHS.wav', + param_dict={"decoding_model": "normal"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_cn_dialect_offline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-cn-dialect-16k-vocab8358-tensorflow1-offline') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav') + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_cn_dialect_online(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-cn-dialect-16k-vocab8358-tensorflow1-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav') + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_de_common_offline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-de-16k-common-vocab3690-tensorflow1-offline') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_de.wav', + param_dict={"decoding_model": "offline"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_de_common_online(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-de-16k-common-vocab3690-tensorflow1-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_de.wav', + param_dict={"decoding_model": "normal"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_en_common_offline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-en-16k-common-vocab1080-tensorflow1-offline') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_en.wav', + param_dict={"decoding_model": "offline"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_en_common_online(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-en-16k-common-vocab1080-tensorflow1-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_en.wav', + param_dict={"decoding_model": "normal"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_es_common_offline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-es-16k-common-vocab3445-tensorflow1-offline') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_es.wav', + param_dict={"decoding_model": "offline"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_es_common_online(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-es-16k-common-vocab3445-tensorflow1-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_es.wav', + param_dict={"decoding_model": "normal"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_fa_common_offline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-offline') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_fa.wav', + param_dict={"decoding_model": "offline"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_fa_common_online(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-fa-16k-common-vocab1257-pytorch-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_fa.wav', + param_dict={"decoding_model": "normal"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_fr_common_offline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-fr-16k-common-vocab3472-tensorflow1-offline') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_fr.wav', + param_dict={"decoding_model": "offline"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_fr_common_online(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-fr-16k-common-vocab3472-tensorflow1-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_fr.wav', + param_dict={"decoding_model": "normal"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_id_common_offline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-id-16k-common-vocab1067-tensorflow1-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_id.wav', + param_dict={"decoding_model": "offline"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_id_common_online(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-id-16k-common-vocab1067-tensorflow1-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_id.wav', + param_dict={"decoding_model": "normal"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_ja_common_offline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-ja-16k-common-vocab93-tensorflow1-offline') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_ja.wav', + param_dict={"decoding_model": "offline"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_ja_common_online(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-ja-16k-common-vocab93-tensorflow1-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_ja.wav', + param_dict={"decoding_model": "normal"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_ko_common_offline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-ko-16k-common-vocab6400-tensorflow1-offline') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_ko.wav', + param_dict={"decoding_model": "offline"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_ko_common_online(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-ko-16k-common-vocab6400-tensorflow1-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_ko.wav', + param_dict={"decoding_model": "normal"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_minnan_common_offline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-minnan-16k-common-vocab3825') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav', + param_dict={"decoding_model": "offline"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_pt_common_offline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-pt-16k-common-vocab1617-tensorflow1-offline') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_pt.wav', + param_dict={"decoding_model": "offline"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_pt_common_online(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-pt-16k-common-vocab1617-tensorflow1-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_pt.wav', + param_dict={"decoding_model": "normal"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_ru_common_offline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-ru-16k-common-vocab1664-tensorflow1-offline') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_ru.wav', + param_dict={"decoding_model": "offline"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_ru_common_online(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-ru-16k-common-vocab1664-tensorflow1-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_ru.wav', + param_dict={"decoding_model": "normal"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_vi_common_offline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-vi-16k-common-vocab1001-pytorch-offline') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_vi.wav', + param_dict={"decoding_model": "offline"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_vi_common_online(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-vi-16k-common-vocab1001-pytorch-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_vi.wav', + param_dict={"decoding_model": "normal"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_zhcn_8k_common_vocab3445_offline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-offline') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav', + param_dict={"decoding_model": "offline"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_zhcn_8k_common_vocab3445_online(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab3445-pytorch-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav', + param_dict={"decoding_model": "normal"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_zhcn_8k_common_vocab8358_offline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab8358-tensorflow1-offline') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav', + param_dict={"decoding_model": "offline"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_zhcn_8k_common_vocab8358_online(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-zh-cn-8k-common-vocab8358-tensorflow1-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav', + param_dict={"decoding_model": "normal"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_zhcn_16k_common_vocab8358_offline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASauto_speech_recognitionR_asr_2pass-zh-cn-16k-common-vocab8358-tensorflow1-offline') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav', + param_dict={"decoding_model": "offline"}) + logger.info("asr inference result: {0}".format(rec_result)) + + def test_uniasr_2pass_zhcn_16k_common_vocab8358_online(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_UniASR_asr_2pass-zh-cn-16k-common-vocab8358-tensorflow1-online') + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav', + param_dict={"decoding_model": "normal"}) + logger.info("asr inference result: {0}".format(rec_result)) + + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/test_asr_vad_punc_inference_pipeline.py b/tests/test_asr_vad_punc_inference_pipeline.py new file mode 100644 index 000000000..628b256c0 --- /dev/null +++ b/tests/test_asr_vad_punc_inference_pipeline.py @@ -0,0 +1,32 @@ +import unittest + +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks +from modelscope.utils.logger import get_logger + +logger = get_logger() + +class TestParaformerInferencePipelines(unittest.TestCase): + def test_funasr_path(self): + import funasr + import os + logger.info("run_dir:{0} ; funasr_path: {1}".format(os.getcwd(), funasr.__file__)) + + def test_inference_pipeline(self): + inference_pipeline = pipeline( + task=Tasks.auto_speech_recognition, + model='damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch', + model_revision="v1.2.1", + vad_model='damo/speech_fsmn_vad_zh-cn-16k-common-pytorch', + vad_model_revision="v1.1.8", + punc_model='damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch', + punc_model_revision="v1.1.6", + ngpu=1, + ) + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav') + logger.info("asr_vad_punc inference result: {0}".format(rec_result)) + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/test_lm_pipeline.py b/tests/test_lm_pipeline.py new file mode 100644 index 000000000..3a5ec57a3 --- /dev/null +++ b/tests/test_lm_pipeline.py @@ -0,0 +1,25 @@ +import unittest + +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks +from modelscope.utils.logger import get_logger + +logger = get_logger() + +class TestTransformerInferencePipelines(unittest.TestCase): + def test_funasr_path(self): + import funasr + import os + logger.info("run_dir:{0} ; funasr_path: {1}".format(os.getcwd(), funasr.__file__)) + + def test_inference_pipeline(self): + inference_pipeline = pipeline( + task=Tasks.language_score_prediction, + model='damo/speech_transformer_lm_zh-cn-common-vocab8404-pytorch', + ) + rec_result = inference_pipeline(text_in="hello 大 家 好 呀") + logger.info("lm inference result: {0}".format(rec_result)) + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/test_punctuation_pipeline.py b/tests/test_punctuation_pipeline.py new file mode 100644 index 000000000..52be9bbac --- /dev/null +++ b/tests/test_punctuation_pipeline.py @@ -0,0 +1,43 @@ +import unittest + +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks +from modelscope.utils.logger import get_logger + +logger = get_logger() + +class TestTransformerInferencePipelines(unittest.TestCase): + def test_funasr_path(self): + import funasr + import os + logger.info("run_dir:{0} ; funasr_path: {1}".format(os.getcwd(), funasr.__file__)) + + def test_inference_pipeline(self): + inference_pipeline = pipeline( + task=Tasks.punctuation, + model='damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch', + model_revision="v1.1.7", + ) + inputs = "./egs_modelscope/punctuation/punc_ct-transformer_zh-cn-common-vocab272727-pytorch/data/punc_example.txt" + rec_result = inference_pipeline(text_in=inputs) + logger.info("punctuation inference result: {0}".format(rec_result)) + + def test_vadrealtime_inference_pipeline(self): + inference_pipeline = pipeline( + task=Tasks.punctuation, + model='damo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727', + model_revision="v1.0.0", + ) + inputs = "跨境河流是养育沿岸|人民的生命之源长期以来为帮助下游地区防灾减灾中方技术人员|在上游地区极为恶劣的自然条件下克服巨大困难甚至冒着生命危险|向印方提供汛期水文资料处理紧急事件中方重视印方在跨境河流问题上的关切|愿意进一步完善双方联合工作机制|凡是|中方能做的我们|都会去做而且会做得更好我请印度朋友们放心中国在上游的|任何开发利用都会经过科学|规划和论证兼顾上下游的利益" + vads = inputs.split("|") + cache_out = [] + rec_result_all = "outputs:" + for vad in vads: + rec_result = inference_pipeline(text_in=vad, cache=cache_out) + cache_out = rec_result['cache'] + rec_result_all += rec_result['text'] + logger.info("punctuation inference result: {0}".format(rec_result_all)) + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/test_sv_inference_pipeline.py b/tests/test_sv_inference_pipeline.py new file mode 100644 index 000000000..54ab5640b --- /dev/null +++ b/tests/test_sv_inference_pipeline.py @@ -0,0 +1,48 @@ +import unittest + +import numpy as np +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks +from modelscope.utils.logger import get_logger + +logger = get_logger() + + +class TestXVectorInferencePipelines(unittest.TestCase): + def test_funasr_path(self): + import funasr + import os + logger.info("run_dir:{0} ; funasr_path: {1}".format(os.getcwd(), funasr.__file__)) + + def test_inference_pipeline(self): + inference_sv_pipline = pipeline( + task=Tasks.speaker_verification, + model='damo/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch' + ) + # 提取不同句子的说话人嵌入码 + rec_result = inference_sv_pipline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/sv_example_enroll.wav') + enroll = rec_result["spk_embedding"] + + rec_result = inference_sv_pipline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/sv_example_same.wav') + same = rec_result["spk_embedding"] + + rec_result = inference_sv_pipline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/sv_example_different.wav') + different = rec_result["spk_embedding"] + + # 对相同的说话人计算余弦相似度 + sv_threshold = 0.9465 + same_cos = np.sum(enroll * same) / (np.linalg.norm(enroll) * np.linalg.norm(same)) + same_cos = max(same_cos - sv_threshold, 0.0) / (1.0 - sv_threshold) * 100.0 + logger.info("Similarity: {}".format(same_cos)) + + # 对不同的说话人计算余弦相似度 + diff_cos = np.sum(enroll * different) / (np.linalg.norm(enroll) * np.linalg.norm(different)) + diff_cos = max(diff_cos - sv_threshold, 0.0) / (1.0 - sv_threshold) * 100.0 + logger.info("Similarity: {}".format(diff_cos)) + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/test_vad_inference_pipeline.py b/tests/test_vad_inference_pipeline.py new file mode 100644 index 000000000..d22f46178 --- /dev/null +++ b/tests/test_vad_inference_pipeline.py @@ -0,0 +1,35 @@ +import unittest + +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks +from modelscope.utils.logger import get_logger + +logger = get_logger() + +class TestFSMNInferencePipelines(unittest.TestCase): + def test_funasr_path(self): + import funasr + import os + logger.info("run_dir:{0} ; funasr_path: {1}".format(os.getcwd(), funasr.__file__)) + + def test_8k(self): + inference_pipeline = pipeline( + task=Tasks.voice_activity_detection, + model="damo/speech_fsmn_vad_zh-cn-8k-common", + ) + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/vad_example_8k.wav') + logger.info("vad inference result: {0}".format(rec_result)) + + def test_16k(self): + inference_pipeline = pipeline( + task=Tasks.voice_activity_detection, + model="damo/speech_fsmn_vad_zh-cn-16k-common-pytorch", + ) + rec_result = inference_pipeline( + audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/vad_example.wav') + logger.info("vad inference result: {0}".format(rec_result)) + + +if __name__ == '__main__': + unittest.main()