rubySC 0.3.0 → 0.3.1

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.
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rubySC.gemspec
4
+ gemspec
@@ -1,5 +1,7 @@
1
1
  Copyright (c) 2014 simdax
2
2
 
3
+ MIT License
4
+
3
5
  Permission is hereby granted, free of charge, to any person obtaining
4
6
  a copy of this software and associated documentation files (the
5
7
  "Software"), to deal in the Software without restriction, including
data/README.md CHANGED
@@ -1,68 +1,29 @@
1
- # rubySC
1
+ # RubySC
2
2
 
3
- rubySC est une petite biliothèque qui complète à sa manière
4
- [SCruby](https://github.com/maca/scruby) en offrant une interface avec
5
- la bibliothèque JTLib de SuperCollider, cette dernière étant tournée
6
- vers le live coding, et le scriptage de partition plus que la
7
- recherche acoustique _per se_.
3
+ TODO: Write a gem description
8
4
 
9
5
  ## Installation
10
6
 
11
- vous devez avoir installé supercollider. Pour l'instant, je n'ai testé
12
- le programme que sur linux, et l'appel au programme est fait par une
13
- bonne grosse commande 'system'
7
+ Add this line to your application's Gemfile:
14
8
 
15
- ## Utilisation
9
+ gem 'rubySC'
16
10
 
17
- * Un objet "SC" s'occupe de l'interface OSC avec superCollider.
11
+ And then execute:
18
12
 
19
- `SC.demarrer`
13
+ $ bundle
20
14
 
21
- * On ajoute des "voix", c'est-à-dire un mélange de 7 paramètres
15
+ Or install it yourself as:
22
16
 
23
- * instrument : regardez les noms des synthdef dans "init.sc" (ils proviennent tous de recherches sur [SCcode](http://sccode.org/))
24
- * dur : les rythmes de votre mélodie
25
- * degree : les notes de votre mélodie
26
- * amp : le volume de la mélodie
27
- * octave : le registre dans lequel se situe votre voix
28
- * root : le micro-registre, utilisé pour faire des marches par exemple
29
- * scale : l'echelle utilisé pour votre mélodie
17
+ $ gem install rubySC
30
18
 
31
- `SC.set paramètre(hash), :nomVoix (ou "nomVoix")`
32
- plus précisément, avec "au clair de la lune" :
19
+ ## Usage
33
20
 
34
- ` SC.set ({ :degree => [0,0,0,1,2,1,0,2,1,1,0], :dur => [1, [1, 1, 1 , 1 ,2 ,2 ,1 ,1 ,1 ,1 ,4]]}) , :superius
35
- SC.set ({ :degree => [[0, 2, 4], [0,3,5], [0,2,4], [1,3,4], [0,2,4], [1,3,4], [0,2,4]], :dur => [1, [2,2,2,2,2,2,4]])}, :basse`
21
+ TODO: Write usage instructions here
36
22
 
37
- On peut ensuite modifier ces voix
38
-
39
- `SC.set ({ :amp => 0.2, :instrument => :wobble, :
40
-
41
- * arrêter ou reprenez vos voix :
42
-
43
- ` mu.stop :voixUn, :voixDeux ## arrête deux voix
44
- mu.play :voixUn ## reprend voixUn
45
- mu.remove :all ## arrête tout et supprime les voix `
46
-
47
- Les voix sont stockées dans 'listeVoix'
48
-
49
- SC.listeVoix.inspect
50
-
51
- * Deux modules stockent des fonctions plus intéressantes.
52
-
53
- 1. Partition, gère tout ce qui est transposition de masse
54
- 1. Marche, permet de transposer la mélodie d'une voix
55
- `Marche.diatonique :nomVoix, intervalleDeMarche, nbRepetitions`
56
- `Marche.diatonique :superius, 2, 2 ## deux marches par tierce ascendante`
57
-
58
- * Vous pouvez essayer de rajouter des instruments dans "init.sc", ou
59
- bien en apprenant SuperCollider, ou bien en cherchant par vous-mêmes
60
- des plugins sur le net.
61
-
62
- ==
63
-
64
-
65
- Copiez-le comme des gros gorets, qu'un truc un peu simple un jour
66
- surgisse de ce monde de fous de MAOistes qui veulent détruire le monde
67
- à force de complexitudinités...
23
+ ## Contributing
68
24
 
25
+ 1. Fork it ( http://github.com/<my-github-username>/rubySC/fork )
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,6 @@
1
+ {
2
+ "un" : {
3
+ "dur" : [5,4,2,1],
4
+ "degree" : [0,1,2]
5
+ }
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "un" {
3
+ "dur" : [5,4,2,1]
4
+ "degree" : [0,1,2]
5
+ }
6
+ }
@@ -0,0 +1,12 @@
1
+ require "rubySC"
2
+
3
+ p "enclenchage de la machine"
4
+
5
+ SC.demarrer
6
+
7
+ sleep (5)
8
+
9
+ p "chargement d'un fichier"
10
+
11
+ Partition.importer "score.json"
12
+
@@ -0,0 +1,9 @@
1
+ p "enclenchage de la machine"
2
+
3
+ SC.demarrer
4
+
5
+ sleep (2)
6
+
7
+ p "chargement d'un fichier"
8
+
9
+
File without changes
@@ -1,14 +1,161 @@
1
- #! /usr/bin/ruby
2
1
  # -*- coding: utf-8 -*-
3
2
 
4
- #load "#{File.join(File.dirname(__FILE__), "voix.rb")}"
5
- #load "#{File.join(File.dirname(__FILE__), "musique.rb")}"
3
+ require_relative "rubySC/voix.rb"
4
+ require_relative "rubySC/musique.rb"
6
5
 
7
6
  require 'active_support'
8
- require 'osc-ruby'
9
7
  require 'singleton'
8
+ require 'osc-ruby'
10
9
  include ObjectSpace
11
10
 
12
- load 'rubySC/SC.rb'
11
+ ## classe principale, singleton
12
+ #
13
+ # permet de créer des voix, et puis de modifier à la volée chacune
14
+ # d'entre elle. L'intérêt consiste plutôt dans certaines fonctions
15
+ # "d'ordre supérieur" qui permet de modifier plusieurs voix ensemble,
16
+ # et donc de créer de la logique musicale
17
+
18
+ class SC
19
+
20
+ cattr_reader :listeVoix
21
+
22
+ include Singleton
23
+
24
+ # ouvre le contact avec SuperCollider
25
+
26
+ def self.demarrer
27
+
28
+ ## démarre SuperCollider
29
+ #TODO : faire quelque chose d'un peu plus propre
30
+
31
+ unless p `ps -ef | grep "sclang" | grep -v "grep" | wc -l`.to_i > 0
32
+ system "sclang -u 57320 #{File.join(File.dirname(__FILE__), "init.sc")} &"
33
+ end
34
+
35
+ ## TODO : En théorie, récupèrer l'adresse du port, surtout si une autre instance de
36
+ ## SuperCollider existe...
37
+
38
+ # @server= OSC::EMServer.new 3333
39
+ # @server.add_method '/portSuperCollider' do |message|
40
+ # @portSuperCollider=message.message
41
+ # end
42
+ @postMan= OSC::Client.new "localhost", 57320 ## @portSuperCollider
43
+
44
+ # variables et méthodes d'utilisation
45
+
46
+ @@listeVoix=Hash.new
47
+ define_finalizer(self, Proc.new {self.quit})
48
+
49
+ end
50
+
51
+ ##TODO : trouver une manuère plus propre de quitter SuperCollider,
52
+ ##Jack a toujours l'air de se vexer...
53
+ def self.quit
54
+ `killall scsynth sclang`
55
+ end
56
+
57
+
58
+ # fonction permettant de communiquer directement avec SuperCollider,
59
+ # ce qui permet pour qui connaît la syntaxe sclang de faire des
60
+ # ajustages directs. À ne pas utiliser normalement.
61
+
62
+ def self.send message
63
+ @postMan.send OSC::Message.new "/SC", message.to_s
64
+ end
65
+
66
+ ## fonction semi-privée
67
+
68
+ def self.updateScore
69
+ @@listeVoix.each do |key, value|
70
+ value.instance_variables.each do |variable|
71
+ self.updater key, variable[1..-1], value.instance_variable_get(variable) unless value.instance_variable_get(variable).nil?
72
+ end
73
+ end
74
+ end
75
+
76
+ def self.updater voix, arg, value
77
+ case arg
78
+ when "dur"
79
+ self.send "Pbindef (\\#{voix}, \\#{arg}, Pseq(#{value}.convertRhythm, inf))"
80
+ when "degree"
81
+ self.send "Pbindef(\\#{voix}, \\#{arg}, Pseq(#{value}, inf))"
82
+ when "scale"
83
+ self.send "Pbindef(\\#{voix}, \\#{arg}, Scale.#{value})"
84
+ when "instrument"
85
+ self.send "Pbindef(\\#{voix}, \\#{arg}, \\#{value})"
86
+ else
87
+ self.send "Pbindef(\\#{voix}, \\#{arg}, #{value.to_s})"
88
+ end
89
+ end
90
+
91
+ # fonctions principales
92
+
93
+ public
94
+
95
+ def self.set options=nil, *voix
96
+
97
+ if voix.nil?
98
+ begin
99
+ raise ArgumentError
100
+ rescue
101
+ puts "vous devez donner un nom à votre (vos) voix"
102
+ end
103
+ end
104
+
105
+ if @@listeVoix.nil? then
106
+ begin
107
+ raise "WARNING ! Vous n'avez pas allumé superCollider ! \n On l'allume pour vous, porc"
108
+ rescue
109
+ self.demarrer
110
+ end
111
+ end
112
+
113
+ voix.each do |voix|
114
+ p voix.to_s
115
+ if voix==:all then
116
+ begin
117
+ raise ArgumentError
118
+ rescue
119
+ puts " vous ne pouvez appeler une voix \"all\", renommez-la'"
120
+ end
121
+ elsif @@listeVoix[voix.to_s].nil? then
122
+ @@listeVoix[voix.to_s]=Voix.new options
123
+ else
124
+ @@listeVoix[voix.to_s].set options
125
+ end
126
+ self.updateScore
127
+ self.play voix.to_s
128
+ end
129
+ end
130
+
131
+
132
+ def self.play *args
133
+ if args[0]==:all then
134
+ args=@@listeVoix.keys
135
+ end
136
+ args.each do |voix|
137
+ self.send "Pdef(\\#{voix.to_s}).play"
138
+ end
139
+ end
140
+
141
+ def self.stop *args
142
+ if args[0]==:all then
143
+ args=@@listeVoix.keys
144
+ end
145
+ args.each do |voix|
146
+ self.send "Pdef(\\#{voix}).stop"
147
+ end
148
+ end
13
149
 
14
150
 
151
+ def self.remove *args
152
+ if args[0]==:all then
153
+ args=@@listeVoix.keys
154
+ end
155
+ args.each do |voix|
156
+ self.stop voix
157
+ @@listeVoix.delete voix
158
+ end
159
+ end
160
+
161
+ end
@@ -0,0 +1,3 @@
1
+ module RubySC
2
+ VERSION = "0.3.1"
3
+ end
@@ -10,12 +10,8 @@ class Voix
10
10
 
11
11
  @root=nil
12
12
 
13
- if options["dur"].nil?
14
- then @dur=[1, [1]]
15
- else
16
- @dur=options["dur"]
17
- end
18
-
13
+ self.setDuree options["dur"]
14
+
19
15
  if options["degree"].nil?
20
16
  then @degree=Array.new(rand(6)) do |x| x=rand(12) end
21
17
  else
@@ -49,6 +45,38 @@ class Voix
49
45
 
50
46
  end
51
47
 
48
+ def setDuree duree
49
+ if duree.nil?
50
+ then @dur=[4, [1]] ## valeur de base, tout en ronde, cantus
51
+ ## firmus style, io!
52
+ else
53
+ if duree.is_a? Array
54
+ if duree.length == 2 and duree[1].is_a? Array
55
+ then
56
+ @dur=duree ## quelqu'un a fait un vrai objet en RTM
57
+ ## notation
58
+ else
59
+ tmp = true
60
+ duree.each {
61
+ |x|
62
+ unless x.is_a? Fixnum
63
+ tmp = false
64
+ end
65
+ }
66
+ if tmp then
67
+ @dur = [4, duree] ## on a juste mis un rythme pour
68
+ ## la durée d'une mesure
69
+ else
70
+ begin
71
+ raise ArgumentError
72
+ rescue "mauvais argument pour la durée"
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+
52
80
  def set options
53
81
  options.each do |key, value|
54
82
  if value.is_a? Symbol
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rubySC/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rubySC"
8
+ spec.version = RubySC::VERSION
9
+ spec.authors = ["simdax"]
10
+ spec.email = ["simoncornaz@gmail.com"]
11
+ spec.summary = %q{light music live_coding lib}
12
+ spec.description = %q{}
13
+ spec.homepage = "http://github.com/simdax/rubySC"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.5"
22
+ spec.add_development_dependency "rake", "~>0"
23
+
24
+ spec.add_runtime_dependency "activesupport", "~>4.0"
25
+ spec.add_runtime_dependency "osc-ruby", "~> 1.1"
26
+
27
+
28
+ end
metadata CHANGED
@@ -1,153 +1,125 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubySC
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - simdax
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-01-19 00:00:00.000000000 Z
12
+ date: 2014-01-29 00:00:00.000000000 Z
12
13
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: shoulda
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rdoc
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '3.12'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '3.12'
41
14
  - !ruby/object:Gem::Dependency
42
15
  name: bundler
43
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
44
18
  requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '1.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '1.0'
55
- - !ruby/object:Gem::Dependency
56
- name: jeweler
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
19
+ - - ~>
60
20
  - !ruby/object:Gem::Version
61
- version: 2.0.0
21
+ version: '1.5'
62
22
  type: :development
63
23
  prerelease: false
64
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
65
26
  requirements:
66
- - - "~>"
27
+ - - ~>
67
28
  - !ruby/object:Gem::Version
68
- version: 2.0.0
29
+ version: '1.5'
69
30
  - !ruby/object:Gem::Dependency
70
- name: simplecov
31
+ name: rake
71
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
72
34
  requirements:
73
- - - ">="
35
+ - - ~>
74
36
  - !ruby/object:Gem::Version
75
37
  version: '0'
76
38
  type: :development
77
39
  prerelease: false
78
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
79
42
  requirements:
80
- - - ">="
43
+ - - ~>
81
44
  - !ruby/object:Gem::Version
82
45
  version: '0'
83
46
  - !ruby/object:Gem::Dependency
84
- name: osc-ruby
47
+ name: activesupport
85
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
86
50
  requirements:
87
- - - ">="
51
+ - - ~>
88
52
  - !ruby/object:Gem::Version
89
- version: '0'
53
+ version: '4.0'
90
54
  type: :runtime
91
55
  prerelease: false
92
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
93
58
  requirements:
94
- - - ">="
59
+ - - ~>
95
60
  - !ruby/object:Gem::Version
96
- version: '0'
61
+ version: '4.0'
97
62
  - !ruby/object:Gem::Dependency
98
- name: active_support
63
+ name: osc-ruby
99
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
100
66
  requirements:
101
- - - ">="
67
+ - - ~>
102
68
  - !ruby/object:Gem::Version
103
- version: '0'
69
+ version: '1.1'
104
70
  type: :runtime
105
71
  prerelease: false
106
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
107
74
  requirements:
108
- - - ">="
75
+ - - ~>
109
76
  - !ruby/object:Gem::Version
110
- version: '0'
111
- description: Petite bibliotheque permettant une communication simple entre SuperCollider/JITlib
112
- et Ruby. Se concentre avant tout sur les capacités logiques de création de mélodies
113
- plus que sur la génération de son. Nécessite d'installer supercollider sur l'ordinateur
114
- (=> sudo aptitude install supercollider sur debian par exemple)"
115
- email: simoncornaz@gmail.com
77
+ version: '1.1'
78
+ description: ''
79
+ email:
80
+ - simoncornaz@gmail.com
116
81
  executables: []
117
82
  extensions: []
118
- extra_rdoc_files:
119
- - LICENSE.txt
120
- - README.md
83
+ extra_rdoc_files: []
121
84
  files:
85
+ - .gitignore
86
+ - Gemfile
122
87
  - LICENSE.txt
123
88
  - README.md
89
+ - Rakefile
90
+ - examples/score.json
91
+ - examples/score.json~
92
+ - examples/testMinimal.rb
93
+ - examples/testMinimal.rb~
94
+ - lib/init.sc
124
95
  - lib/rubySC.rb
125
- - lib/rubySC/SC.rb
126
- - lib/rubySC/init.sc
127
96
  - lib/rubySC/musique.rb
97
+ - lib/rubySC/version.rb
128
98
  - lib/rubySC/voix.rb
99
+ - rubySC.gemspec
129
100
  homepage: http://github.com/simdax/rubySC
130
101
  licenses:
131
102
  - MIT
132
- metadata: {}
133
103
  post_install_message:
134
104
  rdoc_options: []
135
105
  require_paths:
136
106
  - lib
137
107
  required_ruby_version: !ruby/object:Gem::Requirement
108
+ none: false
138
109
  requirements:
139
- - - ">="
110
+ - - ! '>='
140
111
  - !ruby/object:Gem::Version
141
112
  version: '0'
142
113
  required_rubygems_version: !ruby/object:Gem::Requirement
114
+ none: false
143
115
  requirements:
144
- - - ">="
116
+ - - ! '>='
145
117
  - !ruby/object:Gem::Version
146
118
  version: '0'
147
119
  requirements: []
148
120
  rubyforge_project:
149
- rubygems_version: 2.2.0
121
+ rubygems_version: 1.8.23
150
122
  signing_key:
151
- specification_version: 4
152
- summary: simple and light music livecoding library
123
+ specification_version: 3
124
+ summary: light music live_coding lib
153
125
  test_files: []
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: fe355c7d39f890bfda4ef3f5706f45b470c1fb2e
4
- data.tar.gz: 772e38142ab8a20eca8f5f25866f8fa80af7f6d3
5
- SHA512:
6
- metadata.gz: d13d72cf4c4b3f47e3bec7242f0f939438f98d66e5ea9d86d216ad602feedbec63c34a3be29021481bc0cda4231941cd0b493183ce0b59d32ada65a885005297
7
- data.tar.gz: 92403b36cb57b01804df81a51be90d816b04d72b079a881040e78c664baf82a5b741b6ad4463c4553a14d147edf0ae90b550cfcf6792b8dfdf64602e3c49ecf6
@@ -1,156 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require_relative "voix.rb"
4
- require_relative "musique.rb"
5
-
6
- ## classe principale, singleton
7
- #
8
- # permet de créer des voix, et puis de modifier à la volée chacune
9
- # d'entre elle. L'intérêt consiste plutôt dans certaines fonctions
10
- # "d'ordre supérieur" qui permet de modifier plusieurs voix ensemble,
11
- # et donc de créer de la logique musicale
12
-
13
- class SC
14
-
15
- cattr_reader :listeVoix
16
-
17
- include Singleton
18
-
19
- # ouvre le contact avec SuperCollider
20
-
21
- def self.demarrer
22
-
23
- ## démarre SuperCollider
24
- #TODO : faire quelque chose d'un peu plus propre
25
-
26
- unless p `ps -ef | grep "sclang" | grep -v "grep" | wc -l`.to_i > 0
27
- system "sclang -u 57320 #{File.join(File.dirname(__FILE__), "init.sc")} &"
28
- end
29
-
30
- ## TODO : En théorie, récupèrer l'adresse du port, surtout si une autre instance de
31
- ## SuperCollider existe...
32
-
33
- # @server= OSC::EMServer.new 3333
34
- # @server.add_method '/portSuperCollider' do |message|
35
- # @portSuperCollider=message.message
36
- # end
37
- @postMan= OSC::Client.new "localhost", 57320 ## @portSuperCollider
38
-
39
- # variables et méthodes d'utilisation
40
-
41
- @@listeVoix=Hash.new
42
- define_finalizer(self, Proc.new {self.quit})
43
-
44
- end
45
-
46
- ##TODO : trouver une manuère plus propre de quitter SuperCollider,
47
- ##Jack a toujours l'air de se vexer...
48
- def self.quit
49
- `killall scsynth sclang`
50
- end
51
-
52
-
53
- # fonction permettant de communiquer directement avec SuperCollider,
54
- # ce qui permet pour qui connaît la syntaxe sclang de faire des
55
- # ajustages directs. À ne pas utiliser normalement.
56
-
57
- def self.send message
58
- @postMan.send OSC::Message.new "/SC", message.to_s
59
- end
60
-
61
- ## fonction semi-privée
62
-
63
- def self.updateScore
64
- @@listeVoix.each do |key, value|
65
- value.instance_variables.each do |variable|
66
- self.updater key, variable[1..-1], value.instance_variable_get(variable) unless value.instance_variable_get(variable).nil?
67
- end
68
- end
69
- end
70
-
71
- def self.updater voix, arg, value
72
- case arg
73
- when "dur"
74
- self.send "Pbindef (\\#{voix}, \\#{arg}, Pseq(#{value}.convertRhythm, inf))"
75
- when "degree"
76
- self.send "Pbindef(\\#{voix}, \\#{arg}, Pseq(#{value}, inf))"
77
- when "scale"
78
- self.send "Pbindef(\\#{voix}, \\#{arg}, Scale.#{value})"
79
- when "instrument"
80
- self.send "Pbindef(\\#{voix}, \\#{arg}, \\#{value})"
81
- else
82
- self.send "Pbindef(\\#{voix}, \\#{arg}, #{value.to_s})"
83
- end
84
- end
85
-
86
- # fonctions principales
87
-
88
- public
89
-
90
- def self.set options=nil, *voix
91
-
92
- if voix.nil?
93
- begin
94
- raise ArgumentError
95
- rescue
96
- puts "vous devez donner un nom à votre (vos) voix"
97
- end
98
- end
99
-
100
- if @@listeVoix.nil? then
101
- begin
102
- raise "WARNING ! Vous n'avez pas allumé superCollider ! \n On l'allume pour vous, porc"
103
- rescue
104
- self.demarrer
105
- end
106
- end
107
-
108
- voix.each do |voix|
109
- p voix.to_s
110
- if voix==:all then
111
- begin
112
- raise ArgumentError
113
- rescue
114
- puts " vous ne pouvez appeler une voix \"all\", renommez-la'"
115
- end
116
- elsif @@listeVoix[voix.to_s].nil? then
117
- @@listeVoix[voix.to_s]=Voix.new options
118
- else
119
- @@listeVoix[voix.to_s].set options
120
- end
121
- self.updateScore
122
- self.play voix.to_s
123
- end
124
- end
125
-
126
-
127
- def self.play *args
128
- if args[0]==:all then
129
- args=@@listeVoix.keys
130
- end
131
- args.each do |voix|
132
- self.send "Pdef(\\#{voix.to_s}).play"
133
- end
134
- end
135
-
136
- def self.stop *args
137
- if args[0]==:all then
138
- args=@@listeVoix.keys
139
- end
140
- args.each do |voix|
141
- self.send "Pdef(\\#{voix}).stop"
142
- end
143
- end
144
-
145
-
146
- def self.remove *args
147
- if args[0]==:all then
148
- args=@@listeVoix.keys
149
- end
150
- args.each do |voix|
151
- self.stop voix
152
- @@listeVoix.delete voix
153
- end
154
- end
155
-
156
- end