scruby 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|