There is a lot of depth to the question of how a given pitch is
represented. Sometimes you may even want to represent a C as a B#. That
kind of depth is not captured by this implementation. This
implementation basically just observes that black notes have a modifier
on them and which modifier that is depends on which foundation note you
are modifying from.
That seems to be sufficient for a representing notes on a harmonica
face. If the requirements become more intense then this can change.
There is a lot of depth to the question of how a given pitch is represented. Sometimes you may even want to represent a C as a B#. That kind of depth is not captured by this implementation. This implementation basically just observes that black notes have a modifier on them and which modifier that is depends on which foundation note you are modifying from.
That seems to be sufficient for a representing notes on a harmonica face. If the requirements become more intense then this can change.