ruby-mext 0.17.0 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 14bb04ea6a49d39b2bfff16e1caaad92dbb6242ce7482dc1293c48f01d578aac
4
- data.tar.gz: 81aa5f792ce7265f175350a02c787e1ed0f0d025bfc289a566fc211e5c87c692
3
+ metadata.gz: d9b83368400b233efcb67e07aa764cb5d2e94b0b1b5e9b4ff2a920a2792a79ff
4
+ data.tar.gz: 42d1153c6aefcc11f0df912d83217664389330b727c290615ce876e7f94a063b
5
5
  SHA512:
6
- metadata.gz: 444a91aeb11d33fa0104690b7f6fa05d298531a760ff6fd13787dbf4a56a052eed491664ad841ce73a8ccea29c8607d87afbf04e69f3a69bab8c1e2d135668c4
7
- data.tar.gz: 375f273a8ac894dc2ac4ab2b9efd226780f79575651c4e2d439bce4d5a65a27270e6f916fbec47dfd93924108e177fb5c1e11e1d53326c06df73831e8ae2e7ab
6
+ metadata.gz: 1c39bfe3de9837b0373507e98dcce6998c04b13e1bc6c25b106ca6fba1497208e0585c8785bc453e772ce6e8bbfc4bb2cdca4a5da85eb49233692bd53e801595
7
+ data.tar.gz: 6c0fb5664761bd1298a69d7f7a2b9c8893b1035bb72824d2f42c891c137272dc56fefa2c2f3261861a81bf98b2cb30e231c312e41cf4685b0a6ad11986ddc043
@@ -8,5 +8,6 @@ end
8
8
  function
9
9
  line
10
10
  expon
11
+ log
11
12
  stepwise
12
13
  ).each { |f| require File.join(Mext::MATH_PATH, f) }
@@ -0,0 +1,91 @@
1
+ require 'cmath'
2
+
3
+ module Math
4
+
5
+ class Log < Function
6
+
7
+ attr_reader :y_start, :y_end, :base
8
+ attr_reader :a, :b, :c
9
+
10
+ #
11
+ # +DEFAULT_BASE+: default logarithmic curvature factor for +Log()+
12
+ #
13
+ DEFAULT_BASE = Math::E
14
+
15
+ #
16
+ # +Math::Log.new(ystart, yend, xstart, xend, base = DEFAULT_BASE)+:
17
+ #
18
+ # exponential curve `y = e^(a*x + b) + c` where:
19
+ #
20
+ # `c = yend + base`
21
+ #
22
+ # Arguments are:
23
+ #
24
+ # +ystart+, +yend+: start/end y values required
25
+ # +xstart+, +xend+: start/end x values
26
+ # +base+: the curvature factor
27
+ #
28
+ #:nodoc:
29
+ def initialize(ys, ye, xs, xe, base = DEFAULT_BASE)
30
+ @y_start = ys
31
+ @y_end = ye
32
+ @x_start = xs
33
+ @x_end = xe
34
+ @base = base
35
+ setup
36
+ end
37
+
38
+ #:doc:
39
+ #
40
+ # +y(x)+:
41
+ #
42
+ # Returns a real value (forcing any complex result to its modulus) for any
43
+ # given x
44
+ #
45
+ #:nodoc:
46
+ def y(x)
47
+ (CMath::log(self.a*x + self.b) + self.c).abs # we want a real number result, no complex please
48
+ end
49
+
50
+ def label
51
+ "base: #{self.base}"
52
+ end
53
+
54
+ class << self
55
+
56
+ #
57
+ # +from_yaml(yaml_hash)+:
58
+ #
59
+ # creates a Math::Log class from a yaml file which must have the
60
+ # relevant fields:
61
+ #
62
+ # +x_start+
63
+ # +x_end+
64
+ # +y_start+
65
+ # +y_end+
66
+ # +base+
67
+ #
68
+ def from_yaml(yh)
69
+ args = [yh['y_start'], yh['y_end'], yh['x_start'], yh['x_end'], yh['base']]
70
+ new(*args)
71
+ end
72
+
73
+ end
74
+
75
+ private
76
+
77
+ def setup
78
+ @c = self.y_end + self.base
79
+
80
+ log_sv = self.y_start - self.c # start value of the exponential
81
+ log_ev = self.y_end - self.c # end value of the exponential
82
+ x_length = self.x_end - self.x_start
83
+
84
+ @a = (CMath::exp(log_ev) - CMath::exp(log_sv)) / x_length;
85
+ @b= CMath::exp(log_sv) - (self.a * x_start);
86
+ end
87
+
88
+ end
89
+
90
+ end
91
+
@@ -1,3 +1,3 @@
1
1
  module Mext
2
- VERSION = '0.17.0'
2
+ VERSION = '0.18.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-mext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicola Bernardini
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-14 00:00:00.000000000 Z
11
+ date: 2019-07-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: wavefile
@@ -140,6 +140,7 @@ files:
140
140
  - lib/mext/math/expon.rb
141
141
  - lib/mext/math/function.rb
142
142
  - lib/mext/math/line.rb
143
+ - lib/mext/math/log.rb
143
144
  - lib/mext/math/stepwise.rb
144
145
  - lib/mext/music.rb
145
146
  - lib/mext/music/pitch_class.rb