Ejemplo n.º 1
0
def main():

    start_time = time.time()

    window_size = int(round(WINDOW_SIZE * SAMPLE_RATE))
    hop_size = int(round(HOP_SIZE * SAMPLE_RATE))
    dft_size = tfa_utils.get_dft_size(window_size)

    print('window size', window_size)
    print('hop size', hop_size)
    print('DFT size', dft_size)

    num_spectra = int(round(APPROXIMATE_READ_SIZE / hop_size))
    usual_read_size = (num_spectra - 1) * hop_size + window_size
    window = HannWindow(window_size).samples
    reader = WaveAudioFileReader(str(FILE_PATH), mono_1d=True)
    length = reader.length
    index = 0
    while length - index >= window_size:
        # print(index)
        read_size = min(usual_read_size, length - index)
        samples = reader.read(index, read_size)
        gram = tfa_utils.compute_spectrogram(samples, window, hop_size,
                                             dft_size)
        # inband_powers = compute_inband_powers(gram)
        num_spectra = len(gram)
        index += num_spectra * hop_size

    end_time = time.time()
    elapsed = end_time - start_time
    duration = reader.length / reader.sample_rate
    rate = duration / elapsed
    print(('Processed {:.1f} seconds of audio in {:.1f} seconds, {:.1f} '
           'times faster than real time.').format(duration, elapsed, rate))
def main():
    
    start_time = time.time()
    
    window_size = int(round(WINDOW_SIZE * SAMPLE_RATE))
    hop_size = int(round(HOP_SIZE * SAMPLE_RATE))
    dft_size = tfa_utils.get_dft_size(window_size)
    
    print('window size', window_size)
    print('hop size', hop_size)
    print('DFT size', dft_size)
    
    num_spectra = int(round(APPROXIMATE_READ_SIZE / hop_size))
    usual_read_size = (num_spectra - 1) * hop_size + window_size
    window = HannWindow(window_size).samples
    reader = WaveAudioFileReader(str(FILE_PATH), mono_1d=True)
    length = reader.length
    index = 0
    while length - index >= window_size:
        # print(index)
        read_size = min(usual_read_size, length - index)
        samples = reader.read(index, read_size)
        gram = tfa_utils.compute_spectrogram(
            samples, window, hop_size, dft_size)
        inband_powers = compute_inband_powers(gram)
        num_spectra = len(inband_powers)
        index += num_spectra * hop_size
        
    end_time = time.time()
    elapsed = end_time - start_time
    duration = reader.length / reader.sample_rate
    rate = duration / elapsed
    print(
        ('Processed {:.1f} seconds of audio in {:.1f} seconds, {:.1f} '
         'times faster than real time.').format(duration, elapsed, rate))
Ejemplo n.º 3
0
def _get_gram_channel_samples(waveform_samples, window, hop_size, dft_size):
    
    gram = tfa_utils.compute_spectrogram(
        waveform_samples, window, hop_size, dft_size)
    
    tfa_utils.scale_spectrogram(gram, out=gram)
    
    return gram
Ejemplo n.º 4
0
def plot_spectrogram(samples, sample_rate, title, pdf_file):

    window_size_sec = .005
    hop_size_percent = 20

    window_size = int(round(window_size_sec * sample_rate))
    window = signal.hanning(window_size, sym=False)
    hop_size = \
        int(round(window_size_sec * hop_size_percent / 100 * sample_rate))

    dft_size = 2 * tfa_utils.get_dft_size(window_size)

    gram = tfa_utils.compute_spectrogram(samples, window, hop_size, dft_size)

    gram = tfa_utils.linear_to_log(gram)

    # plot_histogram(gram)

    hop_size_sec = window_size_sec * hop_size_percent / 100
    times = np.arange(len(gram)) * hop_size_sec + window_size_sec / 2

    num_bins = dft_size / 2 + 1
    bin_size = sample_rate / dft_size
    freqs = np.arange(num_bins) * bin_size

    x = gram.transpose()

    plt.figure(figsize=(12, 6))

    start_time = times[0] - hop_size_sec / 2
    end_time = times[-1] + hop_size_sec / 2
    start_freq = freqs[0]
    end_freq = freqs[-1]
    extent = (start_time, end_time, start_freq, end_freq)

    # `vmin` and `vmax` were chosen by looking at histogram of spectrogram
    # values plotted by `plot_histogram` function.
    plt.imshow(x,
               cmap='gray_r',
               vmin=-25,
               vmax=125,
               origin='lower',
               extent=extent,
               aspect='auto')

    plt.title(title)
    plt.xlabel('Time (s)')
    plt.ylabel('Frequency (Hz)')
    # plt.ylim(0, 11000)

    pdf_file.savefig()

    plt.close()
Ejemplo n.º 5
0
    def _analyze(self):

        spectra = tfa_utils.compute_spectrogram(self.audio.samples,
                                                self.window.samples,
                                                self.hop_size, self.dft_size)

        tfa_utils.scale_spectrogram(spectra, out=spectra)

        if self.reference_power is not None:
            tfa_utils.linear_to_log(spectra, self.reference_power, out=spectra)

        return spectra
Ejemplo n.º 6
0
    def _analyze(self):

        spectra = tfa_utils.compute_spectrogram(
            self.audio.samples, self.window.samples, self.hop_size,
            self.dft_size)

        tfa_utils.scale_spectrogram(spectra, out=spectra)

        if self.reference_power is not None:
            tfa_utils.linear_to_log(spectra, self.reference_power, out=spectra)

        return spectra
def compute_vesper_spectrogram(waveform, window_size, hop_size):

    window = data_windows.create_window('Hann', window_size).samples

    print('Computing Vesper spectrogram...')
    start_time = time.time()
    gram = tfa_utils.compute_spectrogram(waveform, window, hop_size)
    end_time = time.time()
    print('Done.')

    report_performance(gram, start_time, end_time)

    return gram
def compute_vesper_spectrogram(waveform, window_size, hop_size):

    window = data_windows.create_window('Hann', window_size).samples
    
    print('Computing Vesper spectrogram...')
    start_time = time.time()
    gram = tfa_utils.compute_spectrogram(waveform, window, hop_size)
    end_time = time.time()
    print('Done.')
    
    report_performance(gram, start_time, end_time)
    
    return gram
def plot_spectrogram(samples, sample_rate, title, pdf_file):
    
    window_size_sec = .005
    hop_size_percent = 20
    
    window_size = int(round(window_size_sec * sample_rate))
    window = signal.hanning(window_size, sym=False)
    hop_size = \
        int(round(window_size_sec * hop_size_percent / 100 * sample_rate))
        
    dft_size = 2 * tfa_utils.get_dft_size(window_size)
    
    gram = tfa_utils.compute_spectrogram(samples, window, hop_size, dft_size)
    
    gram = tfa_utils.linear_to_log(gram)
    
    # plot_histogram(gram)
    
    hop_size_sec = window_size_sec * hop_size_percent / 100
    times = np.arange(len(gram)) * hop_size_sec + window_size_sec / 2
    
    num_bins = dft_size / 2 + 1
    bin_size = sample_rate / dft_size
    freqs = np.arange(num_bins) * bin_size
        
    x = gram.transpose()
    
    plt.figure(figsize=(12, 6))
        
    start_time = times[0] - hop_size_sec / 2
    end_time = times[-1] + hop_size_sec / 2
    start_freq = freqs[0]
    end_freq = freqs[-1]
    extent = (start_time, end_time, start_freq, end_freq)
    
    # `vmin` and `vmax` were chosen by looking at histogram of spectrogram
    # values plotted by `plot_histogram` function.
    plt.imshow(
        x, cmap='gray_r', vmin=-25, vmax=125, origin='lower', extent=extent,
        aspect='auto')
    
    plt.title(title)
    plt.xlabel('Time (s)')
    plt.ylabel('Frequency (Hz)')
    # plt.ylim(0, 11000)

    pdf_file.savefig()
    
    plt.close()
    def _test_compute_spectrogram(
            self, num_channels, dft_size, hop_size, bin_num):

        num_samples = dft_size * 2
        samples = self._create_test_signal(
            num_channels, num_samples, dft_size, bin_num)

        window = np.ones(dft_size)

        spectra = tfa_utils.compute_spectrogram(
            samples, window, hop_size, dft_size)

        expected = self._get_expected_spectra(
            num_channels, num_samples, hop_size, dft_size, bin_num)

        self.assertTrue(np.allclose(spectra, expected))
Ejemplo n.º 11
0
    def _compute_channel_gram(self, channel_num, start_frame, end_frame):

        s = self._settings
        window_size = len(s.window)
        hop_size = s.hop_size

        start = start_frame * hop_size

        gram_frame_count = end_frame - start_frame
        waveform_frame_count = _get_waveform_frame_count(
            gram_frame_count, window_size, hop_size)
        end = start + waveform_frame_count

        samples = self._waveform.channels[channel_num][start:end]

        gram = tfa_utils.compute_spectrogram(samples, s.window, hop_size,
                                             s.dft_size)

        tfa_utils.scale_spectrogram(gram, out=gram)

        return gram
Ejemplo n.º 12
0
 def process(self, x):
     return tfa_utils.compute_spectrogram(
         x, self.window, self.hop_size, self.dft_size)
Ejemplo n.º 13
0
 def _compute_spectrogram(self, waveform):
     s = self._spectrogram_settings
     spectrogram = tfa_utils.compute_spectrogram(
         waveform, s.window.samples, s.hop_size, s.dft_size)
     return tfa_utils.linear_to_log(spectrogram, s.reference_power)
Ejemplo n.º 14
0
 def process(self, x):
     return tfa_utils.compute_spectrogram(x, self.window, self.hop_size,
                                          self.dft_size)
Ejemplo n.º 15
0
 def _compute_spectrogram(self, waveform):
     s = self._spectrogram_settings
     spectrogram = tfa_utils.compute_spectrogram(waveform, s.window.samples,
                                                 s.hop_size, s.dft_size)
     return tfa_utils.linear_to_log(spectrogram, s.reference_power)