musa-dsl 0.23.18 → 0.23.19

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7b3da8a6794922e430f83799de2679402d3bfefda3208fa1788f0beedb1ae55e
4
- data.tar.gz: 8583d5e0e518ff221cdf8b3f7cd6bc96ffe5a2c8b6c86ae53eb7d339b2a0eabd
3
+ metadata.gz: 69d8893b895c8b836a51be4f7fc7b51fbab501383c6e3780d0af52e82f1bb324
4
+ data.tar.gz: 017f7f8a8fb2cd5b3104d6c1f5c5acd535ea3db4c4285d15f1c81fe792cf123c
5
5
  SHA512:
6
- metadata.gz: 06642f37659b697dca34396cca40aaa0ee30788cb2905e29ae9e2be16d3df570e1195996d50b81d10506059b37ef319f0c7c0aec8ccf789a35dc5d4734ba19ce
7
- data.tar.gz: bd2c24988b5f1ef6e11d3b426de27a8ed46a9ca14f08f4d7eb1fbcff95e6854f839bb369e716c3ed05b393852571440bffbb223e2d3333a82900b62ffd0ce0db
6
+ metadata.gz: 681651cd39523a69d2cbe3fe7271b79ab6f8c0d616cabd8f7d9ef4e0af8f8bbaaed39d41977c35900a748057af8a274b5672762340b98537b9f1d2cba7c5b401
7
+ data.tar.gz: 29cc0e37bf4f3513d78e32776c9df7a6a622c913a965f7bef8944bd0961ef7f8e23bfc348dbbe9eb7d18a211e224f6f27acc95210340bbad05aacde0d34f5404
@@ -3,7 +3,7 @@ require_relative 'clock'
3
3
  module Musa
4
4
  module Clock
5
5
  class TimerClock < Clock
6
- def initialize(period = nil, ticks_per_beat: nil, bpm: nil, correction: nil, logger: nil, do_log: nil)
6
+ def initialize(period = nil, ticks_per_beat: nil, bpm: nil, correction: nil, delayed_ticks_error: nil, logger: nil, do_log: nil)
7
7
  do_log ||= false
8
8
 
9
9
  super()
@@ -20,6 +20,7 @@ module Musa
20
20
  @started = false
21
21
  @paused = false
22
22
 
23
+ @delayed_ticks_error = delayed_ticks_error
23
24
  @logger = logger
24
25
  @do_log = do_log
25
26
  end
@@ -56,7 +57,12 @@ module Musa
56
57
  @run = true
57
58
 
58
59
  while @run
59
- @timer = Timer.new(@period, correction: @correction, stop: true, logger: @logger, do_log: @do_log)
60
+ @timer = Timer.new(@period,
61
+ correction: @correction,
62
+ stop: true,
63
+ delayed_ticks_error: @delayed_ticks_error,
64
+ logger: @logger,
65
+ do_log: @do_log)
60
66
 
61
67
  @timer.run do
62
68
  yield if block_given?
@@ -3,10 +3,12 @@ module Musa
3
3
  class Timer
4
4
  attr_accessor :period
5
5
 
6
- def initialize(period_in_seconds, correction: nil, stop: nil, logger: nil, do_log: nil)
7
- @period = period_in_seconds.rationalize
6
+ def initialize(tick_period_in_seconds, correction: nil, stop: nil, delayed_ticks_error: nil, logger: nil, do_log: nil)
7
+ @period = tick_period_in_seconds.rationalize
8
8
  @correction = (correction || 0r).rationalize
9
9
  @stop = stop || false
10
+
11
+ @delayed_ticks_error = delayed_ticks_error || 1.0
10
12
  @logger = logger
11
13
  @do_log = do_log
12
14
  end
@@ -21,10 +23,15 @@ module Musa
21
23
  yield
22
24
 
23
25
  @next_moment += @period
24
- to_sleep = (@next_moment + @correction) - Process.clock_gettime(Process::CLOCK_MONOTONIC)
25
-
26
- if @do_log && to_sleep.negative?
27
- @logger&.error "Timer delayed #{-to_sleep}s (near #{(-to_sleep / @period).round} ticks)"
26
+ to_sleep = (@next_moment + @correction) - Process.clock_gettime(Process::CLOCK_MONOTONIC)
27
+
28
+ if @do_log && to_sleep.negative? & @logger
29
+ tick_errors = -to_sleep / @period
30
+ if tick_errors >= @delayed_ticks_error
31
+ @logger.error "Timer delayed #{tick_errors.round(2)} ticks (#{-to_sleep}s)"
32
+ else
33
+ @logger.warn "Timer delayed #{tick_errors.round(2)} ticks (#{-to_sleep}s)"
34
+ end
28
35
  end
29
36
 
30
37
  sleep to_sleep if to_sleep > 0.0
data/lib/musa-dsl.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Musa
2
- VERSION = '0.23.18'
2
+ VERSION = '0.23.19'
3
3
  end
4
4
 
5
5
  require_relative 'musa-dsl/core-ext'
data/musa-dsl.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'musa-dsl'
3
- s.version = '0.23.18'
3
+ s.version = '0.23.19'
4
4
  s.date = '2021-09-28'
5
5
  s.summary = 'A simple Ruby DSL for making complex music'
6
6
  s.description = 'Musa-DSL: A Ruby framework and DSL for algorithmic sound and musical thinking and composition'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: musa-dsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.23.18
4
+ version: 0.23.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Javier Sánchez Yeste