tonal-tools 0.1.1 → 1.0.2

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: 104f86d9527406e4ebb2bc443347c1cd6c45c4b8380c8739c435c504a4381842
4
- data.tar.gz: a605b1bdd7c4fc7c20f6a66417422c9e55909bc9eaacaa5e4336280ca8e2f2a4
3
+ metadata.gz: bc35954dbfa03dfe0acca0efda8508d06cffc3259fd7f9d959ff260e099c2de5
4
+ data.tar.gz: 1de6de9804f88b954ec67720e5b29a3de83a6c6d49577de5a679745b5f4491ab
5
5
  SHA512:
6
- metadata.gz: '068a485c121ef0941c05d4fcc2e67e607aa8572fd2ba572e7481f5f54189cdeff0c4e04648b2809db35e2bc533dffe81c406bd0873093719bf5a8ea388718f44'
7
- data.tar.gz: b5d341be94a1ef9bb7c57cf5974b647bcd943151386c8a9fd4615f1a6f3e251ca8567994870d8882263e7963bcdaeb3214490a4bd245fdb423543fc41ef032f9
6
+ metadata.gz: 4f9cd04eab65b20ddf0263910c661337c6a02d47ebabc5277eeaf7358e686f38283d1158ef985ee238625330b338acca9090021d22c10128d92955b3d5f59891
7
+ data.tar.gz: '0858ee0672ee37381878371622d7b46471341e56e7c85bceae5c447a3112199330d59931f5ba070fb5a82d6fd9e1e42d8f66838edb229707c9afbdadb13222cd'
data/data/commas.yml ADDED
@@ -0,0 +1,11 @@
1
+ commas:
2
+ # Interval between two enharmonically equivalent notes, as B# and C, in the Pythogorean tuning. ~23 cents
3
+ ditonic: 531441/524288
4
+ # The interval between a just major third (5:4) and a Pythogorean third (81:64). ~22 cents
5
+ syntonic: 81/80
6
+ # Difference between the syntonic and ditonic commas. ~2 cents
7
+ schisma: 32805/32768
8
+ diaschisma: 2048/2025
9
+ dieses1: 648/625
10
+ dieses2: 128/125
11
+ septimal: 64/63
@@ -30,7 +30,7 @@ class Tonal::Ratio
30
30
  self_in_cents = to_cents
31
31
  within = cents_tolerance.kind_of?(Tonal::Cents) ? cents_tolerance : Tonal::Cents.new(cents: cents_tolerance)
32
32
  [].tap do |results|
33
- ContinuedFraction.new(antecedent.to_f/consequent, conv_limit).convergents_as_rationals.each do |convergent|
33
+ ContinuedFraction.new(antecedent.to_f/consequent, conv_limit).convergents.each do |convergent|
34
34
  ratio2 = ratio.class.new(convergent.numerator,convergent.denominator)
35
35
  results << ratio2 if ratio.class.within_cents?(self_in_cents, ratio2.to_cents, within) && ratio2.within_prime?(max_prime)
36
36
  break if results.length >= depth
@@ -0,0 +1,45 @@
1
+ class Tonal::Comma
2
+ # @return [Hash] of comma key/value pairs
3
+ # @example
4
+ # Tonal::Comma.commas
5
+ # => {"ditonic"=>"531441/524288",
6
+ # "syntonic"=>"81/80",
7
+ # "schisma"=>"32805/32768",
8
+ # ...}
9
+ #
10
+ def self.commas
11
+ @commas ||= JSON.parse(YAML::load_file("#{__dir__}/../../data/commas.yml", aliases: true).to_json)["commas"]
12
+ end
13
+
14
+ # @return [Array] of comma values
15
+ # @example
16
+ # Tonal::Comma.values
17
+ # => [(531441/524288),
18
+ # (81/80),
19
+ # (32805/32768),
20
+ # ...]
21
+ #
22
+ def self.values
23
+ @values ||= commas.values.map(&:to_r)
24
+ end
25
+
26
+ # @return [Array] of comma keys
27
+ # @example
28
+ # Tonal::Comma.keys
29
+ # => ["ditonic",
30
+ # "syntonic",
31
+ # "schisma",
32
+ # ...]
33
+ #
34
+ def self.keys
35
+ @keys ||= commas.keys
36
+ end
37
+
38
+ # @return [Rational] the comma found in the repo
39
+ # @example
40
+ # Tonal::Comma.ditonic => (531441/524288)
41
+ #
42
+ def self.method_missing(comma)
43
+ commas[comma.to_s].to_r
44
+ end
45
+ end
data/lib/tonal/ratio.rb CHANGED
@@ -469,12 +469,12 @@ class Tonal::Ratio
469
469
  # Return label, if defined; or,
470
470
  # Return the "antecedent/consequent", if antecedent is less than 7 digits long; or
471
471
  # Return the floating point representation rounded to 2 digits of precision
472
- @label || ((Math.log10(antecedent).to_i + 1) <= 6 ? "#{antecedent}/#{consequent}" : to_f.round(2))
472
+ (@label || ((Math.log10(antecedent).to_i + 1) <= 6 ? "#{antecedent}/#{consequent}" : to_f.round(2))).to_s
473
473
  end
474
474
 
475
475
  # @return [String] the string representation of Tonal::Ratio
476
476
  # @example
477
- # Tonal::Ratio.new(3, 2).inspect => "[3, 2]"
477
+ # Tonal::Ratio.new(3, 2).inspect => "(3/2)"
478
478
  #
479
479
  def inspect
480
480
  "(#{antecedent}/#{consequent})"
data/lib/tonal/tools.rb CHANGED
@@ -1,9 +1,12 @@
1
1
  module Tonal
2
+ require "yaml"
3
+ require "json"
2
4
  require "prime"
3
5
  require "matrix"
4
6
  require "sorted_set"
5
7
  require "continued_fractions"
6
8
  require "fraction_tree"
9
+ require "tonal/comma"
7
10
  require "tonal/cents"
8
11
  require "tonal/hertz"
9
12
  require "tonal/log"
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tonal-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jose Hales-Garcia
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-01 00:00:00.000000000 Z
11
+ date: 2023-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: yaml
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.6'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.6'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: prime
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -58,28 +86,28 @@ dependencies:
58
86
  requirements:
59
87
  - - "~>"
60
88
  - !ruby/object:Gem::Version
61
- version: '1.8'
89
+ version: '2.0'
62
90
  type: :runtime
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
- version: '1.8'
96
+ version: '2.0'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: fraction-tree
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
101
  - - "~>"
74
102
  - !ruby/object:Gem::Version
75
- version: '0.1'
103
+ version: '1.0'
76
104
  type: :runtime
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
108
  - - "~>"
81
109
  - !ruby/object:Gem::Version
82
- version: '0.1'
110
+ version: '1.0'
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: rspec
85
113
  requirement: !ruby/object:Gem::Requirement
@@ -129,8 +157,10 @@ executables: []
129
157
  extensions: []
130
158
  extra_rdoc_files: []
131
159
  files:
160
+ - data/commas.yml
132
161
  - lib/tonal/approximations.rb
133
162
  - lib/tonal/cents.rb
163
+ - lib/tonal/comma.rb
134
164
  - lib/tonal/extensions.rb
135
165
  - lib/tonal/hertz.rb
136
166
  - lib/tonal/interval.rb
@@ -153,12 +183,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
153
183
  requirements:
154
184
  - - ">="
155
185
  - !ruby/object:Gem::Version
156
- version: '0'
186
+ version: 3.1.2
157
187
  required_rubygems_version: !ruby/object:Gem::Requirement
158
188
  requirements:
159
189
  - - ">="
160
190
  - !ruby/object:Gem::Version
161
- version: '0'
191
+ version: '3.1'
162
192
  requirements: []
163
193
  rubygems_version: 3.4.22
164
194
  signing_key: