-- | -- Module : Phonetic.Languages.Simplified.Array.Ukrainian.FuncRep2RelatedG2 -- Copyright : (c) OleksandrZhabenko 2020-2022 -- License : MIT -- Stability : Experimental -- Maintainer : olexandr543@yahoo.com -- -- Functions to choose from the 'FuncRep2' variants. {-# LANGUAGE BangPatterns #-} module Phonetic.Languages.Simplified.Array.Ukrainian.FuncRep2RelatedG2 where import CaseBi.Arr import Phonetic.Languages.Basis import Phonetic.Languages.Array.Ukrainian.PropertiesFuncRepG2Diverse import Phonetic.Languages.Array.Ukrainian.PropertiesFuncRepG2Rhythmicity import Phonetic.Languages.Array.Ukrainian.PropertiesFuncRepG21 import Phonetic.Languages.Array.Ukrainian.PropertiesFuncRepG22 import Phonetic.Languages.Array.Ukrainian.PropertiesFuncRepG23 import Phonetic.Languages.Array.Ukrainian.PropertiesFuncRepG24 import Melodics.Ukrainian.ArrInt8 import GHC.Arr (Array, listArray) import GHC.Int (Int8) import Languages.Ukrainian.Data import Data.List (sort) import Data.Char (toLower) import Phonetic.Languages.Emphasis import Phonetic.Languages.Coeffs -- | Allows to choose the variant of the computations in case of usual processment. -- Since the 0.13.0.0 version there is a possibility to provide the list of durations specifications functions as the first -- argument. chooseMax :: (Ord c) => Array Int (Int8, Bool) -> Array Int (Int8, Bool) -> Array Int (Int8, Bool) -> Array Int (Int8, Bool) -> Array Int ([Int8], Bool) -> Array Int ([Int8], Int8) -> Array Int (Int8, FlowSound -> Sound8) -> Array Int (Int8, Bool) -> Array Int ([Int8], Bool) -> Array Int ([Int8], Bool) -> Array Int ([Int8], Bool) -> Array Int (Int8, [Int8]) -> Array Int (Char,Int8) -> Array Int (Int8,[Int8]) -> Array Int (Char, Bool) -> Array Int (Char, Bool) -> Array Int (Int8,Bool) -> [[[[Sound8]]] -> [[Double]]] -> (Double -> c) -> Coeffs2 -> FlowSound -> String -> String -- ^ The starting 'String' which creates the order for the 'FSL' representation. -> FuncRep2 ReadyForConstructionUkr Double c chooseMax tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 syllableDurationsDs g coeffs sels choice bbs | any (== 'G') choice = chooseMax tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 syllableDurationsDs g coeffs sels (filter (/= 'G') choice) bbs | take 1 choice == "H" || any (=='a') choice = procRhythmicity23FHTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 1.3 g syllableDurationsDs choice coeffs bbs | take 1 choice `elem` ["c","M","N"] || (take 1 choice >= "A" && take 1 choice <= "F") = procRhythmicity23FTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 1.3 g choice coeffs | getBFst' (False, listArray (0,1187) . zip ["02y","02z","03y","03z","04y","04z","0y","0z","I01","I02","I03","I04","I11", "I12","I12","I13","I14","I21","I22","I23","I24","I31","I32","I33","I34","I41","I42","I43","I44", "I51","I52","I53","I54","I61","I62","I63","I64","I71","I72","I74","J01","J02","J03","J04","J11", "J12","J13","J14","J21","J22","J23","J24","J31","J32","J33","J34","J41","J42","J43","J44","J51", "J52","J53","J54","J61","J62","J63","J64","J71","J72","J73","J74","K01","K02","K03","K04","K11", "K12","K13","K14","K21","K21","K22","K23","K24","K31","K32","K33","K34","K41","K42","K43","K44", "K51","K52","K53","K54","K61","K62","K63","K64","K71","K72","K73","K74","L01","L02","L03","L04", "L11","L12","L13","L14","L21","L22","L23","L24","L31","L32","L33","L34","L41","L42","L43","L44", "L51","L52","L53","L54","L61","L62","L63","L64","L71","L72","L74","O01","O02","O03","O04","O11", "O12","O13","O14","O21","O22","O23","O24","O31","O32","O33","O34","O41","O42","O43","O44","O51", "O52","O53","O54","O61","O62","O63","O64","O71","O72","O73","O74","P01","P02","P03","P04","P11", "P12","P13","P14","P21","P22","P23","P24","P31","P32","P33","P34","P41","P42","P43","P44","P51", "P52","P53","P54","P61","P62","P63","P64","P71","P72","P73","P74","Q01","Q02","Q03","Q04", "Q11","Q12","Q13","Q14","Q21","Q22","Q23","Q24","Q31","Q32","Q33","Q34","Q41","Q42","Q43","Q44", "Q51","Q52","Q53","Q54","Q61","Q62","Q63","Q64","Q71","Q72","Q74","R01","R02","R03","R04","R11", "R12","R13","R14","R21","R22","R23","R24","R31","R32","R33","R34","R41","R42","R43","R44","R51", "R52","R53","R54","R61","R62","R63","R64","R71","R72","R73","R74","S01","S02","S03","S04","S11", "S12","S12","S13","S14","S21","S22","S23","S24","S31","S32","S33","S34","S41","S42","S43","S44", "S51","S52","S53","S54","S61","S62","S63","S64","S71","S72","S74","T01","T02","T03","T04","T11", "T12","T13","T14","T21","T22","T23","T24","T31","T32","T33","T34","T41","T42","T43","T44","T51", "T52","T53","T54","T61","T62","T63","T64","T71","T72","T73","T74","U01","U02","U03","U04","U11", "U12","U13","U14","U21","U21","U22","U23","U24","U31","U32","U33","U34","U41","U42","U43","U44", "U51","U52","U53","U54","U61","U62","U63","U64","U71","U72","U73","U74","V01","V02","V03","V04", "V11","V12","V13","V14","V21","V22","V23","V24","V31","V32","V33","V34","V41","V42","V43","V44", "V51","V52","V53","V54","V61","V62","V63","V64","V71","V72","V74","W01","W02","W03","W04","W11", "W12","W13","W14","W21","W22","W23","W24","W31","W32","W33","W34","W41","W42","W43","W44","W51", "W52","W53","W54","W61","W62","W63","W64","W71","W72","W73","W74","X01","X02","X03","X04","X11", "X12","X13","X14","X21","X22","X23","X24","X31","X32","X33","X34","X41","X42","X43","X44","X51", "X52","X53","X54","X61","X62","X63","X64","X71","X72","X73","X74","Y01","Y02","Y03","Y04", "Y11","Y12","Y13","Y14","Y21","Y22","Y23","Y24","Y31","Y32","Y33","Y34","Y41","Y42","Y43","Y44", "Y51","Y52","Y53","Y54","Y61","Y62","Y63","Y64","Y71","Y72","Y74","Z01","Z02","Z03","Z04","Z11", "Z12","Z13","Z14","Z21","Z22","Z23","Z24","Z31","Z32","Z33","Z34","Z41","Z42","Z43","Z44","Z51", "Z52","Z53","Z54","Z61","Z62","Z63","Z64","Z71","Z72","Z73","Z74","b01","b02","b03","b04","b11", "b12","b12","b13","b14","b21","b22","b23","b24","b31","b32","b33","b34","b41","b42","b43","b44", "b51","b52","b53","b54","b61","b62","b63","b64","b71","b72","b74","d01","d02","d03","d04","d11", "d12","d13","d14","d21","d22","d23","d24","d31","d32","d33","d34","d41","d42","d43","d44","d51", "d52","d53","d54","d61","d62","d63","d64","d71","d72","d73","d74","e01","e02","e03","e04","e11", "e12","e13","e14","e21","e21","e22","e23","e24","e31","e32","e33","e34","e41","e42","e43","e44", "e51","e52","e53","e54","e61","e62","e63","e64","e71","e72","e73","e74","f01","f02","f03","f04", "f11","f12","f13","f14","f21","f22","f23","f24","f31","f32","f33","f34","f41","f42","f43","f44", "f51","f52","f53","f54","f61","f62","f63","f64","f71","f72","f74","g01","g02","g03","g04","g11", "g12","g13","g14","g21","g22","g23","g24","g31","g32","g33","g34","g41","g42","g43","g44","g51", "g52","g53","g54","g61","g62","g63","g64","g71","g72","g73","g74","h01","h02","h03","h04","h11", "h12","h13","h14","h21","h22","h23","h24","h31","h32","h33","h34","h41","h42","h43","h44","h51", "h52","h53","h54","h61","h62","h63","h64","h71","h72","h73","h74","i01","i02","i03","i04", "i11","i12","i13","i14","i21","i22","i23","i24","i31","i32","i33","i34","i41","i42","i43","i44", "i51","i52","i53","i54","i61","i62","i63","i64","i71","i72","i74","j01","j02","j03","j04","j11", "j12","j13","j14","j21","j22","j23","j24","j31","j32","j33","j34","j41","j42","j43","j44","j51", "j52","j53","j54","j61","j62","j63","j64","j71","j72","j73","j74","k01","k02","k03","k04","k11", "k12","k12","k13","k14","k21","k22","k23","k24","k31","k32","k33","k34","k41","k42","k43","k44", "k51","k52","k53","k54","k61","k62","k63","k64","k71","k72","k74","l01","l02","l03","l04","l11", "l12","l13","l14","l21","l22","l23","l24","l31","l32","l33","l34","l41","l42","l43","l44","l51", "l52","l53","l54","l61","l62","l63","l64","l71","l72","l73","l74","m01","m02","m03","m04","m11", "m12","m13","m14","m21","m21","m22","m23","m24","m31","m32","m33","m34","m41","m42","m43","m44", "m51","m52","m53","m54","m61","m62","m63","m64","m71","m72","m73","m74","n01","n02","n03","n04", "n11","n12","n13","n14","n21","n22","n23","n24","n31","n32","n33","n34","n41","n42","n43","n44", "n51","n52","n53","n54","n61","n62","n63","n64","n71","n72","n74","o01","o02","o03","o04","o11", "o12","o13","o14","o21","o22","o23","o24","o31","o32","o33","o34","o41","o42","o43","o44","o51", "o52","o53","o54","o61","o62","o63","o64","o71","o72","o73","o74","p01","p02","p03","p04","p11", "p12","p13","p14","p21","p22","p23","p24","p31","p32","p33","p34","p41","p42","p43","p44","p51", "p52","p53","p54","p61","p62","p63","p64","p71","p72","p73","p74","q01","q02","q03","q04", "q11","q12","q13","q14","q21","q22","q23","q24","q31","q32","q33","q34","q41","q42","q43","q44", "q51","q52","q53","q54","q61","q62","q63","q64","q71","q72","q74","r01","r02","r03","r04","r11", "r12","r13","r14","r21","r22","r23","r24","r31","r32","r33","r34","r41","r42","r43","r44","r51", "r52","r53","r54","r61","r62","r63","r64","r71","r72","r73","r74","s01","s02","s03","s04","s11", "s12","s12","s13","s14","s21","s22","s23","s24","s31","s32","s33","s34","s41","s42","s43","s44", "s51","s52","s53","s54","s61","s62","s63","s64","s71","s72","s74","t01","t02","t03","t04","t11", "t12","t13","t14","t21","t22","t23","t24","t31","t32","t33","t34","t41","t42","t43","t44","t51", "t52","t53","t54","t61","t62","t63","t64","t71","t72","t73","t74","u01","u02","u03","u04","u11", "u12","u13","u14","u21","u21","u22","u23","u24","u31","u32","u33","u34","u41","u42","u43","u44", "u51","u52","u53","u54","u61","u62","u63","u64","u71","u72","u73","u74","v01","v02","v03","v04", "v11","v12","v13","v14","v21","v22","v23","v24","v31","v32","v33","v34","v41","v42","v43","v44", "v51","v52","v53","v54","v61","v62","v63","v64","v71","v72","v74","w01","w02","w03","w04","w11", "w12","w13","w14","w21","w22","w23","w24","w31","w32","w33","w34","x01","x02","x03","x04","x11", "x12","x13","x14","x21","x22","x23","x24","x31","x32","x33","x34"] . replicate 3000 $ True) choice = procRhythmicity23FTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 1.3 g choice coeffs | otherwise = getBFstLSorted' (procBoth4InvFTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 g coeffs sels) [("y",procBothFTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 g coeffs sels), ("y0",procDiverse2FTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 g sels), ("y2",procBoth2FTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 g coeffs sels), ("y3",procBoth3FTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 g coeffs sels), ("y4",procBoth4FTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 g coeffs sels), ("yy",procBothInvFTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 g coeffs sels), ("yy2",procBoth2InvFTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 g coeffs sels), ("yy3",procBoth3InvFTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 g coeffs sels), ("z",procBothFFTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 1.3 g coeffs sels), ("z2",procBoth2FFTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 1.3 g coeffs sels), ("z3",procBoth3FFTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 1.3 g coeffs sels), ("z4",procBoth4FFTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 1.3 g coeffs sels), ("zz",procBothInvFFTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 1.3 g coeffs sels), ("zz2",procBoth2InvFFTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 1.3 g coeffs sels), ("zz3",procBoth3InvFFTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 1.3 g coeffs sels), ("zz4", procBoth4InvFFTup tup1 tup2 tup3 tup4 tup5 tup6 tup7 tup8 tup9 tup10 tup11 tup12 tup13 tup14 tup15 tup16 tup17 1.3 g coeffs sels)] . takeWhile (/= '.') $ choice -- | Allows to choose precision in the Numeric.showFDouble function being given a choice parameter. precChoice :: String -> Maybe Int precChoice choice | any (=='G') choice = precChoice . filter (/='G') $ choice | otherwise = getBFstLSorted' (Just 4) [("02y",Just 0),("02z",Just 0),("03y",Just 0),("03z",Just 0),("04y",Just 0), ("04z",Just 0),("0y",Just 0),("0z",Just 0),("H02y",Just 0),("H02z",Just 0),("H03y",Just 0),("H03z",Just 0),("H04y",Just 0), ("H04z",Just 0),("H0y",Just 0),("H0z",Just 0),("Hy",Just 0),("Hy0",Just 0),("Hy2",Just 0),("Hy3",Just 0), ("Hy4",Just 0), ("Hz",Just 0),("Hz0",Just 0),("Hz2",Just 0),("Hz3",Just 0), ("Hz4",Just 0), ("y",Just 0),("y0",Just 0),("y2",Just 0), ("y3",Just 0), ("y4",Just 0),("z",Just 0),("z0",Just 0),("z2",Just 0),("z3",Just 0), ("z4",Just 0)] . takeWhile (/= '.') $ choice --------------------------------------------------- tup7 :: Array Int (Int8,[Int8] -> Int8) tup7 = listArray (0,18) [(8, дзT tup9 tup10),(10, жT),(17, дT),(21, гT),(25, зT tup9 tup10),(38, цT tup8 tup9 tup10), (39, чT),(41, шT),(43, фT), (45, кT),(47, пT),(49, сT tup8 tup9 tup10),(50, тT tup8 tup11 tup10), (52, хT),(54, сьT),(62, нтT),(63, стT),(64, тьT),(66, цьT)] --------------------------------------------------- parsey0Choice :: String -> FlowSound parsey0Choice xs | getBFst' (False, listArray (0,24) . zip ["02y","02z","03y","03z","04y","04z","0y","0z","y","y0","y2","y3","y4","yy","yy2","yy3","yy4","z","z2","z3","z4","zz","zz2","zz3","zz4"] . replicate 25 $ True) ts = f . sort . filter (/= 101) . concatMap g . words . map (\c -> if c == '.' then ' ' else toLower c) $ us | otherwise = [] where (ts,us) = break (== '.') . filter (\c -> c /= 'H' && c /= 'G') $ xs g = getBFst' ([101::Sound8], listArray (0,41) (("sr",[27,28,38,3,34,36]):("vd",[8,10,15,17,19,21,23,25]) :("vs",[45,47,49,50,43,52,38,66,54,39,41]) :("vw",[1..6]) :map (\(k,t) -> (k,[t])) [("\1072",1),("\1073",15),("\1074",36),("\1075",21),("\1076",17),("\1076\1078",23),("\1076\1079",8),("\1077",2),("\1078",10),("\1079",25),("\1080",5),("\1081",27),("\1082",45),("\1083",28),("\1084",30),("\1085",32),("\1086",3),("\1087",47),("\1088",34),("\1089",49),("\1089\1100",54),("\1090",50),("\1091",4),("\1092",43),("\1093",52),("\1094",38),("\1094\1100",66),("\1095",39),("\1096",41),("\1097",55),("\1100",7),("\1102",56),("\1103",57),("\1108",58),("\1110",6),("\1111",59),("\1169",19),("\8217",61)])) f (x:ts@(y:xs)) | x == y = f ts | otherwise = x:f ts f xs = xs