Skip to content

Commit

Permalink
Refactor enharmonicPCEquivs and enharmonicPCEquivs' functions
Browse files Browse the repository at this point in the history
  • Loading branch information
Bernardo Barros committed Mar 30, 2024
1 parent 9f91382 commit f51d914
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions src/Pitch/Pitch.hs
Original file line number Diff line number Diff line change
Expand Up @@ -237,28 +237,29 @@ allPCRationals = fmap pcToRational allPitchClasses

enharmonicPCEquivs :: Rational -> [(Rational, PitchClass)]
enharmonicPCEquivs val =
[(v, pc) | pc <- liftA2 PitchClass [C, D, E, F, G, A, B] allAccidentals, let v = pcToRational pc, v `mod'` 12 == val `mod'` 12]
[(v, pc) | pc <- allPitchClasses, let v = pcToRational pc, v `mod'` 12 == val `mod'` 12]

enharmonicPCEquivs' :: PitchClass -> [(Rational, PitchClass)]
enharmonicPCEquivs' pc =
[(v, pc') | pc' <- liftA2 PitchClass [C, D, E, F, G, A, B] allAccidentals, let v = pcToRational pc', v `mod'` 12 == pcToRational pc `mod'` 12]
[(v, pc') | pc' <- allPitchClasses, let v = pcToRational pc', v `mod'` 12 == pcToRational pc `mod'` 12]

type EnharmonicMapping = [(Rational, [PitchClass])]

enharmonicMapping :: [Rational] -> EnharmonicMapping
enharmonicMapping = fmap (\r -> (r, snd <$> enharmonicPCEquivs r))
enharmonicMapping = map (\r -> (r, fmap snd (enharmonicPCEquivs r)))

enharmonics :: PitchClass -> [PitchClass]
enharmonics pc = fromMaybe [pc] (lookup (pcToRational pc) out)
enharmonics pc = fromMaybe [pc] (lookup (pcToRational pc) enharmonicMap)
where
out = enharmonicMapping [pcToRational pc]
enharmonicMap = enharmonicMapping allPCRationals

allEnharmonics :: [[PitchClass]]
allEnharmonics = fmap enharmonics allPitchClasses

allEnharmonicsMapping :: [(PitchClass, [PitchClass])]
allEnharmonicsMapping = zip allPitchClasses allEnharmonics


{- ---------------------------- playground -----------------------------------
c = PitchClass C Natural
Expand Down

0 comments on commit f51d914

Please sign in to comment.