Files
whipper-gui/whipper/program/sox.py
JoeLametta e56c636fd3 Improve docstrings
Signed-off-by: JoeLametta <JoeLametta@users.noreply.github.com>
2020-02-22 15:11:22 +00:00

31 lines
895 B
Python

import os
from subprocess import Popen, PIPE
import logging
logger = logging.getLogger(__name__)
SOX = 'sox'
def peak_level(track_path):
"""
Accept a path to a sox-decodable audio file.
:returns: track peak level from sox ('maximum amplitude')
:rtype: float or None
"""
if not os.path.exists(track_path):
logger.warning("SoX peak detection failed: file not found")
return None
sox = Popen([SOX, track_path, "-n", "stats", "-b", "16"], stderr=PIPE)
_, err = sox.communicate()
if sox.returncode:
logger.warning("SoX peak detection failed: %s", sox.returncode)
return None
# relevant captured lines looks like this:
# Min level -26215
# Max level 26215
min_level = int(err.splitlines()[2].split()[2])
max_level = int(err.splitlines()[3].split()[2])
return max(abs(min_level), abs(max_level))