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
Пример #2
0
    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 + ".")
Пример #4
0
 def duration_samples(self):
     return int(self.duration_seconds * localmodule.get_sample_rate())
Пример #5
0
 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)