- refactor(interval): 📖 remove ignored
prefer_const_constructors
lint #524 - docs(CHANGELOG): 🔖 fix typos and address linked Pull requests #525
Full Changelog: v0.19.0...v0.19.1
- chore(pubspec): 🏗️ bump Dart SDK 3.4.0 #499
- chore(analysis_options): 🕵️ enable new lints and fix
unnecessary_library_name
#500 - feat!(scalable): 💥 allow providing
reference
innumericRepresentation
#501 - feat!(pitch): 💥 use double, triple, and quadruple prime symbols for Helmholtz notation #502
- refactor(tuning): ♻️ remove
Ratio
extension type in favor ofCent.fromRatio
constructor #510 - refactor(utils): ♻️ move
nonZeroSign
method fromint
tonum
extension #511 - refactor!(interval): 💥 make
isDescending
parameter indescending
method positional #521 - chore(pubspec): ⬇️ lower the Dart SDK bound to version 3.3 and upgrade analysis CI to 3.5 #522
- refactor(analysis): 🕵️ add more lint rules and explain ignored diagnostics #523
- feat(utils): ✨ add
Rational
class representation and test cases #493 - feat!: 💥 make comparator operators agree with
compareTo
and==
#498
- chore(deps): ⬆️ bump github/codeql-action from 3.25.4 to 3.25.5 #504
- chore(deps): ⬆️ bump actions/checkout from 4.1.5 to 4.1.6 #503
- chore(deps): ⬆️ bump github/codeql-action from 3.25.5 to 3.25.8 #507
- chore(deps): ⬆️ bump actions/checkout from 4.1.6 to 4.1.7 #508
- chore(deps): ⬆️ bump github/codeql-action from 3.25.8 to 3.25.10 #509
- chore(deps): ⬆️ bump github/codeql-action from 3.25.10 to 3.25.11 #513
- chore(deps): ⬆️ bump dart-lang/setup-dart from 1.6.4 to 1.6.5 #512
- chore(deps): ⬆️ bump very_good_analysis from 5.1.0 to 6.0.0 #514
- chore(deps): ⬆️ bump actions/upload-artifact from 4.3.3 to 4.3.4 #515
- chore(deps): ⬆️ bump github/codeql-action from 3.25.11 to 3.25.12 #516
- chore(deps): ⬆️ bump github/codeql-action from 3.25.12 to 3.25.15 #518
- chore(deps): ⬆️ bump ossf/scorecard-action from 2.3.3 to 2.4.0 #519
- chore(deps): ⬆️ bump actions/upload-artifact from 4.3.4 to 4.3.5 #520
Full Changelog: v0.18.0...v0.19.0
- refactor(note): ♻️ rename
respellByOrdinalDistance
methods #442 - feat(note): ✨ return the next closest spelling in
respellByAccidental
when no respelling is possible #443 - refactor(quality): ♻️ move
isDissonant
check fromInterval
#444 - feat(base_note): ✨ add
next
andprevious
getters #445 - test(interval): 🧪 use shorthand
Size
constructors #447 - fix(quality): 🐛 address wrong
isDissonant
condition forImperfectQuality
#449 - refactor(scale_pattern): ♻️ extract static bit-related methods #451
- refactor(enharmonic): ♻️ rename
ClassMixin
→Enharmonic
mixin #452 - refactor(frequency): ♻️ extract
reference
as 440 Hz #454 - feat(note): ✨ take
temperature
into account when dealing withFrequency
#455 - fix(pitch): 🐛 address
harmonics
wrongly forwarding parameters #456 - ci(scorecards-analysis): 🧑⚕️ add OSSF Scorecards analysis workflow #458
- test(frequency): 🧪 add test case for chained
closestPitch
withtemperature
#459 - refactor(scalable, interval): ♻️ consistently rename
inverse
,inverted
→inversion
#460 - docs(README): 📖 add examples for new methods #461
- fix(pitch): 🐛 address
isEnharmonicWith
not takingoctave
into account #462 - refactor(pitch): ♻️ extract
reference
static constant #463 - refactor: ♻️ remove unnecessary
@immutable
annotation on extension types #464 - docs(README): 📖 address
BaseNote
string representation examples #465 - feat!(tuning): ✨ add new
TuningFork
class and refactorTuningSystem
accordingly #466 - refactor(frequency): ♻️ move
at
and extractCelsius.ratio
methods #467 - refactor(cent): ♻️ extract
divisionsPerSemitone
and renameoctave
#471 - refactor(frequency): ♻️ expose
referenceTemperature
parameter #472 - feat(closest_pitch): ✨ add
respelledSimple
getter #473 - feat(closest_pitch): ✨ add
+
,-
operators #474 - refactor(scale_pattern): ♻️ extract bit-related methods into
BinarySequence
extension #479 - feat(scale_pattern): ✨ add double harmonic major scale #482
- refactor(scale_pattern): ♻️ extract bit-related methods into
BinarySequence
extension #489 - test(closest_pitch): 🧪 add test cases for
toString
rounding #491 - chore(pubspec): 🚚 use correct
repository
URL #492 - fix(pitch): 🐛 address large
ClosestPitch
spellings forharmonics
withtemperature
#470 - feat!(interval): ✨ add
fromSemitones(int)
and renamefromSizeAndSemitones
factory constructors #476 - refactor(hearing_range): ♻️ rename
isAudibleAt
method #457
- chore(deps): ⬆️ bump actions/checkout from 4.1.1 to 4.1.2 #448
- chore(deps): ⬆️ bump actions/cache from 4.0.1 to 4.0.2 #450
- chore(deps): ⬆️ bump actions/upload-artifact from 4.1.0 to 4.3.1 #469
- chore(deps): ⬆️ bump github/codeql-action from 3.24.9 to 3.24.10 #478
- chore(deps): ⬆️ bump dart-lang/setup-dart from 1.6.2 to 1.6.4 #480
- chore(deps): ⬆️ bump actions/upload-artifact from 4.3.1 to 4.3.3 #487
- chore(deps): ⬆️ bump actions/checkout from 4.1.1 to 4.1.4 #486
- chore(deps): ⬆️ bump github/codeql-action from 3.24.10 to 3.25.3 #488
- chore(deps): ⬆️ bump actions/checkout from 4.1.4 to 4.1.5 #497
- chore(deps): ⬆️ bump ossf/scorecard-action from 2.3.1 to 2.3.3 #495
- chore(deps): ⬆️ bump coverallsapp/github-action from 2.2.3 to 2.3.0 #496
- chore(deps): ⬆️ bump github/codeql-action from 3.25.3 to 3.25.4 #494
Full Changelog: v0.17.1...v0.18.0
- fix(deps): 🚚 move
test
to dev_dependencies #441
Full Changelog: v0.17.0...v0.17.1
- refactor!(key_signature): ♻️ rewrite
keys
method to return a Map #401 - docs(README): 📖 remove unit symbol from
Frequency
examples #402 - feat!(interval): ✨ use negative
Size
as descending string representation #403 - refactor(interval): ♻️ extract
IntervalNotation
system #404 - feat!(note): 🔥 use
RomanceNoteNotation
instead of Italian and French #405 - refactor(note): ♻️ allow overriding
accidental
fromNoteNotation
#406 - test(closest_pitch): 🧪 add more tests for
parse
constructor #407 - refactor(note): ♻️ extract common
GermanNoteNotation
system into the dedicatedaccidental
method #408 - docs: 📖 simplify public API return documentation #409
- refactor(interval): ♻️ rename
StandardIntervalNotation
#410 - refactor(scale_degree): ♻️ extract
StandardScaleDegreeNotation
#411 - feat(scale_degree): 🥅 assert
ordinal
andinversion
integer values #412 - refactor!(mode): ♻️ rename
opposite
→parallel
method #414 - refactor(note): ♻️ simplify
GermanNoteNotation.accidental
#415 - refactor: ♻️ rewrite unnecessary
switch
expressions withif
statements #419 - fix(key): 🐛 use lowercased
TonalMode
inNoteNotation.german
keys #421 - feat(scale_degree): ✨ add
inverted
getter #422 - refactor(scale_degree): ♻️ extract
romanNumeral
getter #423 - docs: 📖 comprehensively document common
toString
methods and theirsystem
s #424 - refactor(scale_degree): ♻️ use new
copyWith
method to update individual properties #425 - feat(interval): ✨ add comparison operators
<
,<=
,>
, and>=
#426 - test(just_intonation): 🧪 use
closeTo
with ideal ratio inratio
use cases #427 - feat(key_signature): ✨ add
incrementBy
method #428 - feat!: 💥 make main entity collections unmodifiable #429
- feat(scale_pattern): ✨ make equality enharmonic #394
- refactor(scalable): ♻️ extract
isEnharmonicWith
extension method #430 - feat(scale_pattern): ✨ add binary representation methods #392
- refactor(scale_pattern): ♻️ simplify binary to integer conversion #431
- feat(iterable_extension): ✨ allow overriding
difference
inclosestTo
method #327 - feat(pitch): ✨ add helper
harmonics
method #432 - feat(pitch): ✨ add Helmholtz notation German and Romance variants #433
- feat(interval): ✨ make
perfect
constructor default toPerfectQuality.perfect
#435 - feat(size): ✨ add shorthand getters to create an
Interval
#436 - refactor(size): ♻️ split
PerfectSize
andImperfectSize
sub-extension types #437 - refactor(size): ♻️ redeclare
simple
in extension types to allow chaining #438 - feat(size): ✨ add
inverted
,isDissonant
getters moved fromInterval
#439
- chore(deps): ⬆️ bump actions/cache from 4.0.0 to 4.0.1 #418
Full Changelog: v0.16.0...v0.17.0
- test: ♻️ shorten test descriptions by dropping should #372
- refactor!(key_signature): ♻️ change operator
+
→|
#373 - feat(closest_pitch): ✨ add
frequency
method #374 - test(note): 🧪 add edge test cases for
circleOfFifthsDistance
#375 - refactor(pitch): ♻️ reuse default
Note.toString
return value forScientificPitchNotation
#376 - feat(tonality): ✨ add
isTheoretical
getter #377 - feat(pitch): ✨ add comparison operators
<
,<=
,>
, and>=
#379 - feat(pitch): ✨ add
midiNumber
getter #378 - refactor!(key): ♻️ rename
Tonality
→Key
#380 - docs(key): 📖 addendum to rename
Tonality
→Key
#381 - test(note): 🧪
skip
failing tests #382 - feat(scale): ✨ add
length
getter #383 - feat(note): ✨ rename
toPitchClass
and createPitch.toClass
methods #385 - refactor: ♻️ enforce
@immutable
and declarefinal
Notation classes #386 - refactor: ♻️ rewrite
part of
directives in mini libraries #387 - test: 🧪 remove unnecessary
equals
matcher #388 - refactor(scalable): ♻️ move
toClass
method fromPitch
#391 - feat(scale): ✨ add
isEnharmonicWith
methods #393 - build(pubspec): 🏗️ bump Dart SDK 3.3 #395
- perf(tuning): ⚡️ rewrite
Cent
,Ratio
as extension types #312 - docs(pitch_class): 📖 add more examples for
operator *
#396 - feat!(equal_temperament): 💥 remove default parameter value from
ratioFromSemitones
#397 - docs(tuning_system): 📖 rename old
ratioFromNote
examples #398 - docs(README): 🌟 add Star History Chart #399
- perf(frequency): ⚡️ rewrite as extension type #349
- refactor(interval): ♻️ rewrite
Size
as extension type #311 - test(scalable): ⚡️ use
const
collection literals whenever possible #400
- chore(deps): ⬆️ bump actions/cache from 3.3.3 to 4.0.0 #384
- chore(deps): ⬆️ bump dart-lang/setup-dart from 1.6.1 to 1.6.2 #390
Full Changelog: v0.15.0...v0.16.0
- refactor(tonality): ♻️ rewrite
toString
method intoNoteNotation
#329 - refactor: ♻️ rename methods from
Notation
systems #330 - perf(key_signature): ⚡️ use
empty
whenever possible #331 - feat(accidental): ✨ add
isNatural
getter #332 - docs(key_signature): 📖 address wrong
const
keyword #333 - docs: 📖 add examples to
spellings
methods #334 - feat(note): ✨ compare
spellings
by closest distance #335 - refactor(note): ♻️ extract
switch
expression to a local variable inGermanNoteNotation.tonality
#336 - refactor(interval): ♻️ use
descending
incircleFrom
#337 - refactor(frequency): ♻️ rewrite
ClosestPitch
record into a class #339 - refactor(frequency): ♻️ extract
humanHearingRange
record #338 - refactor(closest_pitch): ♻️ move class to a new file #341
- feat(cent): ✨ override negation operator #342
- feat!(closest_pitch): 💥 remove
hertz
member #343 - feat(pitch): ✨ add
+
,-
operators #344 - refactor(frequency): ♻️ rewrite
HearingRange
record into a class #340 - refactor!(cent): ♻️ rename redundant
unitSymbol
static constant #345 - refactor: ♻️ infer types from
static const
members #346 - chore(gitignore): 🙈 ignore the
tool
directory instead ofbin
#347 - refactor(frequency): ♻️ use
num
forhertz
#348 - refactor(tuning_system): ♻️ rename
pitch
parameter fromratio
#350 - feat(closest_pitch): ✨ add
parse
factory constructor #351 - docs(tuning_system): 📖 rename
generator
getter examples #352 - refactor(quality): ♻️ extract symbols to static constants #353
- refactor(quality): ♻️ move diminished and augmented symbols to
Quality
#354 - refactor(interval): ♻️ rename
fromQualitySemitones
factory constructor #355 - refactor!(quality): ♻️ rename
abbreviation
→symbol
getter #356 - refactor(frequency): ♻️ use
accidental.isSharp
to check whetherisCloserToUpwardsSpelling
#357 - docs(key_signature): 📖 add examples to
fromDistance
factory constructor #358 - feat(key_signature): ✨ add
clean
getter to support cancellation naturals #359 - feat(note): ✨ add
natural
getter #360 - docs: 📖 remove wrong const keywords #361
- docs(accidental): 📖 add symbols to
static const
members #366 - feat(note): ✨ add
showNatural
option toEnglishNoteNotation
#365 - feat(key_signature): ✨ override
+
operator #362 - feat(key_signature): ✨ show cautionary accidentals in
+
when not present inother
#367 - feat(tonality): ✨ add
parallel
getter #368 - fix(key_signature): 🐛 show each cancelled accidental once in edge key signatures #369
- perf(interval): ⚡️ rewrite
circleFrom
as a sync generator #370 - feat!(key_signature): 💥 check for
isCanonical
before evaluatingdistance
#371
- chore(deps): ⬆️ bump dart-lang/setup-dart from 1.6.0 to 1.6.1 #363
- chore(deps): ⬆️ bump actions/cache from 3.3.2 to 3.3.3 #364
Full Changelog: v0.14.0...v0.15.0
- feat(equal_temperament): ✨ override
toString
,operator ==
, andhashCode
#302 - refactor(equal_temperament)!: ♻️ rewrite octave divisions #304
- refactor(interval): ♻️ declare and reassign dynamic
notes
in record #305 - feat(accidental): ✨ add
name
cases for all accidentals #306 - refactor(pitch): ♻️ rename
PositionedNote
→Pitch
#308 - docs: 📖 add related entities in class documentation #309
- feat(note): ✨ add optional
NotationSystem
totoString
methods #307 - build(pubspec): ⬆️ upgrade Dart SDK 3.2 #310
- feat!(pitch): 💥 move
scientificName
andhelmholtzName
totoString
#313 - refactor!(note): ♻️ rename
NotationSystem
→NoteNotation
#314 - refactor!(pitch_class): ♻️ move
integerNotation
totoString
#315 - refactor(note): ♻️ use
major
getter incircleOfFifthsDistance
#317 - docs(transposable): 📖 simplify
transposeBy
documentation #318 - feat(accidental): ✨ add
isFlat
,isSharp
getters #319 - refactor(note): ♻️ rewrite notation systems to allow extending behavior #316
- refactor: ♻️ rename
toClass
methods #320 - docs(README): 📖 use varied descending
Interval
example #323 - refactor(scalable): ♻️ move
semitones
to abstract class #324 - feat!(scalable): 💥 make
difference
return the closest number of semitones #325 - feat(scalable): ✨ add
inverse
,retrograde
getters toScalableIterable
#287 - test(interval): ⚡️ use
const
for literals #328 - fix(pitch_class): 🐛 return descending intervals in
interval
method #286
- build(pubspec): ⬆️ bump
test
to 1.25.0 #326
Full Changelog: v0.13.0...v0.14.0
- fix(note)!: 💥 remove
semitones
chromatic modulo #265 - feat(positioned_note): ✨ add respelling methods #266
- feat(frequency)!: ✨ improve
closestPositionedNote
enharmonic spelling #267 - feat(frequency): ✨ add
harmonics
related methods #268 - feat(frequency): ✨ add
displayString
extension method onClosestPositionedNote
#269 - docs(README): 📖 update recently added methods #270
- feat(positioned_note): ✨ rename frequency method and expose
tuningSystem
#271 - feat(interval)!: ✨ include
notes
indistanceBetween
record #272 - docs(README): 📖 fix CI badge #277
- refactor(chordable): ♻️ expect a
Set
forreplaceSizes
#280 - perf(scalable): ⚡️ rewrite extension methods to return
Iterable
#281 - refactor(scalable): ♻️ override
difference
and implement inPitchClass
#283 - refactor(interval_class): ♻️ rewrite
Interval.fromSemitonesQuality
asresolveClosestSpelling
#284 - docs(note): 📖 improve overall methods documentation #288
- refactor(interval): ♻️ call
fromDelta
infromSemitones
constructor #289 - refactor(quality): ♻️ move
fromInterval
intoInterval.fromQualityDelta
#290 - feat(note): ✨ add
isEnharmonicWith
method #291 - refactor(test): ♻️ create a
SplayTreeSet
of a Set instead of a List #292 - refactor(int_extension): ♻️ extract
nonZeroSign
method #293 - docs(positioned_note): 📖 address documentation examples #295
- perf(key_signature): ⚡️ remove unneeded variable declaration in
tonality
#294 - docs: 📖 remove type parameter references in doc comments #297
- docs(note): 📖 use regular comments for variables #298
- feat(tuning): ✨ introduce new
Ratio
,Cent
and move.cents
to former class #300 - refactor(tuning_system)!: ♻️ move
referenceNote
toTuningSystem
#301 - feat(tuning)!: 💥 add
PythagoreanTuning
tuning system #273
- chore(deps): ⬆️ bump actions/cache from 3.3.1 to 3.3.2 #274
- chore(deps): ⬆️ bump coverallsapp/github-action from 2.2.1 to 2.2.3 #275
- chore(deps): ⬆️ bump actions/checkout from 3.6.0 to 4.0.0 #276
- chore(deps): ⬆️ bump dart-lang/setup-dart from 1.5.0 to 1.5.1 #278
- chore(deps): ⬆️ bump actions/checkout from 4.0.0 to 4.1.0 #279
- chore(deps): ⬆️ bump dart-lang/setup-dart from 1.5.1 to 1.6.0 #296
- chore(deps): ⬆️ bump actions/checkout from 4.1.0 to 4.1.1 #299
Full Changelog: v0.12.0...v0.13.0
- ⚡️ perf(chord_pattern): call
sort
instead of creating aSplayTreeSet
#232 - ♻️ refactor(chord): reuse
augmented
,major
,minor
,diminished
methods fromChordPattern
#233 - ♻️ refactor(scalable): extract private
_ScalableIterable
extension #234 - 📖 docs(music_notes): add library-level documentation comment #235
- ♻️ refactor: sort members following
diminished..augmented
order #236 - 📖 docs: add full public member API documentation #237
- ✨ feat(interval)!: simplify
toString
andQuality.abbreviation
#238 - 🥅 feat(quality): strengthen
parse
exception cases #239 - 🥅 feat(positioned_note): strengthen
parse
exception cases #240 - ♻️ refactor(iterable): rename
comparator
variable #241 - ♻️ refactor(positioned_note): extract
octave
variable inparse
to improve readability #242 - ✨ refactor(pitch_class)!: rename
EnharmonicNote
→PitchClass
#244 - ✨ feat(pitch_class): add
integerNotation
getter #245 - ✨ feat(pitch_class): move modulo operation to the constructor #246
- ✨ feat(interval_class)!: rename
EnharmonicInterval
→IntervalClass
#247 - ♻️ refactor(int_extension): simplify modulo methods #249
- ♻️ refactor(enharmonic): remove unnecessary interface #250
- 💥 feat(tuning_system): generalize
cents
method expectingratio
instead ofsemitones
#251 - 🚀 feat(frequency): add
closestPositionedNote
method #252 - ♻️ refactor(positioned_note): rename
equalTemperamentFrequency
reference parameters consistently #253 - ✨ feat: add
toPitchClass
andtoIntervalClass
methods #254 - ♻️ refactor(base_note): rewrite
transposeBySize
usingincrementBy
#255 - ♻️ refactor(chord_pattern): rename
fromIntervalSteps
factory constructor #257 - ♻️ refactor(scalable): rename
_intervalSteps
getters from_ScalableIterable
#258 - ⚡️ perf(interval_class): remove unnecessary
abs
call onoperator *
#259 - ✨ feat(accidental): add
operator +-
#260 - ⚡️ perf: rewrite
map
calls in favor offor
loops #261 - 📖 docs(README): write comprehensive API walkthrough #243
- ⬆️ chore(deps): bump actions/checkout from 3.5.3 to 3.6.0 #263
Full Changelog: v0.11.1...v0.12.0
- 📌 chore(pubspec): downgrade
test
to 1.24.1 to keep Flutter compatibility #231
Full Changelog: v0.11.0...v0.11.1
- 📄 docs(README): update license badge #207
- 📖 docs(README): fix typo in C♯ example #208
- ♻️ refactor(positioned_note)!: make
octave
argument required #209 - 📖 docs(note): update missing
inOctave
examples #210 - ♻️ refactor: use
incrementBy
method #211 - ♻️ refactor(interval): remove redundant
Scalable<T>
types #212 - 📖 docs(scale): fix wrong
functionChord
examples #213 - ✨ feat(note): add
respellByBaseNoteDistance
method #214 - ✨ feat(enharmonic): allow providing
distance
tospellings
#215 - ♻️ refactor(accidental): extract parsable symbols from
parse
#216 - ✨ feat(enharmonic): remove semitones from
toString
output #218 - ✨ feat(enharmonic): use pipe
|
intoString
output #219 - 💥 refactor(note)!: rewrite semitones starting from 0 instead of 1 #220
- ⚡ perf(positioned_note): extract
parse
expressions to static finals #221 - 💥 feat(interval)!: move
isDissonant
getter fromIntervalSizeExtension
#222 - ♻️ refactor(interval)!: move
inverted
logic fromIntervalSizeExtension
#223 - ♻️ refactor(interval): move
simplified
fromIntervalSizeExtension
#224 - ♻️ refactor(interval): move
isCompound
fromIntervalSizeExtension
#225 - 📖 docs(interval_size_extension): improve
semitones
andisPerfect
comments #226 - 📌 chore(pubspec): downgrade
collection
to 1.17.1 to keep Flutter compatibility #228 - ➖ chore(pubspec): remove
dart_code_metrics
dependency #229 - 💥 refactor(interval)!: rewrite
IntervalSizeExtension
methods as private #227
- ⬆️ chore(deps): bump coverallsapp/github-action from 2.2.0 to 2.2.1 #217
Full Changelog: v0.10.1...v0.11.0
- ✨ feat(interval): take
distance
sign into account incircleFrom
#199 - ✨ feat(enharmonic_note): add pitch-class multiplication operator #200
- ♻️ refactor(base_note): rename
fromSemitones
static method #201 - 🔥 refactor(enharmonic_note)!: remove
shortestFifthsDistance
methods #202 - ✨ feat(tuning_system): add class and test cases #203
- 📖 docs(README): write main library documentation #204
- 📌 chore(pubspec): pin dependencies versions #205
- 📖 docs(README): remove publisher badge #206
Full Changelog: v0.10.0...v0.10.1
Note: the published versioned erroneously contained some changes from 0.10.1.
- ♻️ refactor(interval): rename shorter static constants #177
- ✨ feat(string_extension): add
isUpperCase
andisLowerCase
getters #179 - ✨ feat: add
parse
factory constructors to Note and Interval classes #180 - 🔧 chore(dependabot): add configuration file #181
- 💥 feat(key_signature)!: rewrite based on a list of Notes #184
- ♻️ refactor(key_signature): declare static
empty
constant #185 - ♻️ refactor(key_signature): simplify tonality methods #186
- 🐛 fix(note): return correct distance for extreme Note spellings #187
- ⚡ perf(interval): rewrite
distanceBetween
method avoiding unnecessary iterations #188 - ♻️ refactor(base_note): rewrite
parse
method usingbyName
#189 - ✨ feat(note): add respelling methods #190
- ✨ feat(note): add
respelledSimple
getter #191 - ✨ feat(int_extension): add
incrementBy
method #192 - ✨ feat(interval): add
circleFrom
and related methods onNote
#193 - ✨ feat(interval): add
respellBySize
method #195 - ✨ feat(key_signature)!: rewrite
toString
method #196 - ♻️ refactor(analysis): enable ignored lints #197
- ✨ feat(interval): rewrite distance methods expecting
Scalable
arguments #198
- ⬆️ chore(deps): bump actions/checkout from 3.5.0 to 3.5.3 #182
- ⬆️ chore(deps): bump coverallsapp/github-action from 2.0.0 to 2.2.0 #183
Full Changelog: v0.9.0...v0.10.0
- fix(scale): take descending items into account for
hashCode
#151 - test(note): add test cases for
sharp
,flat
,major
,minor
getters #152 - test(enharmonic): move each
toString
test cases to implementation #153 - feat(harmony): add
Chord
andChordPattern
classes #154 - fix(positioned_note): use correct
hashCode
values #155 - fix(interval_size_extension): return correct
semitones
for large intervals #156 - fix(note): correctly handle compound intervals in
transposeBy
#157 - feat(chord): implement
Transposable
#158 - feat(chord_pattern): add
intervalSteps
factory constructor #159 - test(interval): add compound intervals test cases for
semitones
#160 - feat(interval): add
simplified
getter #161 - refactor: rename
from
→on
#162 - feat(note): add Chord triad getters #163
- feat(scale): add
ScaleDegree
class and methods onScale
#164 - feat(chord_pattern): add
fromQuality
factory constructor #165 - feat(scale_degree): add
raised
,lowered
,major
, andminor
getters #167 - feat(scale_pattern): take
ScaleDegree.quality
into account indegreePattern
#166 - feat(scale_pattern): add
fromChordPattern
factory constructor #168 - feat(scale): add
degree
and renamedegreeChord
methods #169 - refactor(scale): rename
items
→degrees
#170 - refactor(scale_degree): rename
degree
→ordinal
#171 - refactor(scale_pattern): extract helper functions to simplify
degreePattern
method #172 - feat(chord_pattern): add
augmented
,major
,minor
, anddiminished
getters #173 - fix(chord): correctly identify compound intervals in
pattern
getter #174 - feat(harmony): make
Chord
implement extractedChordable
mixin methods #175 - chore(pubspec): bump version 0.9.0 #178
- feat(harmonic_function): add class and
Scale
method #176
Full Changelog: v0.8.0...v0.9.0
- refactor(scale_pattern): rename class #128
- refactor(scale_pattern): rename test file #129
- feat(frequency): add
+
,-
,*
,/
operators #130 - test(interval_size_extension): add test cases for large
semitones
#131 - feat(interval): show quality semitones on
null
abbreviation intoString
#133 - feat(base_note)!: remove support for
intervalSize
isDescending
argument #134 - feat(scalable): add abstract interface with
interval
method #135 - feat(interval): add
+
operator #136 - fix(scale_pattern): check for
descendingIntervalSteps
in==
#137 - feat(scale_pattern): include descending steps in
toString
#138 - fix(scale_pattern): return
mirrored
Scale with descending steps #141 - feat(scale)!: add new class with
pattern
andreversed
getters #139 - fix(scale_pattern): return correct descending
PositionedNote
scale infrom
#142 - refactor(scalable): move to root
lib
directory #143 - feat(enharmonic_interval): add
isDescending
,descending
methods #144 - test(enharmonic_interval): add test cases for
isDescending
,descending
methods #145 - chore(pubspec): bump versions as of
very_good_analysis
5.0.0+1 #146 - feat(positioned_note): add reference
note
forequalTemperamentFrequency
#147 - refactor(note): rename
fifthsDistanceWith
method #148 - test(note): reference failing tests related to #149 #150
Full Changelog: v0.7.0...v0.8.0
- refactor: Extract Frequency #112
- refactor: normalize
isNegative
condition #116 - feat(frequency): override
toString
,==
,hashCode
, andcompareTo
methods #117 - feat(frequency): assert positive
hertz
value #118 - refactor(positioned_note)!: use
Frequency
as a reference #119 - refactor: remove
MusicItem
interface #115 - refactor: PositionedNote composition with Note instead of inheritance #113
- test(positioned_note): add more test cases for
semitonesFromRootHeight
#120 - refactor(transposable): add generic constraint #99
- refactor(base_notes): rename
Notes
→BaseNote
#121 - refactor(enharmonic_note): remove redirecting method on
enharmonicIntervalDistance
#122 - refactor!: consistently rename
isDescending
#123 - feat(note): add Tonality
major
andminor
getters #124 - refactor(base_note): rename
transposeBySize
method #125 - docs(note): migrate missing
PositionedNote
documentation #126 - feat(note): add
sharp
,flat
getters #127
Full Changelog: v0.6.0...v0.7.0
- refactor(interval): extract and reuse
_sizeAbsShift
getter #97 - refactor(mode): rename
compare
static method #98 - feat(positioned_note)!: allow passing
a4Hertzs
toisHumanAudibleAt
#100 - feat(note): add
circleOfFifthsDistance
getter #101 - feat(note): add
compareByFifthsDistance
static comparator #102 - feat(interval): add
descending
method #103 - feat(scale): add
descendingIntervalSteps
#104 - chore: bump versions as of Dart SDK 3.0 #105
Full Changelog: v0.5.1...v0.6.0
- feat(scale): allow passing
EnharmonicNote
tofromNote
#91 - fix(enharmonic_interval): handle descending intervals in
items
#92 - refactor(quality)!: rename
double
todoubly
#93 - refactor(enharmonic): rename
items
→spellings
#94 - fix(interval_size_extension): address
simplified
compound interval sizes #95 - feat(interval): show simplified interval in
toString
#96
Full Changelog: v0.5.0...v0.5.1
- feat(enharmonic_interval): suppress semitones limit #64
- perf(interval): simplify
isPerfect
logic #65 - refactor(accidental): rewrite
symbol
getter using explanatory variables #66 - feat(int_interval_extension): allow compound intervals in
fromSemitones
#67 - feat(enharmonic_interval)!: rewrite distance
semitones
starting from 0 #68 - refactor(enharmonic_interval): change
Transposable
with add/subtract operators #69 - feat(note): implement
Transposable
#70 - refactor(interval): add static const constructors #71
- feat(scale): add class and
fromNote
method #72 - feat(interval)!: change
descending
with negativesize
#73 - refactor(interval_size_extension): rename extension #74
- feat(interval): add negation and multiplication operators #75
- feat(key_signature): throw an assertion error when passing a wrong
Accidental
#77 - feat(scale): add
mirrored
,name
methods and override==
#79 - feat(mode)!: rewrite
Mode
enums #78 - feat(tonality): add
scaleNotes
getter #80 - feat(positioned_note): override
transposeBy
method #81 - docs: add Wikipedia links to
Scale
andMode
#82 - feat(mode)!: use
brightness
as the Dorian Brightness Quotient #83 - refactor(positioned_note): improve
helmholtzName
getter legibility #84 - refactor: replace
quiver
package with nativeObject.hash
#85 - chore(vscode): add
.lock
file association with YAML #86 - feat(interval): add
isDescending
getter #87 - test(interval): add more test cases for descending
Interval
#76 - refactor: replace
EnharmonicNote
withNote
fortransposeBy
#88 - fix(key_signature): use XOR in 0 accidentals assertions #89
- refactor(note): rewrite
fromRawAccidentals
intoKeySignature.majorNote
#90
Full Changelog: v0.4.0...v0.5.0
- test: consistently group test cases by content #22
- fix(enharmonic_note): address edge cases for
items
getter #23 - feat(accidental): bring
increment
method back #24 - test: add test cases for
toString
methods #25 - test(key_signature): add test cases for
tonalities
getter #26 - test(key_signature): add test cases for
fromDistance
method #27 - feat: implement and test Comparable #28
- feat(accidental): show positive sign in
toString
#29 - feat(key_signature): remove × sign in
toString
#30 - test(music): add test case for
circleOfFifths
#31 - test(enharmonic): add test cases for
toString
#32 - test(interval): add test cases for
toString
#33 - test(enharmonic_interval): add test cases for
transposeBy
#34 - refactor(music_item): implement
Comparable
and mark as immutable #35 - test: compare
.hashCode
Set as a List #36 - feat(tonality): improve
compareTo
sorting by note and mode #37 - test(interval): add test cases for interval-related members #39
- feat(intervals): add
isCompound
getter #40 - test(intervals): add test cases for
fromSemitones
#41 - feat!: rewrite
Qualities
enum with properQuality
class #42 - feat(intervals): add
isDissonant
getter #43 - refactor(enharmonic_interval): add static const constructors #44
- feat(interval)!: replace
Intervals
enum withint
value #45 - docs: document
Quality
class and rewrite Example consistently #46 - feat(accidental): add
name
getter #47 - feat(enharmonic_note): add
toClosestNote
method #48 - fix(note): simplify
fromRawAccidentals
accidental increment #49 - refactor(quality): move
qualityFromDelta
toQuality.fromInterval
factory constructor #51 - refactor(interval): move
EnharmonicInterval.fromDesiredSemitones
#52 - test(interval): add test cases for
inverted
#53 - refactor(notes): address
intervalSize
descending logic #54 - test(note): add test cases for
difference
#55 - refactor(tonality): add static const constructors #56
- feat(note): add
octave
member #57 - feat(note): add scientific and Helmholtz notation getters #58
- feat(note): add
equalTemperamentFrequency
#59 - feat(note): add
isHumanAudible
method #60 - refactor(positioned_note): move
Note
methods to subclass #61 - test(tonality): add test cases for
relative
,keySignature
methods #62 - refactor(music_item): remove unnecessary private constructors #63
Full Changelog: v0.3.0...v0.4.0
- chore: bump versions as of Dart SDK 2.19 #7
- refactor(accidental): rewrite new
Accidental
class #8 - docs: reference new
Accidental
class instead of enum #9 - refactor: make
Accidental.natural
default #10 - refactor(enharmonic): rewrite based on
semitones
#11 - refactor(notes): rename notes using the English convention #12
- refactor(accidental): rename
value
→semitones
#13 - refactor(note): add static const constructors #14
- refactor(src): reorganize directories by content #15
- refactor: rewrite
enum
members #16 - refactor(relative_tonalities): remove class #17
- refactor(int_mod_extension): rewrite mod functions into extension methods #18
- refactor(note): move fifths distance functions to class methods #19
- perf(tests): run tests from index
main.dart
file #20 - chore(pubspec): bump version 0.3.0 #21
Full Changelog: v0.2.0...v0.3.0
- (feat) Add
hashCode
methods 528010d
- (fix) Add
fromRawAccidentals
method 5c2f663
- (feat) Added methods for incrementing and decrementing Accidentals value 54c107e 092a5fc
- (feat) Added Accidentals symbols 9ebbd18
- (feat) Coveralls integration 12fc7fa
- (style) Adopt
very_good_analysis
’ strict lint rules 9508807 9139c38 2577579 - (refactor) Migrate to
null-safety
#1 15d1eab - (refactor) Rename and translate enum values b481ef5
- chore(deps): override
meta
v1.6.0 #3 - chore(deps): bump versions as of Dart SDK 2.16 #5
- refactor(enums): replace
toText
with nativename
getter #6
Full Changelog: v0.1.0...v0.2.0
Initial implementation of basic and fundamental operations with notes, intervals, tonalities and key signatures.
Full Changelog: v0.1.0