La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Sesión n.3 el fin del principio scripting en praat.

Presentaciones similares


Presentación del tema: "Sesión n.3 el fin del principio scripting en praat."— Transcripción de la presentación:

1 sesión n.3 el fin del principio scripting en praat

2 ¿de dónde venimos? en la sesión pasada vimos: ● manipulación de objetos ● selección, creación, modificación ● queries numéricos y de texto ● buenas prácticas

3 ¿a dónde vamos? hoy veremos cómo usar eso en praat: ● funciones numéricas y de texto ● procedures ● interacción fuera de praat ● con el usuario ● con la estructura de archivos

4 parte 1 la caja de herramientas

5 ● los scripts realizan tareas ● las herramientas facilitan tareas ● las herramientas son especializadas ● las herramientas de praat son las funciones

6 ¿qué es una función? ● una función es un sub-programa que realiza una tarea compleja ● puede usarse como una instrucción simple ● acepta argumentos ● entrega resultados que por lo mismo pueden ser usados en la asignación de una variable

7 ¿qué es una función? ● son una poderosa herramienta si un script es una serie de instrucciones simples que cumple una tarea compleja, una función es una manera de saltarnos pasos podemos realizar algunas tareas complejas sin tener que hacerlas nosotros mismos Create Sound from formula... sonido 1 0 1 44100...1/2*sin(2*pi*377*x)+randomGauss(0,0.1)

8 ¿cómo se identifica una función? ● la manera más fácil de hacerlo es porque están seguidas de paréntesis sonidos = numberOfSelected (“Sound”)

9 ¿qué características tienen? ● se invocan por nombre ● normalmente a la derecha de una asignación de variable (rvalue) ● reciben argumentos (que pueden ser el resultado de otras funciones) ● no siempre necesitan argumentos raiz = sqrt (2) tmp = round (raiz) printline 'tmp' raiz = round (sqrt (2)) printline 'raiz' =

10 ¿qué características tienen? ● todas las funciones entregan un valor ● las funciones numéricas entregan valores numéricos, las de string valores de string ¡fíjense en el nombre de la función!

11 los sospechosos de siempre a decir verdad, ya hemos visto algunas: ● selected (a$, b) ● selected$ (a$, b) ● numberOfSelected (a$) ● round (a) ● sqrt (a)

12 algunas funciones útiles ● length (a$) entrega el largo en caracteres de un string a$ = "un string cualquiera" b$ = "otro string" largoA = length (a$) largoB = length (b$) if largoA > largoB printline "'a$'" es mas largo que "'b$'" else printline "'b$'" es mas largo que "'a$'" endif

13 algunas funciones útiles ● left$ (a$, b); right$ (a$, b) entregan un string con los b caracteres de más a la izquierda o a la derecha de a$ for i to numeroDeVerbos terminacion$ = right$ (verbo'i'$, 2) tmp$ = verbo'i'$ if left$ (terminacion$, 1) = "a" printline 'tmp$' es de 1era conjugacion elsif left$ (terminacion$, 1) = "e" printline 'tmp$' es de 2da conjugacion elsif left$ (terminacion$, 1) = "i" printline 'tmp$' es de 3era conjugacion elsif right$ (terminacion$, 1) <> "r" printline 'tmp$' no es un verbo! endif endfor

14 algunas funciones útiles ● mid$ (a$, b, c) entrega un string con los c caracteres desde el caracter número b en a$ vocales$ = "aeiou" largo = length (vocales$) a$ = "" for i to largo a$ = a$ + mid$ (vocales$, i, 1) if i < largo a$ = a$ + "-" endif endfor printline 'a$' el burro sabe mas que tu!

15 algunas funciones útiles ● index (a$, b$) entrega el índice de la primera ocurrencia de b$ en a$. entrega 0 si es que b$ no está en a$ n = Get number of intervals... 1 for i to n vocales$ = "aeiou" etiqueta$ = Get label of interval... 1 i if index (vocales$, etiqueta$) > 0 printline Es vocal: 'etiqueta$' endif endfor index () tiene una función hermana que entrega el índice de la última ocurrencia de un string en otro: rindex ()

16 otras funciones útiles ● fixed$ (a, b) y percent$ (a, b) entregan un string con el valor de a, con b cifras después de la coma (en otras palabras, convierten valores numéricos en strings) ● date () da la fecha y hora actual

17 otras funciones útiles ● extractNumber (a$, b$) busca un valor numérico en a$ que siga el contenido de b$ (en otras palabras, convierte strings en valores numéricos) ● extractWord$ (a$, b$) entrega un string con la palabra sin espacios en a$ que siga a b$ ● extractLine$ (a$, b$) entrega un string con lo que siga en a$ después de b$ hasta un newline$

18 otras funciones útiles ● hertzToSemitones (a) entrega un valor en semitonos correspondiente al valor de a en Hz (relativo a 100Hz) ● semitonesToHertz (a) realiza la operación inversa ● abs (a) entrega el valor absoluto de a (la magnitud sin signo)

19 ¿y si no existe una función? si uno tiene que hacer algo para lo que no existen ni funciones ni botones, uno tiene que hacerlo uno mismo hay dos maneras de hacerlo: ● escribiendo procedures ● escribiendo scripts y luego usándolos con include o con execute... pero esto se escapa a nuestro taller. pueden mirarlo ustedes mismos en el manual de praatinclude execute

20 ¿qué es un procedure? ● si uno tiene que hacer una tarea repetitiva en praat uno usa un script ● si uno tiene que hacer una tarea repetitiva en un script usa un procedure ● un procedure es como un script dentro de un script

21 ¿cómo se escribe un procedure? ● se declara ● se invoca procedure NombreDelProcedure [variables] … endproc call NombreDelProcedure [valores]

22 ejemplo 1 palabra$ = "uno" call Medir palabra$ = "dos" call Medir palabra$ = "tres" call Medir procedure Medir largo = length (palabra$) printline 'palabra$' tiene 'largo' caracteres endproc pero las funciones aceptan argumentos...

23 ejemplo 1 ● palabra$ es una variable global, accesible desde todas partes del script ● Medir fue escrito del modo más simple que se puede, por lo que es exactamente lo mismo que copiar el código del script cada vez que se hace call ● aunque es cosa de estilo personal, yo prefiero marcarlos con mayúsculas

24 ejemplo 2 palabra$ = "mi palabra no cambia" printline 'palabra$' call Medir uno call Medir dos call Medir tres printline 'palabra$' procedure Medir.palabra$ largo = length (.palabra$) printline '.palabra$' tiene 'largo' caracteres endproc pueden no ser verdaderas funciones (y no lo son) pero pueden ser usadas como una

25 ejemplo 2 ● palabra$ sigue siendo global ● pero ahora Medir trabaja con.palabra$ ●.palabra$ es una variable local ● en praat, las variables locales son accesibles globalmente (.palabra$ es lo mismo que Medir.palabra$) ● sirven para controlar las variables a las que un procedure tiene acceso

26 parte 2 rompiendo la burbuja

27 interacción con el usuario tal y como existen herramientas para facilitar tareas dentro del script, las hay para facilitar la comunicación con el usuario principalmente son: ● echo y printline ● exit ● form

28 interacción con el usuario ● echo TEXTO y printline TEXTO imprimen y añaden información a la pantalla info, respectivamente ● exit TEXTO termina la ejecución del script* e imprime un mensaje de error al usuario en caso de haberlo * lo que lo hace muy útil para interrumpir loops

29 interacción con el usuario ● form … endform form permite presentarle al usuario un cuadro en donde establecer los parámetros del script form Título... natural enteroPositivo valorPorDefecto real numeroReal valorPorDefecto... word stringSinEspacios valorPorDefecto text string valororDefecto choice selecionMultiple valorPorDefecto button Texto comment Un comentario explicativo etc... endform

30 interacción con archivos ● en cuanto botones, comandos como ● Read from file... ● Open long sound file... ● Save as text file... ● están disponibles desde un script ● pero praat permite hacerle modificaciones más ambiciosas a la estructura de archivos

31 interacción con archivos ● fileReadable (a$) entrega 1 si el archivo indicado por a$ existe y es legible (usa paths relativos) ● createDirectory (a$) crea el directorio especificado en a$ ● deleteFile (a$) borra el archivo a$ si es que existe

32 interacción con archivos objeto$ = selected$ ("Sound") nombre$ = extractLine$ (objeto$, "Sound ") archivo$ = nombre$ + ".wav" archivoExiste = fileReadable (archivo$) if archivoExiste = 1 and reemplazar = 1 deleteFile (archivo$) # filedelete archivo$ elsif archivoExiste = 1 and reemplazar = 0 exit El archivo 'archivo$' ya existe endif Save as WAV file... archivo$ printline 'archivo$' ha sido guardado

33 interacción con archivos ● a$ > b$ graba el contenido de a$ en el archivo indicado en b$ ● a$ >> b$ añade el contenido de a$ al archivo b$, y si este no existe lo crea ● a$ < b$ guarda el contenido de b$ en a$ ¡ojo! a$ > b$ no es lo mismo que a > b

34 interacción con archivos ● fileappend a$ b$ añade el contenido de b$ a a$ ● filedelete b$ borra el archivo b$ si es que existe estas no son funciones: en el manual se las llama directivas

35 interacción con archivos archivoconf$ = "config.ini" a = fileReadable (archivoconf$) if a config$ < archivoconf$ altura = extractNumber (config$, "Altura=") ancho = extractNumber (config$, "Ancho=") nombre$ = extractLine$ (config$, "Nombre=") else ejemplo$ = "Variable=valor'newline$'" ejemplo$ > config.ini exit 'archivoconf$' no existe'newline$'...ejemplo ha sido creado'newline$' endif ¿notaron la tercera línea?

36 las últimas funciones ● chooseReadFile$ (a$) ● chooseWriteFile$ (a$, b$) abren sendos menús de título a$ en el que respectivamente se pide un archivo para leer y uno con el nombre sugerido b$ para escribir ● chooseDirectory$ (a$) abre un menú para seleccionar un directorio en praat, / funciona como delimitador sin importar el sistema sobre el que se corra

37 las últimas funciones archivo$ = "sound.wav" largo = length (archivo$) punto = index (archivo$, ".") archivo2$ = left$ (archivo$, punto-1)...+ "2"...+ right$ (archivo$, (largo- punto)+1) if !fileReadable (archivo$) archivo$ = chooseReadFile$...("Abrir sonido...") if archivo$ = "" exit endif Read from file... 'archivo$' Play guardar$ = chooseWriteFile$...("Guardar en...", archivo2$) if guardar$ != "" Save as WAV file... 'guardar$' endif

38 tareas ● lean el manual de praat ● lean scripts de otras personas ● escriban scripts propios ● piensen en cómo se podría hacer una tarea con un script incluso si no lo usan ● si se les ocurre como, y resulta útil, háganlo ● si no se les ocurre cómo... ¡inténtenlo! en el peor de los casos van a entender mejor por qué no pueden hacerlo todavía

39 otros recursos los scripts de ejemplo de esta y las demás sesiones (así como esta presentación y la solución de las tareas) estan disponibles en http://www.pinguinorodriguez.cl/tallerpraat.html la documentación de praat tiene muchísima información sobre funciones y otras herramientas: http://www.fon.hum.uva.nl/praat/manual/Formulas_4__Mathematical_funct ions.html http://www.fon.hum.uva.nl/praat/manual/Formulas_5__String_functions.ht ml

40 otros recursos también pueden suscribirse a la lista de correos de usuarios de praat, en donde a menudo aparecen dudas interesantes, y se tiene la oportunidad de devolverle a la comunidad http://uk.groups.yahoo.com/group/praat-users/ o enviar correos directamente a la lista a praat-users@eGroups.com


Descargar ppt "Sesión n.3 el fin del principio scripting en praat."

Presentaciones similares


Anuncios Google