2022-01-21 09:07:27 +01:00
|
|
|
from subprocess import CalledProcessError
|
2022-01-17 20:31:43 +01:00
|
|
|
from typing import Any, Dict
|
2021-06-03 15:20:39 +02:00
|
|
|
|
2022-02-14 17:27:58 +01:00
|
|
|
from ._ffmpeg import compute_replaygain, probe_replaygain
|
2022-01-17 09:26:30 +01:00
|
|
|
|
2022-01-17 20:31:43 +01:00
|
|
|
|
2022-01-21 09:07:27 +01:00
|
|
|
def analyze_replaygain(filepath: str, metadata: Dict[str, Any]):
|
2022-01-17 20:31:43 +01:00
|
|
|
"""
|
2022-01-21 09:07:27 +01:00
|
|
|
Extracts the Replaygain loudness normalization factor of a track using ffmpeg.
|
2022-01-17 20:31:43 +01:00
|
|
|
"""
|
|
|
|
try:
|
2022-01-21 09:07:27 +01:00
|
|
|
# First probe for existing replaygain metadata.
|
|
|
|
track_gain = probe_replaygain(filepath)
|
|
|
|
if track_gain is not None:
|
|
|
|
metadata["replay_gain"] = track_gain
|
|
|
|
return metadata
|
|
|
|
except (CalledProcessError, OSError):
|
|
|
|
pass
|
2022-01-17 20:31:43 +01:00
|
|
|
|
2022-01-21 09:07:27 +01:00
|
|
|
try:
|
|
|
|
track_gain = compute_replaygain(filepath)
|
|
|
|
if track_gain is not None:
|
|
|
|
metadata["replay_gain"] = track_gain
|
|
|
|
except (CalledProcessError, OSError):
|
|
|
|
pass
|
2022-01-17 20:31:43 +01:00
|
|
|
|
|
|
|
return metadata
|