scruby 0.2.7
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.
- data/.gitignore +5 -0
- data/.rspec +1 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +53 -0
- data/README.rdoc +65 -0
- data/Rakefile +10 -0
- data/TODO.markdown +3 -0
- data/examples/example.rb +73 -0
- data/lib/scruby/buffer.rb +153 -0
- data/lib/scruby/bus.rb +67 -0
- data/lib/scruby/control_name.rb +29 -0
- data/lib/scruby/core_ext/array.rb +44 -0
- data/lib/scruby/core_ext/delegator_array.rb +44 -0
- data/lib/scruby/core_ext/fixnum.rb +8 -0
- data/lib/scruby/core_ext/numeric.rb +25 -0
- data/lib/scruby/core_ext/object.rb +23 -0
- data/lib/scruby/core_ext/proc.rb +11 -0
- data/lib/scruby/core_ext/string.rb +5 -0
- data/lib/scruby/core_ext/symbol.rb +5 -0
- data/lib/scruby/core_ext/typed_array.rb +54 -0
- data/lib/scruby/env.rb +93 -0
- data/lib/scruby/group.rb +24 -0
- data/lib/scruby/node.rb +102 -0
- data/lib/scruby/server.rb +182 -0
- data/lib/scruby/synth.rb +50 -0
- data/lib/scruby/synthdef.rb +109 -0
- data/lib/scruby/ticker.rb +92 -0
- data/lib/scruby/ugens/buffer_read_write.rb +98 -0
- data/lib/scruby/ugens/demand.rb +9 -0
- data/lib/scruby/ugens/disk_in_out.rb +33 -0
- data/lib/scruby/ugens/env_gen.rb +38 -0
- data/lib/scruby/ugens/in_out.rb +46 -0
- data/lib/scruby/ugens/multi_out.rb +53 -0
- data/lib/scruby/ugens/operation_indices.yaml +92 -0
- data/lib/scruby/ugens/operation_ugens.rb +63 -0
- data/lib/scruby/ugens/panner.rb +137 -0
- data/lib/scruby/ugens/ugen.rb +173 -0
- data/lib/scruby/ugens/ugen_defs.yaml +3123 -0
- data/lib/scruby/ugens/ugen_operations.rb +57 -0
- data/lib/scruby/ugens/ugens.rb +95 -0
- data/lib/scruby/version.rb +3 -0
- data/lib/scruby.rb +65 -0
- data/scruby.gemspec +27 -0
- data/spec/buffer_read_write_spec.rb +333 -0
- data/spec/buffer_spec.rb +199 -0
- data/spec/bus_spec.rb +184 -0
- data/spec/core_ext/core_ext_spec.rb +120 -0
- data/spec/core_ext/delegator_array_spec.rb +144 -0
- data/spec/core_ext/typed_array_spec.rb +95 -0
- data/spec/demand_spec.rb +81 -0
- data/spec/disk_in_out_spec.rb +138 -0
- data/spec/env_gen_spec.rb +23 -0
- data/spec/env_spec.rb +73 -0
- data/spec/group_spec.rb +71 -0
- data/spec/helper.rb +20 -0
- data/spec/in_out_spec.rb +127 -0
- data/spec/integration_spec.rb +88 -0
- data/spec/multiout_ugen_spec.rb +86 -0
- data/spec/node_spec.rb +112 -0
- data/spec/operation_ugens_spec.rb +196 -0
- data/spec/panner_spec.rb +271 -0
- data/spec/server.rb +12 -0
- data/spec/server_spec.rb +198 -0
- data/spec/synth_spec.rb +103 -0
- data/spec/synthdef_spec.rb +267 -0
- data/spec/ugen_operations_spec.rb +100 -0
- data/spec/ugen_spec.rb +356 -0
- data/spec/ugens_spec.rb +65 -0
- metadata +207 -0
@@ -0,0 +1,95 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + "/../helper"
|
2
|
+
require "scruby/core_ext/typed_array"
|
3
|
+
|
4
|
+
class Type
|
5
|
+
end
|
6
|
+
|
7
|
+
describe TypedArray do
|
8
|
+
|
9
|
+
before do
|
10
|
+
@t1 = Type.new
|
11
|
+
@t2 = Type.new
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should initialize with attributes" do
|
15
|
+
objs = (0..3).map{ Type.new }
|
16
|
+
ta = TypedArray.new( Type, objs )
|
17
|
+
ta.type.should == Type
|
18
|
+
ta.should == objs
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should instantiate with an array" do
|
22
|
+
objs = (0..3).map{ Type.new }
|
23
|
+
ta = TypedArray.new( Type, objs )
|
24
|
+
ta.should == objs
|
25
|
+
end
|
26
|
+
|
27
|
+
it "set type by instance" do
|
28
|
+
ta = TypedArray.new( Type.new )
|
29
|
+
ta.type.should == Type
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should raise error if wrong type" do
|
33
|
+
lambda{ TypedArray.new(Type, 1) }.should raise_error(TypeError)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "+ success" do
|
37
|
+
ta = TypedArray.new( Type )
|
38
|
+
o = Type.new
|
39
|
+
sum = ta + [o]
|
40
|
+
# sum.should be_instance_of(TypedArray)
|
41
|
+
sum.should == [o]
|
42
|
+
end
|
43
|
+
|
44
|
+
it "+ failure" do
|
45
|
+
lambda{ TypedArray.new(Type, Type.new) + [1] }.should raise_error(TypeError)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "concat success" do
|
49
|
+
ta = TypedArray.new( Type, [@t1] )
|
50
|
+
ta.concat( [@t2] ).should == ta
|
51
|
+
ta.should == [@t1,@t2]
|
52
|
+
end
|
53
|
+
|
54
|
+
it "concat failure" do
|
55
|
+
lambda{ TypedArray.new(Type, Type.new).concat( 1 ) }.should raise_error(TypeError)
|
56
|
+
lambda{ TypedArray.new(Type, Type.new).concat( [1] ) }.should raise_error(TypeError)
|
57
|
+
end
|
58
|
+
|
59
|
+
it "<< success" do
|
60
|
+
ta = TypedArray.new(Type) << @t1
|
61
|
+
ta.should == [@t1]
|
62
|
+
end
|
63
|
+
|
64
|
+
it "<< failure" do
|
65
|
+
lambda{ TypedArray.new(Type, Type.new) << [1] }.should raise_error(TypeError)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "[]= success" do
|
69
|
+
ta = TypedArray.new(Type)
|
70
|
+
ta[0]= @t1
|
71
|
+
ta[0].should == @t1
|
72
|
+
end
|
73
|
+
|
74
|
+
it "[]= failure" do
|
75
|
+
lambda{ TypedArray.new(Type, Type.new)[0]= 1 }.should raise_error(TypeError)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "push success" do
|
79
|
+
ta = TypedArray.new(Type)
|
80
|
+
ta.push( @t1 )
|
81
|
+
ta.should == [@t1]
|
82
|
+
end
|
83
|
+
|
84
|
+
it "push failure" do
|
85
|
+
lambda{ TypedArray.new(Type, Type.new).push(1) }.should raise_error(TypeError)
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should convert to array" do
|
89
|
+
ta = TypedArray.new(Type)
|
90
|
+
ta.to_a.should be_instance_of(Array)
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
|
data/spec/demand_spec.rb
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + "/helper"
|
2
|
+
|
3
|
+
require "scruby/core_ext/delegator_array"
|
4
|
+
require "scruby/control_name"
|
5
|
+
require "scruby/env"
|
6
|
+
require "scruby/ugens/ugen"
|
7
|
+
require "scruby/ugens/ugen_operations"
|
8
|
+
require "scruby/ugens/multi_out"
|
9
|
+
require "scruby/ugens/ugens"
|
10
|
+
require "scruby/ugens/demand"
|
11
|
+
|
12
|
+
include Scruby
|
13
|
+
include Ugens
|
14
|
+
|
15
|
+
class MockUgen < Ugen
|
16
|
+
class << self; public :new; end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe Demand do
|
20
|
+
shared_examples_for 'Demand Ugen' do
|
21
|
+
before do
|
22
|
+
@prox = @splatted ? Demand.send( @method, *@ugens) : Demand.send( @method, @ugens)
|
23
|
+
@instance = @splatted ? @prox.source : @prox.first.source
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should output proxies or single proxie" do
|
27
|
+
@splatted ? @prox.each{ |prox| prox.should be_a(OutputProxy) } : @prox.should( be_a(OutputProxy) )
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
shared_examples_for 'Demand with ar' do
|
32
|
+
before do
|
33
|
+
@method = :ar
|
34
|
+
end
|
35
|
+
it_should_behave_like 'Demand Ugen'
|
36
|
+
end
|
37
|
+
|
38
|
+
shared_examples_for 'Demand with kr' do
|
39
|
+
before do
|
40
|
+
@method = :ar
|
41
|
+
end
|
42
|
+
it_should_behave_like 'Demand Ugen'
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
describe 'Single channel splatted input' do
|
48
|
+
before do
|
49
|
+
@channels = 1
|
50
|
+
@ugens = [MockUgen.new(:audio, 1, 2)] * 4
|
51
|
+
@splatted = true
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "Single channel array input" do
|
57
|
+
before do
|
58
|
+
@channels = 1
|
59
|
+
@ugens = [MockUgen.new(:audio, 1, 2)] * 4
|
60
|
+
@splatted = false
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
# describe "Two channel splatted input" do
|
66
|
+
# before do
|
67
|
+
# @channels = 2
|
68
|
+
# @splatted = false
|
69
|
+
# end
|
70
|
+
#
|
71
|
+
# end
|
72
|
+
#
|
73
|
+
# describe "Two channel array input" do
|
74
|
+
# before do
|
75
|
+
# @channels = 2
|
76
|
+
# @splatted = false
|
77
|
+
# end
|
78
|
+
#
|
79
|
+
# end
|
80
|
+
|
81
|
+
end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + "/helper"
|
2
|
+
|
3
|
+
require "scruby/core_ext/delegator_array"
|
4
|
+
require "scruby/core_ext/array"
|
5
|
+
require "scruby/control_name"
|
6
|
+
require "scruby/env"
|
7
|
+
require "scruby/synthdef"
|
8
|
+
require "scruby/ugens/ugen"
|
9
|
+
require "scruby/ugens/ugen_operations"
|
10
|
+
require "scruby/ugens/operation_ugens"
|
11
|
+
require "scruby/ugens/multi_out"
|
12
|
+
require "scruby/ugens/ugens"
|
13
|
+
require "scruby/ugens/disk_in_out"
|
14
|
+
|
15
|
+
include Scruby
|
16
|
+
include Ugens
|
17
|
+
|
18
|
+
class MockUgen < Ugen
|
19
|
+
class << self; public :new; end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'IO ugens' do
|
23
|
+
describe DiskOut, 'one channel' do
|
24
|
+
before do
|
25
|
+
@sdef = SynthDef.new :out do |bufnum|
|
26
|
+
@out = DiskOut.ar bufnum, WhiteNoise.ar
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should output zero" do
|
31
|
+
@out.should == 0.0
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should encode correctly" do
|
35
|
+
expected = [ 83, 67, 103, 102, 0, 0, 0, 1, 0, 1, 3, 111, 117, 116, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 6, 98, 117, 102, 110, 117, 109, 0, 0, 0, 3, 7, 67, 111, 110, 116, 114, 111, 108, 1, 0, 0, 0, 1, 0, 0, 1, 10, 87, 104, 105, 116, 101, 78, 111, 105, 115, 101, 2, 0, 0, 0, 1, 0, 0, 2, 7, 68, 105, 115, 107, 79, 117, 116, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 ]
|
36
|
+
@sdef.encode.should == expected.pack('C*')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe DiskOut, 'two channel' do
|
41
|
+
before do
|
42
|
+
@sdef = SynthDef.new :out do |bufnum|
|
43
|
+
@out = DiskOut.ar bufnum, [WhiteNoise.ar, WhiteNoise.ar]
|
44
|
+
end
|
45
|
+
@sdef2 = SynthDef.new :out do |bufnum|
|
46
|
+
@out2 = DiskOut.ar bufnum, WhiteNoise.ar, WhiteNoise.ar
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should output zero" do
|
51
|
+
@out.should == 0.0
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should encode the same" do
|
55
|
+
@sdef.encode.should == @sdef2.encode
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should encode correctly" do
|
59
|
+
expected = [ 83, 67, 103, 102, 0, 0, 0, 1, 0, 1, 3, 111, 117, 116, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 6, 98, 117, 102, 110, 117, 109, 0, 0, 0, 4, 7, 67, 111, 110, 116, 114, 111, 108, 1, 0, 0, 0, 1, 0, 0, 1, 10, 87, 104, 105, 116, 101, 78, 111, 105, 115, 101, 2, 0, 0, 0, 1, 0, 0, 2, 10, 87, 104, 105, 116, 101, 78, 111, 105, 115, 101, 2, 0, 0, 0, 1, 0, 0, 2, 7, 68, 105, 115, 107, 79, 117, 116, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0 ]
|
60
|
+
@sdef.encode.should == expected.pack('C*')
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
shared_examples_for 'DiskIn' do
|
65
|
+
before do
|
66
|
+
@sdef = SynthDef.new :in do
|
67
|
+
@proxies = @class.send :ar, @channels, *@inputs
|
68
|
+
end
|
69
|
+
@instance = @proxies.first.source
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should output a DelegatorArray" do
|
73
|
+
@proxies.should be_a(DelegatorArray)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should have correct rate" do
|
77
|
+
@instance.rate.should == :audio
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should return an array of output proxies" do
|
81
|
+
@proxies.should have(@channels).proxies
|
82
|
+
@proxies.each_with_index do |proxy, i|
|
83
|
+
proxy.source.should be_a(@class)
|
84
|
+
proxy.should be_a(OutputProxy)
|
85
|
+
proxy.output_index.should == i
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should set inputs" do
|
90
|
+
@instance.inputs.should == @inputs
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should encode" do
|
94
|
+
@sdef.encode.should == @expected.pack('C*')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
describe DiskIn, 'single channel' do
|
99
|
+
before do
|
100
|
+
@channels = 1
|
101
|
+
@inputs = 1, 0
|
102
|
+
@class = DiskIn
|
103
|
+
@expected = [ 83, 67, 103, 102, 0, 0, 0, 1, 0, 1, 2, 105, 110, 0, 2, 63, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 68, 105, 115, 107, 73, 110, 2, 0, 2, 0, 1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 1, 2, 0, 0 ]
|
104
|
+
end
|
105
|
+
it_should_behave_like 'DiskIn'
|
106
|
+
end
|
107
|
+
|
108
|
+
describe DiskIn, 'two channels' do
|
109
|
+
before do
|
110
|
+
@channels = 2
|
111
|
+
@inputs = 1, 0
|
112
|
+
@class = DiskIn
|
113
|
+
@expected = [ 83, 67, 103, 102, 0, 0, 0, 1, 0, 1, 2, 105, 110, 0, 2, 63, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 68, 105, 115, 107, 73, 110, 2, 0, 2, 0, 2, 0, 0, -1, -1, 0, 0, -1, -1, 0, 1, 2, 2, 0, 0 ]
|
114
|
+
end
|
115
|
+
it_should_behave_like 'DiskIn'
|
116
|
+
end
|
117
|
+
|
118
|
+
describe VDiskIn, 'single channel' do
|
119
|
+
before do
|
120
|
+
@channels = 1
|
121
|
+
@inputs = 1, 2, 3, 4
|
122
|
+
@class = VDiskIn
|
123
|
+
@expected = [ 83, 67, 103, 102, 0, 0, 0, 1, 0, 1, 2, 105, 110, 0, 4, 63, -128, 0, 0, 64, 0, 0, 0, 64, 64, 0, 0, 64, -128, 0, 0, 0, 0, 0, 0, 0, 1, 7, 86, 68, 105, 115, 107, 73, 110, 2, 0, 4, 0, 1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 1, -1, -1, 0, 2, -1, -1, 0, 3, 2, 0, 0 ]
|
124
|
+
end
|
125
|
+
it_should_behave_like 'DiskIn'
|
126
|
+
end
|
127
|
+
|
128
|
+
describe VDiskIn, 'two channels' do
|
129
|
+
before do
|
130
|
+
@channels = 2
|
131
|
+
@inputs = 1, 2, 3, 4
|
132
|
+
@class = VDiskIn
|
133
|
+
@expected = [ 83, 67, 103, 102, 0, 0, 0, 1, 0, 1, 2, 105, 110, 0, 4, 63, -128, 0, 0, 64, 0, 0, 0, 64, 64, 0, 0, 64, -128, 0, 0, 0, 0, 0, 0, 0, 1, 7, 86, 68, 105, 115, 107, 73, 110, 2, 0, 4, 0, 2, 0, 0, -1, -1, 0, 0, -1, -1, 0, 1, -1, -1, 0, 2, -1, -1, 0, 3, 2, 2, 0, 0 ]
|
134
|
+
end
|
135
|
+
it_should_behave_like 'DiskIn'
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + "/helper"
|
2
|
+
|
3
|
+
require "scruby/control_name"
|
4
|
+
require "scruby/env"
|
5
|
+
require "scruby/ugens/ugen"
|
6
|
+
require "scruby/ugens/ugen_operations"
|
7
|
+
require "scruby/ugens/env_gen"
|
8
|
+
|
9
|
+
include Scruby
|
10
|
+
include Ugens
|
11
|
+
|
12
|
+
describe EnvGen do
|
13
|
+
|
14
|
+
it "should not instantiate with #new" do
|
15
|
+
lambda { EnvGen.new :audio, 1, 2 }.should raise_error
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should have correct inputs" do
|
19
|
+
envgen = EnvGen.kr Env.adsr
|
20
|
+
envgen.rate.should == :control
|
21
|
+
envgen.inputs.should == [ 1, 1, 0, 1, 0, 0, 3, 2, -99, 1, 0.01, 5, -4, 0.5, 0.3, 5, -4, 0, 1, 5, -4 ].collect{ |i| i.to_f }
|
22
|
+
end
|
23
|
+
end
|
data/spec/env_spec.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + "/helper"
|
2
|
+
|
3
|
+
require "scruby/env"
|
4
|
+
require "scruby/control_name"
|
5
|
+
require "scruby/ugens/ugen"
|
6
|
+
require "scruby/ugens/ugen_operations"
|
7
|
+
|
8
|
+
class ControlName; end
|
9
|
+
|
10
|
+
include Scruby
|
11
|
+
|
12
|
+
describe Env do
|
13
|
+
it "Env.new [0,1,0], [0.5, 1]" do
|
14
|
+
env = Env.new [0,1,0], [0.5, 1]
|
15
|
+
env.times.should == [0.5, 1]
|
16
|
+
env.levels.should == [ 0, 1, 0 ]
|
17
|
+
env.shape_numbers.should == [1]
|
18
|
+
env.curve_values.should == [0]
|
19
|
+
end
|
20
|
+
|
21
|
+
it do
|
22
|
+
env = Env.new [0,1,0], [0.5, 1]
|
23
|
+
env.to_array.collect{ |i| i.to_f }.should == [ 0, 2, -99, -99, 1, 0.5, 1, 0, 0, 1, 1, 0 ].collect{ |i| i.to_f }
|
24
|
+
end
|
25
|
+
|
26
|
+
it do
|
27
|
+
Env.perc.should be_instance_of( Env )
|
28
|
+
end
|
29
|
+
|
30
|
+
it "#perc" do
|
31
|
+
perc = Env.perc
|
32
|
+
perc.to_array.collect{ |i| i.to_f }.should == [ 0, 2, -99, -99, 1, 0.01, 5, -4, 0, 1, 5, -4 ].collect{ |i| i.to_f }
|
33
|
+
end
|
34
|
+
|
35
|
+
it '#sine' do
|
36
|
+
env = Env.sine
|
37
|
+
env.to_array.collect{ |i| i.to_f }.should == [ 0, 2, -99, -99, 1, 0.5, 3, 0, 0, 0.5, 3, 0 ].collect{ |i| i.to_f }
|
38
|
+
end
|
39
|
+
|
40
|
+
it "#linen" do
|
41
|
+
env = Env.linen
|
42
|
+
env.to_array.collect{ |i| i.to_f }.should == [ 0, 3, -99, -99, 1, 0.01, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0 ].collect{ |i| i.to_f }
|
43
|
+
end
|
44
|
+
|
45
|
+
it "#triangle" do
|
46
|
+
env = Env.triangle
|
47
|
+
env.to_array.collect{ |i| i.to_f }.should == [ 0, 2, -99, -99, 1, 0.5, 1, 0, 0, 0.5, 1, 0 ].collect{ |i| i.to_f }
|
48
|
+
end
|
49
|
+
|
50
|
+
it "#cutoff" do
|
51
|
+
env = Env.cutoff
|
52
|
+
env.to_array.collect{ |i| i.to_f }.should == [ 1, 1, 0, -99, 0, 0.1, 1, 0 ].collect{ |i| i.to_f }
|
53
|
+
end
|
54
|
+
|
55
|
+
it "#dadsr" do
|
56
|
+
env = Env.dadsr
|
57
|
+
env.to_array.collect{ |i| i.to_f }.should == [ 0, 4, 3, -99, 0, 0.1, 5, -4, 1, 0.01, 5, -4, 0.5, 0.3, 5, -4, 0, 1, 5, -4 ].collect{ |i| i.to_f }
|
58
|
+
end
|
59
|
+
|
60
|
+
it "#dadsr" do
|
61
|
+
env = Env.adsr
|
62
|
+
env.to_array.collect{ |i| i.to_f }.should == [ 0, 3, 2, -99, 1, 0.01, 5, -4, 0.5, 0.3, 5, -4, 0, 1, 5, -4 ].collect{ |i| i.to_f }
|
63
|
+
end
|
64
|
+
|
65
|
+
describe 'Overriding defaults' do
|
66
|
+
|
67
|
+
it "#asr" do
|
68
|
+
Env.asr(2, 1, 2).to_array.should == [ 0, 2, 1, -99, 1, 2, 5, -4, 0, 2, 5, -4 ]
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
data/spec/group_spec.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + "/helper"
|
2
|
+
|
3
|
+
|
4
|
+
require "scruby/core_ext/typed_array"
|
5
|
+
require "scruby/node"
|
6
|
+
require "scruby/group"
|
7
|
+
require 'scruby/bus'
|
8
|
+
|
9
|
+
require 'scruby/server'
|
10
|
+
require File.join( File.expand_path(File.dirname(__FILE__)), "server")
|
11
|
+
|
12
|
+
|
13
|
+
include Scruby
|
14
|
+
class Bus; end # mock
|
15
|
+
|
16
|
+
describe Group do
|
17
|
+
before :all do
|
18
|
+
end
|
19
|
+
|
20
|
+
before do
|
21
|
+
Node.reset!
|
22
|
+
Server.stub!(:all).and_return([@server])
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'Server interaction' do
|
26
|
+
before :all do
|
27
|
+
@server = Server.new
|
28
|
+
@server.boot
|
29
|
+
@server.send "/dumpOSC", 3
|
30
|
+
sleep 0.05
|
31
|
+
end
|
32
|
+
|
33
|
+
after :all do
|
34
|
+
@server.quit
|
35
|
+
end
|
36
|
+
|
37
|
+
before do
|
38
|
+
@server.flush
|
39
|
+
@group = Group.new @server
|
40
|
+
@node = Node.new @server
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'position' do
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should send free all message" do
|
47
|
+
@group.free_all.should be_a(Group)
|
48
|
+
sleep 0.05
|
49
|
+
@server.output.should =~ %r{\[ "/g_freeAll", #{ @group.id } \]}
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should send deepFree message" do
|
53
|
+
@group.deep_free.should be_a(Group)
|
54
|
+
sleep 0.05
|
55
|
+
@server.output.should =~ %r{\[ "/g_deepFree", #{ @group.id } \]}
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should send dump tree message" do
|
59
|
+
@group.dump_tree.should be_a(Group)
|
60
|
+
sleep 0.05
|
61
|
+
@server.output.should =~ %r{\[ "/g_dumpTree", #{ @group.id }, 0 \]}
|
62
|
+
@group.dump_tree true
|
63
|
+
sleep 0.05
|
64
|
+
@server.output.should =~ %r{\[ "/g_dumpTree", #{ @group.id }, 1 \]}
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should send dump tree message with arg"
|
68
|
+
it "should query_tree"
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
data/spec/helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "rspec"
|
3
|
+
require 'arguments'
|
4
|
+
require 'yaml'
|
5
|
+
require 'ruby-osc'
|
6
|
+
|
7
|
+
$:.unshift( File.dirname(__FILE__) + '/../lib' )
|
8
|
+
|
9
|
+
require "scruby/core_ext/object"
|
10
|
+
require "scruby/core_ext/array"
|
11
|
+
require "scruby/core_ext/numeric"
|
12
|
+
require "scruby/core_ext/fixnum"
|
13
|
+
require "scruby/core_ext/proc"
|
14
|
+
require "scruby/core_ext/string"
|
15
|
+
require "scruby/core_ext/symbol"
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
data/spec/in_out_spec.rb
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + "/helper"
|
2
|
+
|
3
|
+
require "scruby/core_ext/delegator_array"
|
4
|
+
require "scruby/control_name"
|
5
|
+
require "scruby/env"
|
6
|
+
require "scruby/ugens/ugen"
|
7
|
+
require "scruby/ugens/ugen_operations"
|
8
|
+
require "scruby/ugens/multi_out"
|
9
|
+
require "scruby/ugens/in_out"
|
10
|
+
|
11
|
+
include Scruby
|
12
|
+
include Ugens
|
13
|
+
|
14
|
+
class SinOsc < Ugen
|
15
|
+
#not interested in muladd
|
16
|
+
def self.ar freq = 440.0, phase = 0.0
|
17
|
+
new :audio, freq, phase
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class MockUgen < Ugen
|
22
|
+
class << self; public :new; end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe In do
|
26
|
+
before do
|
27
|
+
@sdef = mock( 'ugen', :children => [] )
|
28
|
+
Ugen.should_receive( :synthdef ).at_least( :once ).and_return( @sdef )
|
29
|
+
|
30
|
+
@proxy = mock('output proxy' )
|
31
|
+
@proxies = (1..10).map{ @proxy }
|
32
|
+
OutputProxy.stub!(:new).and_return( @proxy )
|
33
|
+
|
34
|
+
@ar = In.ar 3
|
35
|
+
end
|
36
|
+
|
37
|
+
it "respond to #kr and #ar" do
|
38
|
+
In.should respond_to(:kr)
|
39
|
+
In.should respond_to(:ar)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should spec #ar" do
|
43
|
+
@ar.should be_instance_of( DelegatorArray )
|
44
|
+
@ar.should have(1).proxy
|
45
|
+
@ar.first.should == @proxy
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should have bus as input" do
|
49
|
+
@sdef.children.first.inputs.should == [3]
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should have ten channels" do
|
53
|
+
In.ar(0, 10).should == @proxies
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should describe passing arrays to initialize"
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
describe Out do
|
62
|
+
shared_examples_for 'Out' do
|
63
|
+
before do
|
64
|
+
@sdef = mock 'sdef', :children => [], :constants => [400, 0]
|
65
|
+
Ugen.should_receive( :synthdef ).at_least( :once ).and_return @sdef
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should accept one ugen" do
|
69
|
+
@ugen1 = MockUgen.new :audio
|
70
|
+
@class.kr( 1, @ugen1 ).should == 0.0
|
71
|
+
@sdef.children.should have(2).ugens
|
72
|
+
|
73
|
+
out = @sdef.children.last
|
74
|
+
out.rate.should == :control
|
75
|
+
out.inputs.should == [1, @ugen1]
|
76
|
+
out.channels.should == []
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should accept several inputs from array" do
|
80
|
+
@ugen1 = MockUgen.new :audio
|
81
|
+
@ugen2 = MockUgen.new :audio
|
82
|
+
@ugen3 = MockUgen.new :audio
|
83
|
+
|
84
|
+
@class.kr 1, [@ugen1, @ugen2, @ugen3]
|
85
|
+
@sdef.children.should have(4).ugens
|
86
|
+
|
87
|
+
out = @sdef.children.last
|
88
|
+
out.inputs.should == [1, @ugen1, @ugen2, @ugen3]
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should accept several inputs" do
|
92
|
+
@ugen1 = MockUgen.new :audio
|
93
|
+
@ugen2 = MockUgen.new :audio
|
94
|
+
@ugen3 = MockUgen.new :audio
|
95
|
+
|
96
|
+
@class.kr 1, @ugen1, @ugen2, @ugen3
|
97
|
+
@sdef.children.should have(4).ugens
|
98
|
+
|
99
|
+
out = @sdef.children.last
|
100
|
+
out.inputs.should == [1, @ugen1, @ugen2, @ugen3]
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should validate rate"
|
104
|
+
it "should substitute zero with silence"
|
105
|
+
it "should spec passing array on init"
|
106
|
+
end
|
107
|
+
|
108
|
+
describe Out do
|
109
|
+
before do
|
110
|
+
@class = Out
|
111
|
+
end
|
112
|
+
it_should_behave_like 'Out'
|
113
|
+
end
|
114
|
+
|
115
|
+
describe ReplaceOut do
|
116
|
+
before do
|
117
|
+
@class = Out
|
118
|
+
end
|
119
|
+
it_should_behave_like 'Out'
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
|