packages feed

soundgen 0.1.0.1 → 0.1.1.0

raw patch · 2 files changed

+12/−2 lines, 2 files

Files

soundgen.cabal view
@@ -2,7 +2,7 @@ --  see http://haskell.org/cabal/users-guide/  name:                soundgen-version:             0.1.0.1+version:             0.1.1.0 synopsis:            sound generator description:         Simple tone generator. You can decide the tone frequency and duration license:             BSD3
src/Main.hs view
@@ -20,12 +20,22 @@ samples :: Double -> Double ->[[Int32]]
 samples f d = map (:[]) $ sound f samplesPS d (maxBound `div` 2)
 
+samples' :: Double -> Double -> Double -> Double -> [[Int32]] -- play two tones at once
+samples' f1 d1 f2 d2 = map (:[]) $ zipWith (+) (sound f1 samplesPS d1 (maxBound `div` 2)) (sound f2 samplesPS d2 (maxBound `div` 2))
+
+waveData :: Double -> Double -> WAVE
 waveData f d = WAVE header (samples f d) 
 
+waveData' :: Double -> Double -> Double -> Double ->WAVE
+waveData' f1 d1 f2 d2 = WAVE header (samples' f1 d1 f2 d2)
+
 makeWavFile :: WAVE -> IO ()
 makeWavFile wav = putWAVEFile "sound.wav" wav
 
 main = do args <- getArgs  
           case args of 
+               [f1,d1,f2,d2] -> (makeWavFile (waveData' (read f1) (read d1) (read f2) (read d2))) >> putStrLn "Done"
                [f,d] -> (makeWavFile (waveData (read f) (read d))) >> putStrLn "Done"
-               _     -> putStrLn "USAGE: sound <frequency (Hz)> <duration (s)>"
+               _     -> putStrLn "USAGE: sound <frequency  (Hz)> <duration  (s)>" >> 
+                        putStrLn "       sound <frequency1 (Hz)> <duration1 (s)> <frequency2 (Hz)> <duration2 (s)>"
+