Example #1
0
 def run(self):
     # Initialize signals
     self.percentDoneSignal.emit(0)
     percent_scale = 1000.0 / 5
     self.doneSignal.emit(0)
     self.statusSignal.emit("")
     # Load in audio data
     self.statusSignal.emit("Loading {}".format(
         os.path.split(self.mix_file)[1]))
     mix, self.fs = librosa.load(self.mix_file, sr=None)
     self.percentDoneSignal.emit(1 * percent_scale)
     self.statusSignal.emit("Loading {}".format(
         os.path.split(self.source_file)[1]))
     source, self.fs = librosa.load(self.source_file, sr=self.fs)
     self.percentDoneSignal.emit(2 * percent_scale)
     # Fix any gross timing offset
     self.statusSignal.emit("Aligning...")
     mix, source = estimate.align(mix, source, self.fs)
     self.percentDoneSignal.emit(3 * percent_scale)
     self.statusSignal.emit("Subtracting...")
     source = estimate.reverse_channel(mix, source)
     mix, source = estimate.pad(mix, source)
     self.percentDoneSignal.emit(4 * percent_scale)
     self.statusSignal.emit("Enhancing...")
     self.subtracted = estimate.wiener_enhance(mix - source, source,
                                               self.wiener_threshold)
     self.percentDoneSignal.emit(5 * percent_scale)
     self.doneSignal.emit(1)
Example #2
0
 def run(self):
     # Initialize signals
     self.percentDoneSignal.emit(0)
     percent_scale = 1000.0 / 5
     self.doneSignal.emit(0)
     self.statusSignal.emit("")
     # Load in audio data
     self.statusSignal.emit("Loading {}".format(os.path.split(self.mix_file)[1]))
     mix, self.fs = librosa.load(self.mix_file, sr=None)
     self.percentDoneSignal.emit(1 * percent_scale)
     self.statusSignal.emit("Loading {}".format(os.path.split(self.source_file)[1]))
     source, self.fs = librosa.load(self.source_file, sr=self.fs)
     self.percentDoneSignal.emit(2 * percent_scale)
     # Fix any gross timing offset
     self.statusSignal.emit("Aligning...")
     mix, source = estimate.align(mix, source, self.fs)
     self.percentDoneSignal.emit(3 * percent_scale)
     self.statusSignal.emit("Subtracting...")
     source = estimate.reverse_channel(mix, source)
     mix, source = estimate.pad(mix, source)
     self.percentDoneSignal.emit(4 * percent_scale)
     self.statusSignal.emit("Enhancing...")
     self.subtracted = estimate.wiener_enhance(mix - source, source, self.wiener_threshold)
     self.percentDoneSignal.emit(5 * percent_scale)
     self.doneSignal.emit(1)
Example #3
0
        # Load in the source waveform
        source, fs = librosa.load(os.path.join(subdirectory,
                                               '{}.wav'.format(s)),
                                  sr=fs)
        # Align the source to the mixture
        # Small resampling rate range because it's all digital
        mix, source_aligned = estimate.align(mix,
                                             source,
                                             fs,
                                             correlation_size=4.,
                                             max_global_offset=0.,
                                             max_skew=.0001,
                                             hop=1.,
                                             max_local_offset=.01)
        # Estimate the filter
        source_filtered = estimate.reverse_channel(mix, source_aligned)
        # Write out the aligned and filtered versions
        librosa.output.write_wav(
            os.path.join(subdirectory, '{}-aligned.wav'.format(s)),
            source_aligned, fs)
        librosa.output.write_wav(
            os.path.join(subdirectory, '{}-aligned-filtered.wav'.format(s)),
            source_filtered, fs)

# <markdowncell>

# ## Step 2: Compute SDR
# For each song, we compute the SDR of $m - c$, $m - c_\mathcal{R}$ and $m - c_\mathcal{F}$ relative to $s$ where we consider both the case when $c$ is the a cappella and $s$ is the instrumental and the case where $c$ is the instrumental and $s$ is the a cappella.

# <codecell>
Example #4
0
# ... with subdirectories 1, 2, 3... each for a different song
subdirectories = [os.path.join(data_directory, d) for d in os.listdir(data_directory)]
for subdirectory in [d for d in subdirectories if os.path.isdir(d)]:
    print 'Processing file {}'.format(subdirectory)
    # Load in the full mixture
    mix, fs = librosa.load(os.path.join(subdirectory, 'M.wav'), sr=None)
    # Perform timing/channel estimation for both a cappella ('A' files) and instrumental ('I' files)
    for s in ['A', 'I']:
        # Load in the source waveform
        source, fs = librosa.load(os.path.join(subdirectory, '{}.wav'.format(s)), sr=fs)
        # Align the source to the mixture
        # Small resampling rate range because it's all digital
        mix, source_aligned = estimate.align(mix, source, fs, correlation_size=4., max_global_offset=0.,
                                             max_skew=.0001, hop=1., max_local_offset=.01)
        # Estimate the filter
        source_filtered = estimate.reverse_channel(mix, source_aligned)
        # Write out the aligned and filtered versions
        librosa.output.write_wav(os.path.join(subdirectory, '{}-aligned.wav'.format(s)), source_aligned, fs)
        librosa.output.write_wav(os.path.join(subdirectory, '{}-aligned-filtered.wav'.format(s)), source_filtered, fs)

# <markdowncell>

# ## Step 2: Compute SDR
# For each song, we compute the SDR of $m - c$, $m - c_\mathcal{R}$ and $m - c_\mathcal{F}$ relative to $s$ where we consider both the case when $c$ is the a cappella and $s$ is the instrumental and the case where $c$ is the instrumental and $s$ is the a cappella.

# <codecell>

def trim(signals, trim_length):
    '''
    First, trims each signal in signals to the minimum length.
    Then, trims of trim_length samples from the beginning and end.