dtas.git  about / heads / tags
duct tape audio suite for *nix
blob adb35087daa83094fc6e3c40fb9f68b9e1064a65 3412 bytes (raw)
$ git show tfx-pu:test/test_splitfx.rb	# shows this blob on the CLI

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
 
# Copyright (C) 2013-2015 all contributors <dtas-all@nongnu.org>
# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
require 'yaml'
require 'dtas/splitfx'
require 'thread'
require_relative 'helper'

class TestSplitfx < Testcase
  include DTAS::SpawnFix

  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
      @infmt = DTAS::Format.load("rate"=>44100)
    end
    assert_equal 118554000, sfx.t2s_cdda('44:48.3')
    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
    Dir.mktmpdir do |dir|
      Dir.chdir(dir) do
        guitar_pluck("foo.flac")
        sfx.import(hash, {})
        opts = { jobs: nil, silent: true }

        # ensure default FLAC target works
        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 stats"
        res_pid = spawn(res_cmd, err: 'b.txt')
        exp_cmd = "sox foo.flac -ts32 -c2 -r44100 expect.s32 trim 4 stats"
        exp_pid = 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

        # try Ogg Opus, use opusenc/opusdec for now since that's available
        # in Debian 7.0 (sox.git currently has opusfile support, but that
        # hasn't made it into Debian, yet)
        if `which opusenc 2>/dev/null`.size > 0 &&
           `which opusdec 2>/dev/null`.size > 0
          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
          %w(1 2).each do |nr|
            cmd = "opusdec #{nr}.opus #{nr}.wav 2>/dev/null"
            assert system(cmd), cmd
            assert_equal `soxi -D #{nr}.flac`, `soxi -D #{nr}.wav`
          end

          # ensure 16/44.1kHz FLAC works (CDDA-like)
          File.unlink('1.flac', '2.flac')
          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
        end
      end
    end
  end
end

git clone git://80x24.org/dtas.git
git clone https://80x24.org/dtas.git