Class: Musique
Overview
classe principale, singleton
permet de créer des voix, et puis de modifier à la volée chacune d’entre elle. L’intérêt consiste plutôt dans certaines fonctions “d’ordre supérieur” qui permet de modifier plusieurs voix ensemble, et donc de créer de la logique musicale
Instance Method Summary collapse
-
#creer(voix) ⇒ Object
fonction principale.
- #echelle(echelle) ⇒ Object
-
#initialize ⇒ Musique
constructor
ouvre le contact avec SuperCollider.
- #multi(methode, *args) ⇒ Object
- #play(voix) ⇒ Object
- #quit ⇒ Object
-
#send(message) ⇒ Object
fonction permettant de communiquer directement avec SuperCollider, ce qui permet pour qui connaît la syntaxe sclang de faire des ajustages directs.
- #set(voix, options) ⇒ Object
- #stop(voix) ⇒ Object
- #stopAll ⇒ Object
- #updater(voix, arg, value) ⇒ Object
- #updateScore ⇒ Object
Constructor Details
#initialize ⇒ Musique
ouvre le contact avec SuperCollider
23 24 25 26 27 28 29 30 |
# File 'lib/rubySC.rb', line 23 def initialize unless p `ps -ef | grep "sclang" | grep -v "grep" | wc -l`.to_i > 0 system "sclang -u 57119 #{File.join(File.dirname(__FILE__), "init.sc")} &" end @postMan= OSC::Client.new "localhost", 57119 @listeVoix=Hash.new define_finalizer(self, Proc.new {self.quit}) end |
Instance Method Details
#creer(voix) ⇒ Object
fonction principale
42 43 44 45 |
# File 'lib/rubySC.rb', line 42 def creer voix @listeVoix[voix]=Voix.new self.play voix end |
#echelle(echelle) ⇒ Object
81 82 83 84 85 |
# File 'lib/rubySC.rb', line 81 def echelle echelle @listeVoix.each_key do |voix| self.set voix, {:scale => echelle} end end |
#multi(methode, *args) ⇒ Object
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/rubySC.rb', line 47 def multi methode, *args if args[0]=="All" then args=@listeVoix.keys end args.each do |voix| if @listeVoix.has_key?(voix) then self.method(methode).call voix end end end |
#play(voix) ⇒ Object
58 59 60 |
# File 'lib/rubySC.rb', line 58 def play voix self.send "Pdef(\\#{voix}).play" end |
#quit ⇒ Object
110 111 112 |
# File 'lib/rubySC.rb', line 110 def quit `killall scsynth sclang` end |
#send(message) ⇒ Object
fonction permettant de communiquer directement avec SuperCollider, ce qui permet pour qui connaît la syntaxe sclang de faire des ajustages directs
36 37 38 |
# File 'lib/rubySC.rb', line 36 def send @postMan.send OSC::Message.new "SC", .to_s end |
#set(voix, options) ⇒ Object
76 77 78 79 |
# File 'lib/rubySC.rb', line 76 def set voix, # @listeVoix[voix.to_s].instance_variable_set "@#{var.to_s}", value @listeVoix[voix.to_s].set end |
#stop(voix) ⇒ Object
62 63 64 |
# File 'lib/rubySC.rb', line 62 def stop voix self.send "Pdef(\\#{voix}).stop" end |
#stopAll ⇒ Object
68 69 70 71 72 73 |
# File 'lib/rubySC.rb', line 68 def stopAll @listeVoix.each_key do |voix| puts voix self.stop voix end end |
#updater(voix, arg, value) ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/rubySC.rb', line 95 def updater voix, arg, value if voix.is_a? String then case arg when "dur" self.send "Pbindef (\\#{voix}, \\#{arg}, Pseq(#{value}.convertRhythm, inf))" when "degree" self.send "Pbindef(\\#{voix}, \\#{arg}, Pseq(#{value}, inf))" when "scale" self.send "Pbindef(\\#{voix}, \\#{arg}, Scale.#{value})" else self.send "Pbindef(\\#{voix}, \\#{arg}, #{value})" end end end |
#updateScore ⇒ Object
87 88 89 90 91 92 93 |
# File 'lib/rubySC.rb', line 87 def updateScore @listeVoix.each do |key, value| value.instance_variables.each do |variable| self.updater key, variable[1..-1], value.instance_variable_get(variable) end end end |