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 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