rubySC 0.2.0 → 0.3.0
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.
- checksums.yaml +7 -0
- data/lib/rubySC.rb +3 -143
- data/lib/rubySC/SC.rb +156 -0
- data/lib/{init.sc → rubySC/init.sc} +0 -0
- data/lib/rubySC/musique.rb +111 -0
- data/lib/{voix.rb → rubySC/voix.rb} +29 -10
- metadata +25 -43
- data/lib/musique.rb +0 -46
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fe355c7d39f890bfda4ef3f5706f45b470c1fb2e
|
4
|
+
data.tar.gz: 772e38142ab8a20eca8f5f25866f8fa80af7f6d3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d13d72cf4c4b3f47e3bec7242f0f939438f98d66e5ea9d86d216ad602feedbec63c34a3be29021481bc0cda4231941cd0b493183ce0b59d32ada65a885005297
|
7
|
+
data.tar.gz: 92403b36cb57b01804df81a51be90d816b04d72b079a881040e78c664baf82a5b741b6ad4463c4553a14d147edf0ae90b550cfcf6792b8dfdf64602e3c49ecf6
|
data/lib/rubySC.rb
CHANGED
@@ -1,154 +1,14 @@
|
|
1
1
|
#! /usr/bin/ruby
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
|
4
|
-
load "#{File.join(File.dirname(__FILE__), "voix.rb")}"
|
5
|
-
load "#{File.join(File.dirname(__FILE__), "musique.rb")}"
|
4
|
+
#load "#{File.join(File.dirname(__FILE__), "voix.rb")}"
|
5
|
+
#load "#{File.join(File.dirname(__FILE__), "musique.rb")}"
|
6
6
|
|
7
7
|
require 'active_support'
|
8
8
|
require 'osc-ruby'
|
9
|
-
#require 'osc-ruby/em_server'
|
10
9
|
require 'singleton'
|
11
10
|
include ObjectSpace
|
12
11
|
|
12
|
+
load 'rubySC/SC.rb'
|
13
13
|
|
14
14
|
|
15
|
-
## classe principale, singleton
|
16
|
-
#
|
17
|
-
# permet de créer des voix, et puis de modifier à la volée chacune
|
18
|
-
# d'entre elle. L'intérêt consiste plutôt dans certaines fonctions
|
19
|
-
# "d'ordre supérieur" qui permet de modifier plusieurs voix ensemble,
|
20
|
-
# et donc de créer de la logique musicale
|
21
|
-
|
22
|
-
class SC
|
23
|
-
|
24
|
-
cattr_reader :listeVoix
|
25
|
-
include Partition, Marche
|
26
|
-
|
27
|
-
# ouvre le contact avec SuperCollider
|
28
|
-
|
29
|
-
def self.demarrer
|
30
|
-
|
31
|
-
## démarre SuperCollider
|
32
|
-
#TODO : faire quelque chose d'un peu plus propre
|
33
|
-
|
34
|
-
unless p `ps -ef | grep "sclang" | grep -v "grep" | wc -l`.to_i > 0
|
35
|
-
system "sclang -u 57320 #{File.join(File.dirname(__FILE__), "init.sc")} &"
|
36
|
-
end
|
37
|
-
|
38
|
-
## TODO : En théorie, récupèrer l'adresse du port, surtout si une autre instance de
|
39
|
-
## SuperCollider existe...
|
40
|
-
|
41
|
-
# @server= OSC::EMServer.new 3333
|
42
|
-
# @server.add_method '/portSuperCollider' do |message|
|
43
|
-
# @portSuperCollider=message.message
|
44
|
-
# end
|
45
|
-
@postMan= OSC::Client.new "localhost", 57320 ## @portSuperCollider
|
46
|
-
|
47
|
-
# variables et méthodes d'utilisation
|
48
|
-
|
49
|
-
@@listeVoix=Hash.new
|
50
|
-
define_finalizer(self, Proc.new {self.quit})
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
##TODO : trouver une manuère plus propre de quitter SuperCollider,
|
55
|
-
##Jack a toujours l'air de se vexer...
|
56
|
-
def self.quit
|
57
|
-
`killall scsynth sclang`
|
58
|
-
end
|
59
|
-
|
60
|
-
|
61
|
-
# fonction permettant de communiquer directement avec SuperCollider,
|
62
|
-
# ce qui permet pour qui connaît la syntaxe sclang de faire des
|
63
|
-
# ajustages directs. À ne pas utiliser normalement.
|
64
|
-
|
65
|
-
def self.send message
|
66
|
-
@postMan.send OSC::Message.new "/SC", message.to_s
|
67
|
-
end
|
68
|
-
|
69
|
-
## fonction semi-privée
|
70
|
-
|
71
|
-
def self.updateScore
|
72
|
-
@@listeVoix.each do |key, value|
|
73
|
-
value.instance_variables.each do |variable|
|
74
|
-
self.updater key, variable[1..-1], value.instance_variable_get(variable) unless value.instance_variable_get(variable).nil?
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def self.updater voix, arg, value
|
80
|
-
case arg
|
81
|
-
when "dur"
|
82
|
-
self.send "Pbindef (\\#{voix}, \\#{arg}, Pseq(#{value}.convertRhythm, inf))"
|
83
|
-
when "degree"
|
84
|
-
self.send "Pbindef(\\#{voix}, \\#{arg}, Pseq(#{value}, inf))"
|
85
|
-
when "scale"
|
86
|
-
self.send "Pbindef(\\#{voix}, \\#{arg}, Scale.#{value})"
|
87
|
-
when "instrument"
|
88
|
-
self.send "Pbindef(\\#{voix}, \\#{arg}, \\#{value})"
|
89
|
-
else
|
90
|
-
self.send "Pbindef(\\#{voix}, \\#{arg}, #{value.to_s})"
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
# fonctions principales
|
95
|
-
|
96
|
-
public
|
97
|
-
|
98
|
-
def self.set options={}, *voix
|
99
|
-
if voix.nil?
|
100
|
-
begin
|
101
|
-
raise ArgumentError
|
102
|
-
rescue
|
103
|
-
puts "vous devez donner un nom à votre (vos) voix"
|
104
|
-
end
|
105
|
-
end
|
106
|
-
voix.each do |voix|
|
107
|
-
p voix.to_s
|
108
|
-
if voix==:all then
|
109
|
-
begin
|
110
|
-
raise ArgumentError
|
111
|
-
rescue
|
112
|
-
puts " vous ne pouvez appeler une voix \"all\", renommez-la'"
|
113
|
-
end
|
114
|
-
elsif @@listeVoix[voix.to_s].nil? then
|
115
|
-
@@listeVoix[voix.to_s]=Voix.new options
|
116
|
-
else
|
117
|
-
@@listeVoix[voix.to_s].set options
|
118
|
-
end
|
119
|
-
self.updateScore
|
120
|
-
self.play voix.to_s
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
|
125
|
-
def self.play *args
|
126
|
-
if args[0]==:all then
|
127
|
-
args=@@listeVoix.keys
|
128
|
-
end
|
129
|
-
args.each do |voix|
|
130
|
-
self.send "Pdef(\\#{voix.to_s}).play"
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
def self.stop *args
|
135
|
-
if args[0]==:all then
|
136
|
-
args=@@listeVoix.keys
|
137
|
-
end
|
138
|
-
args.each do |voix|
|
139
|
-
self.send "Pdef(\\#{voix}).stop"
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
|
144
|
-
def self.remove *args
|
145
|
-
if args[0]==:all then
|
146
|
-
args=@@listeVoix.keys
|
147
|
-
end
|
148
|
-
args.each do |voix|
|
149
|
-
self.stop voix
|
150
|
-
@@listeVoix.delete voix
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
end
|
data/lib/rubySC/SC.rb
ADDED
@@ -0,0 +1,156 @@
|
|
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
|
File without changes
|
@@ -0,0 +1,111 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
## fonctions de plus haut niveau
|
6
|
+
|
7
|
+
## Quelques constantes, notamment pour les rythmes, c'est toujours
|
8
|
+
## plus pratique
|
9
|
+
|
10
|
+
## Je n'ai mis que les rythmes qui me semblaient
|
11
|
+
## les plus connus
|
12
|
+
|
13
|
+
|
14
|
+
## Rythmes à 3 notes
|
15
|
+
|
16
|
+
Pavanne=[2,1,1]
|
17
|
+
|
18
|
+
Sicilienne=[3,1,2]
|
19
|
+
Chabada=[3,2,1]
|
20
|
+
|
21
|
+
Tresillo=[3,3,2]
|
22
|
+
Syncopette=[1,2,1]
|
23
|
+
|
24
|
+
## Rythmes à 4 notes
|
25
|
+
|
26
|
+
## module utiliser pour faire des choses au niveau de toutes les voix.
|
27
|
+
|
28
|
+
module Partition
|
29
|
+
|
30
|
+
## importation par JSON la structure attendue est la suivante:
|
31
|
+
## section (une par fichier)
|
32
|
+
## ----- voix
|
33
|
+
## ----- paramDeVoix
|
34
|
+
|
35
|
+
def self.importer nomFichierJSON
|
36
|
+
|
37
|
+
data = JSON.load File.open(nomFichierJSON)
|
38
|
+
data.each do |k, v|
|
39
|
+
SC.set v, k
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.echelle echelle
|
45
|
+
SC.listeVoix.each_key do |voix|
|
46
|
+
SC.set ({:scale => echelle}), voix
|
47
|
+
end
|
48
|
+
SC.updateScore
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
def self.transpose intervalle
|
53
|
+
SC.listeVoix.each_key do |voix|
|
54
|
+
SC.set ({:root => intervalle}), voix
|
55
|
+
end
|
56
|
+
self.updateScore
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
## module pour gérer des marches.
|
62
|
+
|
63
|
+
|
64
|
+
module Marche
|
65
|
+
|
66
|
+
def self.diatonique voixOuMelodie, nbFois, intervalle
|
67
|
+
if voixOuMelodie.is_a? String
|
68
|
+
melodie=SC.listeVoix[voixOuMelodie.to_s].degree
|
69
|
+
voix=voixOuMelodie
|
70
|
+
elsif voixOuMelodie.is_a? Array
|
71
|
+
melodie=voixOuMelodie
|
72
|
+
voix=rand(50).to_s ## le super truc porkasse !!
|
73
|
+
else
|
74
|
+
begin
|
75
|
+
raise ArgumentException
|
76
|
+
rescue
|
77
|
+
end
|
78
|
+
end
|
79
|
+
tmp= Array.new(nbFois) do |x|
|
80
|
+
"Pseq(#{melodie.map { |note| note+intervalle*x }})"
|
81
|
+
end
|
82
|
+
tmp.delete("\"")
|
83
|
+
SC.set ({"degree" => "[#{tmp.join ","}]"}), voix
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
module Rythme
|
89
|
+
|
90
|
+
## s'occupe du premier chiffre de la propriété "dur", c-à-d la vitesse
|
91
|
+
def self.mesure mesure, *voix
|
92
|
+
voix.each do |v|
|
93
|
+
tmp = SC.listeVoix[v].dur
|
94
|
+
tmp[0] = mesure
|
95
|
+
SC.set ({ "dur" => tmp }), v
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
## s'occupe du deuxième chiffre de la propriété "dur", c-à-d la
|
100
|
+
## gestalt rythmique.
|
101
|
+
|
102
|
+
def self.formule formule, *voix
|
103
|
+
voix.each do |v|
|
104
|
+
tmp = SC.listeVoix[v].dur
|
105
|
+
tmp[1] = formule
|
106
|
+
SC.set ({ "dur" => tmp }), v
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
|
111
|
+
end
|
@@ -8,24 +8,43 @@ class Voix
|
|
8
8
|
|
9
9
|
def initialize options={}
|
10
10
|
|
11
|
-
@
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
@root=nil
|
12
|
+
|
13
|
+
if options["dur"].nil?
|
14
|
+
then @dur=[1, [1]]
|
15
|
+
else
|
16
|
+
@dur=options["dur"]
|
17
|
+
end
|
18
|
+
|
19
|
+
if options["degree"].nil?
|
20
|
+
then @degree=Array.new(rand(6)) do |x| x=rand(12) end
|
21
|
+
else
|
22
|
+
@degree=options["degree"]
|
23
|
+
end
|
24
|
+
|
25
|
+
if options["octave"].nil?
|
26
|
+
then @octave=4
|
27
|
+
else
|
28
|
+
@octave=options["octave"]
|
29
|
+
end
|
30
|
+
|
15
31
|
|
16
|
-
if options[
|
32
|
+
if options["scale"].nil?
|
17
33
|
then @scale = "major"
|
18
|
-
else
|
34
|
+
else
|
35
|
+
@scale=options["scale"]
|
19
36
|
end
|
20
37
|
|
21
|
-
if options[
|
38
|
+
if options["amp"].nil?
|
22
39
|
then @amp = "Pwhite(0.2,0.5)"
|
23
|
-
else
|
40
|
+
else
|
41
|
+
@amp=options["amp"]
|
24
42
|
end
|
25
43
|
|
26
|
-
if options[
|
44
|
+
if options["instrument"].nil?
|
27
45
|
then @instrument = "default"
|
28
|
-
else
|
46
|
+
else
|
47
|
+
@instrument=options["instrument"].to_s
|
29
48
|
end
|
30
49
|
|
31
50
|
end
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubySC
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.3.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- simdax
|
@@ -14,113 +13,99 @@ dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: shoulda
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rdoc
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- - ~>
|
31
|
+
- - "~>"
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '3.12'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- - ~>
|
38
|
+
- - "~>"
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '3.12'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: bundler
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- - ~>
|
45
|
+
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '1.0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- - ~>
|
52
|
+
- - "~>"
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '1.0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: jeweler
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- - ~>
|
59
|
+
- - "~>"
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: 2.0.0
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- - ~>
|
66
|
+
- - "~>"
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: 2.0.0
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: simplecov
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - ">="
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - ">="
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: osc-ruby
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - ">="
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :runtime
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - ">="
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '0'
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: active_support
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
|
-
- -
|
101
|
+
- - ">="
|
116
102
|
- !ruby/object:Gem::Version
|
117
103
|
version: '0'
|
118
104
|
type: :runtime
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
|
-
- -
|
108
|
+
- - ">="
|
124
109
|
- !ruby/object:Gem::Version
|
125
110
|
version: '0'
|
126
111
|
description: Petite bibliotheque permettant une communication simple entre SuperCollider/JITlib
|
@@ -134,38 +119,35 @@ extra_rdoc_files:
|
|
134
119
|
- LICENSE.txt
|
135
120
|
- README.md
|
136
121
|
files:
|
137
|
-
- lib/init.sc
|
138
|
-
- lib/musique.rb
|
139
|
-
- lib/rubySC.rb
|
140
|
-
- lib/voix.rb
|
141
122
|
- LICENSE.txt
|
142
123
|
- README.md
|
124
|
+
- lib/rubySC.rb
|
125
|
+
- lib/rubySC/SC.rb
|
126
|
+
- lib/rubySC/init.sc
|
127
|
+
- lib/rubySC/musique.rb
|
128
|
+
- lib/rubySC/voix.rb
|
143
129
|
homepage: http://github.com/simdax/rubySC
|
144
130
|
licenses:
|
145
131
|
- MIT
|
132
|
+
metadata: {}
|
146
133
|
post_install_message:
|
147
134
|
rdoc_options: []
|
148
135
|
require_paths:
|
149
136
|
- lib
|
150
137
|
required_ruby_version: !ruby/object:Gem::Requirement
|
151
|
-
none: false
|
152
138
|
requirements:
|
153
|
-
- -
|
139
|
+
- - ">="
|
154
140
|
- !ruby/object:Gem::Version
|
155
141
|
version: '0'
|
156
|
-
segments:
|
157
|
-
- 0
|
158
|
-
hash: -1688632819092793939
|
159
142
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
|
-
none: false
|
161
143
|
requirements:
|
162
|
-
- -
|
144
|
+
- - ">="
|
163
145
|
- !ruby/object:Gem::Version
|
164
146
|
version: '0'
|
165
147
|
requirements: []
|
166
148
|
rubyforge_project:
|
167
|
-
rubygems_version:
|
149
|
+
rubygems_version: 2.2.0
|
168
150
|
signing_key:
|
169
|
-
specification_version:
|
151
|
+
specification_version: 4
|
170
152
|
summary: simple and light music livecoding library
|
171
153
|
test_files: []
|
data/lib/musique.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
load 'lib/circularList.rb'
|
3
|
-
#load 'superCollider.rb'
|
4
|
-
|
5
|
-
# fonctions de plus haut niveau
|
6
|
-
|
7
|
-
|
8
|
-
## module utiliser pour faire des choses au niveau de toutes les voix.
|
9
|
-
|
10
|
-
module Partition
|
11
|
-
|
12
|
-
def self.importer JSON
|
13
|
-
|
14
|
-
def self.echelle echelle
|
15
|
-
SC.listeVoix.each_key do |voix|
|
16
|
-
SC.set ({:scale => echelle}), voix
|
17
|
-
end
|
18
|
-
self.updateScore
|
19
|
-
end
|
20
|
-
|
21
|
-
|
22
|
-
def self.transpose intervalle
|
23
|
-
SC.listeVoix.each_key do |voix|
|
24
|
-
SC.set ({:root => intervalle}), voix
|
25
|
-
end
|
26
|
-
self.updateScore
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
30
|
-
|
31
|
-
## module pour gérer des marches.
|
32
|
-
|
33
|
-
|
34
|
-
module Marche
|
35
|
-
|
36
|
-
def self.diatonique voix, intervalle, nbFois
|
37
|
-
melodie=SC.listeVoix[voix.to_s].degree
|
38
|
-
tmp= Array.new(nbFois) do |x|
|
39
|
-
"Pseq(#{melodie.map { |note| note+intervalle*x }})"
|
40
|
-
end
|
41
|
-
tmp.delete("\"")
|
42
|
-
SC.set ({:degree => "[#{tmp.join ","}]"}), voix.to_s
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|