Measuring degradation

LBH song type prevalence and degradation

Author
Published

July 25, 2023

Source code and data found at https://github.com/maRce10/lbh_songtype_prevalence_and_degradation

1 Purpose

  • Time-sync re-recorded sounds
  • Measure degradation features

 

2 Report overview

 

3 Load packages

Code
# knitr is require for creating html/pdf/word reports formatR is
# used for soft-wrapping code

# install/ load packages
sketchy::load_packages(packages = c("knitr", "formatR", "rprojroot",
    github = "maRce10/warbleR", github = "maRce10/baRulho", "readxl",
    "Rraven"))

4 Time sync all replicates

4.1 Read master sound file

Code
wav_path <- "/media/m/Expansion/recordings GN MQO"

wavs <- list.files(path = wav_path, pattern = ".wav")
prev_wavs <- grep("PRV", wavs, value = TRUE)
metadata <- data.frame(sound.files = prev_wavs)

metadata$lek <- sapply(strsplit(prev_wavs, "_"), "[[", 1)
metadata$date <- sapply(strsplit(prev_wavs, "_"), "[[", 2)
metadata$perch <- gsub("prch", "", sapply(strsplit(prev_wavs, "_"),
    "[[", 3))
metadata$transect <- gsub("trnsc", "", sapply(strsplit(prev_wavs,
    "_"), "[[", 4))
metadata$distance <- as.numeric(gsub("dist", "", sapply(strsplit(prev_wavs,
    "_"), "[[", 5)))
metadata$height <- as.numeric(gsub("hght", "", sapply(strsplit(prev_wavs,
    "_"), "[[", 6)))
metadata$replicate <- as.numeric(gsub("rep|\\.wav", "", sapply(strsplit(prev_wavs,
    "_"), "[[", 8)))

master.sf <- imp_raven(path = "./data/processed", files = "prevalence_master.txt",
    warbler.format = TRUE, all.data = TRUE)

master.sf$sound.id <- paste(master.sf$song.type.lek, master.sf$selec,
    sep = "-")
master.sf$sound.id[1] <- "start_marker"
master.sf$sound.id[nrow(master.sf)] <- "end_marker"

5 Find position of start and end markers

Code
found.fourier <- find_markers(X = master.sf, path = wav_path, test.files = prev_wavs,
    parallel = 20)

found.fourier$time.match[is.na(found.fourier$time.match)] <- 0
found.fourier$test.files[(found.fourier$time.match > 0.02)]

mean(found.fourier$time.match)

found.mfcc <- find_markers(X = master.sf, path = wav_path, test.files = prev_wavs,
    cores = 20, type = "mfcc", wl = 700)

found.mfcc$time.match[is.na(found.mfcc$time.match)] <- 0

found.mfcc$test.files[(found.mfcc$time.match > 0.02)]

mean(found.mfcc$time.match)

write.csv(found.mfcc, "./data/processed/mfcc_xcorr_marker_position_prevalence_files.csv",
    row.names = FALSE)
write.csv(found.fourier, "./data/processed/fourier_xcorr_marker_position_prevalence_files.csv",
    row.names = FALSE)

5.1 Spot not-well sync files

Those in which annotations exceeded sound file length

Code
found.markers <- read.csv("./data/processed/fourier_xcorr_marker_position_prevalence_files.csv")
# found.markers <-
# read.csv('./data/processed/mfcc_xcorr_marker_position_prevalence_files.csv')

alg.tests <- align_test_files(X = master.sf, Y = found.markers, path = wav_path,
    by.song = FALSE, output = "data.frame", pb = FALSE)

saveRDS(.Options$baRulho$files_to_check_align_test_files, "./data/processed/files_to_check_align_tests.RDS")
Code
files.to.check <- readRDS("./data/processed/files_to_check_align_tests.RDS")

data.frame(files.to.check)
files.to.check
LOC_2023.06.19_prch9_trnsc4_dist10_hght2.3_PRV_rep1.wav
LOC_2023.06.19_prch9_trnsc4_dist20_hght2.3_PRV_rep1.wav
LOC_2023.06.19_prch9_trnsc4_dist40_hght2.3_PRV_rep1.wav
LOC_2023.06.22_prch9_trnsc3_dist10_hght3_PRV_rep1.wav
LOC_2023.06.22_prch9_trnsc3_dist20_hght3_PRV_rep1.wav
LOC_2023.06.22_prch9_trnsc3_dist40_hght3_PRV_rep1.wav
LOC_2023.06.22_prch9_trnsc4_dist10_hght2.3_PRV_rep1.wav
LOC_2023.06.22_prch9_trnsc4_dist20_hght2.3_PRV_rep1.wav
LOC_2023.06.22_prch9_trnsc4_dist40_hght2.3_PRV_rep1.wav
Code
exp_raven(alg.tests, path = "./data/raw", file.name = "align_rerecorded",
    sound.file.path = wav_path)
Code
found.starts <- read.csv("./data/processed/start_marker_position_prevalence_files.csv")

alg.tests <- align_test_files(X = master.sf, Y = found.starts, path = wav_path,
    by.song = FALSE, output = "data.frame")

alg.tests <- check_sels(alg.tests, path = wav_path)

exp_raven(alg.tests, path = "./data/raw", file.name = "align_rerecorded",
    sound.file.path = wav_path)

alg.tests$distance <- as.numeric(gsub("dist", "", sapply(strsplit(alg.tests$sound.files,
    "_"), "[[", 5)))


br <- blur_ratio(alg.tests, path = wav_path, method = 1, cores = 20)

# add metadata
alg.tests.est$trail <- substr(alg.tests.est$sound.files, start = 0,
    stop = 3)

alg.tests.est$transect <- substr(alg.tests.est$sound.files, start = 5,
    stop = 6)

alg.tests.est$distance <- substr(alg.tests.est$sound.files, start = 8,
    stop = 10)

alg.tests.est <- alg.tests.est[order(alg.tests.est$sound.files, alg.tests.est$sound.id,
    alg.tests.est$distance), ]

alg.tests.est <- alg.tests.est[grep("marker", alg.tests.est$sound.id,
    invert = TRUE), ]

alg.tests.est <- alg.tests.est[alg.tests.est$distance != 1, ]




saveRDS(alg.tests.est, "./data/raw/extended_selection_table_rerecorded_sounds.RDS")

Takeaways

 


 

Session information

R version 4.1.0 (2021-05-18)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 20.04.2 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/atlas/libblas.so.3.10.3
LAPACK: /usr/lib/x86_64-linux-gnu/atlas/liblapack.so.3.10.3

locale:
 [1] LC_CTYPE=pt_BR.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=es_CR.UTF-8        LC_COLLATE=pt_BR.UTF-8    
 [5] LC_MONETARY=es_CR.UTF-8    LC_MESSAGES=pt_BR.UTF-8   
 [7] LC_PAPER=es_CR.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=es_CR.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] Rraven_1.0.13      readxl_1.3.1       baRulho_1.1.0      ohun_1.0.0        
 [5] warbleR_1.1.28     NatureSounds_1.0.4 seewave_2.2.1      tuneR_1.4.4       
 [9] rprojroot_2.0.3    formatR_1.11       knitr_1.43        

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.11         png_0.1-7           class_7.3-22       
 [4] fftw_1.0-7          assertthat_0.2.1    digest_0.6.33      
 [7] packrat_0.9.0       utf8_1.2.3          cellranger_1.1.0   
[10] R6_2.5.1            Sim.DiffProc_4.8    backports_1.4.1    
[13] signal_0.7-7        evaluate_0.21       e1071_1.7-13       
[16] ggplot2_3.4.2       pillar_1.9.0        rlang_1.1.1        
[19] rstudioapi_0.14     checkmate_2.2.0     rmarkdown_2.23     
[22] sketchy_1.0.2       xaringanExtra_0.7.0 htmlwidgets_1.5.4  
[25] igraph_1.5.0.1      RCurl_1.98-1.12     munsell_0.5.0      
[28] proxy_0.4-27        Deriv_4.1.3         compiler_4.1.0     
[31] xfun_0.39           pkgconfig_2.0.3     htmltools_0.5.5    
[34] tidyselect_1.2.0    gridExtra_2.3       tibble_3.2.1       
[37] dtw_1.23-1          viridisLite_0.4.2   fansi_1.0.4        
[40] crayon_1.5.2        dplyr_1.0.10        sf_1.0-14          
[43] MASS_7.3-60         bitops_1.0-7        brio_1.1.3         
[46] grid_4.1.0          jsonlite_1.8.7      gtable_0.3.3       
[49] lifecycle_1.0.3     DBI_1.1.3           vdiffr_1.0.5       
[52] magrittr_2.0.3      units_0.8-2         scales_1.2.1       
[55] KernSmooth_2.23-21  cli_3.6.1           stringi_1.7.12     
[58] pbapply_1.7-2       viridis_0.6.3       remotes_2.4.2      
[61] testthat_3.1.10     vctrs_0.6.3         generics_0.1.3     
[64] rjson_0.2.21        tools_4.1.0         glue_1.6.2         
[67] parallel_4.1.0      fastmap_1.1.1       yaml_2.3.7         
[70] colorspace_2.1-0    classInt_0.4-9