rubySC 0.3.3 → 0.4.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.
- checksums.yaml +4 -4
- data/lib/init.sc +1 -1
- data/lib/rubySC.rb +23 -11
- data/lib/rubySC/musique.rb +69 -49
- data/lib/rubySC/version.rb +1 -1
- data/lib/rubySC/voix.rb +24 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d5ef2e559ca532f4b888670b6574afaaafdab769
|
4
|
+
data.tar.gz: a7a749a1789610edc76d7535cbd7aaa161e3a587
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7deb2c506bb13dde89b7e1c01c509ecac295bd67ffff061fde1e73d56d8d9aee1b2d92e06df5ffc6643e983c4cf3c9fdc3c8cc03fbfe788a28352fe1bf1bda58
|
7
|
+
data.tar.gz: cf52c3e1c92199fcc27cd6bde6b367d863bba88bdb7e4c817eb7b9610548b674bee0751aa6b027ebd01ead84bd3909bbc197cebea0b8c21a5dfc50dae33e14f9
|
data/lib/init.sc
CHANGED
@@ -69,7 +69,7 @@ OSCFunc.newMatching(
|
|
69
69
|
message[1].asString.interpret
|
70
70
|
}, "/SC", n
|
71
71
|
);
|
72
|
-
|
72
|
+
Scale.major.semitones.asArray
|
73
73
|
///// Vous pouvez ajouter de nouveaux instruments en mettant du code en-dessous, dans la syntaxe:
|
74
74
|
/// SynthDef ("nomInstr", { argumentsModifiables }
|
75
75
|
/// son = code
|
data/lib/rubySC.rb
CHANGED
@@ -21,7 +21,9 @@ include ObjectSpace
|
|
21
21
|
class SC
|
22
22
|
|
23
23
|
|
24
|
-
cattr_reader :listeVoix, :portSuperCollider
|
24
|
+
cattr_reader :listeVoix, :portSuperCollider, :valeurReceptrice
|
25
|
+
cattr_accessor :server
|
26
|
+
|
25
27
|
include Singleton
|
26
28
|
|
27
29
|
# ouvre le contact avec SuperCollider
|
@@ -40,6 +42,13 @@ class SC
|
|
40
42
|
end
|
41
43
|
|
42
44
|
@@server= OSC::EMServer.new 3333
|
45
|
+
|
46
|
+
|
47
|
+
@@server.add_method "/coucou" do |message|
|
48
|
+
p "demande de valeur"
|
49
|
+
@@valeurReceptrice=message.to_a
|
50
|
+
end
|
51
|
+
|
43
52
|
@@server.add_method "/portSC" do |message|
|
44
53
|
@@portSuperCollider=message.to_a[0]
|
45
54
|
end
|
@@ -52,13 +61,6 @@ class SC
|
|
52
61
|
sleep 1.5
|
53
62
|
## récupèrer l'adresse du port
|
54
63
|
|
55
|
-
if @@portSuperCollider.nil?
|
56
|
-
begin
|
57
|
-
raise Error, "espece de porc"
|
58
|
-
rescue exit
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
64
|
@@postMan= OSC::Client.new "localhost", @@portSuperCollider
|
63
65
|
|
64
66
|
# variables et méthodes de fin
|
@@ -66,7 +68,7 @@ class SC
|
|
66
68
|
|
67
69
|
@@listeVoix=Hash.new
|
68
70
|
define_finalizer(self, Proc.new {self.quit})
|
69
|
-
|
71
|
+
|
70
72
|
end
|
71
73
|
|
72
74
|
|
@@ -84,6 +86,17 @@ class SC
|
|
84
86
|
@@postMan.send OSC::Message.new "/SC", message.to_s
|
85
87
|
end
|
86
88
|
|
89
|
+
def self.ask valeurRequise, tpsAttente=0.5
|
90
|
+
|
91
|
+
Thread.new do @@server.run end
|
92
|
+
self.send %Q[m.sendMsg("/coucou", #{valeurRequise.delete("\"")})]
|
93
|
+
sleep tpsAttente
|
94
|
+
return @@valeurReceptrice
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
|
99
|
+
|
87
100
|
## fonction semi-privée
|
88
101
|
|
89
102
|
|
@@ -115,8 +128,7 @@ class SC
|
|
115
128
|
|
116
129
|
public
|
117
130
|
|
118
|
-
|
119
|
-
def self.set demarreBool, options=nil, *voix
|
131
|
+
def self.set demarreBool=true, options=nil, *voix
|
120
132
|
|
121
133
|
if voix.nil?
|
122
134
|
begin
|
data/lib/rubySC/musique.rb
CHANGED
@@ -14,7 +14,7 @@ module SoundFile
|
|
14
14
|
def self.charger fileName, departBool=true, tpsDattente=1
|
15
15
|
SC.send %Q{b=Buffer.read(s,'#{fileName}')}
|
16
16
|
if departBool
|
17
|
-
|
17
|
+
sleep tpsDattente
|
18
18
|
self.play
|
19
19
|
end
|
20
20
|
end
|
@@ -65,69 +65,89 @@ end
|
|
65
65
|
|
66
66
|
## module pour gérer des marches.
|
67
67
|
|
68
|
-
|
69
|
-
module Marche
|
68
|
+
module Marche
|
70
69
|
|
71
|
-
def self.
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
70
|
+
def self.chromatique intervalles, voix
|
71
|
+
|
72
|
+
nbFois=SC.listeVoix[voix].degree.length
|
73
|
+
SC.set true, ({"root" => "Pstutter(#{nbFois}, Pseq(#{intervalles}, inf))"}), voix
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.diatonique voix, intervalle
|
78
|
+
|
79
|
+
melodie=SC.listeVoix[voix].degree
|
80
|
+
|
81
|
+
tmp= Array.new(intervalle.size) do |x|
|
82
|
+
"Pseq(#{melodie.map { |note| note+intervalle[x]*x}})"
|
83
83
|
end
|
84
|
-
|
85
|
-
|
84
|
+
|
85
|
+
|
86
|
+
p tmp
|
87
|
+
SC.updater voix, "degree", "[#{tmp.join(',')}]"
|
88
|
+
SC.listeVoix.information="en marche ! ..."
|
89
|
+
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
module Echelle
|
94
|
+
|
95
|
+
def self.determineEchelle voix
|
96
|
+
|
97
|
+
## fonction lente à cause d'un comportement étrange de Super Collider pour donner les valeurs de Scale..
|
98
|
+
|
99
|
+
echelleVoix="Scale."+SC.listeVoix[voix].scale
|
100
|
+
longueurEchelle=SC.ask("#{echelleVoix+".semitones.size"}")[0]
|
101
|
+
|
102
|
+
valeursEchelles= Array.new(longueurEchelle) do |x|
|
103
|
+
x = SC.ask("#{echelleVoix+".semitones[#{x}]"}")[0]
|
104
|
+
end
|
105
|
+
|
106
|
+
p valeursEchelles
|
107
|
+
|
86
108
|
end
|
87
|
-
|
88
|
-
SC.set ({"degree" => "[#{tmp.join ","}]"}), voix
|
109
|
+
|
89
110
|
end
|
90
111
|
|
91
|
-
|
112
|
+
module Rythme
|
92
113
|
|
93
|
-
|
114
|
+
## Quelques constantes, notamment pour les rythmes, c'est toujours
|
115
|
+
## plus pratique
|
94
116
|
|
95
|
-
|
96
|
-
|
117
|
+
## Je n'ai mis que les rythmes qui me semblaient
|
118
|
+
## les plus connus
|
97
119
|
|
98
|
-
## Je n'ai mis que les rythmes qui me semblaient
|
99
|
-
## les plus connus
|
100
120
|
|
121
|
+
## Rythmes à 3 notes
|
101
122
|
|
102
|
-
|
123
|
+
Pavanne=[2,1,1]
|
124
|
+
Syncopette=[1,2,1]
|
103
125
|
|
104
|
-
|
126
|
+
Sicilienne=[3,1,2]
|
127
|
+
Chabada=[3,2,1]
|
105
128
|
|
106
|
-
|
107
|
-
Chabada=[3,2,1]
|
129
|
+
Tresillo=[3,3,2]
|
108
130
|
|
109
|
-
Tresillo=[3,3,2]
|
110
|
-
Syncopette=[1,2,1]
|
111
131
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
132
|
+
## s'occupe du premier chiffre de la propriété "dur", c-à-d la vitesse
|
133
|
+
def self.mesure mesure, *voix
|
134
|
+
voix.each do |v|
|
135
|
+
tmp = SC.listeVoix[v.to_s].dur
|
136
|
+
tmp[0] = mesure
|
137
|
+
SC.set true, ({ "dur" => tmp }), v
|
138
|
+
end
|
118
139
|
end
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
140
|
+
|
141
|
+
## s'occupe du deuxième chiffre de la propriété "dur", c-à-d la
|
142
|
+
## gestalt rythmique.
|
143
|
+
|
144
|
+
def self.formule formule, *voix
|
145
|
+
voix.each do |v|
|
146
|
+
tmp = SC.listeVoix[v.to_s].dur
|
147
|
+
tmp[1] = formule
|
148
|
+
SC.set true, ({ "dur" => tmp }), v
|
149
|
+
end
|
129
150
|
end
|
130
|
-
end
|
131
151
|
|
132
152
|
|
133
|
-
end
|
153
|
+
end
|
data/lib/rubySC/version.rb
CHANGED
data/lib/rubySC/voix.rb
CHANGED
@@ -5,11 +5,18 @@
|
|
5
5
|
class Voix
|
6
6
|
|
7
7
|
attr_reader :dur, :degree, :octave, :root, :scale, :amp, :instrument
|
8
|
+
attr_accessor :information
|
8
9
|
|
9
10
|
def initialize options={}
|
10
11
|
|
11
|
-
@
|
12
|
-
|
12
|
+
@information=nil ## cette information sert juste à stocker tout ce
|
13
|
+
## qui pourrait être utile, principalement dans
|
14
|
+
## les Marches et autres transformations de
|
15
|
+
## mélodie. Cette variable ne sert qu'à donner
|
16
|
+
## une indication
|
17
|
+
|
18
|
+
|
19
|
+
|
13
20
|
self.setDuree options["dur"]
|
14
21
|
|
15
22
|
if options["degree"].nil?
|
@@ -32,7 +39,7 @@ class Voix
|
|
32
39
|
end
|
33
40
|
|
34
41
|
if options["amp"].nil?
|
35
|
-
then @amp = "Pwhite(0.2,0.
|
42
|
+
then @amp = "Pwhite(0.2,0.8)"
|
36
43
|
else
|
37
44
|
@amp=options["amp"]
|
38
45
|
end
|
@@ -43,6 +50,8 @@ class Voix
|
|
43
50
|
@instrument=options["instrument"].to_s
|
44
51
|
end
|
45
52
|
|
53
|
+
self.setRoot options["root"]
|
54
|
+
|
46
55
|
end
|
47
56
|
|
48
57
|
def set options
|
@@ -54,23 +63,31 @@ class Voix
|
|
54
63
|
case key
|
55
64
|
when "dur"
|
56
65
|
self.setDuree value
|
66
|
+
when "root"
|
67
|
+
self.setRoot value
|
57
68
|
else
|
58
69
|
self.instance_variable_set "@#{key}", value
|
59
70
|
end
|
60
71
|
end
|
61
72
|
end
|
62
73
|
|
74
|
+
def setRoot intervalles
|
75
|
+
if intervalles.nil?
|
76
|
+
@root=0
|
77
|
+
else
|
78
|
+
@root="Pstutter(#{self.degree.size}, Pseq(#{intervalles}, inf))"
|
79
|
+
end
|
80
|
+
end
|
63
81
|
|
64
82
|
def setDuree duree
|
65
83
|
if duree.nil?
|
66
84
|
then @dur=[4, [1]] ## valeur de base, tout en ronde, cantus
|
67
|
-
|
85
|
+
## firmus style, io!
|
68
86
|
else
|
69
87
|
if duree.is_a? Array
|
70
88
|
if duree.length == 2 and duree[1].is_a? Array
|
71
89
|
then
|
72
|
-
@dur=duree ## quelqu'un a fait un vrai objet en RTM
|
73
|
-
## notation
|
90
|
+
@dur=duree ## quelqu'un a fait un vrai objet en RTM notation
|
74
91
|
else
|
75
92
|
tmp = true
|
76
93
|
duree.each {
|
@@ -81,7 +98,7 @@ class Voix
|
|
81
98
|
}
|
82
99
|
if tmp then
|
83
100
|
@dur = [4, duree] ## on a juste mis un rythme pour la
|
84
|
-
|
101
|
+
## durée d'une mesure
|
85
102
|
else
|
86
103
|
begin
|
87
104
|
raise ArgumentError
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubySC
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- simdax
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|