Safe Haskell | None |
---|---|
Language | Haskell2010 |
It is recommended to view this Haddock documentation using the -q local
option
so that, for example, the types Data.EventList.Relative.TimeBody.T
,
Sound.MIDI.File.T
, and Sound.MIDI.File.Event.T
don't all get displayed
simply as T
. Otherwise, hover over the types to see what is referred to.
- newtype Beats = Beats {}
- newtype Seconds = Seconds {}
- newtype BPS = BPS {}
- decodeFile :: Sound.MIDI.File.T -> Data.Either.Either [Data.EventList.Relative.TimeBody.T Beats Sound.MIDI.File.Event.T] [Data.EventList.Relative.TimeBody.T Seconds Sound.MIDI.File.Event.T]
- encodeFileBeats :: Sound.MIDI.File.Type -> Prelude.Integer -> [Data.EventList.Relative.TimeBody.T Beats Sound.MIDI.File.Event.T] -> Sound.MIDI.File.T
- minResolution :: [Data.EventList.Relative.TimeBody.T Beats Sound.MIDI.File.Event.T] -> Prelude.Integer
- readTempo :: Sound.MIDI.File.Event.T -> Data.Maybe.Maybe BPS
- showTempo :: BPS -> Sound.MIDI.File.Event.T
- makeTempo :: Beats -> Seconds -> BPS
- applyTempo :: BPS -> Beats -> Seconds
- unapplyTempo :: BPS -> Seconds -> Beats
- applyTempoTrack :: TempoMap -> Data.EventList.Relative.TimeBody.T Beats a -> Data.EventList.Relative.TimeBody.T Seconds a
- unapplyTempoTrack :: TempoMap -> Data.EventList.Relative.TimeBody.T Seconds a -> Data.EventList.Relative.TimeBody.T Beats a
- data TempoMap
- makeTempoMap :: Data.EventList.Relative.TimeBody.T Beats Sound.MIDI.File.Event.T -> TempoMap
- tempoMapFromBPS :: Data.EventList.Relative.TimeBody.T Beats BPS -> TempoMap
- tempoMapToBPS :: TempoMap -> Data.EventList.Relative.TimeBody.T Beats BPS
- applyTempoMap :: TempoMap -> Beats -> Seconds
- unapplyTempoMap :: TempoMap -> Seconds -> Beats
- readSignature :: Sound.MIDI.File.Event.T -> Data.Maybe.Maybe Beats
- showSignature :: Beats -> Data.Maybe.Maybe Sound.MIDI.File.Event.T
- data MeasureMap
- type MeasureBeats = (Data.Int.Int, Beats)
- data MeasureMode
- measures :: Data.Int.Int -> Beats -> Beats
- makeMeasureMap :: MeasureMode -> Data.EventList.Relative.TimeBody.T Beats Sound.MIDI.File.Event.T -> MeasureMap
- measureMapFromLengths :: MeasureMode -> Data.EventList.Relative.TimeBody.T Beats Beats -> MeasureMap
- measureMapToLengths :: MeasureMap -> Data.EventList.Relative.TimeBody.T Beats Beats
- applyMeasureMap :: MeasureMap -> Beats -> MeasureBeats
- unapplyMeasureMap :: MeasureMap -> MeasureBeats -> Beats
- trackName :: Numeric.NonNegative.Class.C t => Data.EventList.Relative.TimeBody.T t Sound.MIDI.File.Event.T -> Data.Maybe.Maybe Data.String.String
- setTrackName :: Numeric.NonNegative.Class.C t => Data.String.String -> Data.EventList.Relative.TimeBody.T t Sound.MIDI.File.Event.T -> Data.EventList.Relative.TimeBody.T t Sound.MIDI.File.Event.T
- readTrackName :: Sound.MIDI.File.Event.T -> Data.Maybe.Maybe Data.String.String
- showTrackName :: Data.String.String -> Sound.MIDI.File.Event.T
- trackSplitZero :: Numeric.NonNegative.Class.C t => Data.EventList.Relative.TimeBody.T t a -> ([a], Data.EventList.Relative.TimeBody.T t a)
- trackGlueZero :: Numeric.NonNegative.Class.C t => [a] -> Data.EventList.Relative.TimeBody.T t a -> Data.EventList.Relative.TimeBody.T t a
- trackTakeZero :: Numeric.NonNegative.Class.C t => Data.EventList.Relative.TimeBody.T t a -> [a]
- trackDropZero :: Numeric.NonNegative.Class.C t => Data.EventList.Relative.TimeBody.T t a -> Data.EventList.Relative.TimeBody.T t a
- trackJoin :: (Numeric.NonNegative.Class.C t, Data.Ord.Ord a) => Data.EventList.Relative.TimeBody.T t (Data.EventList.Relative.TimeBody.T t a) -> Data.EventList.Relative.TimeBody.T t a
- trackSplit :: Numeric.NonNegative.Class.C t => t -> Data.EventList.Relative.TimeBody.T t a -> (Data.EventList.Relative.TimeBody.T t a, Data.EventList.Relative.TimeBody.T t a)
- trackTake :: Numeric.NonNegative.Class.C t => t -> Data.EventList.Relative.TimeBody.T t a -> Data.EventList.Relative.TimeBody.T t a
- trackDrop :: Numeric.NonNegative.Class.C t => t -> Data.EventList.Relative.TimeBody.T t a -> Data.EventList.Relative.TimeBody.T t a
- extractFirst :: Numeric.NonNegative.Class.C t => (a -> Data.Maybe.Maybe b) -> Data.EventList.Relative.TimeBody.T t a -> Data.Maybe.Maybe ((t, b), Data.EventList.Relative.TimeBody.T t a)
Types
Musical time, measured in beats a.k.a. quarter notes.
Real time, measured in seconds.
A ratio between musical time and real time, measured in beats per second.
Reading/writing MIDI files
decodeFile :: Sound.MIDI.File.T -> Data.Either.Either [Data.EventList.Relative.TimeBody.T Beats Sound.MIDI.File.Event.T] [Data.EventList.Relative.TimeBody.T Seconds Sound.MIDI.File.Event.T] Source
Assigns units to the tracks in a MIDI file. Supports both the common ticks-based files as well as real-time SMPTE-encoded files.
encodeFileBeats :: Sound.MIDI.File.Type -> Prelude.Integer -> [Data.EventList.Relative.TimeBody.T Beats Sound.MIDI.File.Event.T] -> Sound.MIDI.File.T Source
Encodes the tracks' beat positions in ticks, using the given resolution.
Positions will be rounded if necessary; see minResolution
.
minResolution :: [Data.EventList.Relative.TimeBody.T Beats Sound.MIDI.File.Event.T] -> Prelude.Integer Source
To correctly encode all the given tracks without rounding, the resolution must be a multiple of the returned number.
Tempos
readTempo :: Sound.MIDI.File.Event.T -> Data.Maybe.Maybe BPS Source
Extracts the tempo from a tempo change event.
showTempo :: BPS -> Sound.MIDI.File.Event.T Source
Creates a MIDI event to set the tempo to the given value. Rounds the tempo to the nearest whole "microseconds per beat" if necessary.
makeTempo :: Beats -> Seconds -> BPS Source
Creates a tempo as a ratio of a music duration to a real time duration.
applyTempo :: BPS -> Beats -> Seconds Source
Uses a tempo to convert from musical time to real time.
unapplyTempo :: BPS -> Seconds -> Beats Source
Uses a tempo to convert from real time to musical time.
applyTempoTrack :: TempoMap -> Data.EventList.Relative.TimeBody.T Beats a -> Data.EventList.Relative.TimeBody.T Seconds a Source
unapplyTempoTrack :: TempoMap -> Data.EventList.Relative.TimeBody.T Seconds a -> Data.EventList.Relative.TimeBody.T Beats a Source
Converts between positions in musical time and real time.
applyTempoMap :: TempoMap -> Beats -> Seconds Source
unapplyTempoMap :: TempoMap -> Seconds -> Beats Source
Measures and time signatures
readSignature :: Sound.MIDI.File.Event.T -> Data.Maybe.Maybe Beats Source
Given a MIDI event, if it is a time signature event, returns the length of one measure set by the time signature.
showSignature :: Beats -> Data.Maybe.Maybe Sound.MIDI.File.Event.T Source
Given a measure length, tries to encode it as a MIDI time signature.
data MeasureMap Source
Converts between a simple beat position, and a measure offset plus a beat position.
type MeasureBeats = (Data.Int.Int, Beats) Source
A number of measures (starting from 0), and an offset within that measure (also starting from 0).
data MeasureMode Source
What to do when makeMeasureMap
finds a misaligned time signature?
measures :: Data.Int.Int -> Beats -> Beats Source
The duration of a number of measures in a given time signature.
makeMeasureMap :: MeasureMode -> Data.EventList.Relative.TimeBody.T Beats Sound.MIDI.File.Event.T -> MeasureMap Source
Computes the measure map, given the tempo track from the MIDI.
measureMapFromLengths :: MeasureMode -> Data.EventList.Relative.TimeBody.T Beats Beats -> MeasureMap Source
applyMeasureMap :: MeasureMap -> Beats -> MeasureBeats Source
Uses the measure map to compute which measure a beat position is in.
unapplyMeasureMap :: MeasureMap -> MeasureBeats -> Beats Source
Uses the measure map to convert a measures+beats position to just beats.
Track names
trackName :: Numeric.NonNegative.Class.C t => Data.EventList.Relative.TimeBody.T t Sound.MIDI.File.Event.T -> Data.Maybe.Maybe Data.String.String Source
Looks for a track name event at position zero.
setTrackName :: Numeric.NonNegative.Class.C t => Data.String.String -> Data.EventList.Relative.TimeBody.T t Sound.MIDI.File.Event.T -> Data.EventList.Relative.TimeBody.T t Sound.MIDI.File.Event.T Source
Removes any existing track name events at position zero and adds a new one.
Misc. track operations
trackSplitZero :: Numeric.NonNegative.Class.C t => Data.EventList.Relative.TimeBody.T t a -> ([a], Data.EventList.Relative.TimeBody.T t a) Source
Combines trackTakeZero
and trackDropZero
.
trackGlueZero :: Numeric.NonNegative.Class.C t => [a] -> Data.EventList.Relative.TimeBody.T t a -> Data.EventList.Relative.TimeBody.T t a Source
Prepends the given events to the event list at position zero.
trackTakeZero :: Numeric.NonNegative.Class.C t => Data.EventList.Relative.TimeBody.T t a -> [a] Source
Returns the list of events at position zero of the event list.
trackDropZero :: Numeric.NonNegative.Class.C t => Data.EventList.Relative.TimeBody.T t a -> Data.EventList.Relative.TimeBody.T t a Source
Drops all events at position zero of the event list.
trackJoin :: (Numeric.NonNegative.Class.C t, Data.Ord.Ord a) => Data.EventList.Relative.TimeBody.T t (Data.EventList.Relative.TimeBody.T t a) -> Data.EventList.Relative.TimeBody.T t a Source
Equivalent to join
, except Data.EventList.Relative.TimeBody.T
doesn't have a Control.Monad.Monad
instance, presumably because Data.EventList.Relative.TimeBody.merge
has an Data.Ord.Ord
constraint.
trackSplit :: Numeric.NonNegative.Class.C t => t -> Data.EventList.Relative.TimeBody.T t a -> (Data.EventList.Relative.TimeBody.T t a, Data.EventList.Relative.TimeBody.T t a) Source
trackTake :: Numeric.NonNegative.Class.C t => t -> Data.EventList.Relative.TimeBody.T t a -> Data.EventList.Relative.TimeBody.T t a Source
Drops all events at or after the given time from the event list.
trackDrop :: Numeric.NonNegative.Class.C t => t -> Data.EventList.Relative.TimeBody.T t a -> Data.EventList.Relative.TimeBody.T t a Source
Drops the given amount of time from the start of the event list. Events that are exactly at the time that is dropped will be kept in the list.
extractFirst :: Numeric.NonNegative.Class.C t => (a -> Data.Maybe.Maybe b) -> Data.EventList.Relative.TimeBody.T t a -> Data.Maybe.Maybe ((t, b), Data.EventList.Relative.TimeBody.T t a) Source
Finds and extracts the first event for which the function returns Data.Maybe.Just
.