Skip to content

Commit

Permalink
standardise program/sox.py formatting, add test case, docstring (#53)
Browse files Browse the repository at this point in the history
* standardise program/sox.py formatting, add test case
* add program/sox.peak_level() docstring
* update .travis.yml to include sox as a test dependency
* move sox from test dependency to normal dependency
* update README to mention sox, remove small autoconf mention
* use .splitlines() instead of .split('n')
  • Loading branch information
RecursiveForest authored and JoeLametta committed Oct 21, 2016
1 parent 566414c commit 8721ba1
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 15 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ install:
# Dependencies
- sudo apt-get update -qq
- sudo pip install --upgrade pip
- sudo apt-get install -qq cdparanoia cdrdao gstreamer0.10-plugins-base gstreamer0.10-plugins-good libcdio-dev libiso9660-dev libsndfile1-dev python-cddb python-gobject swig python-dev python-xdg
- sudo apt-get install -qq cdparanoia cdrdao gstreamer0.10-plugins-base gstreamer0.10-plugins-good libcdio-dev libiso9660-dev libsndfile1-dev python-cddb python-gobject swig python-dev python-xdg sox
- sudo pip install musicbrainzngs pycdio

# Testing dependencies
Expand Down
5 changes: 1 addition & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,7 @@ REQUIREMENTS
- Required for drive offset and caching behavior to be stored in the config file
- libsndfile, for reading wav files
- flac, for reading flac files

Additionally, if you're building from a git checkout:
- autoconf
- automake
- sox, for track peak detection

GETTING WHIPPER
----------------
Expand Down
28 changes: 18 additions & 10 deletions morituri/program/sox.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,24 @@
import os
import logging
import os
from subprocess import Popen, PIPE

SOX = 'sox'

def peak_level(track_path):
if not os.path.exists(track_path):
logging.warning("SoX peak detection failed: file not found")
return None
sox = Popen([SOX, track_path, "-n", "stat"], stderr=PIPE)
out, err = sox.communicate()
if sox.returncode:
logging.warning("SoX peak detection failed: " + s.returncode)
return None
return float(err.split('\n')[3].split()[2]) # Maximum amplitude: 0.123456
"""
Accepts a path to a sox-decodable audio file.
Returns track peak level from sox ('maximum amplitude') as a float.
Returns None on error.
"""
if not os.path.exists(track_path):
logging.warning("SoX peak detection failed: file not found")
return None
sox = Popen([SOX, track_path, "-n", "stat"], stderr=PIPE)
out, err = sox.communicate()
if sox.returncode:
logging.warning("SoX peak detection failed: " + str(sox.returncode))
return None
# relevant captured line looks like:
# Maximum amplitude: 0.123456
return float(err.splitlines()[3].split()[2])
13 changes: 13 additions & 0 deletions morituri/test/test_program_sox.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# -*- Mode: Python; test-case-name: morituri.test.test_program_sox -*-

import os

from morituri.program import sox
from morituri.test import common

class PeakLevelTestCase(common.TestCase):
def setUp(self):
self.path = os.path.join(os.path.dirname(__file__), 'track.flac')

def testParse(self):
self.assertEquals(0.800018, sox.peak_level(self.path))

0 comments on commit 8721ba1

Please sign in to comment.