|
|
|
|
|
|
|
|
|
|
|
|
|
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}"
|
|
|