pensez à nettoyer vos scripts ! To Formant (burg)... 0.01 5 5500 0.025 50
Plan 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"
É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
Comment afficher le résultat…? 2 possibilités dans la fenêtre "Info" (+ simple) dans un fichier résultat que l'on créé (+ complet)
Dans la fenêtre "Info" La commande : print / printline ….c'est vu !
Afficher le résultat dans un fichier que l'on créé... la commande la plus simple : fileappend elle 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...
# chemin et nom des fichiers à ouvrir path$ = "C:\WINDOWS\Bureau\cours_prog_praat\" file$ = path$ + "track02.wav" file2$= path$ + "track02.TextGrid" # ouverture des fichiers nommés son$ et grille$ Read from file... 'file$' son = selected ("Sound") Read from file... 'file2$' grille = selected ("TextGrid")
# chemin et nom des fichiers à ouvrir path$ = "C:\WINDOWS\Bureau\cours_prog_praat\" file$ = path$ + "track02.wav" file2$= path$ + "track02.TextGrid" # ouverture des fichiers nommés son$ et grille$ Read from file... 'file$' son = selected ("Sound") Read from file... 'file2$' grille = selected ("TextGrid")
# chemin et nom des fichiers à ouvrir path$ = "C:\WINDOWS\Bureau\cours_prog_praat\" file$ = path$ + "track02.wav" file2$= path$ + "track02.TextGrid" # ouverture des fichiers nommés son$ et grille$ Read from file... 'file$' son = selected ("Sound") Read from file... 'file2$' grille = selected ("TextGrid")
# chemin et nom des fichiers à ouvrir path$ = "C:\WINDOWS\Bureau\cours_prog_praat\" file$ = path$ + "track02.wav" file2$= path$ + "track02.TextGrid" # ouverture des fichiers nommés son$ et grille$ Read from file... 'file$' son = selected ("Sound") Read from file... 'file2$' grille = selected ("TextGrid")
outputfile$= path$ + "resultats.xls" fileappend 'outputfile$' Fo 'tab$' formant1 'tab$' formant2 'tab$' … sans '….' pour insérer des annotations (très utile!!!) fileappend 'outputfile$' 'toto:0' 'tab$' 'f1:0' 'tab$' 'f2:0' 'tab$' … avec '….' pour écrire le contenu des variables
soit ... Notez qu'on peut/doit insérer... 'tab$' 'newline$' 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!
exercice5
exercice5 1- à 2.9 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 votre dossier 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)
Exercice5 : 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$'
Plan 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"
Revenons à 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
Mê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
Les seules fonctions qui vont nous intéresser ici
Si 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!
d'abord prévoir d'insérer les résultats dans des variables ! Que 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 !
Le raisonnement !
L’intervalle est il nommé « a » ? si oui, faire les calculs!
2 notions indispensables !!! les boucles de répétition for ………….. endfor Les structures de condition if …………… endif
Commençons par un exercice simple : énumère n de 1 à 10 si n est égal à 5 alors fais une pause….
Littéralement…….répétition Du 1er intervalle jusqu'au dernier ("for") prend l'étiquette (quel phonème?) (fin des instructions) ("endfor ")
Litté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 "
… du 1er au dernier intervalle 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 i fin_phoneme = Get end point... 1 i 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
pas d'espace dans les noms 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
pas de majuscule non plus 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
… comme dans l'exemple que l'on utilise 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
exercice6
exercice 6 Terminez l'exercice …. analysez la Fo, la durée, l’intensité 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]
Les bonnes habitudes de programmation Le script ici fonctionne ! … … mais n'est pas très "efficace" en termes de programmation perte de temps ( :-) ! ) peu évolutif
Les bonnes habitudes de programmation Le script ici fonctionne ! … … mais n'est pas très "efficace" en termes de programmation perte de temps ( :-) ! ) peu évolutif
Pourquoi ? En fait, le fichier Excel
Une fois que l'on sait… On pourrait faire la chose suivante lancer une analyse de Fo, de formants, d’intensité parmi tous les intervalles repérez les bons et prendre les valeurs lancer une analyse de formants et ainsi de suite...
Il faut stocker cette information… plutôt que de la demander à chaque fois!
Comment faire? 1- passer en revue tous les intervalles de la grille il faut connaître le nombre d'intervalles passer du premier au dernier avec une boucle prendre la "valeur" de chaque intervalle 2- si l'intervalle est le bon incrémenter le décompte (initialisé à 0) enregistrer les "bonnes" valeurs
Une subtilité noiist = Get number of intervals... 1 nos = 0 for j from 1 to noiist syllable$ = Get label of interval... 1 j if (syllable$ <> "a" nos = nos + 1 syllable'nos' = j endif endfor for l from 1 to nos current_syllable = syllable'l' label$ = Get label of interval... 1 current_syllable start_syllable = Get starting point... 1 current_syllable end_syllable = Get end point... 1 current_syllable syllable_duration = round((end_syllable - start_syllable)*1000) fileappend "'outputfile1$'" ('label$') 'tab$' 'syllable_duration' 'newline$' endproc
L’intervalle est il nommé « a » si oui, stocker l’info!
Quelles sont les valeurs temporelles de chacun de ces intervalles Quelles sont les valeurs temporelles de chacun de ces intervalles? (début-fin)