rubySC 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 192ed2fc0c38281ca89da8d6e75d16fba4b447a3
4
- data.tar.gz: 670103c666d4b8ddeb84f38e5ad24f2d94e35cbd
3
+ metadata.gz: 6858da494fb27f379946590d24da5089a5f2b6fd
4
+ data.tar.gz: 55a8944fa1c9612bc2a62a9abafbc22c1d194717
5
5
  SHA512:
6
- metadata.gz: f10a28132c701d40ca72d10d8cfe1f3030439b1dcd5d6359d75212360a010627ec5429d2b2a862dc3dc710aa8f678e511b47d96f226e5de3dbf66758e41767fb
7
- data.tar.gz: 27a40182ef4c1209ae178069727f693a7528fee78aff20a68c348d094da5d6eba21ced4450df777f91316012ed85b7dae8196476d4a5f815f6227c6bf17cab60
6
+ metadata.gz: 0a8e9a6e085f7bfd3bcf687298a3b82b5489b0ca71c1f434446c6a0ab88bd1ede09589218fc252f24e68e850fbb47ab7b98dc426a9fb1a32e54b0d6ad20178db
7
+ data.tar.gz: e6c1b76395081c586aabcdae5f026f7eb369e5c54d662f16d692d4287ba8b1cde1a99cda5d2d0ad421bf660b901826d742ac25fb076b393a0c37185e5a4488ef
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ *.wav
1
2
  *.gem
2
3
  *.rbc
3
4
  .bundle
@@ -1,9 +1,10 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- require_relative "rubySC/voix.rb"
4
- require_relative "rubySC/musique.rb"
5
- require_relative "rubySC/melodie.rb"
6
- require_relative "rubySC/contrepoint.rb"
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]==:all then
146
+ if args[0]==nil then
146
147
  args=@@listeVoix.keys
147
148
  end
148
149
  args.each do |voix|
@@ -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 ({ :degree=> tmp })
43
+ y.set ({ "degree"=> tmp })
12
44
  }
13
45
 
14
46
  Thread.new do
@@ -0,0 +1,10 @@
1
+ def deuxVoix
2
+
3
+ a=Voix.new "voixUne", ({"degree"=> creerMelodie, "instrument" => "sax"})
4
+ b=Voix.new "voixDeux"
5
+ b.degree = harmoniser a.degree
6
+
7
+ SC.updateScore
8
+ SC.play
9
+
10
+ end
@@ -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
+
@@ -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
- Pavanne=[2,1,1]
19
- Syncopette=[1,2,1]
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
 
@@ -1,3 +1,3 @@
1
1
  module RubySC
2
- VERSION = "0.5.1"
2
+ VERSION = "0.6.0"
3
3
  end
@@ -4,8 +4,8 @@
4
4
 
5
5
  class Voix
6
6
 
7
- attr_accessor :information, :dur, :degree, :octave, :marche, :scale, :amp, :instrument, :name
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.5.1
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-27 00:00:00.000000000 Z
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/melodie.rb
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
Binary file
@@ -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