#Importo las bibliotecas library(tuneR) library(seewave) #Seteo el directorio de trabajo o "working directory" setwd() #entre paréntesis pongo la ruta al directorio donde tengo mis archivos a importar, etc. #Cargo un archivo de audio con readWave del paquete tuneR oamer <- readWave("Oamer.wav") #Imprimo los datos del archivo oamer #Grafico la forma de onda con oscillo del paquete seewave. #Con from y to selecciono una ventana de tiempo especifica dentro del archivo layout(matrix(1:3, nrow=3)) oscillo(oamer) oscillo(oamer,from=3.25, to=3.75) oscillo(oamer, from=3.3, to=3.4) #Leo las anotaciones manuales desde el archivo csv (o .txt en este caso) oamer_marcas <- read.csv(file='Juncosa-Tarea2.txt', sep="\t") oamer_marcas #Extraigo los inicios y los finales inicios <- oamer_marcas$Begin.Time..s. finales <- oamer_marcas$End.Time..s. #Grafico la forma de onda y anotaciones layout(matrix(1:2, nrow=2)) plot(normalize(oamer), main='Oamer') par=(new=TRUE) for (t in inicios) { abline (v=t,col="darkgreen") } for (t in finales){ abline (v=t,col="darkred") } #### TAREAS CLASE 2 #### 1) Calcular duraciones de las vocalizaciones y la #duración promedio #Primero hago un vector que sea duración del canto con un #número de elementos igual al número de observaciones del #data frame oamer_marcas duracion_canto <- rep(NA, times = 15) #Después hago un for para iterar la resta entre el vector #'finales' e 'inicios' por todos los elementos de ambos #vectores, y le digo que lo guarde en el vector que definí #antes, 'duracion_canto'. for(i in 1:length(duracion_canto)){ duracion_canto[i] <- (finales[i]-inicios[i]) } #Después lo agrego como una columna nueva al data frame #oamer_marcas. oamer_marcas$Duration.Song..s. <- duracion_canto #Para hacer el promedio de duración de las 15 vocalizaciones #registradas en oamer uso la función mean #teniendo en cuenta todos los valores del vector #'duracion_canto'. promedio_duracion <- mean(duracion_canto) print(promedio_duracion) #### 2) Calcular duraciones de las pausas entre vocalizaciones #y su valor promedio #Para calcular los silencios o pausas entre las vocalizaciones #tengo que hacer un for que itere la operación de restar #entre el inicio de i+1 y el final de i por todos los i #elementos de ambos vectores 'inicios' y 'finales'. #Nuevamente voy a hacer un vector que va a tener el mismo #tamaño que los vectores 'inicios' y 'finales'. pausas <- rep(NA, times=15) #Hago el for, que claramente va a tener 14 valores en lugar #de 15 ya que no vamos a poder calcular nunca la pausa para #el ultimo canto, ya que sería una "pausa" infinita porque #por definición no va a tener un canto a continuación. for (i in 1:length(pausas)) {pausas[i] <- (inicios[i+1]- finales[i])} #Vemos los valores del vector pausas y evidentemente el #ultimo valor en posición 15 no es un número, es un valor #faltante. Lo hice de tamaño 15 para poder unirlo al data #frame oamer_marcas. pausas #Voy a unirlo al data frame como una nueva columna. oamer_marcas$Duration.Silences..s. <- pausas #Calculo el promedio de duración de los silencios. Pero como #tengo un NA en el vector pausas, voy a indicarle a la #función mean que elimine los NA. Para eso en el valor lógico #na.rm pongo TRUE. promedio_pausas <- mean(pausas, na.rm = TRUE) print(promedio_pausas) ##### 3) Calcular el periodo del canto y su promedio #Para esto tengo que calcular el tiempo que transcurre entre #el inicio de una vocalización y el inicio de la siguiente. #Es decir, sería la suma entre la duración del i-ésimo canto #y el i-ésimo silencio. #Primero hago el vector de tamaño 15, llamado periodo periodo <- rep(NA, times=15) for (i in 1:length(periodo)) {periodo[i] <- (duracion_canto[i]+pausas[i])} #Veo los valores del vector periodo. Se observa que el ultimo #valor es un NA, justamente porque no hay nada en el vector #pausas y no se puede calcular el periodo para el ultimo #elemento. periodo #Voy a unirlo al data frame oamer_marcas oamer_marcas$Period..s. <- periodo #Muestro todo el data frame para ver las columnas añadidas oamer_marcas #Calculo el promedio del periodo, eliminando el valor NA en #posición 15 promedio_periodo <- mean(periodo, na.rm = TRUE) print(promedio_periodo) #____________________________________________________________________________________________________