code: def apply_cmvn():
      args = get_parser().parse_args()
  
      if ":" in args.stats_rspecifier_or_rxfilename:
          is_rspcifier = True
          stats_filetype = "ark"
          stats_dict = dict(
              KaldiReader(args.stats_rspecifier_or_rxfilename)
          )
      else:
          is_rspcifier = False
          stats_filetype = "mat"
          stats = kaldiio.load_mat(args.stats_rspecifier_or_rxfilename)
          stats_dict = {None: stats}
  
      config = {}
      config["norm_means"] = args.norm_means
      config["norm_vars"] = args.norm_vars
      config["utt2spk"] = args.utt2spk
      config["spk2utt"] = args.spk2utt
      config["reverse"] = args.reverse
      config["std_floor"] = args.std_floor
      config["filetype"] = stats_filetype
  
      cmvn = CMVN.params(config).instantiate()
      cmvn.call(stats_dict)
  
      with KaldiWriter(
          args.wspecifier,
          write_num_frames=args.write_num_frames,
          compress=args.compress,
          compression_method=args.compression_method,
      ) as writer, kaldiio.ReadHelper(args.rspecifier) as reader:
          for utt, mat in reader:
              mat_new = cmvn.apply_cmvn(mat, utt)
              writer[utt] = mat_new
  
file_path: delta/egs/mini_an4/asr/v1/dutils/speech/apply_cmvn.py
imports: import argparse
  import kaldiio
  import numpy
  from espnet.utils.cli_writers import KaldiWriter
  from espnet.utils.cli_readers import KaldiReader
  import os
  from delta.data.frontend.cmvn import CMVN
label_desc: Use image node_id 2 for calling a global function with example usage: apply_cmvn() without return types