def design_oldbird_filter(settings): f0 = settings.filter_f0 f1 = settings.filter_f1 bw = settings.filter_bw fs2 = localmodule.get_sample_rate() bands = np.array([0, f0 - bw, f0, f1, f1 + bw, fs2]) / fs2 desired = np.array([0, 0, 1, 1, 0, 0]) coefficients = ob._firls(settings.filter_length, bands, desired) return coefficients
def load_annotation_file(filepath): # Get recording date (and time) if it is available fname = os.path.basename(filepath) stripped_path = fname.replace('-', '') origin_name = BirdVoxAnnotationDataset.get_origin_name(fname) path_parts = stripped_path.split('_') date_parts = [x for x in path_parts if x.startswith('2015')] bv70k_pattern = r'unit\d{2,2}_\d{9,9}_\d{5,5}_[01]\.Table\.1\.selections\.txt' if len(date_parts) > 0: recording_date = date_parts[0] elif re.match(bv70k_pattern, stripped_path): # If BV70k: offset = int(path_parts[1]) / float(localmodule.get_sample_rate()) offset_delta = datetime.timedelta(seconds=offset) unit_str = path_parts[0] start_time_path = os.path.join(os.path.dirname(filepath), '../..', 'BirdVox-70k_utc-start-times.csv') with open(start_time_path, 'r') as f: reader = csv.DictReader(f) for row in reader: if row['Unit'] == unit_str: ts = int(row['UTC'].strip()) start_dt = datetime.datetime.utcfromtimestamp(ts) dt = start_dt + offset_delta recording_date = dt.strftime("%Y%m%d%H%M%S") else: recording_date = "" annotations = [] with open(filepath, 'r') as f: reader = csv.DictReader(f, delimiter='\t') for row in reader: annotations.append( BirdVoxAnnotation(row, origin_name=origin_name, recording_date=recording_date)) return annotations
import datetime import h5py import librosa import numpy as np import os import sys import time import localmodule # Define constants. data_dir = localmodule.get_data_dir() dataset_name = localmodule.get_dataset_name() sample_rate = localmodule.get_sample_rate() args = sys.argv[1:] aug_str = args[0] instance_id = int(args[1]) instance_str = str(instance_id) unit_str = args[2] if aug_str == "original": instanced_aug_str = aug_str else: instanced_aug_str = "-".join([aug_str, instance_str]) pcen_settings = localmodule.get_pcen_settings() # Print header. start_time = int(time.time()) print(str(datetime.datetime.now()) + " Start.") print("Computing per-channel energy normalization (PCEN) for " +\ dataset_name + " clips, with domain-specific librosa parameters.") print("Unit: " + unit_str + ".")
def duration_samples(self): return int(self.duration_seconds * localmodule.get_sample_rate())
def timestamp(self): return int((self.start_time + self.end_time) / 2.0 * localmodule.get_sample_rate())
jam.annotations.append(ann) return jam for fname in os.listdir(original_dataset_h5_dir): in_path = os.path.join(original_dataset_h5_dir, fname) #TODO do I need os.path.basename(in_path) out_fname = os.path.basename(in_path).replace('original', aug_str + '-' + instance_str) out_path = os.path.join(aug_dataset_h5_dir, out_fname) if os.path.exists(out_path): continue with h5py.File(in_path, 'r') as f_in: with h5py.File(out_path, 'w') as f_out: f_out["sample_rate"] = localmodule.get_sample_rate() waveform_group = f_out.create_group("waveforms") for clip_name, data in f_in['waveforms'].items(): jam_in = create_jams(clip_name, in_path, data.value.flatten(), f_in['sample_rate'].value) jam_in = muda.jam_pack(jam_in, _audio=dict( y=data.value.flatten(), sr=localmodule.get_sample_rate())) # Apply data augmentation. jam_tf = deformer.transform(jam_in) # Get jam from jam iterator. The iterator has only one element. jam_out = next(jam_tf)
import os import sys import time sys.path.append("../src") import localmodule # Define constants. dataset_name = localmodule.get_dataset_name() full_logmelspec_name = "_".join([ dataset_name, "full-logmelspec"]) data_dir = localmodule.get_data_dir() full_logmelspec_dir = os.path.join( data_dir, full_logmelspec_name) orig_sr = localmodule.get_sample_rate() percentiles = [0.1, 1, 10, 25, 50, 75, 90, 99, 99.9] n_percentiles = len(percentiles) # Parse input arguments. args = sys.argv[1:] T_str = args[0] unit_str = args[1] bg_duration = int(T_str) # Create folder for backgrounds. backgrounds_name = "_".join( [dataset_name, "full-logmelspec-backgrounds"]) backgrounds_dir = os.path.join(data_dir, backgrounds_name)