packages feed

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 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)