code: def read_sources(row, n_src, aishell1_dir, wham_dir):
      """Get sources and info to mix the sources"""
      # Get info about the mixture
      mixture_id = row["mixture_ID"]
      sources_path_list = get_list_from_csv(row, "source_path", n_src)
      gain_list = get_list_from_csv(row, "source_gain", n_src)
      sources_list = []
      max_length = 0
      # Read the files to make the mixture
      for sources_path in sources_path_list:
          sources_path = os.path.join(aishell1_dir, sources_path)
          source, _ = sf.read(sources_path, dtype="float32")
          # Get max_length
          if max_length < len(source):
              max_length = len(source)
          sources_list.append(source)
      # Read the noise
      noise_path = os.path.join(wham_dir, row["noise_path"])
      noise, _ = sf.read(noise_path, dtype="float32", stop=max_length)
      # if noises have 2 channels take the first
      if len(noise.shape) > 1:
          noise = noise[:, 0]
      # if noise is too short extend it
      if len(noise) < max_length:
          noise = extend_noise(noise, max_length)
      sources_list.append(noise)
      gain_list.append(row["noise_gain"])
  
      return mixture_id, gain_list, sources_list
  
imports: import os
  import argparse
  import soundfile
  import pandas
  import numpy
  import functools
  from scipy.signal import resample_poly
  import tqdm.contrib.concurrent
  import glob
  import shutil
label_desc: Use image node_id 8 for calling a global function with example usage: read_sources(row, n_src, aishell1_dir, wham_dir) and returns: mixture_id,  gain_list,  sources_list