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
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-10 05:53 -0700
1from typing import cast
3import numpy as np
4from moviepy.audio.AudioClip import AudioClip
5from moviepy.audio.fx import AudioNormalize
6from moviepy.audio.io.AudioFileClip import AudioFileClip
9def get_max_volume(clip: AudioClip | str) -> float:
10 if isinstance(clip, str):
11 clip = AudioFileClip(clip)
13 return float(cast("np.float64", clip.max_volume()))
16def scale_volume(clip: AudioClip | str, *, target_volume: float = 0.5) -> AudioClip:
17 if isinstance(clip, str):
18 clip = AudioFileClip(clip)
20 max_volume: float = get_max_volume(clip)
22 return cast("AudioClip", clip.with_volume_scaled(target_volume / max_volume))
25def normalize(clip: AudioClip | str) -> AudioClip:
26 if isinstance(clip, str):
27 clip = AudioFileClip(clip)
29 return cast("AudioClip", clip.with_effects([AudioNormalize()]))