\begin{code}
module Music.Analysis.Abstract.Instruments where
import Music.Analysis.Base (Number)
import Music.Analysis.PF (mapL)
import Music.Analysis.Abstract.Settings (Settings,
union, fromList, text, priority)
import Music.Analysis.Abstract.Motive
import Music.Analysis.Abstract.Voices as Voices
import Data.Function ((.))
import Prelude ()
\end{code}
This are defined default settings.
\begin{code}
type MultiInstrumentNode = [MultiVoiceNode]
type MultiInstrumentAbsolute = [MultiVoiceAbsolute]
type MultiInstrumentRelative = [MultiVoiceRelative]
settings :: Settings
settings = Voices.settings `union`
fromList [("InstrumentName", text "Piano" priority)]
\end{code}
\begin{code}
transpose :: Number -> Motive MultiInstrumentAbsolute ->
Motive MultiInstrumentAbsolute
transpose n = joinMotiveList . mapL (Voices.transpose n) . splitMotiveList
tempo :: Number -> Motive MultiInstrumentAbsolute ->
Motive MultiInstrumentAbsolute
tempo n = joinMotiveList . mapL (Voices.tempo n) . splitMotiveList
duration :: Motive MultiInstrumentNode -> [Number]
duration = mapL Voices.duration . splitMotiveList
reverse :: Motive MultiInstrumentNode -> Motive MultiInstrumentNode
reverse = joinMotiveList . mapL Voices.reverse . splitMotiveList
absolute :: Motive MultiInstrumentRelative -> Motive MultiInstrumentAbsolute
absolute = joinMotiveList . mapL Voices.absolute . splitMotiveList
relative :: Motive MultiInstrumentAbsolute -> Motive MultiInstrumentRelative
relative = joinMotiveList . mapL Voices.relative . splitMotiveList
\end{code}