rubySC 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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