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



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

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



31
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
# File 'lib/rubySC.rb', line 31

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



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

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



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

def self.quit
  `killall sclang scsynth`
end

.remove(*args) ⇒ Object



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

def self.remove *args
  if args[0]==:all 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.



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

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

.set(voix, arg, value) ⇒ Object

fonction semi-privée



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

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



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

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



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

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