dtas 0.0.0 → 0.1.I

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Documentation/dtas-console.txt +15 -0
  4. data/Documentation/dtas-player_protocol.txt +5 -3
  5. data/Documentation/dtas-sourceedit.txt +14 -7
  6. data/GIT-VERSION-GEN +3 -3
  7. data/INSTALL +3 -3
  8. data/README +6 -5
  9. data/Rakefile +16 -7
  10. data/bin/dtas-console +48 -3
  11. data/bin/dtas-cueedit +1 -1
  12. data/bin/dtas-sinkedit +12 -28
  13. data/bin/dtas-sourceedit +15 -30
  14. data/lib/dtas.rb +1 -1
  15. data/lib/dtas/command.rb +0 -5
  16. data/lib/dtas/compat_onenine.rb +2 -2
  17. data/lib/dtas/disclaimer.rb +4 -3
  18. data/lib/dtas/edit_client.rb +48 -0
  19. data/lib/dtas/format.rb +2 -9
  20. data/lib/dtas/player.rb +64 -28
  21. data/lib/dtas/player/client_handler.rb +39 -20
  22. data/lib/dtas/process.rb +16 -15
  23. data/lib/dtas/replaygain.rb +19 -3
  24. data/lib/dtas/sink.rb +1 -2
  25. data/lib/dtas/source.rb +1 -141
  26. data/lib/dtas/source/av.rb +29 -0
  27. data/lib/dtas/source/av_ff_common.rb +127 -0
  28. data/lib/dtas/source/{command.rb → cmd.rb} +1 -1
  29. data/lib/dtas/source/ff.rb +30 -0
  30. data/lib/dtas/source/file.rb +94 -0
  31. data/lib/dtas/source/{mp3.rb → mp3gain.rb} +1 -1
  32. data/lib/dtas/source/sox.rb +114 -0
  33. data/lib/dtas/unix_client.rb +1 -9
  34. data/test/player_integration.rb +5 -17
  35. data/test/test_format.rb +10 -14
  36. data/test/test_format_change.rb +4 -8
  37. data/test/test_player_integration.rb +50 -62
  38. data/test/test_process.rb +33 -0
  39. data/test/test_rg_integration.rb +45 -35
  40. data/test/test_sink_pipe_size.rb +20 -0
  41. data/test/test_sink_tee_integration.rb +2 -4
  42. data/test/{test_source.rb → test_source_av.rb} +16 -16
  43. data/test/test_source_sox.rb +115 -0
  44. metadata +23 -12
  45. data/.rsync_doc +0 -3
@@ -0,0 +1,33 @@
1
+ # -*- encoding: binary -*-
2
+ # Copyright (C) 2013, Eric Wong <normalperson@yhbt.net>
3
+ # License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
4
+ require './test/helper'
5
+ require 'dtas/process'
6
+ class TestProcess < Minitest::Unit::TestCase
7
+ include DTAS::Process
8
+
9
+ def test_qx_env
10
+ assert_equal "WORLD\n", qx({"HELLO" => "WORLD"}, 'echo $HELLO')
11
+ end
12
+
13
+ def test_qx_err
14
+ err = "/dev/null"
15
+ assert_equal "", qx('echo HELLO >&2', err: err)
16
+ assert_equal "/dev/null", err
17
+ end
18
+
19
+ def test_qx_err_str
20
+ s = ""
21
+ assert_equal "", qx('echo HELLO >&2', err_str: s)
22
+ assert_equal "HELLO\n", s
23
+ end
24
+
25
+ def test_qx_raise
26
+ assert_raises(RuntimeError) { qx('false') }
27
+ end
28
+
29
+ def test_qx_no_raise
30
+ status = qx('false', no_raise: true)
31
+ refute status.success?, status.inspect
32
+ end
33
+ end
@@ -28,23 +28,20 @@ class TestRgIntegration < Minitest::Unit::TestCase
28
28
  dump_pid = Tempfile.new(%w(dump .pid))
29
29
  default_pid = default_sink_pid(s)
30
30
  dump_cmd = "echo $$ > #{dump_pid.path}; sox $SOXFMT - #{dumper.path}"
31
- s.send("sink ed dump active=true command='#{dump_cmd}'", Socket::MSG_EOR)
32
- assert_equal("OK", s.readpartial(666))
31
+ s.req_ok("sink ed dump active=true command='#{dump_cmd}'")
33
32
 
34
33
  # start playback!
35
- s.send("enq \"#{pluck.path}\"", Socket::MSG_EOR)
36
- assert_equal "OK", s.readpartial(666)
34
+ s.req_ok("enq \"#{pluck.path}\"")
37
35
 
38
36
  # wait for playback to start
39
37
  yaml = cur = nil
40
38
  Timeout.timeout(5) do
41
39
  begin
42
- s.send("current", Socket::MSG_EOR)
43
- cur = YAML.load(yaml = s.readpartial(1666))
40
+ cur = YAML.load(yaml = s.req("current"))
44
41
  end while cur["current_offset"] == 0 && sleep(0.01)
45
42
  end
46
43
 
47
- assert_nil cur["current"]["env"]["RGFX"]
44
+ assert_empty cur["current"]["env"]["RGFX"]
48
45
 
49
46
  assert_equal DTAS::Format.new.rate * len, cur["current_expect"]
50
47
 
@@ -52,12 +49,11 @@ class TestRgIntegration < Minitest::Unit::TestCase
52
49
  pid = read_pid_file(dump_pid)
53
50
 
54
51
  check_gain = proc do |expect, mode|
55
- s.send("rg mode=#{mode}", Socket::MSG_EOR)
56
- assert_equal "OK", s.readpartial(666)
52
+ s.req_ok("rg mode=#{mode}")
57
53
  Timeout.timeout(5) do
58
54
  begin
59
- s.send("current", Socket::MSG_EOR)
60
- cur = YAML.load(yaml = s.readpartial(3666))
55
+ yaml = s.req("current")
56
+ cur = YAML.load(yaml)
61
57
  end while cur["current"]["env"]["RGFX"] !~ expect && sleep(0.01)
62
58
  end
63
59
  assert_match expect, cur["current"]["env"]["RGFX"]
@@ -68,40 +64,28 @@ class TestRgIntegration < Minitest::Unit::TestCase
68
64
  check_gain.call(%r{vol 1\.3}, "track_peak")
69
65
  check_gain.call(%r{vol 1\.0}, "album_peak")
70
66
 
71
- s.send("rg preamp+=1", Socket::MSG_EOR)
72
- assert_equal "OK", s.readpartial(666)
73
- s.send("rg", Socket::MSG_EOR)
74
- rg = YAML.load(yaml = s.readpartial(3666))
67
+ s.req_ok("rg preamp+=1")
68
+ rg = YAML.load(yaml = s.req("rg"))
75
69
  assert_equal 1, rg["preamp"]
76
70
 
77
- s.send("rg preamp-=1", Socket::MSG_EOR)
78
- assert_equal "OK", s.readpartial(666)
79
- s.send("rg", Socket::MSG_EOR)
80
- rg = YAML.load(yaml = s.readpartial(3666))
71
+ s.req_ok("rg preamp-=1")
72
+ rg = YAML.load(yaml = s.req("rg"))
81
73
  assert_nil rg["preamp"]
82
74
 
83
- s.send("rg preamp=2", Socket::MSG_EOR)
84
- assert_equal "OK", s.readpartial(666)
85
- s.send("rg", Socket::MSG_EOR)
86
- rg = YAML.load(yaml = s.readpartial(3666))
75
+ s.req_ok("rg preamp=2")
76
+ rg = YAML.load(yaml = s.req("rg"))
87
77
  assert_equal 2, rg["preamp"]
88
78
 
89
- s.send("rg preamp-=0.3", Socket::MSG_EOR)
90
- assert_equal "OK", s.readpartial(666)
91
- s.send("rg", Socket::MSG_EOR)
92
- rg = YAML.load(yaml = s.readpartial(3666))
79
+ s.req_ok("rg preamp-=0.3")
80
+ rg = YAML.load(yaml = s.req("rg"))
93
81
  assert_equal 1.7, rg["preamp"]
94
82
 
95
- s.send("rg preamp-=-0.3", Socket::MSG_EOR)
96
- assert_equal "OK", s.readpartial(666)
97
- s.send("rg", Socket::MSG_EOR)
98
- rg = YAML.load(yaml = s.readpartial(3666))
83
+ s.req_ok("rg preamp-=-0.3")
84
+ rg = YAML.load(yaml = s.req("rg"))
99
85
  assert_equal 2.0, rg["preamp"]
100
86
 
101
- s.send("rg preamp-=+0.3", Socket::MSG_EOR)
102
- assert_equal "OK", s.readpartial(666)
103
- s.send("rg", Socket::MSG_EOR)
104
- rg = YAML.load(yaml = s.readpartial(3666))
87
+ s.req_ok("rg preamp-=+0.3")
88
+ rg = YAML.load(yaml = s.req("rg"))
105
89
  assert_equal 1.7, rg["preamp"]
106
90
 
107
91
  dethrottle_decoder(s)
@@ -114,4 +98,30 @@ class TestRgIntegration < Minitest::Unit::TestCase
114
98
 
115
99
  stop_playback(default_pid, s)
116
100
  end
101
+
102
+ def test_rg_env_in_source
103
+ s = client_socket
104
+ s.req_ok("rg mode=album_gain")
105
+ pluck, _ = tmp_pluck
106
+ cmd = DTAS::Source::Sox::SOX_DEFAULTS["command"]
107
+ fifo = tmpfifo
108
+ s.req_ok("source ed sox command='env > #{fifo}; #{cmd}'")
109
+ s.req_ok("sink ed default command='cat >/dev/null' active=true")
110
+ s.req_ok(%W(enq #{pluck.path}))
111
+
112
+ rg = {}
113
+ File.readlines(fifo).each do |line|
114
+ line =~ /\AREPLAYGAIN_/ or next
115
+ k, v = line.chomp!.split(/=/)
116
+ rg[k] = v
117
+ end
118
+ expect = {
119
+ "REPLAYGAIN_TRACK_GAIN" => "-2",
120
+ "REPLAYGAIN_ALBUM_GAIN" => "-3.0",
121
+ "REPLAYGAIN_TRACK_PEAK" => "0.666",
122
+ "REPLAYGAIN_ALBUM_PEAK" => "0.999",
123
+ "REPLAYGAIN_REFERENCE_LOUDNESS" => nil
124
+ }
125
+ assert_equal expect, rg
126
+ end
117
127
  end
@@ -0,0 +1,20 @@
1
+ # -*- encoding: binary -*-
2
+ # Copyright (C) 2013, Eric Wong <normalperson@yhbt.net>
3
+ # License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
4
+ begin
5
+ require 'io/splice'
6
+ require './test/player_integration'
7
+ class TestSinkPipeSizeIntegration < Minitest::Unit::TestCase
8
+ include PlayerIntegration
9
+
10
+ def test_sink_pipe_size_integration
11
+ s = client_socket
12
+ default_sink_pid(s)
13
+ s.req_ok("sink ed default pipe_size=0x1000")
14
+ s.req_ok("sink ed default pipe_size=0x10000")
15
+ assert_match %r{\AERR }, s.req("sink ed default pipe_size=")
16
+ s.req_ok("sink ed default pipe_size=4096")
17
+ end if IO.method_defined?(:pipe_size=)
18
+ end
19
+ rescue LoadError
20
+ end
@@ -15,11 +15,9 @@ class TestSinkTeeIntegration < Minitest::Unit::TestCase
15
15
  cmd = "echo $$ > #{tee_pid.path}; " \
16
16
  "cat /dev/fd/a > #{ajunk.path} & " \
17
17
  "cat /dev/fd/b > #{bjunk.path}; wait"
18
- s.send("sink ed split active=true command='#{cmd}'", Socket::MSG_EOR)
19
- assert_equal("OK", s.readpartial(666))
18
+ s.req_ok("sink ed split active=true command='#{cmd}'")
20
19
  pluck = "sox -n $SOXFMT - synth 3 pluck | tee #{orig.path}"
21
- s.send("enq-cmd \"#{pluck}\"", Socket::MSG_EOR)
22
- assert_equal "OK", s.readpartial(666)
20
+ s.req_ok("enq-cmd \"#{pluck}\"")
23
21
 
24
22
  wait_files_not_empty(tee_pid)
25
23
  pid = read_pid_file(tee_pid)
@@ -2,10 +2,10 @@
2
2
  # Copyright (C) 2013, Eric Wong <normalperson@yhbt.net>
3
3
  # License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
4
4
  require './test/helper'
5
- require 'dtas/source'
5
+ require 'dtas/source/av'
6
6
  require 'tempfile'
7
7
 
8
- class TestSource < Minitest::Unit::TestCase
8
+ class TestSourceAv < Minitest::Unit::TestCase
9
9
  def teardown
10
10
  @tempfiles.each { |tmp| tmp.close! }
11
11
  end
@@ -31,10 +31,10 @@ class TestSource < Minitest::Unit::TestCase
31
31
  return if `which metaflac`.strip.size == 0
32
32
  tmp = new_file('flac') or return
33
33
 
34
- source = DTAS::Source.new(tmp.path)
35
34
  x(%W(metaflac --set-tag=FOO=BAR #{tmp.path}))
36
35
  x(%W(metaflac --add-replay-gain #{tmp.path}))
37
- assert_equal source.comments["FOO"], "BAR"
36
+ source = DTAS::Source::Av.new.try(tmp.path)
37
+ assert_equal source.comments["FOO"], "BAR", source.inspect
38
38
  rg = source.replaygain
39
39
  assert_kind_of DTAS::ReplayGain, rg
40
40
  assert_in_delta 0.0, rg.track_peak.to_f, 0.00000001
@@ -48,8 +48,6 @@ class TestSource < Minitest::Unit::TestCase
48
48
  a = new_file('mp3') or return
49
49
  b = new_file('mp3') or return
50
50
 
51
- source = DTAS::Source.new(a.path)
52
-
53
51
  # redirect stdout to /dev/null temporarily, mp3gain is noisy
54
52
  File.open("/dev/null", "w") do |null|
55
53
  old_out = $stdout.dup
@@ -62,6 +60,7 @@ class TestSource < Minitest::Unit::TestCase
62
60
  end
63
61
  end
64
62
 
63
+ source = DTAS::Source::Av.new.try(a.path)
65
64
  rg = source.replaygain
66
65
  assert_kind_of DTAS::ReplayGain, rg
67
66
  assert_in_delta 0.0, rg.track_peak.to_f, 0.00000001
@@ -71,32 +70,33 @@ class TestSource < Minitest::Unit::TestCase
71
70
  end
72
71
 
73
72
  def test_offset
74
- tmp = new_file('sox') or return
75
- source = DTAS::Source.new(*%W(#{tmp.path} 5s))
73
+ tmp = new_file('flac') or return
74
+ source = DTAS::Source::Av.new.try(*%W(#{tmp.path} 5s))
76
75
  assert_equal 5, source.offset_samples
77
76
 
78
- source = DTAS::Source.new(*%W(#{tmp.path} 1:00:00.5))
77
+ source = DTAS::Source::Av.new.try(*%W(#{tmp.path} 1:00:00.5))
79
78
  expect = 1 * 60 * 60 * 44100 + (44100/2)
80
79
  assert_equal expect, source.offset_samples
81
80
 
82
- source = DTAS::Source.new(*%W(#{tmp.path} 1:10.5))
81
+ source = DTAS::Source::Av.new.try(*%W(#{tmp.path} 1:10.5))
83
82
  expect = 1 * 60 * 44100 + (10 * 44100) + (44100/2)
84
83
  assert_equal expect, source.offset_samples
85
84
 
86
- source = DTAS::Source.new(*%W(#{tmp.path} 10.03))
85
+ source = DTAS::Source::Av.new.try(*%W(#{tmp.path} 10.03))
87
86
  expect = (10 * 44100) + (44100 * 3/100.0)
88
87
  assert_equal expect, source.offset_samples
89
88
  end
90
89
 
91
90
  def test_offset_us
92
- tmp = new_file('sox') or return
93
- source = DTAS::Source.new(*%W(#{tmp.path} 441s))
91
+ tmp = new_file('flac') or return
92
+ source = DTAS::Source::Av.new.try(*%W(#{tmp.path} 441s))
94
93
  assert_equal 10000.0, source.offset_us
95
94
 
96
- source = DTAS::Source.new(*%W(#{tmp.path} 22050s))
95
+ source = DTAS::Source::Av.new.try(*%W(#{tmp.path} 22050s))
97
96
  assert_equal 500000.0, source.offset_us
98
97
 
99
- source = DTAS::Source.new(tmp.path, '1')
98
+ source = DTAS::Source::Av.new.try(tmp.path, '1')
100
99
  assert_equal 1000000.0, source.offset_us
101
100
  end
102
- end
101
+ end unless `which avconv 2>/dev/null` =~ /avconv/ &&
102
+ `which avprobe 2>/dev/null` =~ /avprobe/
@@ -0,0 +1,115 @@
1
+ # -*- encoding: binary -*-
2
+ # Copyright (C) 2013, Eric Wong <normalperson@yhbt.net>
3
+ # License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
4
+ require './test/helper'
5
+ require 'dtas/source/sox'
6
+ require 'tempfile'
7
+
8
+ class TestSource < Minitest::Unit::TestCase
9
+ def teardown
10
+ @tempfiles.each { |tmp| tmp.close! }
11
+ end
12
+
13
+ def setup
14
+ @tempfiles = []
15
+ end
16
+
17
+ def x(cmd)
18
+ system(*cmd)
19
+ assert $?.success?, cmd.inspect
20
+ end
21
+
22
+ def new_file(suffix)
23
+ tmp = Tempfile.new(%W(tmp .#{suffix}))
24
+ @tempfiles << tmp
25
+ cmd = %W(sox -r 44100 -b 16 -c 2 -n #{tmp.path} trim 0 1)
26
+ return tmp if system(*cmd)
27
+ nil
28
+ end
29
+
30
+ def test_flac
31
+ return if `which metaflac`.strip.size == 0
32
+ tmp = new_file('flac') or return
33
+
34
+ source = DTAS::Source::Sox.new.try(tmp.path)
35
+ x(%W(metaflac --set-tag=FOO=BAR #{tmp.path}))
36
+ x(%W(metaflac --add-replay-gain #{tmp.path}))
37
+ assert_equal source.comments["FOO"], "BAR"
38
+ rg = source.replaygain
39
+ assert_kind_of DTAS::ReplayGain, rg
40
+ assert_in_delta 0.0, rg.track_peak.to_f, 0.00000001
41
+ assert_in_delta 0.0, rg.album_peak.to_f, 0.00000001
42
+ assert_operator rg.album_gain.to_f, :>, 1
43
+ assert_operator rg.track_gain.to_f, :>, 1
44
+ end
45
+
46
+ def test_mp3gain
47
+ return if `which mp3gain`.strip.size == 0
48
+ a = new_file('mp3') or return
49
+ b = new_file('mp3') or return
50
+
51
+ source = DTAS::Source::Sox.new.try(a.path)
52
+
53
+ # redirect stdout to /dev/null temporarily, mp3gain is noisy
54
+ File.open("/dev/null", "w") do |null|
55
+ old_out = $stdout.dup
56
+ $stdout.reopen(null)
57
+ begin
58
+ x(%W(mp3gain -q #{a.path} #{b.path}))
59
+ ensure
60
+ $stdout.reopen(old_out)
61
+ old_out.close
62
+ end
63
+ end
64
+
65
+ rg = source.replaygain
66
+ assert_kind_of DTAS::ReplayGain, rg
67
+ assert_in_delta 0.0, rg.track_peak.to_f, 0.00000001
68
+ assert_in_delta 0.0, rg.album_peak.to_f, 0.00000001
69
+ assert_operator rg.album_gain.to_f, :>, 1
70
+ assert_operator rg.track_gain.to_f, :>, 1
71
+ end
72
+
73
+ def test_offset
74
+ tmp = new_file('sox') or return
75
+ source = DTAS::Source::Sox.new.try(*%W(#{tmp.path} 5s))
76
+ assert_equal 5, source.offset_samples
77
+
78
+ source = DTAS::Source::Sox.new.try(*%W(#{tmp.path} 1:00:00.5))
79
+ expect = 1 * 60 * 60 * 44100 + (44100/2)
80
+ assert_equal expect, source.offset_samples
81
+
82
+ source = DTAS::Source::Sox.new.try(*%W(#{tmp.path} 1:10.5))
83
+ expect = 1 * 60 * 44100 + (10 * 44100) + (44100/2)
84
+ assert_equal expect, source.offset_samples
85
+
86
+ source = DTAS::Source::Sox.new.try(*%W(#{tmp.path} 10.03))
87
+ expect = (10 * 44100) + (44100 * 3/100.0)
88
+ assert_equal expect, source.offset_samples
89
+ end
90
+
91
+ def test_offset_us
92
+ tmp = new_file('sox') or return
93
+ source = DTAS::Source::Sox.new.try(*%W(#{tmp.path} 441s))
94
+ assert_equal 10000.0, source.offset_us
95
+
96
+ source = DTAS::Source::Sox.new.try(*%W(#{tmp.path} 22050s))
97
+ assert_equal 500000.0, source.offset_us
98
+
99
+ source = DTAS::Source::Sox.new.try(tmp.path, '1')
100
+ assert_equal 1000000.0, source.offset_us
101
+ end
102
+
103
+ def test_format_from_file
104
+ Tempfile.open(%w(tmp .wav)) do |tmp|
105
+ # generate an empty file with 1s of audio
106
+ cmd = %W(sox -r 96000 -b 24 -c 2 -n #{tmp.path} trim 0 1)
107
+ system(*cmd)
108
+ assert $?.success?, "#{cmd.inspect} failed: #$?"
109
+ fmt = DTAS::Source::Sox.new.try(tmp.path).format
110
+ assert_equal 96000, fmt.rate
111
+ assert_equal 2, fmt.channels
112
+ tmp.unlink
113
+ end
114
+ end
115
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dtas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.I
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Wong
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-25 00:00:00.000000000 Z
11
+ date: 2013-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: '3.6'
33
+ version: '3.7'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: '3.6'
40
+ version: '3.7'
41
41
  description: '["Free Software command-line tools for audio playback, mastering, and\nwhatever
42
42
  else related to audio. dtas follows the worse-is-better\nphilosophy and acts as
43
43
  duct tape to combine existing command-line tools\nfor flexibility and ease-of-development. dtas
@@ -71,7 +71,6 @@ extra_rdoc_files:
71
71
  - Documentation/troubleshooting.txt
72
72
  files:
73
73
  - .gitignore
74
- - .rsync_doc
75
74
  - COPYING
76
75
  - Documentation/.gitignore
77
76
  - Documentation/GNUmakefile
@@ -113,6 +112,7 @@ files:
113
112
  - lib/dtas/command.rb
114
113
  - lib/dtas/compat_onenine.rb
115
114
  - lib/dtas/disclaimer.rb
115
+ - lib/dtas/edit_client.rb
116
116
  - lib/dtas/format.rb
117
117
  - lib/dtas/pipe.rb
118
118
  - lib/dtas/player.rb
@@ -126,9 +126,14 @@ files:
126
126
  - lib/dtas/sigevent/pipe.rb
127
127
  - lib/dtas/sink.rb
128
128
  - lib/dtas/source.rb
129
- - lib/dtas/source/command.rb
129
+ - lib/dtas/source/av.rb
130
+ - lib/dtas/source/av_ff_common.rb
131
+ - lib/dtas/source/cmd.rb
130
132
  - lib/dtas/source/common.rb
131
- - lib/dtas/source/mp3.rb
133
+ - lib/dtas/source/ff.rb
134
+ - lib/dtas/source/file.rb
135
+ - lib/dtas/source/mp3gain.rb
136
+ - lib/dtas/source/sox.rb
132
137
  - lib/dtas/state_file.rb
133
138
  - lib/dtas/unix_accepted.rb
134
139
  - lib/dtas/unix_client.rb
@@ -147,11 +152,14 @@ files:
147
152
  - test/test_player.rb
148
153
  - test/test_player_client_handler.rb
149
154
  - test/test_player_integration.rb
155
+ - test/test_process.rb
150
156
  - test/test_rg_integration.rb
151
157
  - test/test_rg_state.rb
152
158
  - test/test_sink.rb
159
+ - test/test_sink_pipe_size.rb
153
160
  - test/test_sink_tee_integration.rb
154
- - test/test_source.rb
161
+ - test/test_source_av.rb
162
+ - test/test_source_sox.rb
155
163
  - test/test_unixserver.rb
156
164
  - test/test_util.rb
157
165
  - NEWS
@@ -183,24 +191,27 @@ required_ruby_version: !ruby/object:Gem::Requirement
183
191
  version: '0'
184
192
  required_rubygems_version: !ruby/object:Gem::Requirement
185
193
  requirements:
186
- - - '>='
194
+ - - '>'
187
195
  - !ruby/object:Gem::Version
188
- version: '0'
196
+ version: 1.3.1
189
197
  requirements: []
190
198
  rubyforge_project: dtas
191
- rubygems_version: 2.0.3
199
+ rubygems_version: 2.1.0.rc.1
192
200
  signing_key:
193
201
  specification_version: 4
194
202
  summary: dtas
195
203
  test_files:
196
204
  - test/test_util.rb
205
+ - test/test_process.rb
197
206
  - test/test_sink_tee_integration.rb
198
207
  - test/test_unixserver.rb
199
- - test/test_source.rb
208
+ - test/test_source_av.rb
209
+ - test/test_source_sox.rb
200
210
  - test/test_player.rb
201
211
  - test/test_format_change.rb
202
212
  - test/test_rg_integration.rb
203
213
  - test/test_buffer.rb
214
+ - test/test_sink_pipe_size.rb
204
215
  - test/test_format.rb
205
216
  - test/test_player_integration.rb
206
217
  - test/test_player_client_handler.rb