text: #!/usr/bin/env python3
  # Copyright 2015   David Snyder
  #           2018   Ewald Enzinger
  # Apache 2.0.
  #
  # Modified version of egs/sre16/v1/local/make_musan.py (commit e3fb7c4a0da4167f8c94b80f4d3cc5ab4d0e22e8).
  # This version uses the raw MUSAN audio files (16 kHz) and does not use sox to resample at 8 kHz.
  #
  # This file is meant to be invoked by make_musan.sh.
  
  import os, sys
  
  def process_music_annotations(path):
    utt2spk = {}
    utt2vocals = {}
    lines = open(path, 'r').readlines()
    for line in lines:
      utt, genres, vocals, musician = line.rstrip().split()[:4]
      # For this application, the musican ID isn't important
      utt2spk[utt] = utt
      utt2vocals[utt] = vocals == "Y"
    return utt2spk, utt2vocals
  
  def prepare_music(root_dir, use_vocals):
    utt2vocals = {}
    utt2spk = {}
    utt2wav = {}
    num_good_files = 0
    num_bad_files = 0
    music_dir = os.path.join(root_dir, "music")
    for root, dirs, files in os.walk(music_dir):
      for file in files:
        file_path = os.path.join(root, file)
        if file.endswith(".wav"):
          utt = str(file).replace(".wav", "")
          utt2wav[utt] = file_path
        elif str(file) == "ANNOTATIONS":
          utt2spk_part, utt2vocals_part = process_music_annotations(file_path)
          utt2spk.update(utt2spk_part)
          utt2vocals.update(utt2vocals_part)
    utt2spk_str = ""
    utt2wav_str = ""
    for utt in utt2vocals:
      if utt in utt2wav:
        if use_vocals or not utt2vocals[utt]:
          utt2spk_str = utt2spk_str + utt + " " + utt2spk[utt] + "\n"
          utt2wav_str = utt2wav_str + utt + " " + utt2wav[utt] + "\n"
        num_good_files += 1
      else:
        print("Missing file {}".format(utt))
        num_bad_files += 1
    print("In music directory, processed {} files; {} had missing wav data".format(num_good_files, num_bad_files))
    return utt2spk_str, utt2wav_str
  
  def prepare_speech(root_dir):
    utt2spk = {}
    utt2wav = {}
    num_good_files = 0
    num_bad_files = 0
    speech_dir = os.path.join(root_dir, "speech")
    for root, dirs, files in os.walk(speech_dir):
      for file in files:
        file_path = os.path.join(root, file)
        if file.endswith(".wav"):
          utt = str(file).replace(".wav", "")
          utt2wav[utt] = file_path
          utt2spk[utt] = utt
    utt2spk_str = ""
    utt2wav_str = ""
    for utt in utt2spk:
      if utt in utt2wav:
        utt2spk_str = utt2spk_str + utt + " " + utt2spk[utt] + "\n"
        utt2wav_str = utt2wav_str + utt + " " + utt2wav[utt] + "\n"
        num_good_files += 1
      else:
        print("Missing file {}".format(utt))
        num_bad_files += 1
    print("In speech directory, processed {} files; {} had missing wav data".format(num_good_files, num_bad_files))
    return utt2spk_str, utt2wav_str
  
  def prepare_noise(root_dir):
    utt2spk = {}
    utt2wav = {}
    num_good_files = 0
    num_bad_files = 0
    noise_dir = os.path.join(root_dir, "noise")
    for root, dirs, files in os.walk(noise_dir):
      for file in files:
        file_path = os.path.join(root, file)
        if file.endswith(".wav"):
          utt = str(file).replace(".wav", "")
          utt2wav[utt] = file_path
          utt2spk[utt] = utt
    utt2spk_str = ""
    utt2wav_str = ""
    for utt in utt2spk:
      if utt in utt2wav:
        utt2spk_str = utt2spk_str + utt + " " + utt2spk[utt] + "\n"
        utt2wav_str = utt2wav_str + utt + " " + utt2wav[utt] + "\n"
        num_good_files += 1
      else:
        print("Missing file {}".format(utt))
        num_bad_files += 1
    print("In noise directory, processed {} files; {} had missing wav data".format(num_good_files, num_bad_files))
    return utt2spk_str, utt2wav_str
  
  def main():
    in_dir = sys.argv[1]
    out_dir = sys.argv[2]
    use_vocals = sys.argv[3] == "Y"
    utt2spk_music, utt2wav_music = prepare_music(in_dir, use_vocals)
    utt2spk_speech, utt2wav_speech = prepare_speech(in_dir)
    utt2spk_noise, utt2wav_noise = prepare_noise(in_dir)
    utt2spk = utt2spk_speech + utt2spk_music + utt2spk_noise
    utt2wav = utt2wav_speech + utt2wav_music + utt2wav_noise
    wav_fi = open(os.path.join(out_dir, "wav.scp"), 'w')
    wav_fi.write(utt2wav)
    utt2spk_fi = open(os.path.join(out_dir, "utt2spk"), 'w')
    utt2spk_fi.write(utt2spk)
  
  
  if __name__=="__main__":
    main()
  