midi-util 0.2.0.1 → 0.2.1
raw patch · 3 files changed
+14/−3 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Sound.MIDI.Util: instance (GHC.Read.Read b, GHC.Read.Read a) => GHC.Read.Read (Sound.MIDI.Util.DoubleKey a b)
- Sound.MIDI.Util: instance (GHC.Show.Show b, GHC.Show.Show a) => GHC.Show.Show (Sound.MIDI.Util.DoubleKey a b)
- Sound.MIDI.Util: instance Data.Semigroup.Semigroup Sound.MIDI.Util.BPS
- Sound.MIDI.Util: instance Data.Semigroup.Semigroup Sound.MIDI.Util.Beats
- Sound.MIDI.Util: instance Data.Semigroup.Semigroup Sound.MIDI.Util.Seconds
+ Sound.MIDI.Util: instance (GHC.Read.Read a, GHC.Read.Read b) => GHC.Read.Read (Sound.MIDI.Util.DoubleKey a b)
+ Sound.MIDI.Util: instance (GHC.Show.Show a, GHC.Show.Show b) => GHC.Show.Show (Sound.MIDI.Util.DoubleKey a b)
+ Sound.MIDI.Util: instance GHC.Base.Semigroup Sound.MIDI.Util.BPS
+ Sound.MIDI.Util: instance GHC.Base.Semigroup Sound.MIDI.Util.Beats
+ Sound.MIDI.Util: instance GHC.Base.Semigroup Sound.MIDI.Util.Seconds
+ Sound.MIDI.Util: timeSigAt :: Beats -> MeasureMap -> TimeSig
- Sound.MIDI.Util: extractFirst :: (C t) => (a -> Maybe b) -> T t a -> Maybe ((t, b), T t a)
+ Sound.MIDI.Util: extractFirst :: C t => (a -> Maybe b) -> T t a -> Maybe ((t, b), T t a)
- Sound.MIDI.Util: setTrackName :: (C t) => String -> T t T -> T t T
+ Sound.MIDI.Util: setTrackName :: C t => String -> T t T -> T t T
- Sound.MIDI.Util: trackDrop :: (C t) => t -> T t a -> T t a
+ Sound.MIDI.Util: trackDrop :: C t => t -> T t a -> T t a
- Sound.MIDI.Util: trackDropZero :: (C t) => T t a -> T t a
+ Sound.MIDI.Util: trackDropZero :: C t => T t a -> T t a
- Sound.MIDI.Util: trackGlueZero :: (C t) => [a] -> T t a -> T t a
+ Sound.MIDI.Util: trackGlueZero :: C t => [a] -> T t a -> T t a
- Sound.MIDI.Util: trackName :: (C t) => T t T -> Maybe String
+ Sound.MIDI.Util: trackName :: C t => T t T -> Maybe String
- Sound.MIDI.Util: trackSplit :: (C t) => t -> T t a -> (T t a, T t a)
+ Sound.MIDI.Util: trackSplit :: C t => t -> T t a -> (T t a, T t a)
- Sound.MIDI.Util: trackSplitZero :: (C t) => T t a -> ([a], T t a)
+ Sound.MIDI.Util: trackSplitZero :: C t => T t a -> ([a], T t a)
- Sound.MIDI.Util: trackTake :: (C t) => t -> T t a -> T t a
+ Sound.MIDI.Util: trackTake :: C t => t -> T t a -> T t a
- Sound.MIDI.Util: trackTakeZero :: (C t) => T t a -> [a]
+ Sound.MIDI.Util: trackTakeZero :: C t => T t a -> [a]
Files
- changelog.md +4/−0
- midi-util.cabal +3/−3
- src/Sound/MIDI/Util.hs +7/−0
changelog.md view
@@ -1,5 +1,9 @@ ## v0.2.1 + * add `timeSigAt` function++## v0.2.0.1+ * Semigroup fix for GHC 8.4 (requires `non-negative` 0.1.2 with same fix) ## v0.2
midi-util.cabal view
@@ -1,5 +1,5 @@ name: midi-util-version: 0.2.0.1+version: 0.2.1 synopsis: Utility functions for processing MIDI files description: Common high-level tasks when processing MIDI files.@@ -26,11 +26,11 @@ exposed-modules: Sound.MIDI.Util build-depends:- base >= 4.7 && < 4.12+ base >= 4.7 && < 5 , midi >= 0.2.1 && < 0.3 , event-list >= 0.1.1 && < 0.2 , non-negative >= 0.1.2 && < 0.2- , containers >= 0.5.5 && < 0.6+ , containers >= 0.5.5 && < 0.7 hs-source-dirs: src default-language: Haskell2010 ghc-options: -Wall
src/Sound/MIDI/Util.hs view
@@ -23,6 +23,7 @@ , measureMapFromTimeSigs, measureMapToTimeSigs , applyMeasureMap, unapplyMeasureMap , measureLengthToTimeSig+, timeSigAt -- * Track names , trackName, setTrackName, readTrackName, showTrackName -- * Misc. track operations@@ -327,6 +328,12 @@ unapplyMeasureMap (MeasureMap mm) (msr, bts) = case Map.lookupLE (LookupB msr) mm of Just (DoubleKey b m, tsig) -> b + fromIntegral (msr - m) * timeSigLength tsig + bts _ -> translationError "unapplyMeasureMap" (msr, bts)++-- | Returns the time signature active at the given beats position.+timeSigAt :: Beats -> MeasureMap -> TimeSig+timeSigAt bts (MeasureMap mm) = case Map.lookupLE (LookupA bts) mm of+ Just (_, tsig) -> tsig+ Nothing -> translationError "timeSigAt" bts -- | Combines 'trackTakeZero' and 'trackDropZero'. trackSplitZero :: (NNC.C t) => RTB.T t a -> ([a], RTB.T t a)