diff options
author | Sébastien Dailly <sebastien@chimrod.com> | 2021-08-29 12:11:24 +0200 |
---|---|---|
committer | Sébastien Dailly <sebastien@chimrod.com> | 2021-08-29 12:11:24 +0200 |
commit | 6ccbcc2cadae41574e33226b9072a08354880d28 (patch) | |
tree | af36b9e593a3d36be9acdb1383b1cbd1d6f3abcc /src/lib/sounds | |
parent | 3b8c136ebdba7f4b5b4d6baad08d0a75c3b2dc86 (diff) |
Update
Diffstat (limited to 'src/lib/sounds')
-rw-r--r-- | src/lib/sounds/sounds.ml | 180 |
1 files changed, 134 insertions, 46 deletions
diff --git a/src/lib/sounds/sounds.ml b/src/lib/sounds/sounds.ml index 6c3cad9..85db338 100644 --- a/src/lib/sounds/sounds.ml +++ b/src/lib/sounds/sounds.ml @@ -5,12 +5,26 @@ module type T = sig val a : t val e : [`Closed | `Opened] -> t - val eu : [`Closed | `Opened] -> t + val eu : t - val o : [`Closed | `Opened] -> t + val o : t val schwa : unit -> t + + (** This is an empty sound. + + It can be used to replace any element in a syllabus *) + val none: t + + (** This is the voyel i like in "ici" + When nazalized, the voyel become [in] like in "ainsi" *) val i : t + + (** This is the sound ou like in "ouvrier" + When nazalized, the voyel does not change *) val voyel_u : t + + (** This is the sound u like in "unis" + When nazalized, the voyel becom [un] like in "brun" *) val voyel_y : t (** Create a diphtongue from a semi-voyel and a voyel *) @@ -18,8 +32,6 @@ module type T = sig val nasal: t -> t option - val none: t - val p: t val b: t val t: t @@ -29,9 +41,10 @@ module type T = sig val f: t val v: t val s: t + val z: t val sz: t val ch: t - val z: t + (* val j: t *) val n: t val m: t @@ -54,7 +67,7 @@ module T = struct type code = | None - | SZ + | SZ (* This is a possible Z if followed by a voyel *) | Voyel_A | Voyel_E | Voyel_I @@ -63,6 +76,20 @@ module T = struct | Voyel_Y (* U like in Unique *) | SemiVoyel_W | SemiVoyel_Y + | Consonant_P + | Consonant_B + | Consonant_T + | Consonant_D + | Consonant_K + | Consonant_G + | Consonant_F + | Consonant_V + | Consonant_S + | Consonant_Z + | Consonant_M + | Consonant_N + | Consonant_L + | Consonant_R | Diphtonge of t * t and t = @@ -139,88 +166,135 @@ module S = struct let diphtongue v1 v2 = { voyel with - repr = (v1.repr) ^ (v2.repr) - ; code = Diphtonge (v1, v2) + code = Diphtonge (v1, v2) + ; repr = "[" ^ (v1.repr) ^ (v2.repr) ^ "]" } let code t = t.code let a = - { voyel with repr = Repr.a ; code = Voyel_A } + { voyel with + code = Voyel_A + ; repr = Repr.a + } let e = function | `Closed -> { voyel with repr = "e" ; code = Voyel_E } | `Opened -> { voyel with repr = "E" ; code = Voyel_E } - let eu = function - | `Closed -> { voyel with repr = "2" } - | `Opened -> { voyel with repr = "9" } + let eu = + { voyel with repr = "9" } let schwa () = - { voyel with repr = "°" } + { voyel with + code = Voyel_E + ; repr = "°" } - let o _ = - { voyel with repr = Repr.o ; code = Voyel_O } + let o = + { voyel with + repr = Repr.o + ; code = Voyel_O } let i = - { voyel with repr = Repr.i ; code = Voyel_I } + { voyel with + repr = Repr.i + ; code = Voyel_I } let voyel_y = - { voyel with repr = Repr.y ; code = Voyel_Y } + { voyel with + repr = Repr.y + ; code = Voyel_Y } let voyel_u = - { voyel with repr = Repr.u ; code = Voyel_U } + { voyel with + repr = Repr.u + ; code = Voyel_U } let p = - { none with repr = Repr.p ; mutable_ = false } + { none with + code = Consonant_P + ; repr = Repr.p + ; mutable_ = false } let b = - { none with repr = Repr.b ; mutable_ = false } + { none with + code = Consonant_B + ; repr = Repr.b + ; mutable_ = false + } let t = - { none with repr = Repr.t } + { none with + code = Consonant_T + ; repr = Repr.t + } let d = - { none with repr = Repr.d } + { none with + code = Consonant_D + ; repr = Repr.d } let k = - { none with repr = Repr.k ; mutable_ = false } + { none with + code = Consonant_K + ; repr = Repr.k + ; mutable_ = false } let g = - { none with repr = Repr.g } + { none with + code = Consonant_G + ; repr = Repr.g } let f = - { none with repr = Repr.f } + { none with + code = Consonant_F + ; repr = Repr.f } let v = - { none with repr = Repr.v } + { none with + code = Consonant_V + ; repr = Repr.v } let s = - { none with repr = Repr.s } - - let sz = - { s with code = SZ } + { none with + code = Consonant_S + ; repr = Repr.s } let ch = { none with repr = Repr.ch ; mutable_ = false } + let sz = + { s with code = SZ } + let z = - { none with repr = Repr.z } + { none with + code = Consonant_Z + ; repr = Repr.z } let n = - { none with repr = Repr.n ; nasal = true } + { none with + code = Consonant_N + ; repr = Repr.n + ; nasal = true } let m = - { none with repr = Repr.m ; nasal = true } + { none with + code = Consonant_M + ; repr = Repr.m + ; nasal = true } let l = - { none with repr = Repr.l } + { none with + code = Consonant_L + ; repr = Repr.l } let r = - { none with repr = Repr.r } + { none with + code = Consonant_R + ; repr = Repr.r } let semi_voyel_w = { none with @@ -233,7 +307,9 @@ module S = struct ; code = SemiVoyel_Y} let nasal t = + match t.code with + | Voyel_E -> Some { t with repr = Repr.a_nasal ; nasal = true } | 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 } @@ -246,17 +322,10 @@ module S = struct 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 } ) + { i 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 *) + the case I E, N -> wich is transformed into I, E N *) Some ( diphtongue i @@ -276,8 +345,9 @@ module S = struct : 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, _ -> "" @@ -288,10 +358,28 @@ module S = struct | 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 + + | Consonant_P, _ -> Repr.p + | Consonant_B, _ -> Repr.b + | Consonant_T, _ -> Repr.t + | Consonant_D, _ -> Repr.d + | Consonant_K, _ -> Repr.k + | Consonant_G, _ -> Repr.g + | Consonant_F, _ -> Repr.f + | Consonant_V, _ -> Repr.v + | SZ, _ + | Consonant_S, _ -> Repr.s + | Consonant_Z, _ -> Repr.z + + | Consonant_M, _ -> Repr.m + | Consonant_N, _ -> Repr.n + | Consonant_L, _ -> Repr.l + | Consonant_R, _ -> Repr.r | Diphtonge (l1, l2), _ -> - (repr l1) ^ (repr l2) + "[" ^ (repr l1) ^ (repr l2) ^ "]" end include S |