diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -167,3 +167,8 @@
 
 * Seventeenth version revised A. Fixed issues with being not compiled and duplicate export in 'DobutokO.Sound.IntermediateF'. Added two new functions 'soxE' and
 'soxE1'. 
+
+## 0.18.0.0 -- 2020-03-26
+
+* Eighteenth version. Added three new funcions to the DobutokO.Sound.IntermediateF module for recording and playing of the files.
+Some documentation improvements.
diff --git a/DobutokO/Sound/IntermediateF.hs b/DobutokO/Sound/IntermediateF.hs
--- a/DobutokO/Sound/IntermediateF.hs
+++ b/DobutokO/Sound/IntermediateF.hs
@@ -49,20 +49,26 @@
   -- *** Generalized
   , soxE
   , soxE1
+  -- *** Playing and recording
+  , recE
+  , rec1E
+  , playE
 ) where
 
 import Control.Concurrent (myThreadId,forkIO,threadDelay,killThread)
 import qualified Data.List as L (sort)
 import Control.Exception (onException)
+import Control.Exception.FinalException (FinalException (NotRecorded,ExecutableNotProperlyInstalled),catchEnd)
 import Data.List (isPrefixOf,isSuffixOf,(\\))
 import Data.Char (isDigit,isSpace)
 import qualified Data.Vector as V 
 import System.Directory
-import SoXBasics (playA,durationA)
+import SoXBasics (playA,durationA,recA)
 import EndOfExe (showE)
 import System.Process (readProcessWithExitCode)
-import Data.Maybe (fromJust)
+import Data.Maybe (fromJust,isJust)
 import System.Exit (ExitCode (ExitSuccess))
+import System.Info (os)
 
 -- | Gets sizes of the \"result\*.wav\" files in the current directory. 
 getFileRSizes :: IO (V.Vector Integer)
@@ -290,7 +296,8 @@
 -- Besides, you can specify other SoX effects after reverberation in a list of 'String'. The syntaxis is that every separate literal must be
 -- a new element in the list. If you plan to create again mono audio in the end of processment, then probably use 'reverb1E' funcion instead. 
 -- If you would like to use instead of \"reverb\" its modification \"reverb -w\" effect (refer to SoX documentation), then probably it is more
--- convenient to use 'reverbWE' function.
+-- convenient to use 'reverbWE' function. Please, check by yourself whether you have enough permissions to read and write to the 'FilePath'-specified
+-- file and to the containing it directory. The function is not intended to be used in otherwise cases.
 reverbE :: FilePath -> [String] -> IO ()
 reverbE file arggs = do
   (code,_,_) <- readProcessWithExitCode (fromJust (showE "sox")) ([file,file ++ "reverb.wav","reverb"] ++ arggs) ""
@@ -301,6 +308,8 @@
        putStrLn $ "DobutokO.Sound.IntermediateF.reverbE: file \"" ++ file ++ "\" has not been successful. The file has not been changed at all. "
 
 -- | The same as 'reverbE', but at the end file is being mixed to obtain mono audio. The name of the temporary file is ((name-of-the-file) ++ \"reverb1.wav\").
+-- Please, check by yourself whether you have enough permissions to read and write to the 'FilePath'-specified
+-- file and to the containing it directory. The function is not intended to be used in otherwise cases.
 reverb1E :: FilePath -> [String] -> IO ()
 reverb1E file arggs = do
   (code,_,_) <- readProcessWithExitCode (fromJust (showE "sox")) ([file,file ++ "reverb1.wav","reverb"] ++ arggs ++ ["channels","1"]) ""
@@ -312,6 +321,8 @@
 
 -- | The same as 'reverbE', but uses \"reverb -w\" effect instead of \"reverb\". The name of the temporary file is
 -- ((name-of-the-file) ++ \"reverbW.wav\"). Please, for more information, refer to SoX documentation.
+-- Please, check by yourself whether you have enough permissions to read and write to the 'FilePath'-specified
+-- file and to the containing it directory. The function is not intended to be used in otherwise cases.
 reverbWE :: FilePath -> [String] -> IO ()
 reverbWE file arggs = do
   (code,_,_) <- readProcessWithExitCode (fromJust (showE "sox")) ([file,file ++ "reverbW.wav","reverb","-w"] ++ arggs) ""
@@ -321,7 +332,9 @@
        removeFile $ file ++ "reverbW.wav"
        putStrLn $ "DobutokO.Sound.IntermediateF.reverbWE: file \"" ++ file ++ "\" has not been successful. The file has not been changed at all. "
 
--- | The same as 'reverbWE', but at the end file is being mixed to obtain mono audio. The name of the temporary file is ((name-of-the-file) ++ \"reverbW1.wav\").
+-- | The same as 'reverbWE', but at the end file is being mixed to obtain mono audio. The name of the temporary file is ((name-of-the-file)
+-- ++ \"reverbW1.wav\"). Please, check by yourself whether you have enough permissions to read and write to the 'FilePath'-specified
+-- file and to the containing it directory. The function is not intended to be used in otherwise cases.
 reverbW1E :: FilePath -> [String] -> IO ()
 reverbW1E file arggs = do
   (code,_,_) <- readProcessWithExitCode (fromJust (showE "sox")) ([file,file ++ "reverbW1.wav","reverb","-w"] ++ arggs ++ ["channels","1"]) ""
@@ -336,6 +349,8 @@
 --
 -- The syntaxis is that every separate literal for SoX must be a new element in the list. If you plan to create again mono audio in the end of processment, 
 -- then probably use 'soxE1' function instead. Please, for more information, refer to SoX documentation.
+-- Please, check by yourself whether you have enough permissions to read and write to the 'FilePath'-specified
+-- file and to the containing it directory. The function is not intended to be used in otherwise cases.
 soxE :: FilePath -> [String] -> IO ()
 soxE file arggs = do
   (code,_,_) <- readProcessWithExitCode (fromJust (showE "sox")) ([file,file ++ "effects.wav"] ++ arggs) ""
@@ -345,7 +360,9 @@
        removeFile $ file ++ "effects.wav"
        putStrLn $ "DobutokO.Sound.IntermediateF.soxE: file \"" ++ file ++ "\" has not been successful. The file has not been changed at all. "
 
--- | The same as 'soxE', but at the end file is being mixed to obtain mono audio. 
+-- | The same as 'soxE', but at the end file is being mixed to obtain mono audio.
+-- Please, check by yourself whether you have enough permissions to read and write to the 'FilePath'-specified
+-- file and to the containing it directory. The function is not intended to be used in otherwise cases.
 soxE1 :: FilePath -> [String] -> IO ()
 soxE1 file arggs = do
   (code,_,_) <- readProcessWithExitCode (fromJust (showE "sox")) ([file,file ++ "effects.wav"] ++ arggs ++ ["channels","1"]) ""
@@ -354,3 +371,92 @@
     _ -> do
        removeFile $ file ++ "effects.wav"
        putStrLn $ "DobutokO.Sound.IntermediateF.soxE1: file \"" ++ file ++ "\" has not been successful. The file has not been changed at all. "
+
+-- | Function takes a 'FilePath' for the new recorded file (if it already exists then it is overwritten) and a list of 'String'. The last one is
+-- sent to SoX rec or something equivalent as its arguments after the filename. If you plan just afterwards to produce mono audio, it's simpler to use
+-- 'rec1E' function instead. Please, check by yourself whether you have enough permissions to read and write to the 'FilePath'-specified
+-- file and to the containing it directory. The function is not intended to be used in otherwise cases.
+-- Function is adopted and changed 'SoXBasics.recA' function.
+recE :: FilePath -> [String] -> IO ()
+recE file arggs | isJust (showE "sox") && take 5 os == "mingw" = do 
+  (code, _, _) <- readProcessWithExitCode (fromJust (showE "sox")) (["-t","waveaudio","-d", file] ++ arggs)""
+  if code /= ExitSuccess
+    then do
+      e0 <- doesFileExist file
+      if e0
+        then do
+          removeFile file
+          catchEnd (NotRecorded file)
+        else catchEnd (NotRecorded file)
+    else do
+      e1 <- doesFileExist file
+      if e1
+        then return ()
+        else catchEnd (NotRecorded file)
+                 | isJust (showE "rec") = do
+  (code, _, _) <- readProcessWithExitCode (fromJust (showE "rec")) ([file] ++ arggs) ""
+  if code /= ExitSuccess
+    then do
+      e0 <- doesFileExist file
+      if e0
+        then do
+          removeFile file
+          catchEnd (NotRecorded file)
+        else catchEnd (NotRecorded file)
+    else do
+      e1 <- doesFileExist file
+      if e1
+        then return ()
+        else catchEnd (NotRecorded file)
+                 | otherwise = catchEnd ExecutableNotProperlyInstalled
+
+-- | Function takes a 'FilePath' for the new recorded file (if it already exists then it is overwritten) and a list of 'String'. The last one is
+-- sent to SoX rec or something equivalent as its arguments after the filename. Please, check by yourself whether you have enough permissions
+-- to read and write to the 'FilePath'-specified file and to the containing it directory. The function is not intended to be used in otherwise cases.
+-- Function is adopted and changed 'SoXBasics.recA' function.
+rec1E :: FilePath -> [String] -> IO ()
+rec1E file arggs | isJust (showE "sox") && take 5 os == "mingw" = do 
+  (code, _, _) <- readProcessWithExitCode (fromJust (showE "sox")) (["-t","waveaudio","-d", file] ++ arggs ++ ["channels","1"])""
+  if code /= ExitSuccess
+    then do
+      e0 <- doesFileExist file
+      if e0
+        then do
+          removeFile file
+          catchEnd (NotRecorded file)
+        else catchEnd (NotRecorded file)
+    else do
+      e1 <- doesFileExist file
+      if e1
+        then return ()
+        else catchEnd (NotRecorded file)
+                 | isJust (showE "rec") = do
+  (code, _, _) <- readProcessWithExitCode (fromJust (showE "rec")) ([file] ++ arggs ++ ["channels","1"]) ""
+  if code /= ExitSuccess
+    then do
+      e0 <- doesFileExist file
+      if e0
+        then do
+          removeFile file
+          catchEnd (NotRecorded file)
+        else catchEnd (NotRecorded file)
+    else do
+      e1 <- doesFileExist file
+      if e1
+        then return ()
+        else catchEnd (NotRecorded file)
+                 | otherwise = catchEnd ExecutableNotProperlyInstalled
+
+-- | Plays a 'FilePath' file with a SoX further effects specified by the list of 'String'. It can be e. g. used to (safely) test the result of applying
+-- some SoX effects and only then to use 'soxE' or some similar functions to actually apply them.
+-- Please, check by yourself whether you have enough permissions to read the 'FilePath'-specified
+-- file and the containing it directory. The function is not intended to be used in otherwise cases.
+-- Function is adopted and changed 'SoXBasics.playA' function.
+playE :: FilePath -> [String] -> IO ()
+playE file arggs | take 5 os == "mingw" = 
+  if isJust (showE "sox") 
+    then readProcessWithExitCode (fromJust (showE "sox")) ([file, "-t", "waveaudio", "-d"] ++ arggs) "" >> return ()
+    else catchEnd ExecutableNotProperlyInstalled
+                 | otherwise = if isJust (showE "play") 
+  then readProcessWithExitCode (fromJust (showE "play")) ([file] ++ arggs) "" >> return ()
+  else catchEnd ExecutableNotProperlyInstalled
diff --git a/dobutokO2.cabal b/dobutokO2.cabal
--- a/dobutokO2.cabal
+++ b/dobutokO2.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                dobutokO2
-version:             0.17.1.0
+version:             0.18.0.0
 synopsis:            A program and a library to create experimental music from a mono audio and a Ukrainian text
 description:         It can also create a timbre for the notes. Uses SoX inside.
 homepage:            https://hackage.haskell.org/package/dobutokO2
@@ -11,7 +11,7 @@
 author:              OleksandrZhabenko
 maintainer:          olexandr543@yahoo.com
 -- copyright:
-category:            Sound
+category:            Sound, Music, Language
 build-type:          Simple
 extra-source-files:  CHANGELOG.md, README.markdown, text.dat.txt
 cabal-version:       >=1.10
