hammelin 0.0.4 → 0.0.5

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