class_docstr: Writer class for 'wav.scp'
  
  Args:
      outdir:
      scpfile:
      format: The output audio format
      multi_columns: Save multi channel data
          as multiple monaural audio files
      output_name_format: The naming formam of generated audio files
      output_name_format_multi_columns: The naming formam of generated audio files
          when multi_columns is given
      dtype:
      subtype:
  
  Examples:
      >>> writer = SoundScpWriter('./data/', './data/wav.scp')
      >>> writer['aa'] = 16000, numpy_array
      >>> writer['bb'] = 16000, numpy_array
  
      aa ./data/aa.wav
      bb ./data/bb.wav
  
      >>> writer = SoundScpWriter(
          './data/', './data/feat.scp', multi_columns=True,
      )
      >>> numpy_array.shape
      (100, 2)
      >>> writer['aa'] = 16000, numpy_array
  
      aa ./data/aa-CH0.wav ./data/aa-CH1.wav
code: def __setitem__(
      self,
      key: str,
      value: Union[Tuple[int, np.ndarray], Tuple[np.ndarray, int]],
  ):
      value = list(value)
      if len(value) != 2:
          raise ValueError(
              f"Expecting 2 elements, but got {len(value)}"
          )
      if isinstance(value[0], int) and isinstance(value[1], np.ndarray):
          rate, signal = value
      elif isinstance(value[1], int) and isinstance(
          value[0], np.ndarray
      ):
          signal, rate = value
      else:
          raise TypeError(
              "value shoulbe be a tuple of int and numpy.ndarray"
          )
  
      if signal.ndim not in (1, 2):
          raise RuntimeError(
              f"Input signal must be 1 or 2 dimension: {signal.ndim}"
          )
      if signal.ndim == 1:
          signal = signal[:, None]
  
      if signal.shape[1] > 1 and self.multi_columns:
          wavs = []
          for channel in range(signal.shape[1]):
              wav = (
                  self.dir
                  / self.output_name_format_multi_columns.format(
                      key=key, audio_format=self.format, channel=channel
                  )
              )
              wav.parent.mkdir(parents=True, exist_ok=True)
              wav = str(wav)
              soundfile.write(
                  wav, signal[:, channel], rate, subtype=self.subtype
              )
              wavs.append(wav)
  
          self.fscp.write(f"{key} {' '.join(wavs)}\n")
  
          # Store the file path
          self.data[key] = wavs
      else:
          wav = self.dir / self.output_name_format.format(
              key=key, audio_format=self.format
          )
          wav.parent.mkdir(parents=True, exist_ok=True)
          wav = str(wav)
          soundfile.write(wav, signal, rate, subtype=self.subtype)
          self.fscp.write(f"{key} {wav}\n")
  
          # Store the file path
          self.data[key] = wav
  
imports: import collections.abc
  from pathlib import Path
  from typing import List, Tuple, Union
  import numpy
  import soundfile
  from typeguard import check_argument_types
  from espnet2.fileio.read_text import read_2columns_text, read_multi_columns_text
label_desc: Use image node_id 2 for calling the SoundScpWriter obj's underlying member method code with example usage: obj.__setitem__(key, value) without return types