def test_create_mel_fb(self,
                           n_mels=40,
                           sample_rate=22050,
                           n_fft=2048,
                           fmin=0.0,
                           fmax=8000.0,
                           norm=None,
                           mel_scale="htk"):
        if (norm == "slaney" and
                StrictVersion(librosa.__version__) < StrictVersion("0.7.2")):
            self.skipTest(
                'Test is known to fail with older versions of librosa.')
        if self.device != 'cpu':
            self.skipTest('No need to run this test on CUDA')

        expected = librosa.filters.mel(sr=sample_rate,
                                       n_fft=n_fft,
                                       n_mels=n_mels,
                                       fmax=fmax,
                                       fmin=fmin,
                                       htk=mel_scale == "htk",
                                       norm=norm).T
        result = F.melscale_fbanks(sample_rate=sample_rate,
                                   n_mels=n_mels,
                                   f_max=fmax,
                                   f_min=fmin,
                                   n_freqs=(n_fft // 2 + 1),
                                   norm=norm,
                                   mel_scale=mel_scale)
        self.assertEqual(result,
                         torch.from_numpy(expected),
                         atol=7e-5,
                         rtol=1.3e-6)
 def func(_):
     n_stft = 100
     f_min = 0.0
     f_max = 20.0
     n_mels = 10
     sample_rate = 16000
     norm = "slaney"
     return F.melscale_fbanks(n_stft, f_min, f_max, n_mels, sample_rate, norm)
Exemple #3
0
 def test_melscale_fbanks_warning(self):
     with warnings.catch_warnings(record=True) as w:
         warnings.simplefilter("always")
         F.melscale_fbanks(201, 0, 8000, 128, 16000)
     assert len(w) == 1
Exemple #4
0
 def test_melscale_fbanks_no_warning_high_n_freq(self):
     with warnings.catch_warnings(record=True) as w:
         warnings.simplefilter("always")
         F.melscale_fbanks(288, 0, 8000, 128, 16000)
     assert len(w) == 0
# ``torchaudio.functional.melscale_fbanks`` generates the filter bank
# for converting frequency bins to mel-scale bins.
#
# Since this function does not require input audio/features, there is no
# equivalent transform in ``torchaudio.transforms``.
#


n_fft = 256
n_mels = 64
sample_rate = 6000

mel_filters = F.melscale_fbanks(
    int(n_fft // 2 + 1),
    n_mels=n_mels,
    f_min=0.0,
    f_max=sample_rate / 2.0,
    sample_rate=sample_rate,
    norm="slaney",
)
plot_mel_fbank(mel_filters, "Mel Filter Bank - torchaudio")

######################################################################
# Comparison against librosa
# ~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# For reference, here is the equivalent way to get the mel filter bank
# with ``librosa``.
#


mel_filters_librosa = librosa.filters.mel(