code: def from_tsv(
      cls,
      root: str,
      data_cfg: S2TDataConfig,
      split: str,
      tgt_dict,
      pre_tokenizer,
      bpe_tokenizer,
      is_train_split: bool,
      n_frames_per_step: int,
      speaker_to_id,
      do_chunk: bool = False,
      chunk_bound: int = -1,
      chunk_init: int = 50,
      chunk_incr: int = 5,
      add_eos: bool = True,
      dedup: bool = True,
      ref_fpu: float = -1,
  ) -> FrmTextToSpeechDataset:
      tsv_path = op.join(root, f"{split}.tsv")
      if not op.isfile(tsv_path):
          raise FileNotFoundError(f"Dataset not found: {tsv_path}")
      with open(tsv_path) as f:
          reader = csv.DictReader(
              f,
              delimiter="\t",
              quotechar=None,
              doublequote=False,
              lineterminator="\n",
              quoting=csv.QUOTE_NONE,
          )
          s = [dict(e) for e in reader]
          assert len(s) > 0
  
      ids = [ss[cls.KEY_ID] for ss in s]
      audio_paths = [
          op.join(data_cfg.audio_root, ss[cls.KEY_AUDIO]) for ss in s
      ]
      n_frames = [int(ss[cls.KEY_N_FRAMES]) for ss in s]
      tgt_texts = [ss[cls.KEY_TGT_TEXT] for ss in s]
      src_texts = [
          ss.get(cls.KEY_SRC_TEXT, cls.DEFAULT_SRC_TEXT) for ss in s
      ]
      speakers = [
          ss.get(cls.KEY_SPEAKER, cls.DEFAULT_SPEAKER) for ss in s
      ]
      src_langs = [
          ss.get(cls.KEY_SRC_LANG, cls.DEFAULT_LANG) for ss in s
      ]
      tgt_langs = [
          ss.get(cls.KEY_TGT_LANG, cls.DEFAULT_LANG) for ss in s
      ]
  
      return FrmTextToSpeechDataset(
          split=split,
          is_train_split=is_train_split,
          data_cfg=data_cfg,
          audio_paths=audio_paths,
          n_frames=n_frames,
          src_texts=src_texts,
          tgt_texts=tgt_texts,
          speakers=speakers,
          src_langs=src_langs,
          tgt_langs=tgt_langs,
          ids=ids,
          tgt_dict=tgt_dict,
          pre_tokenizer=pre_tokenizer,
          bpe_tokenizer=bpe_tokenizer,
          n_frames_per_step=n_frames_per_step,
          speaker_to_id=speaker_to_id,
          do_chunk=do_chunk,
          chunk_bound=chunk_bound,
          chunk_init=chunk_init,
          chunk_incr=chunk_incr,
          add_eos=add_eos,
          dedup=dedup,
          ref_fpu=ref_fpu,
      )
  
file_path: fairseq/fairseq/data/audio/frm_text_to_speech_dataset.py
imports: import csv
  import logging
  import os.path
  from typing import List, Optional
  import numpy
  import torch
  from fairseq.data import Dictionary
  from fairseq.data.audio.speech_to_text_dataset import S2TDataConfig
  from fairseq.data.audio.text_to_speech_dataset import TextToSpeechDataset, TextToSpeechDatasetCreator
label_desc: Use image node_id 1 for calling the FrmTextToSpeechDatasetCreator obj's underlying member method code with example usage: obj.from_tsv(cls, root, data_cfg, split, tgt_dict, pre_tokenizer, bpe_tokenizer, is_train_split, n_frames_per_step, speaker_to_id, do_chunk, chunk_bound, chunk_init, chunk_incr, add_eos, dedup, ref_fpu) and returns: FrmTextToSpeechDataset