code: def add_utterance(self, utt, recording):
      text = utt["text"]
      arrangement, performance, country, gender, user = recording[
          :-4
      ].split("-")
  
      # the following mapping is necessary for errors in gender in country IN
      insensitive_none = re.compile(re.escape("none"), re.IGNORECASE)
  
      gender = insensitive_none.sub("", utt["gender"])
      spk = "{}{}".format(
          insensitive_none.sub("", gender).upper(),
          insensitive_none.sub("", user),
      )
  
      rec_id = recording[:-4]
      utt_id = "{}-{}-{}-{}-{}-{:03}".format(
          spk,
          arrangement,
          performance,
          country,
          gender.upper(),
          utt["index"],
      )
  
      start = utt["start"]
      end = utt["end"]
  
      wavpath = join(
          country, "{}{}".format(country, "Vocals"), recording
      )
  
      self._add_segment(utt_id, rec_id, start, end)
      self._add_spk2gender(spk, gender)
      self._add_text(utt_id, text)
      self._add_utt2spk(utt_id, spk)
      self._add_wavscp(rec_id, wavpath)
  
file_path: espnet/egs2/dsing/asr1/local/data_prep.py
imports: import argparse
  import hashlib
  import json
  import re
  from os import listdir, makedirs
  from os.path import exists, isfile, join
label_desc: Use image node_id 2 for calling the DataSet obj's underlying member method code with example usage: obj.add_utterance(utt, recording) without return types