code: def _get_read_chans(
      self, c_supervision, c_recordings, start, duration, fs=16000
  ):
      to_tensor = []
      chan_indx = []
      for recording in c_recordings.sources:
          c_wav, _ = sf.read(
              recording.source,
              start=int(start * fs),
              stop=int(start * fs) + int(duration * fs),
          )
          c_wav = torch.from_numpy(c_wav).float().unsqueeze(0)
          assert (
              c_wav.shape[0] == 1
          ), "Input audio should be mono for channel selection in this script."
  
          if len(to_tensor) > 0:
              if c_wav.shape[-1] != to_tensor[0].shape[-1]:
                  print(
                      "Discarded recording {} from {} supervision start {:.3f} "
                      "stop {:.3f} . There is a difference of length of {} (samples)"
                      " with the other recordings. It may be that one recording "
                      "is shorter than the others and this segment exceed "
                      "the length of the shorter one."
                      "".format(
                          recording,
                          c_supervision.id,
                          c_supervision.start,
                          c_supervision.end,
                          abs(c_wav.shape[-1] - to_tensor[0].shape[-1]),
                      )
                  )
                  continue
          to_tensor.append(c_wav)
  
          chan_indx.append(recording.channels[0])
  
      all_channels = torch.stack(to_tensor).transpose(0, 1)
  
      return all_channels, chan_indx
  
imports: import argparse
  import os
  from copy import deepcopy
  from pathlib import Path
  import lhotse
  import soundfile
  import torch
  import torchaudio
  import tqdm
  from torch.utils.data import DataLoader, Dataset
label_desc: Use image node_id 3 for calling the MicRanking obj's underlying member method code with example usage: obj._get_read_chans(c_supervision, c_recordings, start, duration, fs) and returns: all_channels,  chan_indx