Test HTOA peak value against 0 (integer comparison)
Now whipper uses the absolute value of SoX's peak level as internal peak value. Fixes #143.
This commit is contained in:
@@ -37,7 +37,7 @@ gobject.threads_init()
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
SILENT = 1e-10
|
SILENT = 0
|
||||||
MAX_TRIES = 5
|
MAX_TRIES = 5
|
||||||
|
|
||||||
DEFAULT_TRACK_TEMPLATE = u'%r/%A - %d/%t. %a - %n'
|
DEFAULT_TRACK_TEMPLATE = u'%r/%A - %d/%t. %a - %n'
|
||||||
@@ -433,7 +433,7 @@ Log files will log the path to tracks relative to this directory.
|
|||||||
)
|
)
|
||||||
|
|
||||||
sys.stdout.write(
|
sys.stdout.write(
|
||||||
'Peak level: {:.2%} \n'.format(trackResult.peak))
|
'Peak level: {}\n'.format(trackResult.peak))
|
||||||
|
|
||||||
sys.stdout.write(
|
sys.stdout.write(
|
||||||
'Rip quality: {:.2%}\n'.format(trackResult.quality))
|
'Rip quality: {:.2%}\n'.format(trackResult.quality))
|
||||||
@@ -442,9 +442,9 @@ Log files will log the path to tracks relative to this directory.
|
|||||||
if number == 0:
|
if number == 0:
|
||||||
# HTOA goes on index 0 of track 1
|
# HTOA goes on index 0 of track 1
|
||||||
# ignore silence in PREGAP
|
# ignore silence in PREGAP
|
||||||
if trackResult.peak <= SILENT:
|
if trackResult.peak == SILENT:
|
||||||
logger.debug(
|
logger.debug(
|
||||||
'HTOA peak %r is below SILENT '
|
'HTOA peak %r is equal to the SILENT '
|
||||||
'threshold, disregarding', trackResult.peak)
|
'threshold, disregarding', trackResult.peak)
|
||||||
self.itable.setFile(1, 0, None,
|
self.itable.setFile(1, 0, None,
|
||||||
self.ittoc.getTrackStart(1), number)
|
self.ittoc.getTrackStart(1), number)
|
||||||
|
|||||||
@@ -12,17 +12,20 @@ def peak_level(track_path):
|
|||||||
|
|
||||||
:param track_path: full path to audio track.
|
:param track_path: full path to audio track.
|
||||||
:type track_path: str
|
:type track_path: str
|
||||||
:returns: track peak level from sox ('maximum amplitude') or None on error.
|
:returns: track peak absolute value from sox or None on error.
|
||||||
:rtype: float or None
|
:rtype: int or None
|
||||||
"""
|
"""
|
||||||
if not os.path.exists(track_path):
|
if not os.path.exists(track_path):
|
||||||
logger.warning("SoX peak detection failed: file not found")
|
logger.warning("SoX peak detection failed: file not found")
|
||||||
return None
|
return None
|
||||||
sox = Popen([SOX, track_path, "-n", "stat"], stderr=PIPE)
|
sox = Popen([SOX, track_path, "-n", "stats", "-b", "16"], stderr=PIPE)
|
||||||
out, err = sox.communicate()
|
out, err = sox.communicate()
|
||||||
if sox.returncode:
|
if sox.returncode:
|
||||||
logger.warning("SoX peak detection failed: " + str(sox.returncode))
|
logger.warning("SoX peak detection failed: " + str(sox.returncode))
|
||||||
return None
|
return None
|
||||||
# relevant captured line looks like:
|
# relevant captured lines looks like this:
|
||||||
# Maximum amplitude: 0.123456
|
# Min level -26215
|
||||||
return float(err.splitlines()[3].split()[2])
|
# 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))
|
||||||
|
|||||||
@@ -193,7 +193,7 @@ class WhipperLogger(result.Logger):
|
|||||||
lines.append(" Pre-gap length: %s" % common.framesToMSF(pregap))
|
lines.append(" Pre-gap length: %s" % common.framesToMSF(pregap))
|
||||||
|
|
||||||
# Peak level
|
# Peak level
|
||||||
peak = trackResult.peak
|
peak = trackResult.peak / 32768.0
|
||||||
lines.append(" Peak level: %.6f" % peak)
|
lines.append(" Peak level: %.6f" % peak)
|
||||||
|
|
||||||
# Pre-emphasis status
|
# Pre-emphasis status
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class TrackResult:
|
|||||||
filename = None
|
filename = None
|
||||||
pregap = 0 # in frames
|
pregap = 0 # in frames
|
||||||
pre_emphasis = None
|
pre_emphasis = None
|
||||||
peak = 0.0
|
peak = 0
|
||||||
quality = 0.0
|
quality = 0.0
|
||||||
testspeed = 0.0
|
testspeed = 0.0
|
||||||
copyspeed = 0.0
|
copyspeed = 0.0
|
||||||
|
|||||||
@@ -11,4 +11,4 @@ class PeakLevelTestCase(common.TestCase):
|
|||||||
self.path = os.path.join(os.path.dirname(__file__), 'track.flac')
|
self.path = os.path.join(os.path.dirname(__file__), 'track.flac')
|
||||||
|
|
||||||
def testParse(self):
|
def testParse(self):
|
||||||
self.assertEquals(0.800018, sox.peak_level(self.path))
|
self.assertEquals(26215, sox.peak_level(self.path))
|
||||||
|
|||||||
Reference in New Issue
Block a user