Class: Musique

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/rubySC.rb

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

Constructor Details

#initializeMusique

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

#quitObject



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 message
  @postMan.send OSC::Message.new "SC", message.to_s
end

#set(voix, options) ⇒ Object



76
77
78
79
# File 'lib/rubySC.rb', line 76

def set voix, options
 #   @listeVoix[voix.to_s].instance_variable_set "@#{var.to_s}", value
  @listeVoix[voix.to_s].set options
end

#stop(voix) ⇒ Object



62
63
64
# File 'lib/rubySC.rb', line 62

def stop voix
  self.send "Pdef(\\#{voix}).stop"
end

#stopAllObject



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

#updateScoreObject



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