rubySC 0.5.1 → 0.6.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/.gitignore +1 -0
- data/lib/rubySC.rb +6 -5
- data/lib/rubySC/contrepoint.rb +33 -1
- data/lib/rubySC/helper.rb +10 -0
- data/lib/rubySC/melodie/algos.rb +31 -0
- data/lib/rubySC/melodie/melodie.rb +177 -0
- data/lib/rubySC/musique.rb +6 -7
- data/lib/rubySC/version.rb +1 -1
- data/lib/rubySC/voix.rb +7 -2
- metadata +5 -4
- data/lib/rubySC/bip.wav +0 -0
- data/lib/rubySC/melodie.rb +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6858da494fb27f379946590d24da5089a5f2b6fd
|
4
|
+
data.tar.gz: 55a8944fa1c9612bc2a62a9abafbc22c1d194717
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a8e9a6e085f7bfd3bcf687298a3b82b5489b0ca71c1f434446c6a0ab88bd1ede09589218fc252f24e68e850fbb47ab7b98dc426a9fb1a32e54b0d6ad20178db
|
7
|
+
data.tar.gz: e6c1b76395081c586aabcdae5f026f7eb369e5c54d662f16d692d4287ba8b1cde1a99cda5d2d0ad421bf660b901826d742ac25fb076b393a0c37185e5a4488ef
|
data/.gitignore
CHANGED
data/lib/rubySC.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
require_relative
|
3
|
+
Dir.glob("rubySC/**/*") { |file|
|
4
|
+
|
5
|
+
if File.file? file
|
6
|
+
require_relative file end
|
7
|
+
}
|
7
8
|
|
8
9
|
require 'active_support'
|
9
10
|
require 'singleton'
|
@@ -142,7 +143,7 @@ class SC
|
|
142
143
|
end
|
143
144
|
|
144
145
|
def self.remove *args
|
145
|
-
if args[0]
|
146
|
+
if args[0]==nil then
|
146
147
|
args=@@listeVoix.keys
|
147
148
|
end
|
148
149
|
args.each do |voix|
|
data/lib/rubySC/contrepoint.rb
CHANGED
@@ -1,3 +1,35 @@
|
|
1
|
+
def consonnancesPossibles consonnances, noteM, noteH, ecartMax
|
2
|
+
|
3
|
+
tmp=consonnances.reject {|x|
|
4
|
+
((noteM+x) - noteH).abs > ecartMax
|
5
|
+
}
|
6
|
+
|
7
|
+
if tmp==[] then
|
8
|
+
p "attention écart à la règle !"
|
9
|
+
tmp=consonnancesPossibles consonnances, noteM, noteH, ecartMax+1
|
10
|
+
end
|
11
|
+
|
12
|
+
return tmp
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
def harmoniser melodie, consonnances=[0,2,4,5], ecartMax=2
|
17
|
+
|
18
|
+
harmo=Array.new (melodie.size)
|
19
|
+
harmo[0]=melodie[0]+consonnances.sample
|
20
|
+
harmo[1..-1].map.with_index(1) { |a,i|
|
21
|
+
harmo[i]=melodie[i]+(consonnancesPossibles consonnances, melodie[i], harmo[i-1], ecartMax).sample
|
22
|
+
}
|
23
|
+
|
24
|
+
p "mel = #{melodie}"
|
25
|
+
p "harmo = #{harmo}"
|
26
|
+
|
27
|
+
return harmo
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
|
1
33
|
def bicinium consonances=[-2,2]
|
2
34
|
|
3
35
|
a = Voix.new "cantusFirmus"
|
@@ -8,7 +40,7 @@ a.play ; b.play
|
|
8
40
|
|
9
41
|
l= lambda { |x, y|
|
10
42
|
tmp=harmoniser x.degree, consonances
|
11
|
-
y.set ({
|
43
|
+
y.set ({ "degree"=> tmp })
|
12
44
|
}
|
13
45
|
|
14
46
|
Thread.new do
|
@@ -0,0 +1,31 @@
|
|
1
|
+
def intervallesMel melodie
|
2
|
+
|
3
|
+
tmp=melodie.each_with_index.map{ |a, i|
|
4
|
+
if melodie[i+1]
|
5
|
+
then melodie[i+1]-a
|
6
|
+
end
|
7
|
+
}
|
8
|
+
|
9
|
+
tmp[0..-2]
|
10
|
+
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
def intervallesBoucle melodie
|
15
|
+
|
16
|
+
intervallesMel melodie << melodie[0]-melodie[-1]
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
def intervallesAbs melodie
|
21
|
+
|
22
|
+
(intervallesMel melodie).map { :abs }
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
def intervallesRel melodie, note=0
|
27
|
+
|
28
|
+
ptDepart = melodie[note]
|
29
|
+
return melodie.map { |x|
|
30
|
+
x-= ptDepart }
|
31
|
+
end
|
@@ -0,0 +1,177 @@
|
|
1
|
+
class Melodie
|
2
|
+
|
3
|
+
attr_reader :dessinRythmique, :dessinMelodique
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@dessinMelodique = creerMelodie
|
7
|
+
@dessinRythmique = creerRythme @dessinMelodique
|
8
|
+
@@nbMel=0
|
9
|
+
end
|
10
|
+
|
11
|
+
def mettreVoix instrument="default"
|
12
|
+
@@nbMel+=1
|
13
|
+
Voix.new "melodie#{@@nbMel}",
|
14
|
+
({:instrument => instrument,
|
15
|
+
:degree => @dessinMelodique,
|
16
|
+
:dur => @dessinRythmique})
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
def creerMelodie nbNote=rand(10..30)
|
24
|
+
|
25
|
+
Array.new (nbNote) do |note|
|
26
|
+
note=[0,0,1,1,2,3,3,3,3,4,4,4,4,5,6].sample #manière un peu bourrine de "pondérer" les notes possibles
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def transpose melodie, deCombien
|
31
|
+
melodie.map { |e| e+= deCombien }
|
32
|
+
end
|
33
|
+
|
34
|
+
def melodieCachee melUn, melDeux
|
35
|
+
|
36
|
+
i=0
|
37
|
+
tmpDeux=melUn.map {|x|
|
38
|
+
if x == melDeux[i] then i +=1 ; true
|
39
|
+
else false
|
40
|
+
end
|
41
|
+
}
|
42
|
+
p tmpDeux
|
43
|
+
|
44
|
+
if tmpDeux.count(true) == melDeux.size
|
45
|
+
then tmpDeux
|
46
|
+
else nil end
|
47
|
+
end
|
48
|
+
|
49
|
+
#grand moment de désarroi algorithmique
|
50
|
+
|
51
|
+
# def creerMelodie squeletteRythmique, urMelodie=["c","b","a","g","f","e","d","c"]
|
52
|
+
|
53
|
+
|
54
|
+
# squeletteRythmique.last=3 #déjà ça c'est réglé
|
55
|
+
# squeletteRythmique.reverse!
|
56
|
+
|
57
|
+
# melodie=[]
|
58
|
+
|
59
|
+
# notePrincipale
|
60
|
+
# noteSecondaire
|
61
|
+
# noteOrnementale
|
62
|
+
|
63
|
+
|
64
|
+
# UnVersUn = lambda { noteOrnementale+=1}
|
65
|
+
# UnVersDeux = lambda { |a| orner squeletteRythmique(a.index-noteOrnementale) }
|
66
|
+
# UnVersTrois
|
67
|
+
# DeuxversUn
|
68
|
+
# DeuxVersDeux
|
69
|
+
# DeuxVersTrois
|
70
|
+
# TroisVersUn
|
71
|
+
# TRoisVersDeux
|
72
|
+
# TroisVErsTRois
|
73
|
+
|
74
|
+
# niveauUn=squeletteRythmique.each_cons(2) { |a,b|
|
75
|
+
# case b
|
76
|
+
# when 1
|
77
|
+
# case a
|
78
|
+
# when 1
|
79
|
+
# UnVersUn.call
|
80
|
+
# when 2
|
81
|
+
# UnVersDeux.call
|
82
|
+
# when 3
|
83
|
+
# UnVersTrois.call
|
84
|
+
# end
|
85
|
+
# when 2
|
86
|
+
# case a
|
87
|
+
# when 1
|
88
|
+
# DeuxVersUn.call
|
89
|
+
# when 2
|
90
|
+
# DeuxVersDeux.call
|
91
|
+
# when 3
|
92
|
+
# DeuxVersTrois.call
|
93
|
+
# end
|
94
|
+
# when 3
|
95
|
+
# case a
|
96
|
+
# when 1
|
97
|
+
# TroisVersUn.call
|
98
|
+
# when 2
|
99
|
+
# TroisVersDeux.call
|
100
|
+
# when 3
|
101
|
+
# TroisVersTrois.call
|
102
|
+
# end
|
103
|
+
|
104
|
+
|
105
|
+
|
106
|
+
# melodie.reverse!
|
107
|
+
|
108
|
+
|
109
|
+
# end
|
110
|
+
|
111
|
+
def rejoindre noteDepart, noteArrivee, nbTemps
|
112
|
+
|
113
|
+
intervalle=(noteArrivee-noteDepart).abs
|
114
|
+
if intervalle == nbTemps then
|
115
|
+
p'jkl'
|
116
|
+
tmp =(Range.new noteDepart+1, noteArrivee-1).to_a
|
117
|
+
else
|
118
|
+
p'hj'
|
119
|
+
tmp=[]
|
120
|
+
nbTemps.times { |x|
|
121
|
+
tmp<<noteDepart+2*(x+1)
|
122
|
+
}
|
123
|
+
end
|
124
|
+
return tmp
|
125
|
+
end
|
126
|
+
|
127
|
+
|
128
|
+
def orner note, nbNote
|
129
|
+
|
130
|
+
appogiature = lambda { tmp=[note+1, note] }
|
131
|
+
mordant = lambda { tmp=[note, note-1, note] }
|
132
|
+
trille = lambda { tmp= [note-1, note, note+1, note] }
|
133
|
+
|
134
|
+
case nbNote
|
135
|
+
when 0
|
136
|
+
return note
|
137
|
+
when 1
|
138
|
+
return appogiature.call
|
139
|
+
when 2
|
140
|
+
return mordant.call
|
141
|
+
when 3
|
142
|
+
return trille.call
|
143
|
+
end
|
144
|
+
if nbNote > 3
|
145
|
+
p "erreur !"
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
149
|
+
|
150
|
+
|
151
|
+
|
152
|
+
#analyse rythmique basique
|
153
|
+
# si intervalle grand => pt d'appui
|
154
|
+
# si note conjointes et/ou similaire => plus rapide
|
155
|
+
#pour l'instant, pas de note d'approche
|
156
|
+
|
157
|
+
|
158
|
+
def creerRythme melodie=nil #analyse
|
159
|
+
|
160
|
+
if melodie.nil?
|
161
|
+
return RubySC_CONST::Rythmes.sample
|
162
|
+
end
|
163
|
+
|
164
|
+
rythme = intervallesMel melodie
|
165
|
+
rythme.map! { |inter|
|
166
|
+
case inter.abs
|
167
|
+
when 1
|
168
|
+
note = 1
|
169
|
+
|
170
|
+
else
|
171
|
+
note=2
|
172
|
+
end
|
173
|
+
}
|
174
|
+
rythme << 4
|
175
|
+
|
176
|
+
end
|
177
|
+
|
data/lib/rubySC/musique.rb
CHANGED
@@ -11,17 +11,16 @@ module RubySC_CONST
|
|
11
11
|
|
12
12
|
## Je n'ai mis que les rythmes qui me semblaient
|
13
13
|
## les plus connus
|
14
|
-
|
14
|
+
Rythmes = []
|
15
15
|
|
16
16
|
## Rythmes à 3 notes
|
17
|
+
Rythmes << Pavanne=[2,1,1]
|
18
|
+
Rythmes << Syncopette=[1,2,1]
|
17
19
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
Sicilienne=[3,1,2]
|
22
|
-
Chabada=[3,2,1]
|
20
|
+
Rythmes << Sicilienne=[3,1,2]
|
21
|
+
Rythmes << Chabada=[3,2,1]
|
23
22
|
|
24
|
-
Tresillo=[3,3,2]
|
23
|
+
Rythmes << Tresillo=[3,3,2]
|
25
24
|
|
26
25
|
#########
|
27
26
|
|
data/lib/rubySC/version.rb
CHANGED
data/lib/rubySC/voix.rb
CHANGED
@@ -4,8 +4,8 @@
|
|
4
4
|
|
5
5
|
class Voix
|
6
6
|
|
7
|
-
attr_accessor :information, :
|
8
|
-
|
7
|
+
attr_accessor :information, :degree, :octave, :marche, :scale, :amp, :instrument, :name
|
8
|
+
attr_reader :dur
|
9
9
|
def initialize nom=nil, options={}
|
10
10
|
|
11
11
|
@information=nil ## cette information sert juste à stocker tout ce
|
@@ -54,6 +54,9 @@ class Voix
|
|
54
54
|
@instrument=options["instrument"].to_s
|
55
55
|
end
|
56
56
|
|
57
|
+
if options[:dur]
|
58
|
+
self.setDuree options[:dur]
|
59
|
+
end
|
57
60
|
self.setMarche options["marche"]
|
58
61
|
SC.updateScore
|
59
62
|
|
@@ -114,6 +117,8 @@ class Voix
|
|
114
117
|
end
|
115
118
|
end
|
116
119
|
end
|
120
|
+
|
121
|
+
SC.updateScore
|
117
122
|
end
|
118
123
|
|
119
124
|
def stop
|
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.6.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-
|
11
|
+
date: 2014-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -98,9 +98,10 @@ files:
|
|
98
98
|
- VERSION
|
99
99
|
- lib/init.sc
|
100
100
|
- lib/rubySC.rb
|
101
|
-
- lib/rubySC/bip.wav
|
102
101
|
- lib/rubySC/contrepoint.rb
|
103
|
-
- lib/rubySC/
|
102
|
+
- lib/rubySC/helper.rb
|
103
|
+
- lib/rubySC/melodie/algos.rb
|
104
|
+
- lib/rubySC/melodie/melodie.rb
|
104
105
|
- lib/rubySC/musique.rb
|
105
106
|
- lib/rubySC/version.rb
|
106
107
|
- lib/rubySC/voix.rb
|
data/lib/rubySC/bip.wav
DELETED
Binary file
|
data/lib/rubySC/melodie.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
def creerMelodie nbNote=rand(10..30)
|
2
|
-
|
3
|
-
Array.new (nbNote) do |note|
|
4
|
-
note=[0,0,1,1,2,3,3,3,3,4,4,4,4,5,6].sample #manière un peu bourrine de "pondérer" les notes possibles
|
5
|
-
end
|
6
|
-
end
|
7
|
-
|
8
|
-
#analyse rythmique basique
|
9
|
-
# si intervalle grand => pt d'appui
|
10
|
-
# si note conjointes et/ou similaire => plus rapide
|
11
|
-
#pour l'instant, pas de note d'approche
|
12
|
-
|
13
|
-
def intervallesMel melodie
|
14
|
-
|
15
|
-
tmp=melodie.each_with_index.map{ |a, i|
|
16
|
-
if melodie[i+1]
|
17
|
-
then melodie[i+1]-a
|
18
|
-
end
|
19
|
-
}
|
20
|
-
tmp[0..-2]
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
|
-
def creerRythme melodie #analyse
|
25
|
-
|
26
|
-
rythme = intervallesMel melodie
|
27
|
-
rythme.map! { |inter|
|
28
|
-
if inter.abs > 1
|
29
|
-
note= 2
|
30
|
-
else
|
31
|
-
note=1
|
32
|
-
end
|
33
|
-
}
|
34
|
-
rythme << 3
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
def harmoniser melodie, consonnances
|
39
|
-
|
40
|
-
harmonisation= melodie.map do |note|
|
41
|
-
note+=consonnances.sample
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|