Title: PROGRAMMER AVEC
1PROGRAMMER AVEC
Cédric Gendrot cgendrot_at_univ-paris3.fr
2Plan
- 1- Introduction au langage de Praat
- 2- Votre premier script
- 3- L'analyse acoustique le son
- 4- Ecrire dans un fichier
- 5- L'analyse acoustique la "TextGrid"
3Plan
- 1- Introduction au langage de Praat
- 2- Votre premier script
- 3- L'analyse acoustique
- 4- Ecrire dans un fichier
- 5- L'analyse acoustique la "TextGrid"
4Programmer???
- Cest un langage de scripts
- 1- un langage interprété
- 2- d'accès plus abordable (pas du C)mais...
- 3- proche du Visual Basic de Microsoft (suite de
Macros améliorées)
5Un exemple concret
- Réaliser une analyse acoustique grâce à un
script! - Prenez votre fichier "Praat Demo" étiqueté
...(étiqueté cest indispensable si lon veut
connaître les caractéristiques de certains
phonèmes)
6Objectif final !
- Analyser tous les a de cet extrait
- Fo
- valeurs des 3ers formants
- intensité globale
- durée
7Notez ces commandes - qui peuvent sembler
inutiles manuellement - mais qui seront
reproduites par le script
8point important
- Il sagit de comprendre la logique
- Les opérations se dérouleront dans la fenêtre
Praat objects , cest rapide, et les mêmes
commandes sont disponibles
9Ces commandes se retrouveront dans la
fenêtre "Praat Objects"
Ces commandes se retrouveront dans la
fenêtre "Praat Objects"
10Plan
- 1- Introduction au langage de Praat
- 2- Votre premier script
- 3- L'analyse acoustique
- 4- Ecrire dans un fichier
- 5- L'analyse acoustique la "TextGrid"
11Votre 1er script!
- voici les étapes.pour se mettre dans le bain
- 1- ouvrir un script vierge
- 2- ouvrir un fichier et sa grille détiquetage...
- 3- puis les insérer dans le script!
- 4- sauver le script, puis l'exécuter
- 5- ré-utiliser le script plus tard
- 6- La notion de chemin
- 7- La notion de variable
- 8- Nommer les fichiers pour les (r)appeler
121- ouvrir un script vierge
- Donc désormais, tout se passe dans la fenêtre
Praat Objects - Control gt New Praat script
13(No Transcript)
142- ouvrir un fichier et sa grille détiquetage...
- On va pouvoir écrire dans ce script
- Comment ouvrir un fichier par un script ?
- Peu de syntaxe à apprendre, il sagit de Macros
15En fait...
- Toutes les actions réalisées après ouverture de
Praat sont enregistrées dans un historique - Il est sage de commencer par "formater cet
historique"
16(No Transcript)
173- puis les insérer dans le script!
- Ouvrons donc un fichier et puis copions la
syntaxe de laction dans le script - avec la commande "Paste History" (ou CtrlH) qui
se trouve juste sous la commande que l'on vient
de voir
18(No Transcript)
19Votre 1er script!
- voici les étapes.pour se mettre dans le bain
- 1- ouvrir un script vierge
- 2- ouvrir un fichier et sa grille détiquetage...
- 3- puis les insérer dans le script!
- 4- sauver le script, puis l'exécuter
- 5- ré-utiliser le script plus tard
- 6- La notion de chemin
- 7- La notion de variable
- 8- Nommer les fichiers pour les (r)appeler
- 9- mettre des commentaires
20Il suffira ensuite de...
- Sauvegarder le script ( File gt Save ou Ctrls
) - Puis le lancer ( Run gt Run ou Ctrl r )
pour répéter la manœuvre !
21(No Transcript)
22(No Transcript)
235- ré-utiliser le script plus tard
- Pour exécuter ce script un autre jour
- il faudra l'appeler depuis la fenêtre "Praat
Objects" - ...puis l'exécuter comme d'habitude...
24(No Transcript)
25exercice1
26Exercice1
- 1- Effacez l'historique (Clear History)
- 2-Ouvrez le fichier son "Track01.wav"et sa
grille d'étiquetage "Track01.TextGrid" - 2- Inscrivez l'opération dans un script,
sauvegardez le dans le dossier "cours_slow5"
(script1 par ex) - 3- Fermez Praat, ouvrez le à nouveau, ouvrez le
script et exécutez le
27En fait.
- En programmation, les puristes disent pas de
nom de fichier dans un script - et cest bien vrai, mais pour linstant cest
plus simple! - Ces notions sont indispensables si lon veut
- lire des fichiers puis écrire les résultats
ailleurs - faire des scripts autonomes
28Votre 1er script!
- voici les étapes.pour se mettre dans le bain
- 1- ouvrir un script vierge
- 2- ouvrir un fichier et sa grille détiquetage...
- 3- puis les insérer dans le script!
- 4- sauver le script, puis l'exécuter
- 5- ré-utiliser le script plus tard
- 6- La notion de chemin
- 7- La notion de variable
- 8- nommer les fichiers pour les (r)appeler
- 9- mettre des commentaires
296- La notion de chemin
- Allons y progressivement
- Il faut connaître la notion de chemin relatif
- Admettons que lon donne un chemin unique vers un
dossier qui contiendra tout notre travail - C\WINDOWS\Bureau\cours_prog_praat\
307- La notion de variable
- Nommons le dans le script
- path "C\WINDOWS\Bureau\cours_prog_praat\"
nom de variable on peut mettre nimporte
quoi toto bloublou
ici cest le chemin donné par Windows !
31Point essentiel!!!!!!!!
- Voilà le plus grand principe de la programmation
mettre les informations dans des "variables" - Puisqu'on peut les ré-utiliser ensuitepar
exemple l'afficher avec la commande print
'path'
32Quelques détails ...
- Ce qui peut paraître compliqué également
- les signes de ponctuation "
' - En fait Praat est assez permissif
33ce qu'il faut savoir tout de même
- la variable 'toto' sera mémorisée comme un nom
- la variable 'toto' sera mémorisée comme un
chiffre - les "..." (ou rien) ne sont pas interprétées
- les '.' seront interprétées
34Maintenant...
- Pour ouvrir les fichiers dans ce dossier
- path "C\WINDOWS\Bureau\cours_prog_praat\"
- file path "track01.wav"
- file2 path "track01.TextGrid"
- Read from file... 'file'
- Read from file... 'file2'
- Pour linstant ça paraît plus compliqué mais il
faut sy habituer lutilité deviendra évidente
bientôt!
358- Nommer les fichiers
- Un des rares exemples sans macroune fois que
vous avez ouvert un nouvel élément dans la
fenêtre "Praat Objects" (que ce soit un son, une
grille, une analyse de Fo, formants) - Read from file... 'file'
- son selected ( "Sound")
- Read from file... 'file2'
- grille selected ("TextGrid ")
nom de variable on peut mettre nimporte quoi
à droite de cest très strict!
368 - pour les rappeler
- Sélectionner un son revient à cliquer
dessusvoici comment faire "par écrit" - select 'son'
- select 'grille'
- Glissez une pause entre chaque pour observer les
étapes... select 'son' pause select
'grille' pause select 'son'
pratique ces pauses! quand le script "plante"
toujours au même endroit
379- mettre des commentaires
- Un grand classique !!!
- Pour progresser, cest vraiment
indispensablemais aussi pour se souvenir de ce
quon a fait 4 mois tôt ! - Il suffit de commencer une ligne par
38exercice2
39exercice2
- 1- Indiquez le chemin et ouvrez les 2 mêmes
fichiers avec la méthode suivantepath
"C\WINDOWS\Bureau\cours_prog_praat\"file
path "track01.wav"file2 path
"track01.TextGrid"Read from file... 'file'Read
from file... 'file2' - 2- Nommez les "son" et "grille", puis
sélectionnez les tour à tour 2 fois, utilisez les
pauses pour vérifier que ça fonctionne! - 3- N'hésitez à décrire le tout par des
commentaires. - 4 - Utilisez la fonction print pour afficher
'path', 'file' et 'son'
40exercice2 solution
- Voici une des possibilités
chemin et nom des fichiers à ouvrir path
"C\WINDOWS\Bureau\cours_prog_praat\" file
path "track01.wav" file2 path
"track01.TextGrid" ouverture des fichiers
nommés 'son' et 'grille' Read from file...
'file' son selected ("Sound") Read from
file... 'file2' grille selected
("TextGrid") sélection des sons avec pause
pour voir si ça marche! select 'son' pause select
'grille' pause
Affichage dans la fenêtre Info.. 'newline'
permet de passer à la ligne print 'path'
'newline' 'file' 'newline' 'son'
41Plan
- 1- Introduction au langage de Praat
- 2- Votre premier script
- 3- L'analyse acoustique
- 4- Ecrire dans un fichier
- 5- L'analyse acoustique la "TextGrid"
42Commençonsle principe !
- Comment obtenir nos premières valeurs.?
- Comment fait on manuellement????
- Il suffit d'utiliser le menu "Query" qui apparaît
lorsqu'un élément est sélectionné...
43Les commandes possibles lorsqu'un son est
sélectionné !! "Query gt . "
44Les commandes possibles lorsqu'une grille
d'étiquetage est sélectionné !! "Query gt . "
45On a vu...
- Pour les analyses manuelles il était essentiel
de montrer les analyses de Fo (et autres) sur
l'écran pour prendre des mesures ! - Pour les scriptsil est essentiel d'avoir les
analyses sur le "plan de travail" !
46(No Transcript)
47(No Transcript)
48Query... Le principe est le même pour .. la Fo
Rappel Sound gt Periodicity gt To Pitch pour
obtenir le "Pitch"
49Query... Le principe est le même
pour .. l'analyse formantique
Rappel Sound gt Formants LPC gt To
Formant(burg) pour obtenir le "Formant"
50Query... Le principe est le même
pour .. l'analyse d'intensité
Rappel Sound gt To Intensity pour obtenir
l'intensité
51La difficulté est la suivante !!
- Toutes ces commandes requièrent des informations
temporelles - Or ces informations temporelles sont contenues
dans la grille d'étiquetage ("TextGrid").
52Allons y progressivement !
- Il va falloir mélanger
- 1- les informations prises sur le son
- 2- les informations fournies par la "TextGrid"
- Commençons par nous familiariser avec la première
partie
dans l'exercice 3 !
53Utilisons un indice temporel fixe
- à 1.08s du début du fichier se trouve...
- un a dans "Paris" (au milieu du a)
- Prenons la valeur de Fo à cet instant!
Manuellement pour coller la syntaxede macros
54(No Transcript)
55(No Transcript)
56(No Transcript)
57(No Transcript)
58Il faut maintenant ...
- coller ces actions dans le script.
- "Edit gt Paste History" (ou CtrlH)
attention ! si vous n'avez pas pris soin de
formater l'historique avant les commandes il
peut y avoir beaucoup de lignes!!!
59Voici ce qu'on obtient...
select Sound track01 To Pitch... 0.01 75 600 Get
value at time... 1.08 Hertz Linear
- Un langage à scripts "des macros améliorées"
ça veut dire quoi?
60Il faudra changer (1)
select Sound track01 To Pitch... 0.01 75 600 Get
value at time... 1.08 Hertz Linear
select 'son' To Pitch... 0.01 75 600 Get value at
time... 1.08 Hertz Linear
- select Sound track01 en select 'son' pour
rendre le script autonome!
61Il faudra changer (2)
select Sound track01 To Pitch... 0.01 75 600 Get
value at time... 1.08 Hertz Linear
select 'son' To Pitch... 0.01 75 600 pitch
selected("Pitch") Get value at time... 1.08 Hertz
Linear
- Nommez le "Pitch" si l'on doit s'en servir plus
tard. select 'pitch'
62Il faudra changer (3)
select Sound track01 To Pitch... 0.01 75 600 Get
value at time... 1.08 Hertz Linear
select 'son' To Pitch... 0.01 75 600 pitch
selected("Pitch") toto Get value at time...
1.08 Hertz Linear
- Il faut enregistrer le résultat. dans une
variable bien sûr! c'est un résultat
chiffrédoncpas de !
63exercice3
64 exercice3
- Prenez la valeur de Fo à 1.08s, sauvez la dans
une variable, puis affichez la. - 1- Reprenez votre script!
- 2- Ouvrez le si vous l'avez fermé
- 3- Re-formatez l'historique de Praat (ça se
passe toujours dans la fenêtre "...script") - 4- exécutez les opérations (valeur de Fo à 1.08s
affichage) - 5- collez l'action dans le script
- 6- améliorez les macros
- 7- enregistrez et re-faites tourner.
65exercice3 solution
chemin et nom des fichiers à ouvrir path
"C\WINDOWS\Bureau\cours_prog_praat\" file
path "track01.wav" file2 path
"track01.TextGrid" ouverture des fichiers
nommés son et grille Read from file...
'file' son selected ("Sound") Read from
file... 'file2' grille selected
("TextGrid") select 'son' To Pitch... 0.01 75
600 pitch selected("Pitch") toto Get value at
time... 1.08 Hertz Linear Affichage de la
variable 'toto'tt ce qui n'est pas entre '..'
est affiché tel quel ! print la valeur de Fo à
1.08 sec du début du fichier est égale à 'toto'
Hertz
66Un détail important !
- Affichage de la variable 'toto'tt ce qui n'est
pas entre '..' est affiché tel quel! - print la valeur de Fo à 1.08 sec du début du
fichier est égale à 'toto' Hertz permet
d'obtenir
67Précision des valeurs !!!
- Affichage de la variable 'toto'tt ce qui n'est
pas entre '..' est affiché tel quel! - print la valeur de Fo à 1.08 sec du début du
fichier est égale à 'toto2' Hertz permet
d'obtenir
68Un autre point!
- Les infos affichées ne sont pas automatiquement
effacées d'une exécution de script à l'autre - Votre fenêtre "info" commence à être chargée.
- Placez clearinfo à n'importe quel endroit du
script et elle sera nettoyée!
69Continuons pour ..
- - les formants
- - l'intensité
70C'est la même démarche!!!
71(No Transcript)
72(No Transcript)
73Le principe est le même pour .. l'analyse
formantique
Rappel Sound gt Formants LPC gt To
Formant(burg) pour obtenir le "Formant"
74(No Transcript)
75(No Transcript)
76(No Transcript)
77Il faut maintenant ...
- coller ces actions dans le script.
- "Edit gt Paste History" (ou CtrlH)
attention ! si vous n'avez pas pris soin de
formater l'historique avant les commandes il
peut y avoir beaucoup de lignes!!!
78Voici ce qu'on obtient...
select Sound track01 To Formant (burg)... 0.01 5
5500 0.025 50 Get value at time... 1 1.08 Hertz
Linear
- Un langage à scripts "des macros améliorées"
ça veut dire quoi?
79Il faudra changer (1)
select Sound track01 To Formant (burg)... 0.01 5
5500 0.025 50 Get value at time... 1 1.08 Hertz
Linear
select 'son' To Formant (burg)... 0.01 5 5500
0.025 50 Get value at time... 1 1.08 Hertz Linear
- select Sound track01 en select 'son' pour
rendre le script autonome!
80Il faudra changer (2)
select Sound track01 To Formant (burg)... 0.01 5
5500 0.025 50 Get value at time... 1 1.08 Hertz
Linear
select 'son' To Formant (burg)... 0.01 5 5500
0.025 50 formant selected("Formant") Get value
at time... 1 1.08 Hertz Linear
- Nommez le "Formant" si l'on doit s'en servir plus
tard. select 'formant'
81Il faudra changer (3)
select Sound track01 To Formant (burg)... 0.01 5
5500 0.025 50 Get value at time... 1 1.08 Hertz
Linear
select 'son' To Formant (burg)... 0.01 5 5500
0.025 50 formant selected("Formant") f1 Get
value at time... 1 1.08 Hertz Linear
- Il faut enregistrer le résultat. dans une
variable bien sûr! c'est un résultat
chiffrédoncpas de !
82Pour les autres formants...
Il faudra changer ici .
83Le principe est le même pour .. l'analyse
d'intensité
Rappel Sound gt To Intensity pour obtenir
l'intensité
84exercice4
85- valeur de Fo, intensité, 3 premiers formants .
86Plan
- 1- Introduction au langage de Praat
- 2- Votre premier script
- 3- L'analyse acoustique
- 4- Ecrire dans un fichier
- 5- L'analyse acoustique la "TextGrid"
87 Écrire dans un fichier
- La prochaine étape sera de mêler ces analyses aux
informations fournies par la "TextGrid" - Mais avant tout 1 conseil indispensable
- 1- afficher le résultat dans un fichier (et non
plus sur la fenêtre Info de Praat
88 Comment afficher le résultat?
- 2 possibilités
- dans la fenêtre "Info" ( simple)
- dans un fichier résultat que l'on créé (
complet)
89 Dans la fenêtre "Info"
- La commande print
- .c'est vu !
90Afficher le résultat dans un fichier que l'on
créé...
- la commande la plus simple fileappendelle
permet de créer un fichier de sortie pour
enregistrer les résultats - Pour indiquer où placer ce fichier on va
procéder comme avant...
91- chemin et nom des fichiers à ouvrir
- path "C\WINDOWS\Bureau\cours_prog_praat\"
- file path "track01.wav"
- file2 path "track01.TextGrid"
- ouverture des fichiers nommés son et grille
- Read from file... 'file'
- son selected ("Sound")
- Read from file... 'file2'
- grille selected ("TextGrid")
92- chemin et nom des fichiers à ouvrir
- path "C\WINDOWS\Bureau\cours_prog_praat\"
- file path "track01.wav"
- file2 path "track01.TextGrid"
- ouverture des fichiers nommés son et grille
- Read from file... 'file'
- son selected ("Sound")
- Read from file... 'file2'
- grille selected ("TextGrid")
93- chemin et nom des fichiers à ouvrir
- path "C\WINDOWS\Bureau\cours_prog_praat\"
- file path "track01.wav"
- file2 path "track01.TextGrid"
- ouverture des fichiers nommés son et grille
- Read from file... 'file'
- son selected ("Sound")
- Read from file... 'file2'
- grille selected ("TextGrid")
94- chemin et nom des fichiers à ouvrir
- path "C\WINDOWS\Bureau\cours_prog_praat\"
- file path "track01.wav"
- file2 path "track01.TextGrid"
- ouverture des fichiers nommés son et grille
- Read from file... 'file'
- son selected ("Sound")
- Read from file... 'file2'
- grille selected ("TextGrid")
95- outputfile path "resultats.xls"
- fileappend 'outputfile' Fo 'tab' formant1
'tab' formant2 'tab' - sans '.' pour insérer des annotations (très
utile!!!) - fileappend 'outputfile' 'toto2' 'tab' 'f12'
'tab' 'f22' 'tab' - avec '.' pour écrire le contenu des
variables
96soit ...
- fileappend 'outputfile' 'newline' Fo 'tab'
formant1 'tab' formant2 'tab' formant3 'tab'
intensité 'tab' 'newline' - Notez qu'on peut/doit insérer...
- 'tab'
- 'newline'
- ...On pourra ainsi remplir les cases d'une
feuille Excel!
97exercice5
98 exercice5
- 1- à 1.08 secondes du début du fichier
- Reprenez le script de l'exercice 3
- Écrivez les résultats dans un fichier
"resultats.xls" que vous placerez dans le dossier
"cours_slow5" - ds ce fichier, inscrivez sur la 1ère ligne le nom
du fichier et sur la 2ème phonème Fo
formant1 (passez d'une cellule à l'autre avec
'tab' et d'une ligne à l'autre avec 'newline') - N'affichez dans la fenêtre "Info" aucun résultat
mais affichez l'information suivante
Analyse terminée, les résultats se trouvent
dans XXXXXX (dans XXX vous placerez
le chemin menant à votre fichier résultat)
99Exercice5 solution
chemin et nom des fichiers à ouvrir path
"C\WINDOWS\Bureau\cours_prog_praat\" file
path "track01.wav" file2 path
"track01.TextGrid" outputfile path
"resultats.xls" fileappend 'outputfile'
'newline' Fo 'tab' phonème 'tab' fo 'tab'
formant1 'tab' 'newline' ouverture des
fichiers nommés son et grille Read from
file... 'file' son selected ("Sound") Read
from file... 'file2' grille selected
("TextGrid") select 'son' To Pitch... 0.01 75
600 pitch selected("Pitch") toto Get value at
time... 1.08 Hertz Linear fileappend
'outputfile' 'toto' 'newline'
100Plan
- 1- Introduction au langage de Praat
- 2- Votre premier script
- 3- L'analyse acoustique
- 4- Ecrire dans un fichier
- 5- L'analyse acoustique la "TextGrid"
101Revenons à nos moutons !
- Il va falloir mélanger
- 1- les informations prises sur le son
- 2- les informations fournies par la "TextGrid"
- On peut passer à la 2ème partie
102Mêler le fichier son aux informations de la
grille d'étiquetage?
- Par définition, la grille d'étiquetage connaît
- le nombre total d'intervalles
- le début et la fin de chaque intervalle
- l'étiquette de chaque intervalle
103Les seules fonctions qui vont nous
intéresser ici
104(No Transcript)
105(No Transcript)
106(No Transcript)
107Si l'on colle ces actions
Comme vous l'avez sans doute déjà remarqué, la
moindre opération est enregistrée...
- Get number of intervals... 1
- Get starting point... 1 2
- Get label of interval... 1 2
...Mais on ne prend que ce qui est intéressant!
108Que modifier?
Get number of intervals... 1 Get starting
point... 1 2 Get ending point 1 2 Get label of
interval... 1 2
nb_intervalles Get number of intervals...
1 beg_phoneme Get starting point... 1
2 fin_phoneme Get ending point 1 2 phoneme
Get label of interval... 1 2
d'abord prévoir d'insérer les résultats dans des
variables !
109Le raisonnement !
110Lintervalle est il nommé a ?si oui, faire
les calculs!
1112 notions indispensables !!!
- les boucles de répétition
- for .. endfor
- Les structures de condition
- if endif
112Littéralement.répétition
- Du 1er intervalle jusqu'au dernier ("for")
- prend l'étiquette (quel phonème?)
- (fin des instructions) ("endfor ")
113Littéralement.condition
- Si l'intervalle est nommé "a" "if"
- réalise les actions suivantes ...
- Get starting point, Get ending point,
- formants, Fo et intensité ...
- (fin des instructions) "endif "
114- nb_intervalles Get number of intervals... 1
- for i from 1 to nb_intervalles
- phoneme Get label of interval... 1 i
- if (phoneme "a")
- beg_phoneme Get starting point... 1
current_syllable - fin_phoneme Get end point... 1 current_syllable
- phoneme_dur fin_phoneme - beg_phoneme
- fileappend 'outputfile1' 'phoneme' 'tab'
'phoneme_dur' 'newline' - endif
- endfor
-
du 1er au dernier intervalle
prend l'étiquette du ième intervalle
si l'étiquette est un "a"
si l'étiquette est un "a" fin
du 1er au dernier intervalle . fin
115nb_intervalles Get number of intervals...
1 for i from 1 to nb_intervalles phoneme Get
label of interval... 1 i if (phoneme
"a") beg_phoneme Get starting point... 1
current_syllable fin_phoneme Get end point... 1
current_syllable phoneme_dur fin_phoneme -
beg_phoneme fileappend 'outputfile1' 'phoneme'
'tab' 'phoneme_dur' 'newline' endif endfor
116 Notez bien !
- On peut soustraire la valeur d'une variable à
celle d'une autre en enregistrant la valeur dans
une 3ème variable - phoneme_dur fin_phoneme - beg_phoneme
pas d'espace dans les noms de variables
117 Notez bien !
- On peut soustraire la valeur d'une variable à
celle d'une autre en enregistrant la valeur dans
une 3ème variable - phoneme_dur fin_phoneme - beg_phoneme
pas de majuscule non plus
118 Notez bien !
- ça marche aussi pour les variables contenant des
mots et non des chiffres ( toto toto
) path "C\WINDOWS\Bureau\cours_prog_praat\"
file path "track01.wav"
comme dans l'exemple que l'on utilise dans
notre script
119exercice6
120 exercice 6
- Terminez l'exercice .
- analysez la Fo, la durée, lintensité et les
valeurs des 3 premiers formants de tous les a
de ce fichier et affichez le résultat dans un
fichier Excel (présentation libre mais
soignée!). - consignes prenez deux types de valeurs
- une au milieu de chaque a il faudra déterminer
ce milieu grâce aux valeurs de début et de fin
des différents a. - l autre sera une valeur moyenne calculée sur
toute la durée de chaque a
121Les bonnes habitudes de programmation
- Le script ici fonctionne ! mais n'est pas
très "efficace" en termes de programmation - perte de temps ( -) ! )
- peu évolutif