diff --git a/lib/src/tuning/tuning_system.dart b/lib/src/tuning/tuning_system.dart index f0111d91..de68783e 100644 --- a/lib/src/tuning/tuning_system.dart +++ b/lib/src/tuning/tuning_system.dart @@ -57,18 +57,21 @@ class EqualTemperament extends TuningSystem { double ratio([int semitones = 1]) => math.pow(2, semitones / octaveDivisions).toDouble(); - /// Returns the number of cents for [semitones] in this [EqualTemperament]. + /// Returns the number of cents for [ratio] in this [EqualTemperament]. /// /// See [Cent](https://en.wikipedia.org/wiki/Cent_(music)). /// /// Example: /// ```dart - /// EqualTemperament.edo12.cents() == 100 - /// EqualTemperament.edo12.cents(7) == 700 - /// EqualTemperament.edo19.cents() == 63.16 + /// var ratio = EqualTemperament.edo12.ratio; + /// EqualTemperament.edo12.cents(ratio()) == 100 + /// EqualTemperament.edo12.cents(ratio(7)) == 700 + /// + /// ratio = EqualTemperament.edo19.ratio; + /// EqualTemperament.edo19.cents(ratio()) == 63.16 /// ``` - double cents([int semitones = 1]) => - math.log(ratio(semitones)) / + double cents(double ratio) => + math.log(ratio) / math.log(2) * 100 * EqualTemperament.edo12.octaveDivisions; @@ -90,6 +93,6 @@ class EqualTemperament extends TuningSystem { semitonesUpToP5 += divisionEntry.value; } - return cents(semitonesUpToP5); + return cents(ratio(semitonesUpToP5)); } } diff --git a/test/src/tuning/tuning_system_test.dart b/test/src/tuning/tuning_system_test.dart index a4367986..014da959 100644 --- a/test/src/tuning/tuning_system_test.dart +++ b/test/src/tuning/tuning_system_test.dart @@ -26,16 +26,20 @@ void main() { group('.cents()', () { test( - 'should return the number of cents for semitones in this ' - 'EqualTemperament', + 'should return the number of cents for ratio in this EqualTemperament', () { - expect(EqualTemperament.edo12.cents(), closeTo(100, 0.01)); - expect(EqualTemperament.edo12.cents(6), closeTo(600, 0.01)); - expect(EqualTemperament.edo12.cents(12), closeTo(1200, 0.01)); + var ratio = EqualTemperament.edo12.ratio; + expect(EqualTemperament.edo12.cents(ratio()), closeTo(100, 0.01)); + expect(EqualTemperament.edo12.cents(ratio(6)), closeTo(600, 0.01)); + expect(EqualTemperament.edo12.cents(ratio(12)), closeTo(1200, 0.01)); - expect(EqualTemperament.edo19.cents(), closeTo(63.16, 0.01)); - expect(EqualTemperament.edo19.cents(10), closeTo(631.58, 0.01)); - expect(EqualTemperament.edo19.cents(19), closeTo(1200, 0.01)); + ratio = EqualTemperament.edo19.ratio; + expect(EqualTemperament.edo19.cents(ratio()), closeTo(63.16, 0.01)); + expect( + EqualTemperament.edo19.cents(ratio(10)), + closeTo(631.58, 0.01), + ); + expect(EqualTemperament.edo19.cents(ratio(19)), closeTo(1200, 0.01)); }, ); });