summaryrefslogtreecommitdiff
path: root/src/lib/sounds/sig.ml
blob: 6b496d29a9a12235fc8e74fe0e84a74dfb8416d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
module type REPR = sig
  type t

  val none: t

  val a : t
  val a_nasal : t

  val e_opened : t
  val e_closed : t
  val schwa : t

  val eu : t

  val o : t
  val o_nasal : t

  val i : t
  val i_nasal : t

  val y : t
  val y_nasal : t

  val u : t
  val p : t
  val b : t
  val t : t
  val d : t
  val k : t
  val g : t
  val f : t
  val v : t
  val ch : t
  val j : t
  val s : t
  val z : t
  val m : t
  val n : t
  val l : t
  val r : t

  val semi_voyel_w : t

  val semi_voyel_y : t

  val muted : t -> t

  val diphtongue : t -> t -> t
end

module type T = sig

  type t
  val muted : t -> t

  val a : t
  val e : [`Closed | `Opened] -> t
  val eu : 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 present with letter [ai].
      It is the e like in "semaine".

      When nazalized, the voyel become [in]


  *)
  val voyel_ai : 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 become [un] like in "brun" *)
  val voyel_y : t

  (** Create a diphtongue from a semi-voyel and a voyel *)
  val diphtongue: t -> t -> t

  val nasal: t -> t option

  val p: t
  val b: t
  val t: t
  val d: t
  val k: t
  val g: t
  val f: t
  val v: t
  val s: t
  val z: t
  val sz: t
  val ch: t
  val j: t

  val n: t
  val m: 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

  val repr
    : (module REPR with type t = 'a) -> t -> 'a

end