summaryrefslogtreecommitdiff
path: root/src/lib/sounds
diff options
context:
space:
mode:
authorSébastien Dailly <sebastien@chimrod.com>2021-08-29 12:11:24 +0200
committerSébastien Dailly <sebastien@chimrod.com>2021-08-29 12:11:24 +0200
commit6ccbcc2cadae41574e33226b9072a08354880d28 (patch)
treeaf36b9e593a3d36be9acdb1383b1cbd1d6f3abcc /src/lib/sounds
parent3b8c136ebdba7f4b5b4d6baad08d0a75c3b2dc86 (diff)
Update
Diffstat (limited to 'src/lib/sounds')
-rw-r--r--src/lib/sounds/sounds.ml180
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