Seewave provee una gran variedad de herramientas para hacer evaluar con precisión propiedades del sonido en el ambiente de R. El paquete permite visualizar y medir características del tiempo, frecuencia y amplitud de sonidos. Las herramientas son dispuestas en forma modular (cada análisis en su propia función) lo que permite la combinación de estas para generar análisis mas elaborados. En su gran mayoría las funciones de Seewave trabajan sobre objetos “wave”, no sobre archivos de audio en carpetas. Acá veremos ejemplos de algunas de estas herramientas, enfocándose en las potencialmente mas útiles para el estudio del comportamiento vocal en animales.
Podemos instalar y cargar el paquete seewave así:
# instalar
install.packages("seewave")
# instalar
library(seewave)
La instalación puede presentar algunos problemas en linux y OSX. Aquí se ofrecen algunas soluciones.
Podemos ver la descripción del paquete tuneR de esta forma:
?tuneR
Y el nombre de todas las funciones de tuneR así:
ls(getNamespace("tuneR"), all.names=FALSE)
## [1] "audspec" "bark2hz"
## [3] "bind" "C_do_read_mp3"
## [5] "C_pulsewav" "channel"
## [7] "deltas" "dolpc"
## [9] "downsample" "equalWave"
## [11] "extractWave" "FF"
## [13] "FFpure" "fft2barkmx"
## [15] "fft2melmx" "getMidiNotes"
## [17] "getWavPlayer" "hz2bark"
## [19] "hz2mel" "image"
## [21] "lifter" "lilyinput"
## [23] "lpc2cep" "MCnames"
## [25] "mel2hz" "melfcc"
## [27] "melodyplot" "MFCC"
## [29] "mono" "nchannel"
## [31] "noise" "normalize"
## [33] "noSilence" "noteFromFF"
## [35] "notenames" "panorama"
## [37] "periodogram" "play"
## [39] "plot" "plot.Wave.channel"
## [41] "postaud" "postWaveform"
## [43] "powspec" "prepComb"
## [45] "preWaveform" "pulse"
## [47] "quantize" "quantMerge"
## [49] "quantplot" "readMidi"
## [51] "readMP3" "readMTrkEvent"
## [53] "readVarLength" "readWave"
## [55] "sawtooth" "setWavPlayer"
## [57] "silence" "sine"
## [59] "smoother" "spec2cep"
## [61] "square" "stereo"
## [63] "summary" "TK95"
## [65] "updateWave" "Wave"
## [67] "WaveMC" "write_4byte_unsigned_int"
## [69] "write_longvector" "writeWave"
Seewave trae 3 objetos que podemos usar como ejemplo para explorar sus funciones. Los podemos llamar con la función data()
:
# cargar ejemplos
data(tico)
data(orni)
data(pellucens)
data()
solo sirve para cargar ejemplos que vienen por defecto con los paquetes, no para cargar sus propios archivos de audio!!
Podemos ver la información de cada uno de ellos usando ?
:
?tico
¿Qué tipo de objeto es tico
?
¿Cuál es su tasa de muestreo y duración?
Se puede crear el oscilograma de todo el objeto “wave” así:
oscillo(tico)
También podemos generarlo para un segmento (y cambiar el color):
oscillo(tico, from = 0, to = 1)
Las visualizaciones en Seewave permiten un alto grado de modificaciones. Por ejemplo cambiar el color:
oscillo(tico, from = 0, to = 1, colwave = "blue")
Dividir la ventana gráfica en varios paneles:
oscillo(tico, f = 22050, k = 2, j = 2, byrow = TRUE)
Muchos otros de los componentes del gráfico se pueden modificar, por ejemplo:
# hacer el fondo gris
op <- par(bg = "grey")
oscillo(tico, f = 22050, k = 4 , j = 1,
title = TRUE,
colwave = "black",
coltitle = "yellow",
collab = "red",
colline = "white",
colaxis = "blue",
coly0 = "grey50")
También podemos generar otras representaciones de “amplitud vs tiempo”, como por ejemplo los “marcos” de amplitud (“amplitude envelopes”):
env(tico, f = 22050, colwave = "blue")
Podemos sobreponerlo sobre el oscilograma para facilitar la comparación:
oscillo(tico, f = 22050)
par(new=TRUE)
env(tico, f = 22050, colwave = "blue")
Podemos utilizar estas oscilaciones para definir segmentos en el objeto “wave” usando la función timer()
:
También podemos visualizar la amplitud en el dominio de frecuencia utilizando espectros de poder (“power spectra”):
Los espectrogramas son representaciones gráficas del sonido que muestran la energía contenida en los diferentes intervalos de frecuencia a través del tiempo. Para generar espectrogramas se utiliza la transformada de Fourier (o variantes de esta) para disectar las diferentes frecuencias (y su energía) que componen una onda de sonido.
Los espectrogramas los podemos visualizar fácilmente con la función spectro()
:
spectro(tico, f = 22050, wl = 512, ovlp = 90,
collevels = seq(-40, 0, 0.5),
flim = c(2, 6))
¿Qué determinan los argumentos ‘flim’ y ‘tlim’?
¿Cómo afecta cambiar el argumento ‘wl’ la visualizacion del sonido?
¿Cómo puedo cambiar la paleta de colores?