-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.praat
179 lines (132 loc) · 10.2 KB
/
script.praat
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
##############################################################################
# 01 BOITE DE DIALOGUE
##############################################################################
form SYNTHÈSE VOCALE
comment Entrez des mots à synthétiser:
comment Exemple: aujourd'hui les poussières anéantissent les montagnes
text Mots aujourd'hui les poussières anéantissent les montagnes
boolean Ajouter_Silence
comment Choisissez la modification prosodique :
boolean F0
boolean Duree
comment Nommez le fichier final (*.wav):
word Nom myFile.wav
endform
##############################################################################
# 02 INITIALISATION DES VARIABLES DE FICHIER (FILE ARGUMENTS)
##############################################################################
fiTranscription = Read from file: "logatome-xu.TextGrid"
fiSon = Read from file: "logatome-xu.mp3"
tbDictionnaire=Read Table from tab-separated file: "dico.txt"
sonBase=Create Sound from formula: "sineWithNoise", 1, 0, 0.01, 44100, "0"
##############################################################################
# 03 SEGMENTATION DE SEQUENCE DE MOTS
# 04 TRANSFORMATION DES MOTS
##############################################################################
seqPhonetique$=""
seqOrtho$=mots$+" "
repeat
indEspace = index(seqOrtho$, " ")
motOrtho$ = left$(seqOrtho$, indEspace-1)
if ( indEspace>0 )
selectObject: 'tbDictionnaire'
Extract rows where column (text): "orthographe", "is equal to", motOrtho$
motPhonetique$ = Get value: 1, "phonetique"
else
motPhonetique$=""
endif
longueur = length(seqOrtho$)
seqOrtho$ = right$(seqOrtho$, longueur-indEspace)
seqPhonetique$ = seqPhonetique$ + motPhonetique$
until indEspace = 0
##############################################################################
# 04 SYNTHÈSE
##############################################################################
clearinfo
pause On va synthétiser /'seqPhonetique$'/
printline *******************************************************************
if ( ajouter_Silence )
seqPhonetique$="_"+seqPhonetique$+"_"
endif
selectObject: 'fiTranscription'
nbIntervals=Get number of intervals: 1
for i from 1 to length(seqPhonetique$)-1
diphone$ = mid$(seqPhonetique$, i, 2)
printline Le diphone 'diphone$'
for j from 1 to nbIntervals-1
selectObject: 'fiTranscription'
phoneme1$ = Get label of interval: 1, j
phoneme2$ = Get label of interval: 1, j+1
if (phoneme1$ = mid$(seqPhonetique$, i, 1) and phoneme2$ = mid$(seqPhonetique$, i+1, 1))
ptDebut = Get starting point: 1, j
ptMilieu = Get end point: 1, j
ptFin = Get end point: 1, j+1
printline
printline 'phoneme1$' [ 'ptDebut' : 'ptMilieu' ]
miPhon1 = (ptDebut+ptMilieu)/2
printline 'phoneme2$' [ 'ptMilieu' : 'ptFin' ]
miPhon2 = (ptFin+ptMilieu)/2
selectObject: 'fiSon'
pp = To PointProcess (zeroes): 1, "yes", "no"
miPhone1_index = Get nearest index: miPhon1
tmiPhon1 = Get time from index: miPhone1_index
printline le milieu de 'phoneme1$' est : 'tmiPhon1'
miPhone2_index = Get nearest index: miPhon2
tmiPhon2 = Get time from index: miPhone2_index
printline le milieu de 'phoneme2$' est : 'tmiPhon2'
selectObject: 'fiSon'
monDiphone = Extract part: tmiPhon1, tmiPhon2, "rectangular", 1, "no"
selectObject: 'sonBase'
plusObject: 'monDiphone'
sonBase=Concatenate
printline *******************************************************************
endif
endfor
endfor
if ( f0 )
@manF
endif
if ( duree )
@manD
endif
##############################################################################
# 05 PROCÉDURE : MODIFICATION DE F0
##############################################################################
procedure manF
selectObject: 'sonBase'
endTime=Get end time
maniProso = To Manipulation: 0.01, 75, 600
modPitch = Extract pitch tier
Remove points between: 0, endTime
peak = endTime * 0.8
Add point: 0.01, 100
Add point: peak, 150
Add point: endTime, 120
select 'maniProso'
plus 'modPitch'
Replace pitch tier
select 'maniProso'
sonBase = Get resynthesis (overlap-add)
endproc
##############################################################################
# 06 PROCÉDURE : MODIFICATION DE DURÉE
##############################################################################
procedure manD
selectObject: 'sonBase'
endTime=Get end time
maniProso = To Manipulation: 0.01, 75, 600
modDuree = Extract duration tier
Remove points between: 0, endTime
Add point: 0.01, 0.8
Add point: endTime, 1.5
select 'maniProso'
plus 'modDuree'
Replace duration tier
select 'maniProso'
sonBase = Get resynthesis (overlap-add)
endproc
##############################################################################
# 07 SAUVEGARDER LE FICHIER FINAL
##############################################################################
selectObject: 'sonBase'
Save as WAV file: "'nom$'"