musa-dsl 0.22.3 → 0.23.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -1
  3. data/lib/musa-dsl.rb +14 -8
  4. data/lib/musa-dsl/core-ext/deep-copy.rb +12 -1
  5. data/lib/musa-dsl/core-ext/inspect-nice.rb +1 -2
  6. data/lib/musa-dsl/core-ext/smart-proc-binder.rb +13 -11
  7. data/lib/musa-dsl/datasets/p.rb +41 -16
  8. data/lib/musa-dsl/datasets/score/to-mxml/process-pdv.rb +14 -12
  9. data/lib/musa-dsl/datasets/score/to-mxml/process-ps.rb +32 -6
  10. data/lib/musa-dsl/datasets/score/to-mxml/to-mxml.rb +24 -10
  11. data/lib/musa-dsl/generative/backboner.rb +6 -11
  12. data/lib/musa-dsl/generative/generative-grammar.rb +1 -3
  13. data/lib/musa-dsl/generative/markov.rb +10 -6
  14. data/lib/musa-dsl/logger/logger.rb +6 -1
  15. data/lib/musa-dsl/matrix/matrix.rb +9 -7
  16. data/lib/musa-dsl/midi/midi-voices.rb +8 -7
  17. data/lib/musa-dsl/music/scales.rb +1 -1
  18. data/lib/musa-dsl/neumalang/neumalang.rb +1 -1
  19. data/lib/musa-dsl/neumas/array-to-neumas.rb +1 -1
  20. data/lib/musa-dsl/sequencer/base-sequencer-implementation-play-helper.rb +9 -4
  21. data/lib/musa-dsl/sequencer/base-sequencer-implementation-play-timed.rb +30 -129
  22. data/lib/musa-dsl/sequencer/base-sequencer-implementation.rb +10 -24
  23. data/lib/musa-dsl/sequencer/base-sequencer-tick-based.rb +9 -9
  24. data/lib/musa-dsl/sequencer/base-sequencer-tickless-based.rb +3 -5
  25. data/lib/musa-dsl/sequencer/base-sequencer.rb +14 -23
  26. data/lib/musa-dsl/sequencer/sequencer-dsl.rb +9 -7
  27. data/lib/musa-dsl/sequencer/sequencer.rb +7 -0
  28. data/lib/musa-dsl/series/base-series.rb +293 -144
  29. data/lib/musa-dsl/series/buffer-serie.rb +237 -0
  30. data/lib/musa-dsl/series/hash-or-array-serie-splitter.rb +136 -105
  31. data/lib/musa-dsl/series/main-serie-constructors.rb +251 -156
  32. data/lib/musa-dsl/series/main-serie-operations.rb +308 -303
  33. data/lib/musa-dsl/series/proxy-serie.rb +21 -41
  34. data/lib/musa-dsl/series/quantizer-serie.rb +44 -46
  35. data/lib/musa-dsl/series/queue-serie.rb +39 -43
  36. data/lib/musa-dsl/series/series-composer.rb +149 -0
  37. data/lib/musa-dsl/series/series.rb +6 -3
  38. data/lib/musa-dsl/series/timed-serie.rb +343 -0
  39. data/musa-dsl.gemspec +13 -3
  40. metadata +10 -11
  41. data/lib/musa-dsl/series/flattener-timed-serie.rb +0 -61
  42. data/lib/musa-dsl/series/holder-serie.rb +0 -87
  43. data/lib/musa-dsl/series/union-timed-series.rb +0 -109
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 193117ba393c58eaf2387d7b0a5ba54bc7fbad0c6ac2e5a7171997b1629d5f69
4
- data.tar.gz: 5ac3515f62f3c5d8ea34cd91552fb6d0f8d53e40f60d1383fa34a28c0b11289d
3
+ metadata.gz: 38a9835b1d87d869a99fac037037eed22b8eaaf3ad133c70e732578a5631aa79
4
+ data.tar.gz: 7e9057ff2498fc3039baa1d749cb1c23b5fcc42bdb56879aab38c4fafc3d9468
5
5
  SHA512:
6
- metadata.gz: 13ec912683ee5e0f0f0865ff9197e641671c430ed5a59d438b15acb5423f6d18f3f57624d5dd4c348daa69c93ac1d47428809cea84953893a4cb7f9b224613f9
7
- data.tar.gz: b64ee9f844989e4db527787f763089c6bcd5aa050254da270c2c5c3461145aefef9b701da6944cda20b53286bfee2e42650c2a21de864ee8ea53f5d48aff0791
6
+ metadata.gz: 191ea705bc3b3378d5660d1e75e63bb53ef0e53d1030fcae2642ff777b9753118b33af4ec7cf0edaec884c793fecded95d41bc6aef9ad41698feb2ca2c04e14e
7
+ data.tar.gz: 0ee6ed871246af66ed7553a95ec2ca683d874034344b06e3c6128c54f70ec9592b33c7ac0df196dd11dc9a5290bd4c247df008fbf5b4f57af975fbd3a66bb468
data/Gemfile CHANGED
@@ -1,5 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ gem 'logger', '~> 1.4', '>= 1.4.3'
4
+
3
5
  group :neuma do
4
6
  gem 'citrus', '~> 3.0.0'
5
7
  end
@@ -10,8 +12,8 @@ group :transport do
10
12
  end
11
13
 
12
14
  group :test do
13
- gem 'rspec', '~> 3.0'
14
15
  gem 'descriptive-statistics'
16
+ gem 'rspec', '~> 3.0'
15
17
  end
16
18
 
17
19
  group :documentation do
data/lib/musa-dsl.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Musa
2
- VERSION = '0.22.3'
2
+ VERSION = '0.23.0'
3
3
  end
4
4
 
5
5
  require_relative 'musa-dsl/core-ext'
@@ -27,21 +27,30 @@ require_relative 'musa-dsl/music'
27
27
  require_relative 'musa-dsl/generative'
28
28
 
29
29
  module Musa::All
30
+ # Core
31
+ #
30
32
  include Musa::Logger
31
33
 
32
34
  include Musa::Clock
33
35
  include Musa::Transport
34
36
  include Musa::Sequencer
35
37
 
36
- include Musa::Scales
37
- include Musa::Chords
38
+ include Musa::Series
38
39
  include Musa::Datasets
39
40
 
40
41
  include Musa::Neumalang
41
42
  include Musa::Neumas
42
- include Musa::Matrix
43
43
 
44
- include Musa::Series
44
+ include Musa::Transcription
45
+
46
+ include Musa::REPL
47
+
48
+ # Extensions: ojo, el nombre extensions ya se usa para algunos paquetes de core-ext que funcionan con Refinements
49
+ #
50
+ include Musa::Scales
51
+ include Musa::Chords
52
+
53
+ include Musa::Matrix
45
54
 
46
55
  include Musa::Darwin
47
56
  include Musa::Markov
@@ -53,8 +62,5 @@ module Musa::All
53
62
 
54
63
  include Musa::MusicXML
55
64
 
56
- include Musa::Transcription
57
65
  include Musa::Transcriptors
58
-
59
- include Musa::REPL
60
66
  end
@@ -118,7 +118,18 @@ module Musa
118
118
  end
119
119
 
120
120
  def deep_copy_proc(register, object, method, freeze)
121
- register(register, object, object.dup)
121
+ if (receiver_dup = registered(object.binding.receiver, register))
122
+ register(register,
123
+ object,
124
+ proc do |*args, **kargs|
125
+ # when the receiver of the proc is also a duplicated object
126
+ # the new copy of the proc should be the new object, not the original one.
127
+ #
128
+ receiver_dup.instance_exec(object, *args, **kargs, &object)
129
+ end)
130
+ else
131
+ register(register, object, object.dup)
132
+ end
122
133
  end
123
134
 
124
135
  def deep_copy_instance_variables(register, object, duplication, method, freeze)
@@ -12,7 +12,6 @@ module Musa
12
12
  alias to_s inspect
13
13
  end
14
14
 
15
-
16
15
  refine Rational.singleton_class do
17
16
  attr_accessor :to_s_as_inspect
18
17
  end
@@ -43,7 +42,7 @@ module Musa
43
42
  end
44
43
 
45
44
  def to_s
46
- inspect simple: true # !Rational.to_s_as_inspect
45
+ inspect simple: !Rational.to_s_as_inspect
47
46
  end
48
47
  end
49
48
  end
@@ -2,8 +2,8 @@ module Musa
2
2
  module Extension
3
3
  module SmartProcBinder
4
4
  class SmartProcBinder
5
- def initialize(procedure, on_rescue: nil)
6
- @procedure = procedure
5
+ def initialize(block, on_rescue: nil)
6
+ @block = block
7
7
  @on_rescue = on_rescue
8
8
 
9
9
  @key_parameters = {}
@@ -12,7 +12,7 @@ module Musa
12
12
  @value_parameters_count = 0
13
13
  @has_value_rest = false
14
14
 
15
- procedure.parameters.each do |parameter|
15
+ block.parameters.each do |parameter|
16
16
  @key_parameters[parameter[1]] = nil if parameter[0] == :key || parameter[0] == :keyreq
17
17
  @has_key_rest = true if parameter[0] == :keyrest
18
18
 
@@ -21,8 +21,12 @@ module Musa
21
21
  end
22
22
  end
23
23
 
24
+ def proc
25
+ @block
26
+ end
27
+
24
28
  def parameters
25
- @procedure.parameters
29
+ @block.parameters
26
30
  end
27
31
 
28
32
  def call(*value_parameters, **key_parameters)
@@ -41,26 +45,24 @@ module Musa
41
45
  end
42
46
  end
43
47
 
44
- def __call(value_parameters, key_parameters)
48
+ private def __call(value_parameters, key_parameters)
45
49
  effective_value_parameters, effective_key_parameters = apply(*value_parameters, **key_parameters)
46
50
 
47
51
  if effective_key_parameters.empty?
48
52
  if effective_value_parameters.empty?
49
- @procedure.call
53
+ @block.call
50
54
  else
51
- @procedure.call *effective_value_parameters
55
+ @block.call *effective_value_parameters
52
56
  end
53
57
  else
54
58
  if effective_value_parameters.empty?
55
- @procedure.call **effective_key_parameters
59
+ @block.call **effective_key_parameters
56
60
  else
57
- @procedure.call *effective_value_parameters, **effective_key_parameters
61
+ @block.call *effective_value_parameters, **effective_key_parameters
58
62
  end
59
63
  end
60
64
  end
61
65
 
62
- private :__call
63
-
64
66
  def key?(key)
65
67
  @has_key_rest || @key_parameters.include?(key)
66
68
  end
@@ -13,7 +13,7 @@ module Musa::Datasets
13
13
 
14
14
  # TODO if instead of using clone (needed because of p.shift) we use index counter the P elements would be evaluated on the last moment
15
15
 
16
- Musa::Series::E(clone, base_duration) do |p, base_duration|
16
+ Musa::Series::Constructors.E(clone, base_duration) do |p, base_duration|
17
17
  (p.size >= 3) ?
18
18
  { from: p.shift,
19
19
  duration: p.shift * base_duration,
@@ -22,24 +22,13 @@ module Musa::Datasets
22
22
  end
23
23
  end
24
24
 
25
- def to_timed_serie(time_start = nil, base_duration: nil)
25
+ def to_timed_serie(time_start: nil, time_start_component: nil, base_duration: nil)
26
26
  time_start ||= 0r
27
- base_duration ||= 1/4r # TODO review incoherence between neumalang 1/4r base duration for quarter notes and general 1r size of bar
28
-
29
- # TODO if instead of using clone (needed because of p.shift) we use index counter the P elements would be evaluated on the last moment
27
+ time_start += self.first[time_start_component] if time_start_component
30
28
 
31
- Musa::Series::E(clone, base_duration, context: { time: time_start }) do |p, base_duration, context: |
32
- value = p.shift
33
-
34
- if value
35
- r = { time: context[:time], value: value } if !value.nil?
36
-
37
- delta_time = p.shift
38
- context[:time] += delta_time * base_duration if delta_time
29
+ base_duration ||= 1/4r # TODO review incoherence between neumalang 1/4r base duration for quarter notes and general 1r size of bar
39
30
 
40
- r&.extend(AbsTimed)
41
- end
42
- end
31
+ PtoTimedSerie.new(self, base_duration, time_start)
43
32
  end
44
33
 
45
34
  def map(&block)
@@ -55,5 +44,41 @@ module Musa::Datasets
55
44
  end
56
45
  end
57
46
  end
47
+
48
+ class PtoTimedSerie
49
+ include Musa::Series::Serie.base
50
+
51
+ def initialize(origin, base_duration, time_start)
52
+ @origin = origin
53
+ @base_duration = base_duration
54
+ @time_start = time_start
55
+
56
+ init
57
+
58
+ mark_as_prototype!
59
+ end
60
+
61
+ attr_accessor :origin
62
+ attr_accessor :base_duration
63
+ attr_accessor :time_start
64
+
65
+ private def _init
66
+ @index = 0
67
+ @time = @time_start
68
+ end
69
+
70
+ private def _next_value
71
+ if value = @origin[@index]
72
+ @index += 1
73
+ r = { time: @time, value: value }.extend(AbsTimed)
74
+
75
+ delta_time = @origin[@index]
76
+ @index += 1
77
+ @time += delta_time * @base_duration if delta_time
78
+
79
+ r
80
+ end
81
+ end
82
+ end
58
83
  end
59
84
  end
@@ -1,9 +1,9 @@
1
1
  require 'prime'
2
2
 
3
3
  module Musa::Datasets::Score::ToMXML
4
- private
4
+ using Musa::Extension::InspectNice
5
5
 
6
- def process_pdv(measure, bar, divisions_per_bar, element, pointer, logger, do_log)
6
+ private def process_pdv(measure, bar, divisions_per_bar, element, pointer, logger, do_log)
7
7
 
8
8
  pitch, octave, sharps = pitch_and_octave_and_sharps(element[:dataset])
9
9
 
@@ -21,24 +21,26 @@ module Musa::Datasets::Score::ToMXML
21
21
  decompose_as_sum_of_simple_durations(effective_duration))
22
22
 
23
23
  if do_log
24
- logger.debug "\nprocess_pdv #{element}"
25
- logger.debug ""
26
- logger.debug " pointer #{pointer} continue_from_previous #{continue_from_previous_bar} continue_to_next #{continue_to_next_bar}"
27
- logger.debug " effective_start #{effective_start} effective_duration #{effective_duration}"
28
- logger.debug " duration decomposition #{effective_duration_decomposition}"
24
+ logger.debug ''
25
+ logger.debug('process_pdv') { "processing #{element.inspect}" }
26
+ logger.debug { "" }
27
+ logger.debug { " pointer #{pointer.inspect} continue_from_previous #{continue_from_previous_bar} continue_to_next #{continue_to_next_bar}" }
28
+ logger.debug { " effective_start #{effective_start.inspect} effective_duration #{effective_duration.inspect}" }
29
+ logger.debug { " duration decomposition #{effective_duration_decomposition}" }
29
30
  end
30
31
 
31
32
  if pointer > effective_start
32
33
  duration_to_go_back = (pointer - effective_start)
33
34
 
34
- logger.debug "\n -> adding backup #{duration_to_go_back * divisions_per_bar}" if do_log
35
+ logger.debug ''
36
+ logger.debug { " -> adding backup #{duration_to_go_back * divisions_per_bar}" } if do_log
35
37
 
36
38
  measure.add_backup(duration_to_go_back * divisions_per_bar)
37
39
  pointer -= duration_to_go_back
38
40
 
39
41
 
40
42
  elsif pointer < effective_start
41
- warn "\n -> adding start rest duration #{effective_start - pointer} start #{bar + pointer} finish #{bar + effective_start}" if do_log
43
+ logger.warn { " -> adding start rest duration #{effective_start - pointer} start #{bar + pointer} finish #{bar + effective_start}" } if do_log
42
44
 
43
45
  pointer = process_pdv(measure, bar, divisions_per_bar,
44
46
  { start: bar + pointer,
@@ -125,7 +127,7 @@ module Musa::Datasets::Score::ToMXML
125
127
  pointer
126
128
  end
127
129
 
128
- def pitch_and_octave_and_sharps(pdv)
130
+ private def pitch_and_octave_and_sharps(pdv)
129
131
  if pdv[:pitch] == :silence
130
132
  [:silence, nil, nil]
131
133
  else
@@ -143,7 +145,7 @@ module Musa::Datasets::Score::ToMXML
143
145
  end
144
146
  end
145
147
 
146
- def dynamics_index_of(midi_velocity)
148
+ private def dynamics_index_of(midi_velocity)
147
149
  return nil unless midi_velocity
148
150
 
149
151
  # ppp = midi 16 ... fff = midi 127
@@ -153,7 +155,7 @@ module Musa::Datasets::Score::ToMXML
153
155
  .index { |r| r.cover? midi_velocity.round.to_i }
154
156
  end
155
157
 
156
- def dynamics_to_string(dynamics_index)
158
+ private def dynamics_to_string(dynamics_index)
157
159
  return nil unless dynamics_index
158
160
  ['pppppp', 'ppppp', 'pppp', 'ppp', 'pp', 'p', 'mp', 'mf', 'f', 'ff', 'fff'][dynamics_index.round.to_i]
159
161
  end
@@ -1,13 +1,14 @@
1
1
  module Musa::Datasets::Score::ToMXML
2
- private
2
+ using Musa::Extension::InspectNice
3
3
 
4
4
  DynamicsContext = Struct.new(:last_dynamics)
5
5
  private_constant :DynamicsContext
6
6
 
7
- def process_ps(measure, element, context, logger, do_log)
7
+ private def process_ps(measure, element, context, logger, do_log)
8
8
  context ||= DynamicsContext.new
9
9
 
10
- logger.debug "\nprocess_ps #{element}" if do_log
10
+ logger.debug ''
11
+ logger.debug('process_ps') { "processing #{element.inspect}" } if do_log
11
12
 
12
13
  case element[:dataset][:type]
13
14
  when :crescendo, :diminuendo
@@ -15,7 +16,14 @@ module Musa::Datasets::Score::ToMXML
15
16
  dynamics = dynamics_to_string(element[:dataset][:from])
16
17
 
17
18
  if dynamics != context.last_dynamics
18
- measure.add_dynamics dynamics, placement: 'below' if dynamics && element[:dataset][:from] > 0
19
+ if dynamics
20
+ if element[:dataset][:from] < 0
21
+ logger.warn { "dynamics #{element[:dataset][:from]} not renderizable" } if do_log
22
+ elsif element[:dataset][:from] > 0
23
+ measure.add_dynamics dynamics, placement: 'below'
24
+ end
25
+ end
26
+
19
27
  context.last_dynamics = dynamics
20
28
  end
21
29
 
@@ -29,7 +37,16 @@ module Musa::Datasets::Score::ToMXML
29
37
 
30
38
  dynamics = dynamics_to_string(element[:dataset][:to])
31
39
 
32
- measure.add_dynamics dynamics, placement: 'below' if dynamics && element[:dataset][:to] > 0
40
+ if dynamics != context.last_dynamics
41
+ if dynamics
42
+ if element[:dataset][:to] < 0
43
+ logger.warn { "dynamics #{element[:dataset][:to]} not renderizable" } if do_log
44
+ elsif element[:dataset][:to] > 0
45
+ measure.add_dynamics dynamics, placement: 'below'
46
+ end
47
+ end
48
+ end
49
+
33
50
  context.last_dynamics = dynamics
34
51
  end
35
52
 
@@ -37,7 +54,16 @@ module Musa::Datasets::Score::ToMXML
37
54
  dynamics = dynamics_to_string(element[:dataset][:from])
38
55
 
39
56
  if dynamics != context.last_dynamics
40
- measure.add_dynamics dynamics, placement: 'below'
57
+
58
+
59
+ if dynamics
60
+ if element[:dataset][:from] < 0
61
+ logger.warn { "dynamics #{element[:dataset][:to]} not renderizable" } if do_log
62
+ elsif element[:dataset][:from] > 0
63
+ measure.add_dynamics dynamics, placement: 'below'
64
+ end
65
+ end
66
+
41
67
  context.last_dynamics = dynamics
42
68
  end
43
69
 
@@ -1,5 +1,6 @@
1
1
  require_relative '../../../logger'
2
2
  require_relative '../../../musicxml'
3
+ require_relative '../../../core-ext/inspect-nice'
3
4
 
4
5
  require_relative 'process-time'
5
6
  require_relative 'process-pdv'
@@ -10,6 +11,8 @@ module Musa::Datasets; class Score
10
11
  include Musa::MusicXML::Builder
11
12
  include Musa::Datasets
12
13
 
14
+ using Musa::Extension::InspectNice
15
+
13
16
  def to_mxml(beats_per_bar, ticks_per_beat,
14
17
  bpm: nil,
15
18
  title: nil,
@@ -22,7 +25,12 @@ module Musa::Datasets; class Score
22
25
  bpm ||= 90
23
26
  title ||= 'Untitled'
24
27
  creators ||= { composer: 'Unknown' }
25
- logger ||= Musa::Logger::Logger.new
28
+
29
+ if logger.nil?
30
+ logger = Musa::Logger::Logger.new
31
+ logger.debug! if do_log
32
+ end
33
+
26
34
  do_log ||= nil
27
35
 
28
36
  mxml = ScorePartwise.new do |_|
@@ -54,12 +62,16 @@ module Musa::Datasets; class Score
54
62
  end
55
63
 
56
64
  if do_log
57
- logger.debug"\nscore.to_mxl log:"
58
- logger.debug "-----------------"
65
+ logger.debug ""
66
+ logger.debug"score.to_mxml log:"
67
+ logger.debug"------------------"
59
68
  end
60
69
 
61
70
  parts.each_key do |part_id|
62
- fill_part mxml.parts[part_id], beats_per_bar * ticks_per_beat, (parts.size > 1 ? part_id : nil), logger, do_log
71
+ fill_part mxml.parts[part_id],
72
+ beats_per_bar * ticks_per_beat,
73
+ (parts.size > 1 ? part_id : nil),
74
+ logger, do_log
63
75
  end
64
76
 
65
77
  mxml
@@ -74,7 +86,7 @@ module Musa::Datasets; class Score
74
86
  (1..finish || 0).each do |bar|
75
87
  if do_log
76
88
  logger.debug ""
77
- logger.debug msg = "filling part #{part.name} (#{instrument}): processing bar #{bar}"
89
+ logger.debug msg = "filling part #{part.name} (#{instrument || 'nil'}): processing bar #{bar}"
78
90
  logger.debug "-" * msg.size
79
91
  end
80
92
 
@@ -83,7 +95,7 @@ module Musa::Datasets; class Score
83
95
 
84
96
  pointer = 0r
85
97
 
86
- instrument_score = subset { |dataset| dataset[:instrument] == instrument }
98
+ instrument_score = subset { |dataset| instrument.nil? || dataset[:instrument] == instrument }
87
99
 
88
100
  bar_elements = \
89
101
  (instrument_score.changes_between(bar, bar + 1).select { |p| p[:dataset].is_a?(PS) } +
@@ -92,7 +104,7 @@ module Musa::Datasets; class Score
92
104
  e[:dataset].is_a?(PS) ? 0 : 1 ] }
93
105
 
94
106
  if pdvs.empty?
95
- logger.debug "\nadded full bar silence" if do_log
107
+ logger.debug "\nadding full bar silence..." if do_log
96
108
 
97
109
  process_pdv(measure, bar, divisions_per_bar,
98
110
  { start: bar,
@@ -104,7 +116,7 @@ module Musa::Datasets; class Score
104
116
  else
105
117
  first = bar_elements.first
106
118
 
107
- logger.debug "\nfirst element #{first}" if do_log
119
+ logger.debug "\nfirst element #{first.inspect}" if do_log
108
120
 
109
121
  # TODO habrá que arreglar el cálculo de pointer cuando haya avances y retrocesos para que
110
122
  # TODO no añada silencios incorrectos al principio o al final
@@ -113,7 +125,7 @@ module Musa::Datasets; class Score
113
125
 
114
126
  silence_duration = first[:start_in_interval] - bar
115
127
 
116
- logger.debug "\nadded initial silence for duration #{silence_duration}" if do_log
128
+ logger.debug "\nadding initial silence for duration #{silence_duration}..." if do_log
117
129
 
118
130
  pointer = process_pdv(measure, bar, divisions_per_bar,
119
131
  { start: bar,
@@ -124,6 +136,8 @@ module Musa::Datasets; class Score
124
136
  do_log)
125
137
  end
126
138
 
139
+ logger.debug "\nadding PDV and PS elements..." if do_log
140
+
127
141
  bar_elements.each do |element|
128
142
  case element[:dataset]
129
143
  when PDV
@@ -140,7 +154,7 @@ module Musa::Datasets; class Score
140
154
  if pointer < 1r
141
155
  silence_duration = 1r - pointer
142
156
 
143
- logger.debug "\nadded ending silence for duration #{silence_duration}" if do_log
157
+ logger.debug "\nadded ending silence for duration #{silence_duration}..." if do_log
144
158
 
145
159
  process_pdv(measure, bar, divisions_per_bar,
146
160
  { start: bar + pointer,