diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -20,3 +20,7 @@
 ## 0.3.1.1 -- 2020-03-06
 
 * Third version revised B. Some documentation improvements for README.markdown file.
+
+## 0.4.0.0 -- 2020-03-07
+
+* Fourth version. Fixed issues with wrongly realized rhythm behaviour. Now it corresponds to the documented.
diff --git a/DobutokO/Sound.hs b/DobutokO/Sound.hs
--- a/DobutokO/Sound.hs
+++ b/DobutokO/Sound.hs
@@ -193,29 +193,67 @@
 -- in their becoming more silent ones. The second 'Double' argument is a basic sound duration. The default one is 0.5 (second).
 oberSoXSynthN :: Int -> Double -> Double -> String -> V.Vector Double -> IO ()
 oberSoXSynthN n ampL time3 zs vec0
- | compare ampL 0.01 /= LT && compare ampL 1.0 /= GT =  V.imapM_ (\j x -> do   
-    let note0 = closestNote x                     -- zs is obtained from the command line arguments
-        note1 = pureQuintNote note0
-        v0    = oberTones note0
-        v1    = oberTones note1
-        (t, ws) = splitAt 1 . syllableStr n $ zs
+ | compare ampL 0.01 /= LT && compare ampL 1.0 /= GT = 
+    let (t, ws) = splitAt 1 . syllableStr n $ zs
+        m     = length ws
         zeroN = numVZeroesPre vec0
-        v2    = V.map (\yy -> time3 * fromIntegral (yy * n) / fromIntegral (head t)) . V.fromList $ ws
-        oberSoXSynthHelpN vec = V.imapM_ (\i (noteN, amplN) -> readProcessWithExitCode (fromJust (showE "sox"))
-          ["-r22050", "-n", "test" ++ prependZeroes zeroN (show (i + 2)) ++ ".wav", "synth", showFFloat (Just 4) (V.unsafeIndex v2 i) $ show 0,"sine", showFFloat (Just 4) noteN $ show 0, "vol", showFFloat (Just 4) (amplN * ampL) $ show 0] "") vec
-        oberSoXSynthHelpN2 vec = V.imapM_ (\i (noteN, amplN) -> readProcessWithExitCode (fromJust (showE "sox"))
-          ["-r22050", "-n", "testQ" ++ prependZeroes zeroN (show (i + 2)) ++ ".wav", "synth", showFFloat (Just 4) (V.unsafeIndex v2 i) $ show 0,"sine", showFFloat (Just 4) noteN $ show 0, "vol", showFFloat (Just 4) (amplN * ampL) $ show 0] "") vec  
-    _ <- readProcessWithExitCode (fromJust (showE "sox")) ["-r22050", "-n", "test" ++ prependZeroes zeroN "1" ++  ".wav", "synth", showFFloat (Just 4) time3 $ show 0,"sine", showFFloat (Just 4) note0 $ show 0, "synth"    , showFFloat (Just 4) time3 $ show 0,"sine", "mix", showFFloat (Just 4) note1 $ show 0] ""
-    oberSoXSynthHelpN v0
-    oberSoXSynthHelpN2 v1
-    paths0 <- listDirectory "."
-    let paths = sort . filter (isPrefixOf "test") $ paths0
-    _ <- readProcessWithExitCode (fromJust (showE "sox")) (["--combine", "mix"] ++ paths ++ ["result" ++ prependZeroes zeroN (show j) ++ ".wav","vol","0.3"]) ""
-    mapM_ removeFile paths ) vec0
+        v2    = V.map (\yy -> time3 * fromIntegral (yy * m) / fromIntegral (head t)) . V.fromList $ ws in V.imapM_ (\j x -> do 
+          let note0 = closestNote x                     -- zs is obtained from the command line arguments
+              note1 = pureQuintNote note0
+              v0    = oberTones note0
+              v1    = oberTones note1
+              oberSoXSynthHelpN vec = V.imapM_ (\i (noteN, amplN) -> readProcessWithExitCode (fromJust (showE "sox"))
+                ["-r22050", "-n", "test" ++ prependZeroes zeroN (show (i + 2)) ++ ".wav", "synth", showFFloat (Just 4) (V.unsafeIndex v2 (j `rem` m)) $ show 0,"sine",
+                  showFFloat (Just 4) noteN $ show 0, "vol", showFFloat (Just 4) (amplN * ampL) $ show 0] "") vec
+              oberSoXSynthHelpN2 vec = V.imapM_ (\i (noteN, amplN) -> readProcessWithExitCode (fromJust (showE "sox"))
+                ["-r22050", "-n", "testQ" ++ prependZeroes zeroN (show (i + 2)) ++ ".wav", "synth", showFFloat (Just 4) (V.unsafeIndex v2 (j `rem` m)) $ show 0,
+                   "sine", showFFloat (Just 4) noteN $ show 0, "vol", showFFloat (Just 4) (amplN * ampL) $ show 0] "") vec  
+              soxSynthHelpMain note01 note02 = readProcessWithExitCode (fromJust (showE "sox")) ["-r22050", "-n", "testA" ++ prependZeroes zeroN "1" ++  ".wav",
+                "synth", showFFloat (Just 4) (V.unsafeIndex v2 (j `rem` m)) $ show 0,"sine", showFFloat (Just 4) note01 $ show 0, "synth", showFFloat (Just 4)
+                  (V.unsafeIndex v2 (j `rem` m)) $ show 0,"sine", "mix", showFFloat (Just 4) note02 $ show 0] ""
+          soxSynthHelpMain note0 note1
+          oberSoXSynthHelpN v0
+          oberSoXSynthHelpN2 v1
+          paths0 <- listDirectory "."
+          let paths = sort . filter (isPrefixOf "test") $ paths0
+          _ <- readProcessWithExitCode (fromJust (showE "sox")) (["--combine", "mix"] ++ paths ++ ["result" ++ prependZeroes zeroN (show j) ++ ".wav","vol","0.3"]) ""
+          mapM_ removeFile paths ) vec0
  | otherwise = let ampL1 = ampL - (fromIntegral . truncate $ ampL) in
     if ampL1 < 0.01 then oberSoXSynthN n 0.01 time3 zs vec0
     else oberSoXSynthN n ampL1 time3 zs vec0
 
+{-
+uniqOberSoXSynthN n ampL time3 zs wws vec0
+ | compare ampL 0.01 /= LT && compare ampL 1.0 /= GT =
+    let (t, ws) = splitAt 1 . syllableStr n $ zs
+        m     = length ws
+        zeroN = numVZeroesPre vec0
+        v2    = V.map (\yy -> time3 * fromIntegral (yy * m) / fromIntegral (head t)) . V.fromList $ ws in V.imapM_ (\j x -> do   
+          let note0 = closestNote x                         -- zs ? vec0 -- are they related to the one object? No, they are obtained from different sources.
+              note1 = pureQuintNote note0
+              v0    = uniqOberTonesV note0 wws
+              v1    = uniqOberTonesV note1 wws
+              uniqOberSoXSynthHelpN vec = V.imapM_ (\i (noteN, amplN) -> readProcessWithExitCode (fromJust (showE "sox"))
+                ["-r22050", "-n", "test" ++ prependZeroes zeroN (show (i + 2)) ++ ".wav", "synth", showFFloat (Just 4) (V.unsafeIndex v2 (j `rem` m)) $ show 0,"sine",
+                  showFFloat (Just 4) noteN $ show 0, "vol", showFFloat (Just 4) (amplN * ampL) $ show 0] "") vec
+              uniqOberSoXSynthHelpN2 vec = V.imapM_ (\i (noteN, amplN) -> readProcessWithExitCode (fromJust (showE "sox"))
+                ["-r22050", "-n", "testQ" ++ prependZeroes zeroN (show (i + 2)) ++ ".wav", "synth", showFFloat (Just 4) (V.unsafeIndex v2 (j `rem` m)) $ show 0,
+                   "sine", showFFloat (Just 4) noteN $ show 0, "vol", showFFloat (Just 4) (amplN * ampL) $ show 0] "") vec 
+              soxSynthHelpMain note01 note02 = readProcessWithExitCode (fromJust (showE "sox")) ["-r22050", "-n", "testA" ++
+                 prependZeroes zeroN "1" ++  ".wav", "synth", showFFloat (Just 4) (V.unsafeIndex v2 (j `rem` m)) $ show 0,"sine", showFFloat (Just 4) note01 $ show 0,
+                   "synth", showFFloat (Just 4) (V.unsafeIndex v2 (j `rem` m)) $ show 0,"sine", "mix", showFFloat (Just 4) note02 $ show 0] ""
+          soxSynthHelpMain note0 note1
+          uniqOberSoXSynthHelpN v0
+          uniqOberSoXSynthHelpN2 v1
+          paths0 <- listDirectory "."
+          let paths = sort . filter (isPrefixOf "test") $ paths0
+          _ <- readProcessWithExitCode (fromJust (showE "sox")) (["--combine", "mix"] ++ paths ++ ["result" ++ prependZeroes zeroN (show j) ++ ".wav","vol","0.3"]) ""
+          mapM_ removeFile paths ) vec0
+ | otherwise = let ampL1 = ampL - (fromIntegral . truncate $ ampL) in
+    if ampL1 < 0.01 then uniqOberSoXSynthN n 0.01 time3 zs wws vec0
+    else uniqOberSoXSynthN n ampL1 time3 zs wws vec0
+    -}
+
 -- | Similar to 'oberSoXSynthN', but uses a sound file to obtain the information analogous to 'V.Vector' in the latter one. Besides, the function lifts
 -- the frequencies to the octave with the given by 'Int' parameter number (better to use from the range [1..8]). The first 'Double' argument from
 -- the range [0.01..1.0] is used as a maximum amplitude for obertones. If it is set to 1.0 the obertones amplitudes are just maximum ones,
@@ -288,25 +326,31 @@
 -- the number lower by one. The second 'Double' argument is a basic sound duration. The default one is 0.5 (second).
 uniqOberSoXSynthN :: Int -> Double -> Double -> String -> String -> V.Vector Double -> IO ()
 uniqOberSoXSynthN n ampL time3 zs wws vec0
- | compare ampL 0.01 /= LT && compare ampL 1.0 /= GT = V.imapM_ (\j x -> do   
-    let note0 = closestNote x                         -- zs ? vec0 -- are they related to the one object? No, they are obtained from different sources.
-        note1 = pureQuintNote note0
-        v0    = uniqOberTonesV note0 wws
-        v1    = uniqOberTonesV note1 wws
-        (t, ws) = splitAt 1 . syllableStr n $ zs
+ | compare ampL 0.01 /= LT && compare ampL 1.0 /= GT =
+    let (t, ws) = splitAt 1 . syllableStr n $ zs
+        m     = length ws
         zeroN = numVZeroesPre vec0
-        v2    = V.map (\yy -> time3 * fromIntegral (yy * n) / fromIntegral (head t)) . V.fromList $ ws
-        uniqOberSoXSynthHelpN vec = V.imapM_ (\i (noteN, amplN) -> readProcessWithExitCode (fromJust (showE "sox"))
-          ["-r22050", "-n", "test" ++ prependZeroes zeroN (show (i + 2)) ++ ".wav", "synth", showFFloat (Just 4) (V.unsafeIndex v2 i) $ show 0,"sine", showFFloat (Just 4) noteN $ show 0, "vol", showFFloat (Just 4) (amplN * ampL) $ show 0] "") vec
-        uniqOberSoXSynthHelpN2 vec = V.imapM_ (\i (noteN, amplN) -> readProcessWithExitCode (fromJust (showE "sox"))
-          ["-r22050", "-n", "testQ" ++ prependZeroes zeroN (show (i + 2)) ++ ".wav", "synth", showFFloat (Just 4) (V.unsafeIndex v2 i) $ show 0,"sine", showFFloat (Just 4) noteN $ show 0, "vol", showFFloat (Just 4) (amplN * ampL) $ show 0] "") vec  
-    _ <- readProcessWithExitCode (fromJust (showE "sox")) ["-r22050", "-n", "test" ++ prependZeroes zeroN "1" ++  ".wav", "synth", showFFloat (Just 4) time3 $ show 0,"sine", showFFloat (Just 4) note0 $ show 0, "synth",   showFFloat (Just 4) time3 $ show 0,"sine", "mix", showFFloat (Just 4) note1 $ show 0] ""
-    uniqOberSoXSynthHelpN v0
-    uniqOberSoXSynthHelpN2 v1
-    paths0 <- listDirectory "."
-    let paths = sort . filter (isPrefixOf "test") $ paths0
-    _ <- readProcessWithExitCode (fromJust (showE "sox")) (["--combine", "mix"] ++ paths ++ ["result" ++ prependZeroes zeroN (show j) ++ ".wav","vol","0.3"]) ""
-    mapM_ removeFile paths ) vec0
+        v2    = V.map (\yy -> time3 * fromIntegral (yy * m) / fromIntegral (head t)) . V.fromList $ ws in V.imapM_ (\j x -> do   
+          let note0 = closestNote x                         -- zs ? vec0 -- are they related to the one object? No, they are obtained from different sources.
+              note1 = pureQuintNote note0
+              v0    = uniqOberTonesV note0 wws
+              v1    = uniqOberTonesV note1 wws
+              uniqOberSoXSynthHelpN vec = V.imapM_ (\i (noteN, amplN) -> readProcessWithExitCode (fromJust (showE "sox"))
+                ["-r22050", "-n", "test" ++ prependZeroes zeroN (show (i + 2)) ++ ".wav", "synth", showFFloat (Just 4) (V.unsafeIndex v2 (j `rem` m)) $ show 0,"sine",
+                  showFFloat (Just 4) noteN $ show 0, "vol", showFFloat (Just 4) (amplN * ampL) $ show 0] "") vec
+              uniqOberSoXSynthHelpN2 vec = V.imapM_ (\i (noteN, amplN) -> readProcessWithExitCode (fromJust (showE "sox"))
+                ["-r22050", "-n", "testQ" ++ prependZeroes zeroN (show (i + 2)) ++ ".wav", "synth", showFFloat (Just 4) (V.unsafeIndex v2 (j `rem` m)) $ show 0,
+                   "sine", showFFloat (Just 4) noteN $ show 0, "vol", showFFloat (Just 4) (amplN * ampL) $ show 0] "") vec 
+              soxSynthHelpMain note01 note02 = readProcessWithExitCode (fromJust (showE "sox")) ["-r22050", "-n", "testA" ++
+                 prependZeroes zeroN "1" ++  ".wav", "synth", showFFloat (Just 4) (V.unsafeIndex v2 (j `rem` m)) $ show 0,"sine", showFFloat (Just 4) note01 $ show 0,
+                   "synth", showFFloat (Just 4) (V.unsafeIndex v2 (j `rem` m)) $ show 0,"sine", "mix", showFFloat (Just 4) note02 $ show 0] ""
+          soxSynthHelpMain note0 note1
+          uniqOberSoXSynthHelpN v0
+          uniqOberSoXSynthHelpN2 v1
+          paths0 <- listDirectory "."
+          let paths = sort . filter (isPrefixOf "test") $ paths0
+          _ <- readProcessWithExitCode (fromJust (showE "sox")) (["--combine", "mix"] ++ paths ++ ["result" ++ prependZeroes zeroN (show j) ++ ".wav","vol","0.3"]) ""
+          mapM_ removeFile paths ) vec0
  | otherwise = let ampL1 = ampL - (fromIntegral . truncate $ ampL) in
     if ampL1 < 0.01 then uniqOberSoXSynthN n 0.01 time3 zs wws vec0
     else uniqOberSoXSynthN n ampL1 time3 zs wws vec0
@@ -375,26 +419,27 @@
        recAndProcess file 1)
   | x == 2 = onException (do     
      putStr "Please, specify the control parameter for the SoX \"noisered\" effect in the range from 0.0 to 1.0. "
-     putStrLn "The greater value causes more reduction with possibly removing some important sound data. The default value is 0.5"
-     putStrLn "To use the default value, you can simply press Ether."
+     putStrLn "The greater value causes more reduction with possibly removing some important sound data. The default value is 0.5 "
+     putStrLn "To use the default value, you can simply press Enter."
      ctrlN <- getLine
-     if null ctrlN then return ""
-     else let noiseP = tail . dropWhile (/= '.') . filter (\t -> isDigit t || t == '.') $ ctrlN in do {
-          controlNoiseReduction $ '0':noiseP ;
-          norm "_x.wav" ;
-          if isPrefixOf "nx." file 
-            then putStr "" 
-            else renameFile "8_x.wav" (file ++ ".wav") ;
-          removeFile "x.wav" ;
-          removeFile "_x.wav" ;
-          dir <- listDirectory "." ;
-          let paths4 = filter (isPrefixOf "nx.") dir in do {
-          mapM_ removeFile paths4 ;
-          putStrLn "" ;
-          return "" } }) (do
-            putStrLn "The process was not successful may be because of the not valid data. Please, specify the valid data as requested."
-            putStrLn "_______________________________________________________________________"
-            recAndProcess file 2)
+     let addit = dropWhile (/= '.') . filter (\t -> isDigit t || t == '.') $ ctrlN
+         noiseP = if null ctrlN then ""
+                  else tail addit
+     controlNoiseReduction $ '0':noiseP ;
+     norm "_x.wav" ;
+     if isPrefixOf "nx." file 
+       then putStr "" 
+       else renameFile "8_x.wav" (file ++ ".wav") ;
+     removeFile "x.wav" ;
+     removeFile "_x.wav" ;
+     dir <- listDirectory "." ;
+     let paths4 = filter (isPrefixOf "nx.") dir
+     mapM_ removeFile paths4 ;
+     putStrLn "" ;
+     return "") (do
+       putStrLn "The process was not successful may be because of the not valid data. Please, specify the valid data as requested."
+       putStrLn "_______________________________________________________________________"
+       recAndProcess file 2)
   | x == 3 = onException (do
      putStr "Please, specify the octave number, to which you would like all the main components (not taking into account their respective lower pure quints) "
      putStrLn "should belong. The number should be better in the range [1..8]"
@@ -405,9 +450,9 @@
        putStrLn "_______________________________________________________________________"
        recAndProcess file 3)
   | x == 4 = onException (do
-     putStr "Please, specify the amplitude for the generated obertones as an Int number in the range [0..99]."
+     putStr "Please, specify the amplitude for the generated obertones as an Int number in the range [0..99]. "
      putStrLn "The default one is 99"
-     putStrLn "To use the default value, you can simply press Ether."
+     putStrLn "To use the default value, you can simply press Enter."
      amplOb0 <- getLine
      if null amplOb0 then return "1.0"
      else let amplOb = (read (take 2 . filter isDigit $ amplOb0)::Int) `rem` 100 in
@@ -419,9 +464,9 @@
                putStrLn "_______________________________________________________________________"
                recAndProcess file 4)
   | x == 5 = onException (do
-     putStr "Please, specify the basic duration for the generated sounds as a Double number in the range [0.1..4.0]."
+     putStr "Please, specify the basic duration for the generated sounds as a Double number in the range [0.1..4.0]. "
      putStrLn "The default one is 0.5"
-     putStrLn "To use the default value, you can simply press Ether."
+     putStrLn "To use the default value, you can simply press Enter."
      time0 <- getLine
      if null time0 then return "0.5"
      else let time1 = (read (filter (\z -> isDigit z || z == '.') $ time0)::Double) in
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.3.1.1
+version:             0.4.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
 homepage:            https://hackage.haskell.org/package/dobutokO2
