everything related to duct tape audio suite (dtas)
 help / color / mirror / code / Atom feed
* [PATCH] splitfx: use $FX env consistently in targets, too
@ 2014-12-29  4:26 Eric Wong
  0 siblings, 0 replies; only message in thread
From: Eric Wong @ 2014-12-29  4:26 UTC (permalink / raw)
  To: dtas-all

While we're at it, document the splitfx manpage and
make the example suitable for tests.
---
 Documentation/dtas-splitfx.txt |  5 +++-
 examples/splitfx.sample.yml    |  9 ++++---
 lib/dtas/splitfx.rb            |  4 ++--
 test/test_splitfx.rb           | 53 ++++++++++++++++++++++++++++++++----------
 4 files changed, 51 insertions(+), 20 deletions(-)

diff --git a/Documentation/dtas-splitfx.txt b/Documentation/dtas-splitfx.txt
index 70c812a..5aa3086 100644
--- a/Documentation/dtas-splitfx.txt
+++ b/Documentation/dtas-splitfx.txt
@@ -39,6 +39,8 @@ to use ecasound(1), too.
 
 * infile - string, the pathname of the original audio file
 * env - hash of environment variables to set for all commands
+    env:
+      FX: vol +3dB stats
 * comments - hash of common tags for all audio (e.g. ARTIST, ALBUM, YEAR)
     comments:
       ARTIST: John Smith
@@ -52,6 +54,7 @@ to use ecasound(1), too.
   highest-numbered track (default: true)
 * tracks - array, see "TRACKS" section
 * targets - hash, see "TARGETS" section
+* command - used only by dtas-player(1)
 
 # TRACKS
 
@@ -168,4 +171,4 @@ License: GPLv3 or later <http://www.gnu.org/licenses/gpl-3.0.txt>
 
 # SEE ALSO
 
-sox(1), ecasound(1), flac(1), opusenc(1)
+sox(1), ecasound(1), flac(1), opusenc(1), dtas-player(1)
diff --git a/examples/splitfx.sample.yml b/examples/splitfx.sample.yml
index 5d32a6c..d7ee06b 100644
--- a/examples/splitfx.sample.yml
+++ b/examples/splitfx.sample.yml
@@ -4,9 +4,6 @@
 # test_splitfx.rb relies on this.
 ---
 infile: foo.flac
-env:
-  PATH: $PATH
-  SOX_OPTS: $SOX_OPTS -R
 comments:
   ARTIST: John Smith
   ALBUM: Hello World
@@ -15,10 +12,12 @@ comments:
 # specify this as it is the default:
 # command: exec sox "$INFILE" $SOXFMT - $TRIMFX $RGFX $FX
 env:
+  PATH: $PATH
   # these effects may be used in any command in this file, including targets
+  SOX_OPTS: $SOX_OPTS -R
   FX:
-    highpass -1 120 highpass 40 highpass 40
-    vol +1.5dB
+    # highpass -1 120 highpass 40 highpass 40
+    # vol +1.5dB
     stats
 track_start: 1 # 0 for pregap/intro tracks
 cdda_align: true
diff --git a/lib/dtas/splitfx.rb b/lib/dtas/splitfx.rb
index 9af3faf..36cdf9f 100644
--- a/lib/dtas/splitfx.rb
+++ b/lib/dtas/splitfx.rb
@@ -9,7 +9,7 @@ require_relative 'xs'
 require 'tempfile'
 class DTAS::SplitFX # :nodoc:
   CMD = 'sox "$INFILE" $COMMENTS $OUTFMT "$TRACKNUMBER.$SUFFIX" '\
-        '$TRIMFX $RATEFX $DITHERFX'
+        '$TRIMFX $FX $RATEFX $DITHERFX'
   include DTAS::Process
   include DTAS::XS
   attr_reader :infile, :env
@@ -61,7 +61,7 @@ class DTAS::SplitFX # :nodoc:
       },
       "opusenc" => {
         "command" => 'sox "$INFILE" $COMMENTS $OUTFMT - ' \
-           '$TRIMFX $RATEFX $DITHERFX | opusenc --music ' \
+           '$TRIMFX $FX $RATEFX $DITHERFX | opusenc --music ' \
            '--raw-bits $BITS_PER_SAMPLE ' \
            '$OPUSENC_BITRATE --raw-rate $RATE --raw-chan $CHANNELS ' \
            '--raw-endianness $ENDIAN_OPUSENC ' \
diff --git a/test/test_splitfx.rb b/test/test_splitfx.rb
index ab0dcd2..ea170ce 100644
--- a/test/test_splitfx.rb
+++ b/test/test_splitfx.rb
@@ -6,6 +6,18 @@ require 'thread'
 require_relative 'helper'
 
 class TestSplitfx < Testcase
+
+  def tmp_err(path)
+    err = $stderr.dup
+    $stderr.reopen(path, 'a')
+    begin
+      yield
+    ensure
+      $stderr.reopen(err)
+      err.close
+    end
+  end
+
   def test_t2s
     sfx = DTAS::SplitFX.new
     sfx.instance_eval do
@@ -15,6 +27,17 @@ class TestSplitfx < Testcase
     assert_equal 118554030, sfx.t2s('44:48.3')
   end
 
+  def assert_contains_stats(file)
+    buf = File.read(file)
+    [ 'DC offset', 'Min level', 'Max level', 'Pk lev dB',
+      'RMS lev dB', 'RMS Pk dB', 'RMS Tr dB', 'Crest factor', 'Flat factor',
+      'Pk count', 'Bit-depth', 'Num samples',
+      'Length s', 'Scale max', 'Window s'
+    ].each do |re|
+      assert_match(/^#{re}/, buf, buf)
+    end
+  end
+
   def test_example
     hash = YAML.load(File.read("examples/splitfx.sample.yml"))
     sfx = DTAS::SplitFX.new
@@ -25,19 +48,25 @@ class TestSplitfx < Testcase
         opts = { jobs: nil, silent: true }
 
         # ensure default FLAC target works
-        WAIT_ALL_MTX.synchronize { sfx.run("flac", opts) }
+        WAIT_ALL_MTX.synchronize do
+          tmp_err('err.txt') { sfx.run("flac", opts) }
+        end
         expect = %w(1.flac 2.flac foo.flac)
         assert_equal expect, Dir["*.flac"].sort
 
         # compare results with expected output
-        res_cmd = "sox 1.flac 2.flac -ts32 -c2 -r44100 result.s32"
-        res_pid = Process.spawn(res_cmd)
-        exp_cmd = "sox foo.flac -ts32 -c2 -r44100 expect.s32 trim 4"
-        exp_pid = Process.spawn(exp_cmd)
+        res_cmd = "sox 1.flac 2.flac -ts32 -c2 -r44100 result.s32 stats"
+        res_pid = Process.spawn(res_cmd, err: 'b.txt')
+        exp_cmd = "sox foo.flac -ts32 -c2 -r44100 expect.s32 trim 4 stats"
+        exp_pid = Process.spawn(exp_cmd, err: 'a.txt')
         _, s = Process.waitpid2(res_pid)
         assert s.success?, "#{res_cmd}: #{s.inspect}"
         _, s = Process.waitpid2(exp_pid)
         assert s.success?, "#{exp_cmd}: #{s.inspect}"
+        assert_equal File.read('a.txt'), File.read('b.txt')
+
+        assert_contains_stats('err.txt')
+
         cmp = "cmp result.s32 expect.s32"
         assert system(cmp), cmp
 
@@ -46,13 +75,10 @@ class TestSplitfx < Testcase
         # hasn't made it into Debian, yet)
         if `which opusenc 2>/dev/null`.size > 0 &&
            `which opusdec 2>/dev/null`.size > 0
-          err = $stderr.dup
-          begin
-            $stderr.reopen("/dev/null", "a")
-            WAIT_ALL_MTX.synchronize { sfx.run("opusenc", opts) }
-          ensure
-            $stderr.reopen(err)
+          WAIT_ALL_MTX.synchronize do
+            tmp_err('opus.err.txt') { sfx.run("opusenc", opts) }
           end
+          assert_contains_stats('opus.err.txt')
 
           # ensure opus lengths match flac ones, we decode using opusdec
           # since sox does not yet have opus support in Debian 7.0
@@ -64,7 +90,10 @@ class TestSplitfx < Testcase
 
           # ensure 16/44.1kHz FLAC works (CDDA-like)
           File.unlink('1.flac', '2.flac')
-          WAIT_ALL_MTX.synchronize { sfx.run("flac-cdda", opts) }
+          WAIT_ALL_MTX.synchronize do
+            tmp_err('flac-cdda.err.txt') { sfx.run("flac-cdda", opts) }
+          end
+          assert_contains_stats('flac-cdda.err.txt')
           %w(1 2).each do |nr|
             assert_equal `soxi -D #{nr}.flac`, `soxi -D #{nr}.wav`
           end
-- 
EW



^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2014-12-29  4:26 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-12-29  4:26 [PATCH] splitfx: use $FX env consistently in targets, too Eric Wong

everything related to duct tape audio suite (dtas)

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://80x24.org/dtas-all
	git clone --mirror http://ou63pmih66umazou.onion/dtas-all

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V1 dtas-all dtas-all/ https://80x24.org/dtas-all \
		dtas-all@nongnu.org
	public-inbox-index dtas-all

Example config snippet for mirrors.
Newsgroups are available over NNTP:
	nntp://news.public-inbox.org/inbox.comp.audio.dtas
	nntp://ou63pmih66umazou.onion/inbox.comp.audio.dtas
 note: .onion URLs require Tor: https://www.torproject.org/

code repositories for project(s) associated with this inbox:

	../../../dtas.git

AGPL code for this site: git clone http://ou63pmih66umazou.onion/public-inbox.git