synthesizer-alsa-0.4: src/Synthesizer/Dimensional/ALSA/Server/Test.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE Rank2Types #-}
module Synthesizer.Dimensional.ALSA.Server.Test where
import Synthesizer.Dimensional.ALSA.Server.Instrument (ping, )
import Synthesizer.Dimensional.ALSA.Server.Common
import qualified Synthesizer.Dimensional.ALSA.MIDI as MIDI
import qualified Synthesizer.EventList.ALSA.MIDI as MIDIEv
import qualified Synthesizer.Storable.ALSA.Play as PlaySt
import qualified Synthesizer.Generic.ALSA.MIDI as AlsaG
import qualified Synthesizer.Dimensional.Signal.Private as SigA
import qualified Synthesizer.Dimensional.Process as Proc
import qualified Synthesizer.Storable.Signal as SigSt
import qualified Data.StorableVector.Lazy as SVL
import qualified Data.EventList.Relative.TimeBody as EventList
import qualified Algebra.DimensionTerm as Dim
import qualified Number.DimensionTerm as DN
import NumericPrelude.Numeric
import NumericPrelude.Base hiding (break, )
sequence1 :: IO ()
sequence1 =
-- print =<<
-- File.renderTimeVoltageMonoDoubleToInt16 sampleRate "test.wav"
SVL.writeFile "test.f32"
(SigA.scalarSamples (DN.toNumberWithDimension Dim.voltage)
(SigA.render sampleRate
(let evs t = EventList.cons t [] (evs (20-t))
{-
evs0 =
EventList.cons 10 [makeNote AlsaMidi.NoteOn 60] $
EventList.cons 10 [makeNote AlsaMidi.NoteOn 64] $
evs 10
-}
in MIDI.runFilter (evs 10)
(MIDI.sequence PlaySt.defaultChunkSize
(DN.voltage 1) channel ping))))
sequence2 ::
EventList.T MIDIEv.StrictTime [SigSt.T Real]
sequence2 =
fmap (map SigA.body) $
flip Proc.process sampleRate
(let evs t = EventList.cons t [] (evs (20-t))
in MIDI.runFilter (evs 10)
(MIDI.prepareTones channel AlsaG.errorNoProgram
(const ping)))