def test_randomness(): rand_dir = os.path.join(absolute_dir_path, "generated", "random") rand_dir_rep = os.path.join(absolute_dir_path, "generated", "random_rep") sgr = SoundscapesGenerator(1, fg_folder, bg_folder) sgr.generate(2, rand_dir, min_events=2, max_events=2, events_start=('uniform', 0, 1), sources_time=[("const", 0), ("const", 0)]) sgr_rep = SoundscapesGenerator(1, fg_folder, bg_folder) sgr_rep.generate(2, rand_dir_rep, min_events=2, max_events=2, events_start=('uniform', 0, 1), sources_time=[0, 0]) list_files = [ os.path.join(rand_dir, "00.wav"), os.path.join(rand_dir, "01.wav") ] list_files_rep = [ os.path.join(rand_dir_rep, "00.wav"), os.path.join(rand_dir_rep, "01.wav") ] for i in range(len(list_files)): aud, sr = sf.read(list_files[i]) aud_r, sr_r = sf.read(list_files_rep[i]) assert (aud != aud_r).any() assert sr == sr_r
def generate_multiproc(start_from, number, rand_state): # We need to give a different random state to each object otherwise we just replicate X times the same data # except if it is None sg = SoundscapesGenerator(duration=clip_duration, fg_folder=fg_folder, bg_folder=bg_folder, ref_db=ref_db, samplerate=sample_rate, random_state=rand_state, logger=logger) sg.generate_by_label_occurence(label_occurences=co_occur_dict, number=number, out_folder=full_out_folder, save_isolated_events=True, start_from=start_from, pitch_shift=pitch_shift)
def generate_training(n_soundscapes, fg_folder, bg_folder, param_file, outfolder, duration=10.0, ref_db=-50): create_folder(outfolder) with open(param_file) as json_file: params = json.load(json_file) sg = SoundscapesGenerator(duration, fg_folder, bg_folder, ref_db=ref_db) sg.generate_by_label_occurence(params, n_soundscapes, outfolder, min_events=1, max_events=1, pitch_shift=('uniform', -3, 3))
def test_random_state(): rand_dir = os.path.join(absolute_dir_path, "generated", "random_state") rand_dir_rep = os.path.join(absolute_dir_path, "generated", "random_state_rep") sgrs = SoundscapesGenerator(10, fg_folder, bg_folder, random_state=2020) sgrs.generate(2, rand_dir) sgrs_rep = SoundscapesGenerator(10, fg_folder, bg_folder, random_state=2020) sgrs_rep.generate(2, rand_dir_rep) list_files = [ os.path.join(rand_dir, "00.wav"), os.path.join(rand_dir, "01.wav") ] list_files_rep = [ os.path.join(rand_dir_rep, "00.wav"), os.path.join(rand_dir_rep, "01.wav") ] for i in range(len(list_files)): aud, sr = sf.read(list_files[i]) aud_r, sr_r = sf.read(list_files_rep[i]) assert (aud == aud_r).all() assert sr == sr_r
pformat(vars(args)) # General output folder, in args base_out_folder = args.out_folder create_folder(base_out_folder) out_tsv_folder = args.out_tsv_folder create_folder(out_tsv_folder) # ################ # Varying onset of a single event # ########### # SCAPER SETTINGS clip_duration = 10.0 sg = SoundscapesGenerator(duration=clip_duration, fg_folder=args.fg_folder, bg_folder=args.bg_folder) n_soundscapes = args.number source_time_dist = "const" source_time = 0.0 event_duration_dist = "uniform" event_duration_min = 0.25 event_duration_max = 10.0 snr_dist = "uniform" snr_min = 6 snr_max = 30 pitch_dist = "uniform" pitch_min = -3.0
parser.add_argument('--bg_folder', type=str, default=osp.join(cfg.audio_path_eval, "soundbank", "background_long")) args = parser.parse_args() pformat(vars(args)) # General output folder, in args out_folder = args.out_folder create_folder(out_folder) create_folder(osp.dirname(args.out_tsv)) # ################ # Long event as background, short events as foreground # ########### duration = 10.0 sg = SoundscapesGenerator(duration=duration, fg_folder=args.fg_folder, bg_folder=args.bg_folder, ref_db=cfg.ref_db, samplerate=cfg.samplerate) n_soundscapes = args.number # Distribution of events min_events = 1 max_events = 5 evt_time_dist = 'truncnorm' evt_time_mean = 5.0 evt_time_std = 2.0 evt_time_min = 0.0 evt_time_max = 10.0 source_time_dist = 'const'
import json import os import pandas as pd import soundfile as sf from desed.generate_synthetic import SoundscapesGenerator, generate_tsv_from_jams, generate_files_from_jams absolute_dir_path = os.path.abspath(os.path.dirname(__file__)) fg_folder = os.path.join(absolute_dir_path, "material", "soundbank", "foreground") bg_folder = os.path.join(absolute_dir_path, "material", "soundbank", "background") sg = SoundscapesGenerator(1, fg_folder, bg_folder, random_state=2020) def test_generate_simple(): out_dir = os.path.join(absolute_dir_path, "generated", "soundgenerator", "simple") os.makedirs(out_dir, exist_ok=True) sg.generate(2, out_dir, txt_file=False) def test_generate_balance(): out_dir = os.path.join(absolute_dir_path, "generated", "soundgenerator", "simple") os.makedirs(out_dir, exist_ok=True) sg.generate_balance(2, out_dir, min_events=1, max_events=1, bg_labels=["label"])
# General output folder, in args out_folder = args.out_folder create_folder(out_folder) out_tsv = args.out_tsv if out_tsv is not None: create_folder(osp.dirname(args.out_tsv)) # Default parameters clip_duration = 10.0 ref_db = -55 samplerate = 16000 sg = SoundscapesGenerator( duration=clip_duration, fg_folder=args.fg_folder, bg_folder=args.bg_folder, ref_db=ref_db, samplerate=samplerate, ) # Generate events same way as the training set out_folder_30 = osp.join(out_folder, "30dB") create_folder(out_folder_30) param_json = osp.join("event_occurences", "event_occurences_eval.json") with open(param_json) as json_file: co_occur_dict = json.load(json_file) sg.generate_by_label_occurence(label_occurences=co_occur_dict, number=args.number, out_folder=out_folder_30) # Remove files that have polyphony greater than 3
parser.add_argument('--bg_folder', type=str, default=osp.join(cfg.audio_path_train, "soundbank", "background")) parser.add_argument('--json_params', type=str, default=osp.join("event_occurences", 'event_occurences_train.json')) args = parser.parse_args() pformat(vars(args)) # General output folder, in args out_folder = args.out_folder create_folder(out_folder) create_folder(osp.dirname(args.out_tsv)) # Default parameters clip_duration = 10.0 sg = SoundscapesGenerator(duration=clip_duration, fg_folder=args.fg_folder, bg_folder=args.bg_folder, ref_db=cfg.ref_db, samplerate=cfg.samplerate) # Generate events same way as the training set out_folder_30 = osp.join(out_folder, "30dB") create_folder(out_folder_30) param_json = args.json_params with open(param_json) as json_file: co_occur_dict = json.load(json_file) sg.generate_by_label_occurence(label_occurences=co_occur_dict, number=args.number, out_folder=out_folder_30, save_isolated_events=True) # Remove files that have polyphony greater than 3
start_from=start_from, pitch_shift=pitch_shift) if random_state is None: random_states = [None for i in range(nproc)] else: random_states = [random_state + i for i in range(nproc)] print(random_states) with multiprocessing.Pool(nproc) as p: p.starmap(generate_multiproc, zip(list_start, numbers, random_states)) # Single process else: sg = SoundscapesGenerator(duration=clip_duration, fg_folder=fg_folder, bg_folder=bg_folder, ref_db=ref_db, samplerate=sample_rate, random_state=random_state) sg.generate_by_label_occurence(label_occurences=co_occur_dict, number=n_soundscapes, out_folder=full_out_folder, save_isolated_events=True, pitch_shift=pitch_shift) # ## # Post processing rm_high_polyphony(full_out_folder, max_polyphony=2) # concat same labels overlapping post_process_txt_labels(full_out_folder, output_folder=full_out_folder, output_tsv=out_tsv,