hammelin 0.0.2 → 0.0.3
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.
- data/demos/each.rb +8 -0
- data/demos/nested_play.rb +2 -2
- data/lib/hammelin/hammelin.rb +12 -22
- data/lib/hammelin/note.rb +13 -11
- data/lib/hammelin/notes_range.rb +23 -15
- data/lib/hammelin/version.rb +1 -1
- metadata +27 -26
data/demos/each.rb
ADDED
data/demos/nested_play.rb
CHANGED
data/lib/hammelin/hammelin.rb
CHANGED
@@ -15,11 +15,14 @@ module Hammelin
|
|
15
15
|
@logged_music_string = ""
|
16
16
|
|
17
17
|
def play(tune)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
tune.play
|
19
|
+
rescue NoMethodError
|
20
|
+
case tune
|
21
|
+
when String
|
22
|
+
Note.new(tune).play
|
23
|
+
when Array
|
24
|
+
NotesRange.from_array(tune).play
|
25
|
+
end
|
23
26
|
end
|
24
27
|
|
25
28
|
def play_string(tune)
|
@@ -28,19 +31,6 @@ module Hammelin
|
|
28
31
|
player.close
|
29
32
|
end
|
30
33
|
|
31
|
-
def playable_tune?(tune)
|
32
|
-
return true if tune.respond_to? :play
|
33
|
-
return true if tune.is_a?(Array) ? playable_tune?(tune.first) : false
|
34
|
-
end
|
35
|
-
|
36
|
-
def play_tune(tune)
|
37
|
-
if tune.respond_to? :play
|
38
|
-
tune.play
|
39
|
-
else
|
40
|
-
tune.each(&:play) if playable_tune?(tune.first)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
34
|
def compose(filename=nil,&block)
|
45
35
|
instance_eval &block
|
46
36
|
save_to_file(filename) if filename
|
@@ -50,6 +40,10 @@ module Hammelin
|
|
50
40
|
|
51
41
|
private
|
52
42
|
|
43
|
+
def player
|
44
|
+
@player ||= Player.new
|
45
|
+
end
|
46
|
+
|
53
47
|
def add_to_log(tune)
|
54
48
|
logged_music_string << tune + PADDING
|
55
49
|
end
|
@@ -63,8 +57,4 @@ module Hammelin
|
|
63
57
|
player.save_midi(logged_music_string,file)
|
64
58
|
end
|
65
59
|
|
66
|
-
def player
|
67
|
-
@player ||= Player.new
|
68
|
-
end
|
69
|
-
|
70
60
|
end
|
data/lib/hammelin/note.rb
CHANGED
@@ -5,8 +5,8 @@ module Hammelin
|
|
5
5
|
include Comparable
|
6
6
|
attr_accessor :token
|
7
7
|
|
8
|
-
OCTAVE_JUMP
|
9
|
-
MAX_VALUE
|
8
|
+
OCTAVE_JUMP = 12
|
9
|
+
MAX_VALUE = 127
|
10
10
|
CAPPED_VALUE = MAX_VALUE - OCTAVE_JUMP
|
11
11
|
|
12
12
|
def initialize(note)
|
@@ -14,15 +14,15 @@ module Hammelin
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def play
|
17
|
-
Hammelin.
|
17
|
+
Hammelin.play_string (music_string)
|
18
18
|
end
|
19
19
|
|
20
20
|
def upto(note)
|
21
|
-
NotesRange.
|
21
|
+
NotesRange.from_range(self,Note.new(note))
|
22
22
|
end
|
23
23
|
|
24
24
|
def downto(note)
|
25
|
-
NotesRange.
|
25
|
+
NotesRange.from_range(Note.new(note),self)
|
26
26
|
end
|
27
27
|
|
28
28
|
def self.from_value(value)
|
@@ -42,11 +42,13 @@ module Hammelin
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def increase_octave!(times)
|
45
|
-
|
45
|
+
value = increase_octave(times).value
|
46
|
+
self.token = "[#{value}]"
|
46
47
|
end
|
47
48
|
|
48
49
|
def decrease_octave!(times)
|
49
|
-
|
50
|
+
value = decrease_octave(times).value
|
51
|
+
self.token = "[#{value}]"
|
50
52
|
end
|
51
53
|
|
52
54
|
def value
|
@@ -64,19 +66,19 @@ module Hammelin
|
|
64
66
|
end
|
65
67
|
|
66
68
|
def higher_octave(times=1)
|
67
|
-
OCTAVE_JUMP*times + self.value
|
69
|
+
highest_octave? ? value : OCTAVE_JUMP*times + self.value
|
68
70
|
end
|
69
71
|
|
70
72
|
def lower_octave(times=1)
|
71
|
-
OCTAVE_JUMP*times + self.value
|
73
|
+
lowest_octave? ? value : OCTAVE_JUMP*times + self.value
|
72
74
|
end
|
73
75
|
|
74
76
|
def highest_octave?
|
75
|
-
self.value >= CAPPED_VALUE
|
77
|
+
self.value + OCTAVE_JUMP >= CAPPED_VALUE
|
76
78
|
end
|
77
79
|
|
78
80
|
def lowest_octave?
|
79
|
-
self.value <= OCTAVE_JUMP
|
81
|
+
self.value - OCTAVE_JUMP <= OCTAVE_JUMP
|
80
82
|
end
|
81
83
|
|
82
84
|
end
|
data/lib/hammelin/notes_range.rb
CHANGED
@@ -4,35 +4,43 @@ module Hammelin
|
|
4
4
|
|
5
5
|
class NotesRange < DelegateClass(Array)
|
6
6
|
|
7
|
-
def initialize(
|
8
|
-
|
9
|
-
super(transverse_notes)
|
7
|
+
def initialize(array)
|
8
|
+
super(array)
|
10
9
|
end
|
11
10
|
|
12
|
-
def
|
13
|
-
|
14
|
-
|
11
|
+
def self.from_range(from,to)
|
12
|
+
NotesRange.new(transverse_notes(from,to))
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.from_array(array)
|
16
|
+
notes_range = array.inject([]) {|notes,notes_range| notes += notes_range }
|
17
|
+
NotesRange.new(notes_range)
|
15
18
|
end
|
16
19
|
|
17
|
-
def
|
18
|
-
|
20
|
+
def play
|
21
|
+
Hammelin.play_string music_string
|
22
|
+
self
|
19
23
|
end
|
20
24
|
|
21
25
|
# downto and upto are just some sintactic sugar for expanding the range to
|
22
26
|
# a new value. It will create a new NotesRange object with the last Note
|
23
27
|
# and then will figure out how to get to the newest one.
|
24
28
|
def downto(value)
|
25
|
-
NotesRange.
|
29
|
+
NotesRange.from_range(last,value)
|
26
30
|
end
|
27
31
|
|
28
32
|
alias :upto :downto
|
29
33
|
|
30
34
|
def increase_octave(times=1)
|
31
|
-
|
35
|
+
notes = map {|note| note.increase_octave(times)}
|
36
|
+
|
37
|
+
NotesRange.new(notes)
|
32
38
|
end
|
33
39
|
|
34
40
|
def decrease_octave(times=1)
|
35
|
-
|
41
|
+
notes = map {|note| note.decrease_octave(times)}
|
42
|
+
|
43
|
+
NotesRange.new(notes)
|
36
44
|
end
|
37
45
|
|
38
46
|
def music_string
|
@@ -41,11 +49,11 @@ module Hammelin
|
|
41
49
|
|
42
50
|
private
|
43
51
|
|
44
|
-
def transverse_notes
|
45
|
-
enum = if
|
46
|
-
|
52
|
+
def self.transverse_notes(from,to)
|
53
|
+
enum = if from > to
|
54
|
+
from.value.downto(to.value)
|
47
55
|
else
|
48
|
-
|
56
|
+
from.value.upto(to.value)
|
49
57
|
end
|
50
58
|
enum.map{|value| Note.from_value(value) }
|
51
59
|
end
|
data/lib/hammelin/version.rb
CHANGED
metadata
CHANGED
@@ -2,15 +2,15 @@
|
|
2
2
|
name: hammelin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
|
-
|
8
|
+
- Alvaro Pereyra
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-09-
|
13
|
+
date: 2011-09-19 00:00:00 -05:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|
@@ -23,21 +23,22 @@ extensions: []
|
|
23
23
|
extra_rdoc_files: []
|
24
24
|
|
25
25
|
files:
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
26
|
+
- .gitignore
|
27
|
+
- .rvmrc.example
|
28
|
+
- Gemfile
|
29
|
+
- README.md
|
30
|
+
- Rakefile
|
31
|
+
- bin/jfugue-4.0.3.jar
|
32
|
+
- demos/each.rb
|
33
|
+
- demos/nested_play.rb
|
34
|
+
- hammelin.gemspec
|
35
|
+
- lib/hammelin.rb
|
36
|
+
- lib/hammelin/hammelin.rb
|
37
|
+
- lib/hammelin/note.rb
|
38
|
+
- lib/hammelin/notes_range.rb
|
39
|
+
- lib/hammelin/version.rb
|
40
|
+
- reference/Main.class
|
41
|
+
- reference/Main.java
|
41
42
|
has_rdoc: true
|
42
43
|
homepage: ""
|
43
44
|
licenses: []
|
@@ -46,23 +47,23 @@ post_install_message:
|
|
46
47
|
rdoc_options: []
|
47
48
|
|
48
49
|
require_paths:
|
49
|
-
|
50
|
+
- lib
|
50
51
|
required_ruby_version: !ruby/object:Gem::Requirement
|
51
52
|
none: false
|
52
53
|
requirements:
|
53
|
-
|
54
|
-
|
55
|
-
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: "0"
|
56
57
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
58
|
none: false
|
58
59
|
requirements:
|
59
|
-
|
60
|
-
|
61
|
-
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: "0"
|
62
63
|
requirements: []
|
63
64
|
|
64
65
|
rubyforge_project: hammelin
|
65
|
-
rubygems_version: 1.5.
|
66
|
+
rubygems_version: 1.5.0
|
66
67
|
signing_key:
|
67
68
|
specification_version: 3
|
68
69
|
summary: Hammelin allows you to play around with JFugue MIDI capabilities
|