diff options
author | Sébastien Dailly <sebastien@chimrod.com> | 2021-08-28 20:01:54 +0200 |
---|---|---|
committer | Sébastien Dailly <sebastien@chimrod.com> | 2021-08-28 20:01:54 +0200 |
commit | 3b8c136ebdba7f4b5b4d6baad08d0a75c3b2dc86 (patch) | |
tree | 62341b36574a0ded0d4fe38ea9ec16036f27dfd4 /src/lib/sounds | |
parent | 26faec7a69051f639b50c8e8741f0823c6be52a2 (diff) |
Update
Diffstat (limited to 'src/lib/sounds')
-rw-r--r-- | src/lib/sounds/sounds.ml | 172 |
1 files changed, 113 insertions, 59 deletions
diff --git a/src/lib/sounds/sounds.ml b/src/lib/sounds/sounds.ml index 6126dd4..6c3cad9 100644 --- a/src/lib/sounds/sounds.ml +++ b/src/lib/sounds/sounds.ml @@ -10,13 +10,13 @@ module type T = sig val o : [`Closed | `Opened] -> t val schwa : unit -> t val i : t - val u : t - val u' : t + val voyel_u : t + val voyel_y : t (** Create a diphtongue from a semi-voyel and a voyel *) val diphtongue: t -> t -> t - val nasal: t -> t + val nasal: t -> t option val none: t @@ -27,33 +27,24 @@ module type T = sig val k: t val g: t val f: t - val s: unit -> t - val sz: unit -> t - val ch: unit -> t - val z: unit -> t + val v: t + val s: t + val sz: t + val ch: t + val z: t val n: t val m: t - val r: unit -> t - val l: unit -> t + val r: t + val l: t val semi_voyel_w: t + val semi_voyel_y: t val is_voyel : t -> bool val is_nasal : t -> bool - type code = - | None - | SZ - | Voyel_A - | Voyel_I - | Voyel_O - | SemiVoyel_W - | Diphtonge of code * code - - val code : t -> code - end module T = struct @@ -65,15 +56,19 @@ module T = struct | None | SZ | Voyel_A + | Voyel_E | Voyel_I | Voyel_O + | Voyel_U (* OU like in Ouvrir *) + | Voyel_Y (* U like in Unique *) | SemiVoyel_W - | Diphtonge of code * code + | SemiVoyel_Y + | Diphtonge of t * t - type t = + and t = { code : code ; repr : string - ; muted : bool + ; mutable_: bool (* Can the sound be muted ? *) ; kind : kind ; nasal : bool } @@ -82,6 +77,8 @@ end module Repr = struct + type t = string + let a = "a" and a_nasal = "@" @@ -90,8 +87,10 @@ module Repr = struct and i = "i" and i_nasal = "5" - and u = "y" - and u' = "u" + and y = "y" + and y_nasal = "1" + + and u = "u" and p = "p" and b = "b" @@ -102,6 +101,7 @@ module Repr = struct and g = "g" and f = "f" + and v = "v" and ch = "S" @@ -114,7 +114,8 @@ module Repr = struct and l = "L" and r = "R" - and w = "w" + and semi_voyel_w = "w" + and semi_voyel_y = "j" end module S = struct @@ -127,7 +128,7 @@ module S = struct let none = { repr = "" - ; muted = false + ; mutable_ = true ; kind = None ; nasal = false ; code = None } @@ -139,18 +140,17 @@ module S = struct let diphtongue v1 v2 = { voyel with repr = (v1.repr) ^ (v2.repr) - ; code = Diphtonge (v1.code, v2.code) + ; code = Diphtonge (v1, v2) } - let code t = t.code let a = { voyel with repr = Repr.a ; code = Voyel_A } let e = function - | `Closed -> { voyel with repr = "e" } - | `Opened -> { voyel with repr = "E" } + | `Closed -> { voyel with repr = "e" ; code = Voyel_E } + | `Opened -> { voyel with repr = "E" ; code = Voyel_E } let eu = function | `Closed -> { voyel with repr = "2" } @@ -166,17 +166,17 @@ module S = struct let i = { voyel with repr = Repr.i ; code = Voyel_I } - let u = - { voyel with repr = Repr.u } + let voyel_y = + { voyel with repr = Repr.y ; code = Voyel_Y } - let u' = - { voyel with repr = Repr.u' } + let voyel_u = + { voyel with repr = Repr.u ; code = Voyel_U } let p = - { none with repr = Repr.p } + { none with repr = Repr.p ; mutable_ = false } let b = - { none with repr = Repr.b } + { none with repr = Repr.b ; mutable_ = false } let t = { none with repr = Repr.t } @@ -185,7 +185,7 @@ module S = struct { none with repr = Repr.d } let k = - { none with repr = Repr.k } + { none with repr = Repr.k ; mutable_ = false } let g = { none with repr = Repr.g } @@ -193,16 +193,21 @@ module S = struct let f = { none with repr = Repr.f } - let s () = + let v = + { none with repr = Repr.v } + + let s = { none with repr = Repr.s } - let sz () = - { (s()) with code = SZ } + let sz = + { s with code = SZ } - let ch () = - { none with repr = Repr.ch } + let ch = + { none with + repr = Repr.ch + ; mutable_ = false } - let z () = + let z = { none with repr = Repr.z } let n = @@ -211,33 +216,82 @@ module S = struct let m = { none with repr = Repr.m ; nasal = true } - let l () = + let l = { none with repr = Repr.l } - let r () = + let r = { none with repr = Repr.r } let semi_voyel_w = { none with - repr = Repr.w + repr = Repr.semi_voyel_w ; code = SemiVoyel_W} + let semi_voyel_y = + { none with + repr = Repr.semi_voyel_y + ; code = SemiVoyel_Y} + let nasal t = match t.code with - | Voyel_A -> { t with repr = Repr.a_nasal ; nasal = true } - | Voyel_O -> { t with repr = Repr.o_nasal ; nasal = true } - | Voyel_I -> { t with repr = Repr.i_nasal ; nasal = true } - | Diphtonge (SemiVoyel_W, Voyel_A) -> - diphtongue - semi_voyel_w - { t with repr = Repr.i_nasal ; nasal = true } - | _ -> t + | Voyel_A -> Some { t with repr = Repr.a_nasal ; nasal = true } + | Voyel_O -> Some { t with repr = Repr.o_nasal ; nasal = true } + | Voyel_I -> Some { t with repr = Repr.i_nasal ; nasal = true } + | Voyel_Y -> Some { t with repr = Repr.y_nasal ; nasal = true } + | Diphtonge (s1, s2) -> + begin match s1.code, s2.code with + | (SemiVoyel_W, Voyel_I) -> + (* The only case we could have the nasalisation of such diphtongue, is + the case O I, N -> wich is transformed into O, I N *) + Some ( + diphtongue + semi_voyel_w + { t with repr = Repr.i_nasal ; nasal = true } ) + | (SemiVoyel_W, Voyel_A) -> + (* The only case we could have the nasalisation of such diphtongue, is + the case O I, N -> wich is transformed into O, I N *) + Some ( + diphtongue + semi_voyel_w + { t with repr = Repr.i_nasal ; nasal = true } ) + | (Voyel_I, Voyel_E) -> + (* The only case we could have the nasalisation of such diphtongue, is + the case O I, N -> wich is transformed into O, I N *) + Some ( + diphtongue + i + { t with repr = Repr.i_nasal ; nasal = true } ) + | _ -> None + end + | _ -> None let muted f = - { none with - repr = "(" ^ f.repr ^ ")" - ; muted = true } - + match f.mutable_ with + | false -> f + | true -> + { none with + repr = "(" ^ f.repr ^ ")" } + + let rec repr + : t -> Repr.t + = fun letter -> + match letter.code, letter.nasal with + | None, _ -> "" + | SZ, _ -> "" + | Voyel_A, false -> Repr.a + | Voyel_A, true -> Repr.a_nasal + | Voyel_E, _ -> "" + | Voyel_I, false -> Repr.i + | Voyel_I, true -> Repr.i_nasal + | Voyel_O, true -> Repr.o_nasal + | Voyel_O, false -> Repr.o + | Voyel_U, _ -> Repr.u + | Voyel_Y, false -> Repr.y + | Voyel_Y, true -> Repr.y_nasal + | SemiVoyel_W, _ -> Repr.semi_voyel_w + | SemiVoyel_Y, _ -> Repr.semi_voyel_y + | Diphtonge (l1, l2), _ -> + (repr l1) ^ (repr l2) end include S |