diff --git a/csound-expression.cabal b/csound-expression.cabal
--- a/csound-expression.cabal
+++ b/csound-expression.cabal
@@ -1,5 +1,5 @@
 Name:          csound-expression
-Version:       4.4
+Version:       4.4.1
 Cabal-Version: >= 1.6
 License:       BSD3
 License-file:  LICENSE
@@ -68,7 +68,7 @@
   Ghc-Options:    -Wall
   Build-Depends:
         base >= 4, base < 5, process, data-default, Boolean >= 0.1.0, colour >= 2.0,
-        csound-expression-typed >= 0.0.7.0, csound-expression-opcodes >= 0.0.1
+        csound-expression-typed >= 0.0.7.1, csound-expression-opcodes >= 0.0.1
   Hs-Source-Dirs:      src/
   Exposed-Modules:
         Csound.Base
diff --git a/src/Csound/Air/Wav.hs b/src/Csound/Air/Wav.hs
--- a/src/Csound/Air/Wav.hs
+++ b/src/Csound/Air/Wav.hs
@@ -182,13 +182,15 @@
     deriving (Show, Eq, Enum)
 
 -- | Loads the sample in the table. The sample should be short. The size of the table is limited.
--- It's up to 6 minutes for 
+-- It's up to 3 minutes for 44100 sample rate (sr), 2.9 minutes for 48000 sr, 1.4 minutes for 96000 sr.
 ramSnd :: LoopMode -> Sig -> String -> Sig2
 ramSnd loopMode speed file = loscil3 1 speed t `withDs` [1, int $ fromEnum loopMode]
     where t 
             | isMp3 file = mp3s file 0
             | otherwise  = wavs file 0 0
 
+-- | Loads the sample in the table. The sample should be short. The size of the table is limited.
+-- It's up to 6 minutes for 44100 sample rate (sr), 5.9 minutes for 48000 sr, 2.8 minutes for 96000 sr.
 ramSnd1 :: LoopMode -> Sig -> String -> Sig
 ramSnd1 loopMode speed file 
     | isMp3 file = (\(aleft, aright) -> 0.5 * (aleft + aright)) $ loscil3 1 speed (mp3s file 0) `withDs` [1, int $ fromEnum loopMode]
diff --git a/src/Csound/IO.hs b/src/Csound/IO.hs
--- a/src/Csound/IO.hs
+++ b/src/Csound/IO.hs
@@ -44,10 +44,10 @@
 import Data.Monoid
 import Data.Default
 import Csound.Typed
-import Csound.Types(Sig2, Sig4)
+import Csound.Types(Sig2, Sig4, Sig6, Sig8)
 import Csound.Control.Gui
 
-import Csound.Options(setSilent, setMa)
+import Csound.Options(setSilent, setMa, setDac)
 
 render :: Sigs a => Options -> SE a -> IO String
 render = renderOutBy 
@@ -64,61 +64,66 @@
 instance RenderCsd Sig where
     renderCsdBy opt a = render opt (return a)
 
-instance RenderCsd (Sig, Sig) where
+instance RenderCsd Sig2 where
     renderCsdBy opt a = render opt (return a)
 
-instance RenderCsd (Sig, Sig, Sig, Sig) where
+instance RenderCsd Sig4 where
     renderCsdBy opt a = render opt (return a)
 
-instance RenderCsd (Sig, Sig, Sig, Sig, Sig, Sig) where
+instance RenderCsd Sig6 where
     renderCsdBy opt a = render opt (return a)
 
-instance RenderCsd (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig) where
+instance RenderCsd Sig8 where
     renderCsdBy opt a = render opt (return a)
-{-
-instance RenderCsd 
-    ( (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)
-    , (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig) ) where  
+
+instance RenderCsd (Sig8, Sig8) where  
     renderCsdBy opt a = render opt (return a)
 
-instance RenderCsd 
-    ( (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)
-    , (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)
-    , (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)
-    , (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig) ) where  
+instance RenderCsd (Sig8, Sig8, Sig8, Sig8) where  
     renderCsdBy opt a = render opt (return a)
--}
+
 instance RenderCsd (SE Sig) where
     renderCsdBy opt a = render opt a
 
-instance RenderCsd (SE (Sig, Sig)) where
+instance RenderCsd (SE Sig2) where
     renderCsdBy opt a = render opt a
 
-instance RenderCsd (SE (Sig, Sig, Sig, Sig)) where
+instance RenderCsd (SE Sig4) where
     renderCsdBy opt a = render opt a
 
-instance RenderCsd (SE (Sig, Sig, Sig, Sig, Sig, Sig)) where
+instance RenderCsd (SE Sig6) where
     renderCsdBy opt a = render opt a
 
-instance RenderCsd (SE (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)) where
+instance RenderCsd (SE Sig8) where
     renderCsdBy opt a = render opt a
 
-{-
-instance RenderCsd (SE 
-    ( (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)
-    , (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig) )) where  
+instance RenderCsd (SE (Sig8, Sig8)) where  
     renderCsdBy opt a = render opt a
 
-instance RenderCsd (SE 
-    ( (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)
-    , (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)
-    , (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)
-    , (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig) )) where  
+instance RenderCsd (SE (Sig8, Sig8, Sig8, Sig8)) where  
     renderCsdBy opt a = render opt a
--}
-instance (Sigs a, Sigs b) => RenderCsd (a -> b) where
+
+instance (Sigs a) => RenderCsd (a -> Sig) where
     renderCsdBy opt f = renderEffBy opt (return . f)
 
+instance (Sigs a) => RenderCsd (a -> Sig2) where
+    renderCsdBy opt f = renderEffBy opt (return . f)
+
+instance (Sigs a) => RenderCsd (a -> Sig4) where
+    renderCsdBy opt f = renderEffBy opt (return . f)
+
+instance (Sigs a) => RenderCsd (a -> Sig6) where
+    renderCsdBy opt f = renderEffBy opt (return . f)
+
+instance (Sigs a) => RenderCsd (a -> Sig8) where
+    renderCsdBy opt f = renderEffBy opt (return . f)
+
+instance (Sigs a) => RenderCsd (a -> (Sig8, Sig8)) where
+    renderCsdBy opt f = renderEffBy opt (return . f)
+
+instance (Sigs a) => RenderCsd (a -> (Sig8, Sig8, Sig8, Sig8)) where
+    renderCsdBy opt f = renderEffBy opt (return . f)
+
 instance (Sigs a, Sigs b) => RenderCsd (a -> SE b) where
     renderCsdBy opt f = renderEffBy opt f
 
@@ -211,7 +216,7 @@
     where phi file = do
             runWithUserInterrupt $ player ++ " " ++ file
 
--- | Renders csound code to file @tmp.csd@ and plays it with @-odac@ option
+-- | Renders csound code to file @tmp.csd@ with flags set to @-odac@ and @-Ma@
 -- (sound output goes to soundcard in real time).
 dac :: (RenderCsd a) => a -> IO ()
 dac = dacBy def
@@ -220,8 +225,8 @@
 dacBy :: (RenderCsd a) => Options -> a -> IO ()
 dacBy opt' a = do
     writeCsdBy opt "tmp.csd" a
-    runWithUserInterrupt $ "csound -odac " ++ "tmp.csd" 
-    where opt = opt' <> setMa 
+    runWithUserInterrupt $ "csound " ++ "tmp.csd" 
+    where opt = opt' <> (setMa <> setDac)
 
 -- | Output to dac with virtual midi keyboard.
 vdac :: (RenderCsd a) => a -> IO ()
diff --git a/src/Csound/Types.hs b/src/Csound/Types.hs
--- a/src/Csound/Types.hs
+++ b/src/Csound/Types.hs
@@ -78,12 +78,6 @@
 import Data.Boolean
 import Csound.Typed.Types
 
-type Sig2 = (Sig, Sig)
-type Sig3 = (Sig, Sig, Sig)
-type Sig4 = (Sig, Sig, Sig, Sig)
-type Sig6 = (Sig, Sig, Sig, Sig, Sig, Sig)
-type Sig8 = (Sig, Sig, Sig, Sig, Sig, Sig, Sig, Sig)
-
 -- | Gets an init-rate value from the list by index.
 atArg :: (Tuple a, Arg a) => [a] -> D -> a
 atArg as ind = guardedArg (zip (fmap (\x -> int x ==* ind) [0 .. ]) as) (head as)
