dtas 0.0.0

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 (87) hide show
  1. checksums.yaml +7 -0
  2. data/.gemtest +0 -0
  3. data/.gitignore +9 -0
  4. data/.rsync_doc +3 -0
  5. data/COPYING +674 -0
  6. data/Documentation/.gitignore +3 -0
  7. data/Documentation/GNUmakefile +46 -0
  8. data/Documentation/dtas-console.txt +42 -0
  9. data/Documentation/dtas-ctl.txt +64 -0
  10. data/Documentation/dtas-cueedit.txt +24 -0
  11. data/Documentation/dtas-enq.txt +29 -0
  12. data/Documentation/dtas-msinkctl.txt +45 -0
  13. data/Documentation/dtas-player.txt +110 -0
  14. data/Documentation/dtas-player_effects.txt +45 -0
  15. data/Documentation/dtas-player_protocol.txt +181 -0
  16. data/Documentation/dtas-sinkedit.txt +41 -0
  17. data/Documentation/dtas-sourceedit.txt +33 -0
  18. data/Documentation/dtas-xdelay.txt +57 -0
  19. data/Documentation/troubleshooting.txt +13 -0
  20. data/GIT-VERSION-GEN +30 -0
  21. data/GNUmakefile +9 -0
  22. data/HACKING +12 -0
  23. data/INSTALL +53 -0
  24. data/README +103 -0
  25. data/Rakefile +97 -0
  26. data/TODO +4 -0
  27. data/bin/dtas-console +160 -0
  28. data/bin/dtas-ctl +10 -0
  29. data/bin/dtas-cueedit +78 -0
  30. data/bin/dtas-enq +13 -0
  31. data/bin/dtas-msinkctl +51 -0
  32. data/bin/dtas-player +34 -0
  33. data/bin/dtas-sinkedit +58 -0
  34. data/bin/dtas-sourceedit +48 -0
  35. data/bin/dtas-xdelay +85 -0
  36. data/dtas-linux.gemspec +18 -0
  37. data/dtas-mpris.gemspec +16 -0
  38. data/examples/dtas_state.yml +18 -0
  39. data/lib/dtas.rb +7 -0
  40. data/lib/dtas/buffer.rb +90 -0
  41. data/lib/dtas/buffer/read_write.rb +102 -0
  42. data/lib/dtas/buffer/splice.rb +142 -0
  43. data/lib/dtas/command.rb +43 -0
  44. data/lib/dtas/compat_onenine.rb +18 -0
  45. data/lib/dtas/disclaimer.rb +18 -0
  46. data/lib/dtas/format.rb +151 -0
  47. data/lib/dtas/pipe.rb +39 -0
  48. data/lib/dtas/player.rb +393 -0
  49. data/lib/dtas/player/client_handler.rb +463 -0
  50. data/lib/dtas/process.rb +87 -0
  51. data/lib/dtas/replaygain.rb +41 -0
  52. data/lib/dtas/rg_state.rb +99 -0
  53. data/lib/dtas/serialize.rb +9 -0
  54. data/lib/dtas/sigevent.rb +10 -0
  55. data/lib/dtas/sigevent/efd.rb +20 -0
  56. data/lib/dtas/sigevent/pipe.rb +28 -0
  57. data/lib/dtas/sink.rb +121 -0
  58. data/lib/dtas/source.rb +147 -0
  59. data/lib/dtas/source/command.rb +40 -0
  60. data/lib/dtas/source/common.rb +14 -0
  61. data/lib/dtas/source/mp3.rb +37 -0
  62. data/lib/dtas/state_file.rb +33 -0
  63. data/lib/dtas/unix_accepted.rb +76 -0
  64. data/lib/dtas/unix_client.rb +51 -0
  65. data/lib/dtas/unix_server.rb +110 -0
  66. data/lib/dtas/util.rb +15 -0
  67. data/lib/dtas/writable_iter.rb +22 -0
  68. data/perl/dtas-graph +129 -0
  69. data/pkg.mk +26 -0
  70. data/setup.rb +1586 -0
  71. data/test/covshow.rb +30 -0
  72. data/test/helper.rb +76 -0
  73. data/test/player_integration.rb +121 -0
  74. data/test/test_buffer.rb +216 -0
  75. data/test/test_format.rb +61 -0
  76. data/test/test_format_change.rb +49 -0
  77. data/test/test_player.rb +47 -0
  78. data/test/test_player_client_handler.rb +86 -0
  79. data/test/test_player_integration.rb +220 -0
  80. data/test/test_rg_integration.rb +117 -0
  81. data/test/test_rg_state.rb +32 -0
  82. data/test/test_sink.rb +32 -0
  83. data/test/test_sink_tee_integration.rb +34 -0
  84. data/test/test_source.rb +102 -0
  85. data/test/test_unixserver.rb +66 -0
  86. data/test/test_util.rb +15 -0
  87. metadata +208 -0
@@ -0,0 +1,32 @@
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/rg_state'
6
+
7
+ class TestRGState < Minitest::Unit::TestCase
8
+
9
+ def test_rg_state
10
+ rg = DTAS::RGState.new
11
+ assert_equal({}, rg.to_hsh)
12
+ rg.preamp = 0.1
13
+ assert_equal({"preamp" => 0.1}, rg.to_hsh)
14
+ rg.preamp = 0
15
+ assert_equal({}, rg.to_hsh)
16
+ end
17
+
18
+ def test_load
19
+ rg = DTAS::RGState.load("preamp" => 0.666)
20
+ assert_equal({"preamp" => 0.666}, rg.to_hsh)
21
+ end
22
+
23
+ def test_mode_set
24
+ rg = DTAS::RGState.new
25
+ orig = rg.mode
26
+ assert_equal DTAS::RGState::RG_DEFAULT["mode"], orig
27
+ %w(album_gain track_gain album_peak track_peak).each do |t|
28
+ rg.mode = t
29
+ assert_equal t, rg.mode
30
+ end
31
+ end
32
+ end
data/test/test_sink.rb ADDED
@@ -0,0 +1,32 @@
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/sink'
6
+ require 'yaml'
7
+
8
+ class TestSink < Minitest::Unit::TestCase
9
+ def test_serialize_reload
10
+ sink = DTAS::Sink.new
11
+ sink.name = "DAC"
12
+ hash = sink.to_hsh
13
+ assert_kind_of Hash, hash
14
+ refute_match(%r{ruby}i, hash.to_yaml, "ruby guts exposed: #{hash}")
15
+
16
+ s2 = DTAS::Sink.load(hash)
17
+ assert_equal sink.to_hsh, s2.to_hsh
18
+ assert_equal hash, s2.to_hsh
19
+ end
20
+
21
+ def test_name
22
+ sink = DTAS::Sink.new
23
+ sink.name = "dac1"
24
+ assert_equal({"name" => "dac1"}, sink.to_hsh)
25
+ end
26
+
27
+ def test_inactive_load
28
+ orig = { "active" => false }.freeze
29
+ tmp = orig.to_yaml
30
+ assert_equal orig, YAML.load(tmp)
31
+ end
32
+ end
@@ -0,0 +1,34 @@
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/player_integration'
5
+ class TestSinkTeeIntegration < Minitest::Unit::TestCase
6
+ include PlayerIntegration
7
+
8
+ def test_tee_integration
9
+ s = client_socket
10
+ default_sink_pid(s)
11
+ tee_pid = Tempfile.new(%w(dtas-test .pid))
12
+ orig = Tempfile.new(%w(orig .junk))
13
+ ajunk = Tempfile.new(%w(a .junk))
14
+ bjunk = Tempfile.new(%w(b .junk))
15
+ cmd = "echo $$ > #{tee_pid.path}; " \
16
+ "cat /dev/fd/a > #{ajunk.path} & " \
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))
20
+ 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)
23
+
24
+ wait_files_not_empty(tee_pid)
25
+ pid = read_pid_file(tee_pid)
26
+ dethrottle_decoder(s)
27
+ wait_pid_dead(pid)
28
+ assert_equal ajunk.size, bjunk.size
29
+ assert_equal orig.size, bjunk.size
30
+ assert_equal ajunk.read, bjunk.read
31
+ bjunk.rewind
32
+ assert_equal orig.read, bjunk.read
33
+ end
34
+ end
@@ -0,0 +1,102 @@
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'
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.new(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.new(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.new(*%W(#{tmp.path} 5s))
76
+ assert_equal 5, source.offset_samples
77
+
78
+ source = DTAS::Source.new(*%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.new(*%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.new(*%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.new(*%W(#{tmp.path} 441s))
94
+ assert_equal 10000.0, source.offset_us
95
+
96
+ source = DTAS::Source.new(*%W(#{tmp.path} 22050s))
97
+ assert_equal 500000.0, source.offset_us
98
+
99
+ source = DTAS::Source.new(tmp.path, '1')
100
+ assert_equal 1000000.0, source.offset_us
101
+ end
102
+ end
@@ -0,0 +1,66 @@
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 'tempfile'
6
+ require 'dtas/unix_server'
7
+ require 'stringio'
8
+
9
+ class TestUNIXServer < Minitest::Unit::TestCase
10
+ def setup
11
+ @tmp = Tempfile.new(%w(dtas-unix_server-test .sock))
12
+ File.unlink(@tmp.path)
13
+ @clients = []
14
+ @srv = DTAS::UNIXServer.new(@tmp.path)
15
+ end
16
+
17
+ def test_close
18
+ assert File.exist?(@tmp.path)
19
+ assert_nil @srv.close
20
+ refute File.exist?(@tmp.path)
21
+ end
22
+
23
+ def teardown
24
+ @clients.each { |io| io.close unless io.closed? }
25
+ if File.exist?(@tmp.path)
26
+ @tmp.close!
27
+ else
28
+ @tmp.close
29
+ end
30
+ end
31
+
32
+ def new_client
33
+ c = Socket.new(:AF_UNIX, :SEQPACKET, 0)
34
+ @clients << c
35
+ c.connect(Socket.pack_sockaddr_un(@tmp.path))
36
+ c
37
+ end
38
+
39
+ def test_server_loop
40
+ client = new_client
41
+ @srv.run_once # nothing
42
+ msgs = []
43
+ clients = []
44
+ client.send("HELLO", Socket::MSG_EOR)
45
+ @srv.run_once do |c, msg|
46
+ clients << c
47
+ msgs << msg
48
+ end
49
+ assert_equal %w(HELLO), msgs, clients.inspect
50
+ assert_equal 1, clients.size
51
+ c = clients[0]
52
+ c.emit "HIHI"
53
+ assert_equal "HIHI", client.recv(4)
54
+
55
+ err = nil
56
+ 500.times do
57
+ rc = c.emit "SPAM"
58
+ case rc
59
+ when StandardError
60
+ err = rc
61
+ break
62
+ end
63
+ end
64
+ assert_kind_of RuntimeError, err
65
+ end
66
+ end
data/test/test_util.rb ADDED
@@ -0,0 +1,15 @@
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/util'
6
+
7
+ class TestUtil < Minitest::Unit::TestCase
8
+ include DTAS::Util
9
+ def test_util
10
+ orig = 6.0
11
+ lin = db_to_linear(orig)
12
+ db = linear_to_db(lin)
13
+ assert_in_delta orig, db, 0.00000001
14
+ end
15
+ end
metadata ADDED
@@ -0,0 +1,208 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dtas
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Eric Wong
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-08-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rdoc
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: hoe
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '3.6'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '3.6'
41
+ description: '["Free Software command-line tools for audio playback, mastering, and\nwhatever
42
+ else related to audio. dtas follows the worse-is-better\nphilosophy and acts as
43
+ duct tape to combine existing command-line tools\nfor flexibility and ease-of-development. dtas
44
+ is currently implemented\nin Ruby (and some embedded shell), but may use other languages
45
+ in the\nfuture."]'
46
+ email:
47
+ - e@80x24.org
48
+ executables:
49
+ - dtas-console
50
+ - dtas-ctl
51
+ - dtas-cueedit
52
+ - dtas-enq
53
+ - dtas-msinkctl
54
+ - dtas-player
55
+ - dtas-sinkedit
56
+ - dtas-sourceedit
57
+ - dtas-xdelay
58
+ extensions: []
59
+ extra_rdoc_files:
60
+ - Documentation/dtas-console.txt
61
+ - Documentation/dtas-ctl.txt
62
+ - Documentation/dtas-cueedit.txt
63
+ - Documentation/dtas-enq.txt
64
+ - Documentation/dtas-msinkctl.txt
65
+ - Documentation/dtas-player.txt
66
+ - Documentation/dtas-player_effects.txt
67
+ - Documentation/dtas-player_protocol.txt
68
+ - Documentation/dtas-sinkedit.txt
69
+ - Documentation/dtas-sourceedit.txt
70
+ - Documentation/dtas-xdelay.txt
71
+ - Documentation/troubleshooting.txt
72
+ files:
73
+ - .gitignore
74
+ - .rsync_doc
75
+ - COPYING
76
+ - Documentation/.gitignore
77
+ - Documentation/GNUmakefile
78
+ - Documentation/dtas-console.txt
79
+ - Documentation/dtas-ctl.txt
80
+ - Documentation/dtas-cueedit.txt
81
+ - Documentation/dtas-enq.txt
82
+ - Documentation/dtas-msinkctl.txt
83
+ - Documentation/dtas-player.txt
84
+ - Documentation/dtas-player_effects.txt
85
+ - Documentation/dtas-player_protocol.txt
86
+ - Documentation/dtas-sinkedit.txt
87
+ - Documentation/dtas-sourceedit.txt
88
+ - Documentation/dtas-xdelay.txt
89
+ - Documentation/troubleshooting.txt
90
+ - GIT-VERSION-GEN
91
+ - GNUmakefile
92
+ - HACKING
93
+ - INSTALL
94
+ - README
95
+ - Rakefile
96
+ - TODO
97
+ - bin/dtas-console
98
+ - bin/dtas-ctl
99
+ - bin/dtas-cueedit
100
+ - bin/dtas-enq
101
+ - bin/dtas-msinkctl
102
+ - bin/dtas-player
103
+ - bin/dtas-sinkedit
104
+ - bin/dtas-sourceedit
105
+ - bin/dtas-xdelay
106
+ - dtas-linux.gemspec
107
+ - dtas-mpris.gemspec
108
+ - examples/dtas_state.yml
109
+ - lib/dtas.rb
110
+ - lib/dtas/buffer.rb
111
+ - lib/dtas/buffer/read_write.rb
112
+ - lib/dtas/buffer/splice.rb
113
+ - lib/dtas/command.rb
114
+ - lib/dtas/compat_onenine.rb
115
+ - lib/dtas/disclaimer.rb
116
+ - lib/dtas/format.rb
117
+ - lib/dtas/pipe.rb
118
+ - lib/dtas/player.rb
119
+ - lib/dtas/player/client_handler.rb
120
+ - lib/dtas/process.rb
121
+ - lib/dtas/replaygain.rb
122
+ - lib/dtas/rg_state.rb
123
+ - lib/dtas/serialize.rb
124
+ - lib/dtas/sigevent.rb
125
+ - lib/dtas/sigevent/efd.rb
126
+ - lib/dtas/sigevent/pipe.rb
127
+ - lib/dtas/sink.rb
128
+ - lib/dtas/source.rb
129
+ - lib/dtas/source/command.rb
130
+ - lib/dtas/source/common.rb
131
+ - lib/dtas/source/mp3.rb
132
+ - lib/dtas/state_file.rb
133
+ - lib/dtas/unix_accepted.rb
134
+ - lib/dtas/unix_client.rb
135
+ - lib/dtas/unix_server.rb
136
+ - lib/dtas/util.rb
137
+ - lib/dtas/writable_iter.rb
138
+ - perl/dtas-graph
139
+ - pkg.mk
140
+ - setup.rb
141
+ - test/covshow.rb
142
+ - test/helper.rb
143
+ - test/player_integration.rb
144
+ - test/test_buffer.rb
145
+ - test/test_format.rb
146
+ - test/test_format_change.rb
147
+ - test/test_player.rb
148
+ - test/test_player_client_handler.rb
149
+ - test/test_player_integration.rb
150
+ - test/test_rg_integration.rb
151
+ - test/test_rg_state.rb
152
+ - test/test_sink.rb
153
+ - test/test_sink_tee_integration.rb
154
+ - test/test_source.rb
155
+ - test/test_unixserver.rb
156
+ - test/test_util.rb
157
+ - NEWS
158
+ - lib/dtas/version.rb
159
+ - man/dtas-console.1
160
+ - man/dtas-ctl.1
161
+ - man/dtas-enq.1
162
+ - man/dtas-msinkctl.1
163
+ - man/dtas-player.1
164
+ - man/dtas-player_protocol.7
165
+ - man/dtas-sinkedit.1
166
+ - man/dtas-sourceedit.1
167
+ - man/dtas-xdelay.1
168
+ - .gemtest
169
+ homepage: http://dtas.80x24.org/
170
+ licenses:
171
+ - GPLv3+
172
+ metadata: {}
173
+ post_install_message:
174
+ rdoc_options:
175
+ - --main
176
+ - README
177
+ require_paths:
178
+ - lib
179
+ required_ruby_version: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - '>='
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ required_rubygems_version: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - '>='
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ requirements: []
190
+ rubyforge_project: dtas
191
+ rubygems_version: 2.0.3
192
+ signing_key:
193
+ specification_version: 4
194
+ summary: dtas
195
+ test_files:
196
+ - test/test_util.rb
197
+ - test/test_sink_tee_integration.rb
198
+ - test/test_unixserver.rb
199
+ - test/test_source.rb
200
+ - test/test_player.rb
201
+ - test/test_format_change.rb
202
+ - test/test_rg_integration.rb
203
+ - test/test_buffer.rb
204
+ - test/test_format.rb
205
+ - test/test_player_integration.rb
206
+ - test/test_player_client_handler.rb
207
+ - test/test_rg_state.rb
208
+ - test/test_sink.rb