hammelin 0.0.4 → 0.0.5

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 CHANGED
@@ -4,5 +4,8 @@ note = Hammelin::Note.new("C")
4
4
  beat = note.upto("D#").map{|n| n.upto("D#")}
5
5
 
6
6
  Hammelin.compose "iterative.mid" do
7
- 5.times { play beat }
7
+ 5.times do beat.each do |note|
8
+ play note
9
+ end
10
+ end
8
11
  end
data/lib/hammelin.rb CHANGED
@@ -1,3 +1,63 @@
1
- require_relative 'hammelin/hammelin'
1
+ require 'java'
2
+
3
+ require_relative '../vendor/jfugue-4.0.3.jar'
4
+
2
5
  require_relative 'hammelin/note'
3
- require_relative 'hammelin/notes_range'
6
+ require_relative 'hammelin/notes_range'
7
+
8
+ java_import org.jfugue.Player
9
+ java_import org.jfugue.Pattern
10
+ java_import org.jfugue.Rhythm
11
+ java_import org.jfugue.MusicStringParser
12
+
13
+ module Hammelin
14
+
15
+ extend self
16
+
17
+ PADDING = " "
18
+ @logged_music_string = ""
19
+
20
+ def play(tune)
21
+ tune.play
22
+ rescue NoMethodError
23
+ case tune
24
+ when String
25
+ Note.new(tune).play
26
+ when Array
27
+ NotesRange.from_array(tune).play
28
+ end
29
+ end
30
+
31
+ def play_string(tune)
32
+ player.play(tune)
33
+ add_to_log(tune)
34
+ player.close
35
+ end
36
+
37
+ def compose(filename=nil,&block)
38
+ instance_eval &block
39
+ save_to_file(filename) if filename
40
+ ensure
41
+ player.close
42
+ end
43
+
44
+ private
45
+
46
+ def player
47
+ @player ||= Player.new
48
+ end
49
+
50
+ def add_to_log(tune)
51
+ logged_music_string << tune + PADDING
52
+ end
53
+
54
+ def logged_music_string
55
+ @logged_music_string
56
+ end
57
+
58
+ def save_to_file(filename)
59
+ file = java.io.File.new(filename)
60
+ player.save_midi(logged_music_string,file)
61
+ end
62
+
63
+ end
@@ -1,11 +1,13 @@
1
- require 'delegate'
2
-
3
1
  module Hammelin
4
2
 
5
- class NotesRange < DelegateClass(Array)
3
+ class NotesRange
4
+
5
+ include Enumerable
6
+
7
+ attr_accessor :notes
6
8
 
7
9
  def initialize(array)
8
- super(array)
10
+ @notes = array
9
11
  end
10
12
 
11
13
  def self.from_range(from,to)
@@ -13,8 +15,19 @@ module Hammelin
13
15
  end
14
16
 
15
17
  def self.from_array(array)
16
- notes_range = array.inject([]) {|notes,notes_range| notes += notes_range }
17
- NotesRange.new(notes_range)
18
+ NotesRange.new(array)
19
+ end
20
+
21
+ def each
22
+ if block_given?
23
+ @notes.each {|note| yield note}
24
+ else
25
+ to_enum(:each)
26
+ end
27
+ end
28
+
29
+ def reverse
30
+ @notes.reverse
18
31
  end
19
32
 
20
33
  def play
@@ -32,19 +45,19 @@ module Hammelin
32
45
  alias :upto :downto
33
46
 
34
47
  def increase_octave(times=1)
35
- notes = map {|note| note.increase_octave(times)}
48
+ notes = @notes.map {|note| note.increase_octave(times)}
36
49
 
37
50
  NotesRange.new(notes)
38
51
  end
39
52
 
40
53
  def decrease_octave(times=1)
41
- notes = map {|note| note.decrease_octave(times)}
54
+ notes = @notes.map {|note| note.decrease_octave(times)}
42
55
 
43
56
  NotesRange.new(notes)
44
57
  end
45
58
 
46
59
  def music_string
47
- map{|i| i.music_string }.join(" ")
60
+ @notes.map{|i| i.music_string }.join(" ")
48
61
  end
49
62
 
50
63
  private
@@ -1,3 +1,3 @@
1
1
  module Hammelin
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
metadata CHANGED
@@ -1,28 +1,23 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: hammelin
3
- version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.0.4
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.5
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Alvaro Pereyra
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-09-20 00:00:00 -05:00
14
- default_executable:
12
+ date: 2012-02-02 00:00:00.000000000 -05:00
13
+ default_executable:
15
14
  dependencies: []
16
-
17
15
  description: Hammelin wraps around JFugue and lets your play with notes, making Ruby sing
18
16
  email: alvaro@xendacentral.com
19
17
  executables: []
20
-
21
18
  extensions: []
22
-
23
19
  extra_rdoc_files: []
24
-
25
- files:
20
+ files:
26
21
  - .gitignore
27
22
  - .rvmrc.example
28
23
  - Gemfile
@@ -32,7 +27,6 @@ files:
32
27
  - demos/nested_play.rb
33
28
  - hammelin.gemspec
34
29
  - lib/hammelin.rb
35
- - lib/hammelin/hammelin.rb
36
30
  - lib/hammelin/note.rb
37
31
  - lib/hammelin/notes_range.rb
38
32
  - lib/hammelin/version.rb
@@ -40,32 +34,29 @@ files:
40
34
  - reference/Main.java
41
35
  - vendor/jfugue-4.0.3.jar
42
36
  has_rdoc: true
43
- homepage: ""
37
+ homepage: ''
44
38
  licenses: []
45
-
46
- post_install_message:
39
+ post_install_message:
47
40
  rdoc_options: []
48
-
49
- require_paths:
41
+ require_paths:
50
42
  - lib
51
- required_ruby_version: !ruby/object:Gem::Requirement
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
52
48
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: "0"
57
- required_rubygems_version: !ruby/object:Gem::Requirement
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
58
54
  none: false
59
- requirements:
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: "0"
63
55
  requirements: []
64
-
65
56
  rubyforge_project: hammelin
66
- rubygems_version: 1.5.0
67
- signing_key:
57
+ rubygems_version: 1.6.2
58
+ signing_key:
68
59
  specification_version: 3
69
60
  summary: Hammelin allows you to play around with JFugue MIDI capabilities
70
61
  test_files: []
71
-
62
+ ...
@@ -1,60 +0,0 @@
1
- require 'java'
2
-
3
- require_relative '../../bin/jfugue-4.0.3.jar'
4
-
5
- java_import org.jfugue.Player
6
- java_import org.jfugue.Pattern
7
- java_import org.jfugue.Rhythm
8
- java_import org.jfugue.MusicStringParser
9
-
10
- module Hammelin
11
-
12
- extend self
13
-
14
- PADDING = " "
15
- @logged_music_string = ""
16
-
17
- def play(tune)
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
26
- end
27
-
28
- def play_string(tune)
29
- player.play(tune)
30
- add_to_log(tune)
31
- player.close
32
- end
33
-
34
- def compose(filename=nil,&block)
35
- instance_eval &block
36
- save_to_file(filename) if filename
37
- ensure
38
- player.close
39
- end
40
-
41
- private
42
-
43
- def player
44
- @player ||= Player.new
45
- end
46
-
47
- def add_to_log(tune)
48
- logged_music_string << tune + PADDING
49
- end
50
-
51
- def logged_music_string
52
- @logged_music_string
53
- end
54
-
55
- def save_to_file(filename)
56
- file = java.io.File.new(filename)
57
- player.save_midi(logged_music_string,file)
58
- end
59
-
60
- end