Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
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))
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
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'
Ejemplo n.º 7
0
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"])
Ejemplo n.º 8
0
    # 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
Ejemplo n.º 9
0
    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
Ejemplo n.º 10
0
                                           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,