#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)

#____________________________________________________________________________________________________