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)
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
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(