module Euterpea.IO.Audio
  ( module Euterpea.IO.Audio.BasicSigFuns,
    module Euterpea.IO.Audio.Basics,
    module Euterpea.IO.Audio.Types,
    module Euterpea.IO.Audio.IO,
    module Euterpea.IO.Audio.Render,
    writeWav,
    writeWavNorm
  ) where

import Euterpea.IO.Audio.BasicSigFuns
import Euterpea.IO.Audio.Basics
import Euterpea.IO.Audio.Types
import Euterpea.IO.Audio.IO
import Euterpea.IO.Audio.Render

writeWav :: String
-> [(InstrumentName, Instr (Signal p () a))] -> Music a -> IO ()
writeWav String
fname [(InstrumentName, Instr (Signal p () a))]
iMap Music a
m = 
    let (Double
d,Signal p () a
s) = Music a
-> [(InstrumentName, Instr (Signal p () a))]
-> (Double, Signal p () a)
forall p a b.
(Clock p, ToMusic1 a, AudioSample b) =>
Music a -> InstrMap (Signal p () b) -> (Double, Signal p () b)
renderSF Music a
m [(InstrumentName, Instr (Signal p () a))]
iMap
    in  String -> Double -> Signal p () a -> IO ()
forall a p.
(AudioSample a, Clock p) =>
String -> Double -> Signal p () a -> IO ()
outFile String
fname Double
d Signal p () a
s

writeWavNorm :: String
-> [(InstrumentName, Instr (Signal p () a))] -> Music a -> IO ()
writeWavNorm String
fname [(InstrumentName, Instr (Signal p () a))]
iMap Music a
m = 
    let (Double
d,Signal p () a
s) = Music a
-> [(InstrumentName, Instr (Signal p () a))]
-> (Double, Signal p () a)
forall p a b.
(Clock p, ToMusic1 a, AudioSample b) =>
Music a -> InstrMap (Signal p () b) -> (Double, Signal p () b)
renderSF Music a
m [(InstrumentName, Instr (Signal p () a))]
iMap
    in  String -> Double -> Signal p () a -> IO ()
forall a p.
(AudioSample a, Clock p) =>
String -> Double -> Signal p () a -> IO ()
outFileNorm String
fname Double
d Signal p () a
s