Class: SC

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

Class Method Summary collapse

Class Method Details

.ask(valeurRequise, tpsAttente = 0.5) ⇒ Object



86
87
88
89
90
91
# File 'lib/rubySC.rb', line 86

def self.ask valeurRequise, tpsAttente=0.5
  Thread.new do @@server.run end
  self.send %Q[m.sendMsg("/coucou", #{valeurRequise.delete("\"")})]
  sleep tpsAttente
  return @@valeurReceptrice
end

.demarrerObject

ouvre le contact avec SuperCollider



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/rubySC.rb', line 32

def self.demarrer

  ## démarre SuperCollider


  if `which sclang` == "" then
    begin
      raise SystemExit
    rescue
      exit
    end
  end

  @@server= OSC::EMServer.new 3333

   @@server.add_method "/coucou" do |message|
     p "demande de valeur"
     @@valeurReceptrice=message.to_a
   end

  @@server.add_method "/portSC" do |message|
    @@portSuperCollider=message.to_a[0]
  end

  unless `ps -ef | grep "sclang" | grep -v "grep" | wc -l`.chomp.to_i > 0
    then
    system "sclang  #{File.join(File.dirname(__FILE__), "init.sc")} &"
    end

  Thread.new do @@server.run end
  sleep 1.5
  ## récupèrer l'adresse du port
  @@postMan= OSC::Client.new "localhost", @@portSuperCollider

  # variables et méthodes de fin
  @@listeVoix=Hash.new
  define_finalizer(self, Proc.new {self.quit})

end

.play(*args) ⇒ Object



123
124
125
126
127
128
129
130
131
132
133
# File 'lib/rubySC.rb', line 123

def self.play *args

  SC.updateScore

  if args[0]==nil then
    args=@@listeVoix.keys
    args.each do |voix|
      self.send "Pdef(\\#{voix.to_s}).play"
    end
  end
end

.quitObject



73
74
75
# File 'lib/rubySC.rb', line 73

def self.quit
  `killall sclang scsynth`
end

.remove(*args) ⇒ Object



145
146
147
148
149
150
151
152
153
# File 'lib/rubySC.rb', line 145

def self.remove *args
  if args[0]==nil then
    args=@@listeVoix.keys
  end
  args.each do |voix|
    self.stop voix
    @@listeVoix.delete voix
  end
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. À ne pas utiliser normalement.



82
83
84
# File 'lib/rubySC.rb', line 82

def self.send message
  @@postMan.send OSC::Message.new "/SC", message.to_s
end

.set(voix, arg, value) ⇒ Object

fonction semi-privée



95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/rubySC.rb', line 95

def self.set voix, arg, value
  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})"
  when "instrument"
    self.send "Pbindef(\\#{voix}, \\#{arg}, \\#{value})"
  else
    #self.send "Pbindef(\\#{voix}, \\#{arg}, #{value.to_s})"
  end
end

.stop(*args) ⇒ Object



136
137
138
139
140
141
142
143
# File 'lib/rubySC.rb', line 136

def self.stop *args
  if args[0]==nil then
    args=@@listeVoix.keys
  end
  args.each do |voix|
    self.send "Pdef(\\#{voix}).stop"
  end
end

.updateScoreObject



111
112
113
114
115
116
117
# File 'lib/rubySC.rb', line 111

def self.updateScore
  @@listeVoix.each do |key, value|
    value.instance_variables.each do |variable|
      self.set key, variable[1..-1], value.instance_variable_get(variable) unless value.instance_variable_get(variable).nil?
    end
  end
end