| |
| |
| |
| |
| |
|
|
| import pytest |
| from omegaconf import OmegaConf |
|
|
| from audiocraft.utils.audio_effects import AudioEffects, get_audio_effects, select_audio_effects |
|
|
| from ..common_utils import get_batch_white_noise |
|
|
|
|
| class TestAudioEffect: |
| SR = 16_000 |
|
|
| @pytest.fixture(autouse=True) |
| def audio_effects(self): |
| cfg = { |
| "audio_effects": { |
| "speed": { |
| "sample_rate": self.SR, |
| "speed_range": [0.8, 1.2] |
| }, |
| "updownresample": { |
| "sample_rate": self.SR, |
| "intermediate_freq": 32_000, |
| }, |
| "echo": { |
| "sample_rate": self.SR, |
| "volume_range": [0.1, 0.5], |
| }, |
| "random_noise": { |
| "noise_std": 0.001, |
| }, |
| "pink_noise": { |
| "noise_std": 0.01, |
| }, |
| "lowpass_filter": { |
| "sample_rate": self.SR, |
| "cutoff_freq": 5_000, |
| }, |
| "highpass_filter": { |
| "sample_rate": self.SR, |
| "cutoff_freq": 500, |
| }, |
| "bandpass_filter": { |
| "sample_rate": self.SR, |
| "cutoff_freq_low": 300, |
| "cutoff_freq_high": 8_000, |
| }, |
| "smooth": { |
| "window_size_range": [2, 10], |
| }, |
| "boost_audio": { |
| "amount": 20, |
| }, |
| "duck_audio": { |
| "amount": 20, |
| }, |
| "mp3_compression": { |
| "sample_rate": self.SR, |
| "bitrate": "128k", |
| }, |
| "aac_compression": { |
| "sample_rate": self.SR, |
| "bitrate": "128k", |
| "lowpass_freq": None, |
| } |
| } |
| } |
| weights = { |
| "speed": 2.0, |
| "updownresample": 0.4, |
| "echo": 1.0, |
| "random_noise": 3.0, |
| "pink_noise": 0.5, |
| "lowpass_filter": 4.0, |
| "highpass_filter": 5.0, |
| "bandpass_filter": 6.0, |
| "smooth": 1.0, |
| } |
| return get_audio_effects(OmegaConf.structured(cfg)), weights |
|
|
| def test_select_empty_effects(self): |
| effects = select_audio_effects({}) |
| assert "identity" in effects and effects["identity"] == AudioEffects.identity |
|
|
| def test_select_wrong_strategy(self): |
| with pytest.raises(ValueError): |
| _ = select_audio_effects( |
| audio_effects={}, |
| mode="some invalid mode" |
| ) |
|
|
| def test_selection(self, audio_effects): |
| effect_cfg, weights = audio_effects |
| effects = select_audio_effects( |
| audio_effects=effect_cfg, |
| weights=weights, |
| mode="weighted" |
| ) |
| b, c, t = 2, 4, 32000 |
| audio = get_batch_white_noise(b, c, t) |
| for effect_name, effect_func in effects.items(): |
| modified_audio = effect_func(audio) |
| |
| if effect_name == "speed": |
| assert modified_audio.size()[-1] > audio.size()[-1] |
| else: |
| assert modified_audio.size() == audio.size(), f"Wrong dimension in {effect_name}" |
|
|