gitara 0.8.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/CHANGELOG.markdown +8 -1
  2. data/README.markdown +15 -21
  3. data/examples/{aimee-man-wise-up/aimee-man-wise-up.ly → aimee-man-wise-up.ly} +94 -80
  4. data/examples/aimee-man-wise-up.midi +0 -0
  5. data/examples/aimee-man-wise-up.pdf +0 -0
  6. data/examples/{aimee-man-wise-up/aimee-man-wise-up.rb → aimee-man-wise-up.rb} +7 -7
  7. data/examples/{eraserheads-huling-el-bimbo/tab.ly → eraserheads-huling-el-bimbo.ly} +27 -57
  8. data/examples/eraserheads-huling-el-bimbo.midi +0 -0
  9. data/examples/eraserheads-huling-el-bimbo.pdf +0 -0
  10. data/examples/{eraserheads-huling-el-bimbo/tab.rb → eraserheads-huling-el-bimbo.rb} +7 -7
  11. data/examples/{foo-fighters-walking-after-you/foo-fighters-walking-after-you.ly → foo-fighters-walking-after-you.ly} +19 -90
  12. data/examples/{foo-fighters-walking-after-you/foo-fighters-walking-after-you.midi → foo-fighters-walking-after-you.midi} +0 -0
  13. data/examples/foo-fighters-walking-after-you.pdf +0 -0
  14. data/examples/{foo-fighters-walking-after-you/foo-fighters-walking-after-you.rb → foo-fighters-walking-after-you.rb} +1 -1
  15. data/examples/tab-with-alternate-tuning.ly +11 -7
  16. data/examples/tab-with-alternate-tuning.midi +0 -0
  17. data/examples/tab-with-alternate-tuning.pdf +0 -0
  18. data/examples/tab-with-alternate-tuning.rb +1 -1
  19. data/examples/tab-with-chords.ly +134 -0
  20. data/examples/tab-with-chords.midi +0 -0
  21. data/examples/tab-with-chords.pdf +0 -0
  22. data/examples/tab-with-chords.rb +16 -0
  23. data/examples/tab-with-key-signature.ly +21 -7
  24. data/examples/tab-with-key-signature.midi +0 -0
  25. data/examples/tab-with-key-signature.pdf +0 -0
  26. data/examples/tab-with-key-signature.rb +2 -2
  27. data/examples/tab-with-line-with-no-break.ly +7 -12
  28. data/examples/tab-with-line-with-no-break.midi +0 -0
  29. data/examples/tab-with-line-with-no-break.pdf +0 -0
  30. data/examples/tab-with-partial.ly +25 -15
  31. data/examples/tab-with-partial.midi +0 -0
  32. data/examples/tab-with-partial.pdf +0 -0
  33. data/examples/tab-with-partial.rb +7 -7
  34. data/examples/tab-with-repeats.ly +25 -9
  35. data/examples/tab-with-repeats.midi +0 -0
  36. data/examples/tab-with-repeats.pdf +0 -0
  37. data/examples/tab-with-reused-bar-in-stanza.ly +154 -0
  38. data/examples/tab-with-reused-bar-in-stanza.midi +0 -0
  39. data/examples/tab-with-reused-bar-in-stanza.pdf +0 -0
  40. data/examples/tab-with-reused-bar-in-stanza.rb +14 -0
  41. data/examples/tab-with-time-signature.ly +27 -8
  42. data/examples/tab-with-time-signature.midi +0 -0
  43. data/examples/tab-with-time-signature.pdf +0 -0
  44. data/lib/gitara/node/bar.rb +0 -25
  45. data/lib/gitara/node/stanza.rb +22 -2
  46. data/lib/gitara/template/bar.erb +0 -1
  47. data/lib/gitara/template/chord_set.erb +1 -1
  48. data/lib/gitara/template/line.erb +0 -1
  49. data/lib/gitara/template/score.erb +2 -0
  50. data/lib/gitara/template/stanza.erb +1 -1
  51. data/lib/gitara/template/tab.erb +10 -5
  52. data/lib/gitara/version.rb +1 -1
  53. data/spec/lib/gitara/app_spec.rb +14 -39
  54. data/spec/lib/gitara/node/bar/stanza_version_spec.rb +1 -1
  55. data/spec/lib/gitara/node/bar_spec.rb +2 -58
  56. data/spec/lib/gitara/node/stanza_spec.rb +21 -1
  57. data/spec/spec_helper.rb +5 -1
  58. data/spec/support/app_tester.rb +12 -1
  59. metadata +34 -16
  60. data/examples/aimee-man-wise-up/aimee-man-wise-up.midi +0 -0
  61. data/examples/aimee-man-wise-up/aimee-man-wise-up.pdf +0 -0
  62. data/examples/eraserheads-huling-el-bimbo/tab.midi +0 -0
  63. data/examples/eraserheads-huling-el-bimbo/tab.pdf +0 -0
  64. data/examples/foo-fighters-walking-after-you/foo-fighters-walking-after-you.pdf +0 -0
  65. data/examples/tab.ly +0 -193
  66. data/examples/tab.rb +0 -67
@@ -1,11 +1,31 @@
1
1
  module Gitara
2
2
  module Node
3
3
  class Stanza < Base
4
+ def bars
5
+ @bars ||= descendants(Node::Bar)
6
+ end
7
+
4
8
  def heading_in_lilypond
5
- results = Array.new(descendants(Node::Bar).size, 'r')
6
- results[0] = %Q|r1^"#{name}"|
9
+ results = (
10
+ [self.heading_for_first_bar] +
11
+ bars.drop(1).map(&:stanza_heading)
12
+ )
13
+
7
14
  results.join(' ')
8
15
  end
16
+
17
+ def heading_for_first_bar
18
+ if bars[0].specified_duration
19
+ %Q|r#{bars[0].specified_duration}^"#{name}"|
20
+ else
21
+ ts = ancestor(Node::Tab).time_signature
22
+ if ts.generates_whole_note_bars?
23
+ %Q|#{ts.rest_bar_value}^"#{name}"|
24
+ else
25
+ %Q|r#{ts.beat_unit}^"#{name}" | + ("r#{ts.beat_unit} " * (ts.beats_per_bar - 1)).strip
26
+ end
27
+ end
28
+ end
9
29
  end
10
30
  end
11
31
  end
@@ -2,4 +2,3 @@
2
2
  <%= voiced_bar.definition_name %> = { <%= voiced_bar.node.specified_duration_as_lilypond %> <%= voiced_bar.matching_note_set.value %> }
3
3
  <% end %>
4
4
  <%= self.chorded.definition_name %> = { <%= self.specified_duration_as_lilypond %> <%= self.chorded.value %> }
5
- <%= self.stanza_version.definition_name %> = { <%= self.specified_duration_as_lilypond %> <%= self.stanza_version.value %> }
@@ -1 +1 @@
1
- <%= self.chorded.definition_name %> = { <%= self.chorded.value %> }
1
+ <%= self.chorded.definition_name %> = { \chordmode { <%= self.chorded.value %> } }
@@ -2,4 +2,3 @@
2
2
  <%= voiced_line.definition_name %> = { <%= voiced_line.value %> <%= voiced_line.node.manual_break? ? '\break' : '' %> }
3
3
  <% end %>
4
4
  <%= self.chorded.definition_name %> = { <%= self.chorded.value %> }
5
- <%= self.stanza_version.definition_name %> = { <%= self.stanza_version.value %> }
@@ -2,4 +2,6 @@
2
2
  <%= voiced_score.definition_name %> = { <%= voiced_score.value %> }
3
3
  <% end %>
4
4
  <%= self.chorded.definition_name %> = { <%= self.chorded.value %> }
5
+ <%- if self.descendants(Gitara::Node::Stanza).any? %>
5
6
  <%= self.stanza_version.definition_name %> = { <%= self.stanza_version.value %> }
7
+ <% end %>
@@ -2,4 +2,4 @@
2
2
  <%= voiced_stanza.definition_name %> = { <%= voiced_stanza.value %> }
3
3
  <% end %>
4
4
  <%= self.chorded.definition_name %> = { <%= self.chorded.value %> }
5
- <%= self.stanza_version.definition_name %> = { <%= self.stanza_version.value %> }
5
+ <%= self.stanza_version.definition_name %> = { <%= self.heading_in_lilypond %> }
@@ -1,4 +1,4 @@
1
- \version "2.12.3"
1
+ \version "2.14.2"
2
2
  \include "english.ly"
3
3
 
4
4
  \paper {
@@ -57,7 +57,11 @@
57
57
  %-----------------------------------------------------------------------
58
58
  % Stanza Headings
59
59
 
60
- stanzaHeadings = { <%= playable_child.stanza_version.call_name %> }
60
+ stanzaHeadings = {
61
+ <%- if playable_child.descendants(Gitara::Node::Stanza).any? %>
62
+ <%= playable_child.stanza_version.call_name %>
63
+ <% end %>
64
+ }
61
65
 
62
66
  %-----------------------------------------------------------------------
63
67
  % Chord Headings
@@ -73,6 +77,10 @@ chordHeadings = { <%= playable_child.chorded.call_name %> }
73
77
  <%= Gitara.render('tab_tempo', self) %>
74
78
  \clef "treble_8"
75
79
 
80
+ \new ChordNames {
81
+ \chordHeadings
82
+ }
83
+
76
84
  \new Voice \with { \remove Rest_engraver } {
77
85
  \stanzaHeadings
78
86
  }
@@ -94,9 +102,6 @@ chordHeadings = { <%= playable_child.chorded.call_name %> }
94
102
  <%= voice.call_name %>
95
103
  }
96
104
  <% end %>
97
- \new TabVoice {
98
- \chordHeadings
99
- }
100
105
  >>
101
106
  >>
102
107
 
@@ -1,3 +1,3 @@
1
1
  module Gitara
2
- VERSION = "0.8.0"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -2,46 +2,21 @@ require 'spec_helper'
2
2
 
3
3
  describe Gitara::App do
4
4
  describe "#export" do
5
- it "can convert a tab to lilypond" do
6
- app_test = AppTester.new(:name => 'tab')
7
- app_test.run
8
- app_test.actual.should == app_test.expected
5
+ let(:app_test){AppTester.new(:run_lilypond => run_lilypond?)}
6
+
7
+ Pow('examples').glob('/*.rb').each do |path|
8
+ it "can convert #{path.name(false)} to lilypond" do
9
+ app_test.name = path.name(false)
10
+ app_test.run
11
+ app_test.actual.should == app_test.expected
12
+ end
9
13
  end
10
-
11
- it "can convert a tab with a partial to lilypond" do
12
- app_test = AppTester.new(:name => 'tab-with-partial')
13
- app_test.run
14
- app_test.actual.should == app_test.expected
15
- end
16
-
17
- it "can convert a tab with alternate tuning to lilypond" do
18
- app_test = AppTester.new(:name => 'tab-with-alternate-tuning')
19
- app_test.run
20
- app_test.actual.should == app_test.expected
21
- end
22
-
23
- it "can convert a tab with a specified key signature to lilypond" do
24
- app_test = AppTester.new(:name => 'tab-with-key-signature')
25
- app_test.run
26
- app_test.actual.should == app_test.expected
27
- end
28
-
29
- it "can convert a tab with repeats to lilypond" do
30
- app_test = AppTester.new(:name => 'tab-with-repeats')
31
- app_test.run
32
- app_test.actual.should == app_test.expected
33
- end
34
-
35
- it "can convert a tab with a specified time to lilypond" do
36
- app_test = AppTester.new(:name => 'tab-with-time-signature')
37
- app_test.run
38
- app_test.actual.should == app_test.expected
39
- end
40
-
41
- it "can convert a tab with a line without a break to lilypond" do
42
- app_test = AppTester.new(:name => 'tab-with-line-with-no-break')
43
- app_test.run
44
- app_test.actual.should == app_test.expected
14
+
15
+ after do
16
+ if run_lilypond?
17
+ app_test.should be_midi_generated
18
+ app_test.should be_pdf_generated
19
+ end
45
20
  end
46
21
  end
47
22
  end
@@ -8,7 +8,7 @@ describe Gitara::Node::Bar::StanzaVersion do
8
8
  tab = FactoryGirl.build(:tab, :children => [stanza], :time => '4/4')
9
9
 
10
10
  stanza_version_of_bar = FactoryGirl.build(:stanza_version_bar, :node => bar)
11
- stanza_version_of_bar.value.should == 'r1^"Intro"'
11
+ stanza_version_of_bar.value.should == 'r1'
12
12
  end
13
13
  end
14
14
  end
@@ -19,15 +19,7 @@ describe Gitara::Node::Bar do
19
19
  end
20
20
 
21
21
  describe "#stanza_heading" do
22
- it "should be a whole rest with the stanza name if the bar is the first node of a stanza" do
23
- bar = FactoryGirl.build(:bar)
24
- stanza = FactoryGirl.build(:stanza, :name => 'Intro', :children => [bar])
25
- tab = FactoryGirl.build(:tab, :children => [stanza], :time => '4/4')
26
-
27
- bar.stanza_heading.should == 'r1^"Intro"'
28
- end
29
-
30
- it "should be a whole rest with no stanza name if the bar is not the first node of a stanza" do
22
+ it "should be a whole rest with no stanza name" do
31
23
  first_bar = FactoryGirl.build(:bar)
32
24
  second_bar = FactoryGirl.build(:bar)
33
25
  stanza = FactoryGirl.build(:stanza, :name => 'Intro', :children => [first_bar, second_bar])
@@ -35,18 +27,8 @@ describe Gitara::Node::Bar do
35
27
 
36
28
  second_bar.stanza_heading.should == 'r1'
37
29
  end
38
- end
39
-
40
- describe "#with a special_duration" do
41
- it "should be a partial with the stanza name if the bar is the first node of a stanza" do
42
- subject = FactoryGirl.build(:bar, :specified_duration => 8)
43
- stanza = FactoryGirl.build(:stanza, :name => 'Intro', :children => [subject])
44
- tab = FactoryGirl.build(:tab, :children => [stanza], :time => '4/4')
45
30
 
46
- subject.stanza_heading.should == 'r8^"Intro"'
47
- end
48
-
49
- it "should be a partial with no stanza name if the subject is not the first node of a stanza" do
31
+ it "should be a partial with no stanza name if the bar has a special_duration" do
50
32
  first_bar = FactoryGirl.build(:bar)
51
33
  second_bar = FactoryGirl.build(:bar, :specified_duration => 8)
52
34
  stanza = FactoryGirl.build(:stanza, :name => 'Intro', :children => [first_bar, second_bar])
@@ -56,26 +38,6 @@ describe Gitara::Node::Bar do
56
38
  end
57
39
  end
58
40
 
59
- describe "#first_bar_of_stanza?" do
60
- it "should be true if the bar is the first bar of a stanza" do
61
- bar = FactoryGirl.build(:bar)
62
- stanza = FactoryGirl.build(:stanza, :name => 'Intro', :children => [bar])
63
- bar.should be_first_bar_of_stanza
64
- end
65
-
66
- it "should be false if the bar is not the first bar of a stanza" do
67
- bars = [FactoryGirl.build(:bar), FactoryGirl.build(:bar)]
68
- stanza = FactoryGirl.build(:stanza, :name => 'Intro', :children => bars)
69
-
70
- bars[1].should_not be_first_bar_of_stanza
71
- end
72
-
73
- it "should be false if the bar does not belong to a stanza" do
74
- bar = FactoryGirl.build(:bar)
75
- bar.should_not be_first_bar_of_stanza
76
- end
77
- end
78
-
79
41
  describe "#specified_duration_as_lilypond" do
80
42
  it "should be \\partial specified_duration if present" do
81
43
  bar = FactoryGirl.build(:bar, :specified_duration => 8)
@@ -87,22 +49,4 @@ describe Gitara::Node::Bar do
87
49
  bar.specified_duration_as_lilypond.should be_nil
88
50
  end
89
51
  end
90
-
91
- describe "#stanza_heading_for_first_bar" do
92
- it "should be the time signature's rest bar value with the stanza name if the time signature will generate whole note bars" do
93
- bar = FactoryGirl.build(:bar)
94
- stanza = FactoryGirl.build(:stanza, :name => 'Intro', :children => [bar])
95
- tab = FactoryGirl.build(:tab, :children => [stanza], :time => '4/4')
96
-
97
- bar.stanza_heading_for_first_bar.should == 'r1^"Intro"'
98
- end
99
-
100
- it "should attach the stanza name to the first rest note if the time signature will not generate whole note bars" do
101
- bar = FactoryGirl.build(:bar)
102
- stanza = FactoryGirl.build(:stanza, :name => 'Intro', :children => [bar])
103
- tab = FactoryGirl.build(:tab, :children => [stanza], :time => '3/4')
104
-
105
- bar.stanza_heading_for_first_bar.should == 'r4^"Intro" r4 r4'
106
- end
107
- end
108
52
  end
@@ -10,7 +10,27 @@ describe Gitara::Node::Stanza do
10
10
  ])
11
11
  ])
12
12
 
13
- stanza.heading_in_lilypond.should == 'r1^"Verse 1" r'
13
+ tab = FactoryGirl.build(:tab, :time => '4/4', :children => [stanza])
14
+
15
+ stanza.heading_in_lilypond.should == 'r1^"Verse 1" r1'
16
+ end
17
+ end
18
+
19
+ describe "#heading_for_first_bar" do
20
+ it "should be the time signature's rest bar value with the stanza name if the time signature will generate whole note bars" do
21
+ bar = FactoryGirl.build(:bar)
22
+ stanza = FactoryGirl.build(:stanza, :name => 'Intro', :children => [bar])
23
+ tab = FactoryGirl.build(:tab, :children => [stanza], :time => '4/4')
24
+
25
+ stanza.heading_for_first_bar.should == 'r1^"Intro"'
26
+ end
27
+
28
+ it "should attach the stanza name to the first rest note if the time signature will not generate whole note bars" do
29
+ bar = FactoryGirl.build(:bar)
30
+ stanza = FactoryGirl.build(:stanza, :name => 'Intro', :children => [bar])
31
+ tab = FactoryGirl.build(:tab, :children => [stanza], :time => '3/4')
32
+
33
+ stanza.heading_for_first_bar.should == 'r4^"Intro" r4 r4'
14
34
  end
15
35
  end
16
36
  end
@@ -8,11 +8,15 @@ RSpec.configure do |config|
8
8
  require 'support/app_tester'
9
9
 
10
10
  config.before :each do
11
- test_tmp_dir.delete! if test_tmp_dir.exists?
11
+ test_tmp_dir.delete! if test_tmp_dir.exists? && ! run_lilypond?
12
12
  Gitara.instance_variable_set :@tab, nil
13
13
  end
14
14
 
15
15
  def test_tmp_dir
16
16
  Pow('tmp/test')
17
17
  end
18
+
19
+ def run_lilypond?
20
+ ! ENV['RUN_LILYPOND'].nil?
21
+ end
18
22
  end
@@ -1,10 +1,13 @@
1
1
  # @private
2
2
  class AppTester < Valuable
3
3
  has_value :name
4
+ has_value :run_lilypond, :klass => :boolean, :default => false
4
5
 
5
6
  def run
6
7
  app = FactoryGirl.build(:app)
7
- app.invoke :export, ["examples/#{name}.rb"], "target-directory" => test_tmp_dir.path, "run-lilypond" => false
8
+ app.invoke :export, ["examples/#{name}.rb"],
9
+ "target-directory" => test_tmp_dir.path,
10
+ "run-lilypond" => self.run_lilypond?
8
11
  (Pow("tmp") / "#{name}.ly").write actual if self.expected != self.actual
9
12
  end
10
13
 
@@ -19,4 +22,12 @@ class AppTester < Valuable
19
22
  def actual
20
23
  @actual ||= Utilities.read!((test_tmp_dir / "#{name}.ly")).gsub(/\n\s+\n/, "\n")
21
24
  end
25
+
26
+ def midi_generated?
27
+ (test_tmp_dir / "#{name}.midi").exist?
28
+ end
29
+
30
+ def pdf_generated?
31
+ (test_tmp_dir / "#{name}.pdf").exist?
32
+ end
22
33
  end
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: gitara
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.8.0
5
+ version: 1.0.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - George Mendoza
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-20 00:00:00.000000000 Z
12
+ date: 2013-01-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  type: :runtime
@@ -283,32 +283,50 @@ files:
283
283
  - README.markdown
284
284
  - Rakefile
285
285
  - bin/gitara
286
- - examples/aimee-man-wise-up/aimee-man-wise-up.ly
287
- - examples/aimee-man-wise-up/aimee-man-wise-up.midi
288
- - examples/aimee-man-wise-up/aimee-man-wise-up.pdf
289
- - examples/aimee-man-wise-up/aimee-man-wise-up.rb
290
- - examples/eraserheads-huling-el-bimbo/tab.ly
291
- - examples/eraserheads-huling-el-bimbo/tab.midi
292
- - examples/eraserheads-huling-el-bimbo/tab.pdf
293
- - examples/eraserheads-huling-el-bimbo/tab.rb
294
- - examples/foo-fighters-walking-after-you/foo-fighters-walking-after-you.ly
295
- - examples/foo-fighters-walking-after-you/foo-fighters-walking-after-you.midi
296
- - examples/foo-fighters-walking-after-you/foo-fighters-walking-after-you.pdf
297
- - examples/foo-fighters-walking-after-you/foo-fighters-walking-after-you.rb
286
+ - examples/aimee-man-wise-up.ly
287
+ - examples/aimee-man-wise-up.midi
288
+ - examples/aimee-man-wise-up.pdf
289
+ - examples/aimee-man-wise-up.rb
290
+ - examples/eraserheads-huling-el-bimbo.ly
291
+ - examples/eraserheads-huling-el-bimbo.midi
292
+ - examples/eraserheads-huling-el-bimbo.pdf
293
+ - examples/eraserheads-huling-el-bimbo.rb
294
+ - examples/foo-fighters-walking-after-you.ly
295
+ - examples/foo-fighters-walking-after-you.midi
296
+ - examples/foo-fighters-walking-after-you.pdf
297
+ - examples/foo-fighters-walking-after-you.rb
298
298
  - examples/tab-with-alternate-tuning.ly
299
+ - examples/tab-with-alternate-tuning.midi
300
+ - examples/tab-with-alternate-tuning.pdf
299
301
  - examples/tab-with-alternate-tuning.rb
302
+ - examples/tab-with-chords.ly
303
+ - examples/tab-with-chords.midi
304
+ - examples/tab-with-chords.pdf
305
+ - examples/tab-with-chords.rb
300
306
  - examples/tab-with-key-signature.ly
307
+ - examples/tab-with-key-signature.midi
308
+ - examples/tab-with-key-signature.pdf
301
309
  - examples/tab-with-key-signature.rb
302
310
  - examples/tab-with-line-with-no-break.ly
311
+ - examples/tab-with-line-with-no-break.midi
312
+ - examples/tab-with-line-with-no-break.pdf
303
313
  - examples/tab-with-line-with-no-break.rb
304
314
  - examples/tab-with-partial.ly
315
+ - examples/tab-with-partial.midi
316
+ - examples/tab-with-partial.pdf
305
317
  - examples/tab-with-partial.rb
306
318
  - examples/tab-with-repeats.ly
319
+ - examples/tab-with-repeats.midi
320
+ - examples/tab-with-repeats.pdf
307
321
  - examples/tab-with-repeats.rb
322
+ - examples/tab-with-reused-bar-in-stanza.ly
323
+ - examples/tab-with-reused-bar-in-stanza.midi
324
+ - examples/tab-with-reused-bar-in-stanza.pdf
325
+ - examples/tab-with-reused-bar-in-stanza.rb
308
326
  - examples/tab-with-time-signature.ly
327
+ - examples/tab-with-time-signature.midi
328
+ - examples/tab-with-time-signature.pdf
309
329
  - examples/tab-with-time-signature.rb
310
- - examples/tab.ly
311
- - examples/tab.rb
312
330
  - gitara.gemspec
313
331
  - lib/gitara.rb
314
332
  - lib/gitara/app.rb
@@ -1,193 +0,0 @@
1
- \version "2.12.3"
2
- \include "english.ly"
3
-
4
- \paper {
5
- indent = #0
6
- }
7
-
8
- \header {
9
- title = "Wise Up"
10
- composer = "Aimee Mann"
11
- arranger = "Arranged by George Mendoza"
12
- instrument = "Guitar (capo on second fret)"
13
- }
14
-
15
- %-----------------------------------------------------------------------
16
- % Chord Sets
17
-
18
- cChordSetAm = { r4-"Am" r r r }
19
- cChordSetAmC = { r4-"Am" r r-"C" r }
20
- cChordSetBbF = { r4-"Bb" r r-"F" r }
21
- cChordSetCCGE = { r4-"C" r r-"G" r-"E" }
22
- cChordSetD = { r4-"D" r r r }
23
- cChordSetFC = { r4-"F" r r-"C" r }
24
- cChordSetFD = { r4-"F" r r-"D" r }
25
-
26
- %-----------------------------------------------------------------------
27
- % Bars
28
-
29
- vOneBarBeganIt = { \skip 4 <a\3 c'\2 >8 <g\3>8 \skip 4 <g\3 c'\2 >8 <g\3>8 }
30
- vTwoBarBeganIt = { <f\4>4 <f\4>4 <c\5>4 <e\4>4 }
31
- cBarBeganIt = { \cChordSetFC }
32
- sBarBeganIt = { r1 }
33
-
34
- vOneBarItsNot = { r8 <g'\1>4 <a\3>16 <g'\1>8 <g\3>16 <e'\1>4 <g\3>16( <a\3>16) }
35
- vTwoBarItsNot = { <f\4>4 <f\4>4 <c\5>4 <e\4>4 }
36
- cBarItsNot = { \cChordSetFC }
37
- sBarItsNot = { r1 }
38
-
39
- vOneBarItThough = { r8 <d'\2>16( <c'\2>16) r8 <a\3>16 <c'\2>16 r8 <d'\2>16( <c'\2>16) r8 <a\3>8 }
40
- vTwoBarItThough = { <f\4>4 <f\4>4 <d\4>4 <d\4>4 }
41
- cBarItThough = { \cChordSetFD }
42
- sBarItThough = { r1 }
43
-
44
- vOneBarWhatYouThought = { r8 <g'\1>4 <a\3>16 <g'\1>8 <g\3>16 <e'\1>4 <g\3>8 }
45
- vTwoBarWhatYouThought = { <f\4>4 <f\4>4 <c\5>4 <e\4>4 }
46
- cBarWhatYouThought = { \cChordSetFC }
47
- sBarWhatYouThought = { r1 }
48
-
49
- vOneBarWhenYouFirst = { <e'\1>8 <d'\2>16( <c'\2>8) <a\3>8. <c'\2>4 <a\3>8 <c'\2>8 }
50
- vTwoBarWhenYouFirst = { <a,\5>4 <a,\5>8 <e\4>4 <a,\5>4 \skip 8 }
51
- cBarWhenYouFirst = { \cChordSetAm }
52
- sBarWhenYouFirst = { r1 }
53
-
54
- vOneBarYouGot = { <g'\1>8 <a\3>8 <g'\1>8 <a\3>16 <g'\1>8 <g\3>16 <e'\1>4 <g\3>16( <a\3>16) }
55
- vTwoBarYouGot = { <f\4>4 <f\4>4 <c\5>4 <e\4>4 }
56
- cBarYouGot = { \cChordSetFC }
57
- sBarYouGot = { r1 }
58
-
59
-
60
- %-----------------------------------------------------------------------
61
- % Lines
62
-
63
- vOneLineVerseOneLineTwo = { \vOneBarYouGot \vOneBarWhatYouThought \vOneBarWhenYouFirst \vOneBarItThough \break }
64
- vTwoLineVerseOneLineTwo = { \vTwoBarYouGot \vTwoBarWhatYouThought \vTwoBarWhenYouFirst \vTwoBarItThough \break }
65
- cLineVerseOneLineTwo = { \cBarYouGot \cBarWhatYouThought \cBarWhenYouFirst \cBarItThough }
66
- sLineVerseOneLineTwo = { \sBarYouGot \sBarWhatYouThought \sBarWhenYouFirst \sBarItThough }
67
-
68
- vOneLineVerseOneLineOne = { \vOneBarItsNot \vOneBarWhatYouThought \vOneBarWhenYouFirst \vOneBarBeganIt \break }
69
- vTwoLineVerseOneLineOne = { \vTwoBarItsNot \vTwoBarWhatYouThought \vTwoBarWhenYouFirst \vTwoBarBeganIt \break }
70
- cLineVerseOneLineOne = { \cBarItsNot \cBarWhatYouThought \cBarWhenYouFirst \cBarBeganIt }
71
- sLineVerseOneLineOne = { \sBarItsNot \sBarWhatYouThought \sBarWhenYouFirst \sBarBeganIt }
72
-
73
-
74
- %-----------------------------------------------------------------------
75
- % Stanzas
76
-
77
- vOneStanzaVerseOne = { \vOneLineVerseOneLineOne \vOneLineVerseOneLineTwo }
78
- vTwoStanzaVerseOne = { \vTwoLineVerseOneLineOne \vTwoLineVerseOneLineTwo }
79
- cStanzaVerseOne = { \cLineVerseOneLineOne \cLineVerseOneLineTwo }
80
- sStanzaVerseOne = { \sLineVerseOneLineOne \sLineVerseOneLineTwo }
81
-
82
-
83
- %-----------------------------------------------------------------------
84
- % Scores
85
-
86
- vOneScoreTabOneScoreOne = { \vOneStanzaVerseOne }
87
- vTwoScoreTabOneScoreOne = { \vTwoStanzaVerseOne }
88
- cScoreTabOneScoreOne = { \cStanzaVerseOne }
89
- sScoreTabOneScoreOne = { \sStanzaVerseOne }
90
-
91
-
92
- %-----------------------------------------------------------------------
93
- % Voices
94
-
95
- vOne = {
96
- \transposition d''
97
- \vOneScoreTabOneScoreOne
98
- }
99
-
100
- vTwo = {
101
- \transposition d'
102
- \vTwoScoreTabOneScoreOne
103
- }
104
-
105
-
106
- %-----------------------------------------------------------------------
107
- % Stanza Headings
108
-
109
- stanzaHeadings = { \sScoreTabOneScoreOne }
110
-
111
- %-----------------------------------------------------------------------
112
- % Chord Headings
113
-
114
- chordHeadings = { \cScoreTabOneScoreOne }
115
-
116
- %-----------------------------------------------------------------------
117
-
118
- \score {
119
- \new StaffGroup <<
120
- \new Staff <<
121
- \tempo 4 = 75
122
-
123
- \clef "treble_8"
124
-
125
- \new Voice \with { \remove Rest_engraver } {
126
- \stanzaHeadings
127
- }
128
-
129
- \new Voice {
130
- \voiceOne
131
- \vOne
132
- }
133
- \new Voice {
134
- \voiceTwo
135
- \vTwo
136
- }
137
- >>
138
-
139
- \new TabStaff <<
140
- \new TabVoice {
141
- \slurUp
142
- \vOne
143
- }
144
- \new TabVoice {
145
- \slurUp
146
- \vTwo
147
- }
148
- \new TabVoice {
149
- \chordHeadings
150
- }
151
- >>
152
- >>
153
-
154
- \layout {
155
- \context { \Staff
156
- \override TimeSignature #'style = #'numbered
157
- \override StringNumber #'transparent = ##t
158
- }
159
- \context { \TabStaff
160
- \override TimeSignature #'style = #'numbered
161
- }
162
- \context { \Voice
163
- \remove Slur_engraver
164
- }
165
- \context { \TabVoice
166
- \remove Dots_engraver
167
- \remove Stem_engraver
168
- \remove Rest_engraver
169
- }
170
- }
171
- }
172
-
173
- % showLastLength = R1*4
174
- \score {
175
- \new Staff \with {midiInstrument = #"acoustic guitar (nylon)"} <<
176
- \tempo 4 = 75
177
-
178
- \clef "treble_8"
179
-
180
- \new Voice {
181
- \unfoldRepeats {
182
- \vOne
183
- }
184
- }
185
- \new Voice {
186
- \unfoldRepeats {
187
- \vTwo
188
- }
189
- }
190
- >>
191
-
192
- \midi {}
193
- }