packages feed

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