Coverage for src/extratools_av/audio/__init__.py: 0%

18 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-04-10 05:53 -0700

1from typing import cast 

2 

3import numpy as np 

4from moviepy.audio.AudioClip import AudioClip 

5from moviepy.audio.fx import AudioNormalize 

6from moviepy.audio.io.AudioFileClip import AudioFileClip 

7 

8 

9def get_max_volume(clip: AudioClip | str) -> float: 

10 if isinstance(clip, str): 

11 clip = AudioFileClip(clip) 

12 

13 return float(cast("np.float64", clip.max_volume())) 

14 

15 

16def scale_volume(clip: AudioClip | str, *, target_volume: float = 0.5) -> AudioClip: 

17 if isinstance(clip, str): 

18 clip = AudioFileClip(clip) 

19 

20 max_volume: float = get_max_volume(clip) 

21 

22 return cast("AudioClip", clip.with_volume_scaled(target_volume / max_volume)) 

23 

24 

25def normalize(clip: AudioClip | str) -> AudioClip: 

26 if isinstance(clip, str): 

27 clip = AudioFileClip(clip) 

28 

29 return cast("AudioClip", clip.with_effects([AudioNormalize()]))