From 514a50a333ece75c87a209d597d1d2d7643de76e Mon Sep 17 00:00:00 2001 From: maRce10 Date: Tue, 5 Mar 2024 04:23:31 +0000 Subject: [PATCH] Deploy from Github Actions build 8150937005 [ci skip] Build URL: https://github.com/maRce10/baRulho/actions/runs/8150937005 Commit: 35e4406caf0d0e21b75ee7cbd8620c3bc64f4745 --- articles/align_test_sounds.html | 18 +++++++++--------- .../figure-html/spectro master 1-1.png | Bin 77045 -> 76998 bytes .../figure-html/unnamed-chunk-1-1.png | Bin 84888 -> 85382 bytes articles/quantify_degradation.html | 18 +++++++++--------- pkgdown.yml | 2 +- reference/master_sound_file.html | 2 +- reference/plot_aligned_sounds.html | 2 +- reference/plot_blur_ratio.html | 2 +- reference/plot_degradation.html | 10 +++++----- search.json | 2 +- 10 files changed, 28 insertions(+), 28 deletions(-) diff --git a/articles/align_test_sounds.html b/articles/align_test_sounds.html index e6e2f87d..8df6944e 100644 --- a/articles/align_test_sounds.html +++ b/articles/align_test_sounds.html @@ -571,7 +571,7 @@

Create master sound file for play dest.path = tempdir(), gap.duration = 0.15 ) -
## The file synthetic_master.wav has been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpxfkYip'
+
## The file synthetic_master.wav has been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/Rtmp6YINB8'

 

The function saves the master sound file as a wave file and returns a selection table in the R environment with the time and frequency @@ -634,7 +634,7 @@

Create master sound file for play dest.path = tempdir(), gap.duration = 0.3 ) -
## The file example_master.wav has been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpxfkYip'
+
## The file example_master.wav has been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/Rtmp6YINB8'

 

Again, we can look at the spectrogram of the output file:

@@ -1549,16 +1549,16 @@ 

Align re-recorded sounds duration = 2.4, ovlp = 0 )

-
## The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpxfkYip'
+
## The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/Rtmp6YINB8'
 aligned_imgs
-
## [1] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpxfkYip/plot_align_10m_closed.jpeg"
-## [2] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpxfkYip/plot_align_10m_open.jpeg"  
-## [3] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpxfkYip/plot_align_1m_open.jpeg"   
-## [4] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpxfkYip/plot_align_30m_closed.jpeg"
-## [5] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpxfkYip/plot_align_30m_open.jpeg"
+
## [1] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmp6YINB8/plot_align_10m_closed.jpeg"
+## [2] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmp6YINB8/plot_align_10m_open.jpeg"  
+## [3] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmp6YINB8/plot_align_1m_open.jpeg"   
+## [4] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmp6YINB8/plot_align_30m_closed.jpeg"
+## [5] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmp6YINB8/plot_align_30m_open.jpeg"

These are two of the files generated by the code above:

-

+

 

Manually fixing alignment diff --git a/articles/align_test_sounds_files/figure-html/spectro master 1-1.png b/articles/align_test_sounds_files/figure-html/spectro master 1-1.png index 59581d983890488d42c8018e690941fbf4991e67..386d0092ed13945976a21e2478904da7594d3860 100644 GIT binary patch literal 76998 zcmeFYRajh2(=Lp=LjokYySqCKZov}VCBfa@VHn)qAtXR>3+@CD?ht~z!(Kek`~Ls6 zPxje9+TUEPS!jhm)c-#U7MFs_u64&&|I$ZIr*LO93dAi9N zciD@f!YT99dG4q7mOGp~EcUY4-1|ED5Rd5NYW;Vh~)LtFFgs=A5Qy*m53;gvn-j)w>I z;aa8yDiDMUq&^U`fYsKSf0t|5NlolK4ka{zoVN#}xi+3el~^ zVi%@&=Q}a+@fzitEyU8V_)%19K3nnO@ibiY&@IMNN;SoN;RtKd*_fc#Zh>RYfh5~?D2pL-Yb0`2uHq^f_Mb}E3zp76B{#u-&VGKQ ze+nT2qcAeBeNmP7F#SJVl(SRP07xo`3iKfS3e`oH%`YvREXQpdfnNr|RMwpq(3Bv^ zB~zohzz%KdT2Jrb^n2vGYwh<$DM1-n^l)CFh!Sr^iQK*REh^kTK;WUmxBpY@O#)Dpvlny%G{d@f}R?t*O z_rKq?I|#!*4@@#!K+}l!9?Zl-1dm|^kW=MBF^IjFD+tm8Lw4AWRmtC%xv;kb6UO*= z!rv2^w`Nk4X6{KW)TZ*1dC6hU7mhkfpc6wrOchAua1nr<7xyV>mL#`h^D6JCL5tda z$R|Qg_kSzPH5q&!w@6Ri@BqQ_TbEM5u|OI|+>dTx(_9z~vci>2jz#;x!=bYv^zezJ z^>dkkgnw=5>M)gVwe-8~6%lw4E`MwT4nj<9rzv3-F)zL+4rYQx@Mi z#)8bE+!~OP0v5c%o8M%#xXPs@>o1OG3Q(+terh(wu+a~i%67eqU#IIZP-wz)%+{di z^3tWTP!2+MltRH8Y0Iy$X&u(huD9VeJYeY;NOwqUnI)e#&BCh|j{w?og!p984O!T0 z1Gdn*%`E4=KJoH6(R{a?={e!OI(Wc#Ok4pqym-)5rTz;H?k4WTUVWQS%mZ9VMs>WRq zXm%>=jiZzyR&5c-pz0K?=g&iTmpV!#BnH)M+^M_>is5g{VjxbH@^CC^17&$&hPUsX zdF@tOlIPoxU91Xn4Fx94HbTgX(ok%wT9nkcOS>F|C)J*GN2OLD zBD5xfcf$rz;?R{D#RKE(rcQ`KihP6NM~QYk$M;Kfl~q(Q*B(}HkYH$Y5&^yVN*85S zjGQ?wVE$W$ajpBsGu7);znQcgcZBs0dF;1TX3w7<29_nn8Xl;?G*qI2hO&LH7nYqy zn3vs_K3`s6k3XEP-Hp3D^}W#^_3W%=A|xixz7c{@S--rMB|l;^c3vf;N3hx%K?(xb zW)VZlq6Vn9Gd+-qC&+{>1&);bWQ08~dbx)5lFbK&bWlJ}5~j1B@`r$Jat6*&2G zg(qfpZMWiTkJY=$QQToSIRd@^XpWH5s|IeM+pk|vtL$MuuVV^ai&*A((g4?P*3H91 z=Zp8Nt#DZ;Q_*C86?34|FvrwY3nvS3Y6yrN4r!AEjl4T52-jK|aaqkvzQQs?W`D~D zp%Ny3%ce3-?7l2sx3FC*`b0l#bA`NgE`+#V^KxIqznA3{pazl!U8(FD3j8q zX)a%c=~snM??YtC^Ku>S4KsNA1ymM4jui&o*|8j17{C-xH#npa@fZ41Ghz#6Bg}d; zV_xLHBP=h?k=H%;NO{Tp(h`}dED#y*vrXx9o|x+smiVe#9b`xZHnjD;yF@~;wABI` zWN38J3kNxDF?3Nx1z6`nO7CTw@5Zn2W@Aj2xHdM+S#kpbH9|m5^Td+IhB78N-b@A* z#XDEpIP^LNN@E)(t&CI#@AJ{4yGnL}g8C`5(|NGuVKy z5wb|#8L1(@Uk>KGY({kDO9tA;{|{E<=UxkW;a|GFy1EB$phJhpvw;&AzgHx0&)$iq z0%h+NQ3IU=f5iVlIq*1R{JJ>*7mLo050gsh8&|y;MW6Onns+m7o3`Qvf7hC$N~?VX zTzH(wy_GWm4xX~$5tp*SK9$XnMW4Nte@3)uIa(e-NJ6r^>^!kkm;1zYwJWD4>$J~4yyCzp>x9UvCr_E$JwT^3e)RkAocN{dhm)FB|gs=xqFhN_gGN0 zSq?CkS&j&=cSfx$qmAxRO@`zFLqQ>-(ZYC<;T89_v762p-;Ucp*7H7Azl376ixYpNCLx2tq zBZ{0t_YVx*%{6xP$%@{qiQF_#oQ>K0B{sJ0FkiUg{3~?tI(_BthwH}9>s zasF@>-@h8IZxsJ&*xH|c4`z3^#*e!+$BTj0b4Y=JnAmrC-tW+qbc>SoZtzR^f7&NK zylxlcU3P#CCvrmKUGur{+5J~UizkO}&=;lt_oV=hbKZ=kJr8B|39Mz><4pZ$WK({o zji_nP6T+#vkK43Vpl(FbTk+M)5?*#rPR`tgf9gQ4QN8PlCMyk}Z04$TdlF=zVx0a{o311dWkz2CTY_~-c`2R@7u-AEIBggxAVaL|X z+q?O&cI5VM!e2R~*#UKda%X;lWpGRcFkr{xf6H11{|b03X1I|8o$wv_sVfR9fW3T)RVhPx@OCD>TUy zS_}(5$rF?mvTZGXqKb(qY)Ockg6_&+4YUUL4<2FYdQTucKQX3q3MWnv%gf2j!9sP@ z-vmkNxF1NJvCAj6(B`-4I?lmbW!?WMlQ0*klgND*e;c60lInU zd_x@1p?4CPpC&Yd6bvrNYWHIxeelK#-_{i;3Ei&Fx+-M;dVB2pc+%KjG_nu4NuNb? zXpPEQx#`PtOdQcG0`K6Mr1CMvQhL==L#Fe4}iFRa{53B=TJ!l8B5AOq0* zigHr1nOdU58v`Q4#sgpf93#s?iafWN0e1o-{`KX@0v=v{N(i2@m|!Sf#NY@~02>-z z6htUyFe-)v4dhKePB~ovQxenuHKwx`tsQ}}=m|rgkivNFdiYw&bo8<~=8CHvp5592 z3!d=K6gIeru4oVy@{Noc<(#i*Wms-1%}F3nKeoji1|SFqN3{XE^;VOd36j94P7dM8 z0=sR^`;Wb9pmcmGakvg6u?P2?JLQVZe#f5_iH|dwFHZ z6i)6p0=BtWso1Cv$%*Onou*RDY#T*FqW82Tw1JVAH=*EgqF_**ledyK!~HN^G(roc zZgyw0I`!_NJ8z>)xy!%krhM`_>toWbHERqysIOWUwpbRDz$4YuKvzG?ifB(^RBqy4v_l$q~gc}{Y$rIvo~3VNxskAkEH1K2_uW3 zBh3xrEuur|X3M8jkIMV$f%A=D`M1a~N!_FKe^#1%51WnE|8C@N6TfrNd-Z}Os=%YW zp}d^l@8rfWzA#Q83K&D3!-fP)`{k4;>e6S@=hN_oCP&IweiScsj-;Cc7}=|H8s(e- zI$FK$=XDb-0c4K~XAbiJ0fHEeOc|j*^(CXFbmnz7IbEwfUkv25CO>b=r$|v=rrxmO z#s1Pzq0a_l7(ivR{C~XM4v6kH`ad+@?ecaGy?UKt>Cb$dVGIUeZ4Es+2AhPaKqyjCXjSVh?!Lle7zF zIY%Prvp)Qb=bO&l8o#T`SN{FV#h2_mi38l*5A=Pm>vGMltgKdh+&)&$F77w5WgXQP z&=u&pj(+z zzgI~5L^o!Ui0OaZLlrsl_SF<2MK29YBdUnvU8N#d^lw=WMsuI{b8+CH0bexeW3g1Z zM1BfAW4{HPX@3s>`)0fu7hbbSwY!oFbdre)ad{{rM1mwn~a4uvCEU(Xz zt>G5y%Q>qj@GugLDKfYbPTKKt;0dsf_Ky#t#)IqY>tBu-0pm3U4fZN_KM6;d%aV&v zQlU{sZGJZ|3l1n?iVTWq8>P2mOX!iag`UPmmTL8Y1r}E2RS>J5d&1U5;m;rOq^oqk z2gUn8ZrT0*7WlfzpIj!TAMbKsJR1uE`Lk4LGRE*6#HgUFBQxR^Ns({&9bRM6t)Icr z6!n|wO?|oQGLutXd+F!`g7^hHzzIF9y*yh|4ESxlx?aGsGXREr{2D9Imj2=%I$K7ago`~E`EJ^j zyF`Yup2mW-REAM8Ml1bYH5;eMLz?p3V1K1lB0C6IVs9=LfLj2*cSj7LIZ)p+tpf{h z?Be3mxMtwl$4a8{O)!h$4?$HBqb#ukJg@< zQ$INkeW^a5{)|ZMf<>F_!=a&}@lOQ+CySUAhHK5X`eWN}+D~=>b6{6UVcOvJzu;{p z27-N8-Is1ZgiO_?cdBb7>PrY$#$}%~pEOpUf3J~xSH;0;%90TdMKmZ+Beel(ilV0> zmc0Pvpn%5qqt9)3WA?jk7vo!pbrXI*#W`$fo~su*1K$To6bubXp|-ZR9syZw#t9yK z_!I#q_c*rpi0*$*>o4&`?`VDBWsW-aQ}?7S=~y4W;V5uD79IKe`hIdA<9@j02T=U3 zPH5lwp`|(`If9NkA}F9Oi+BM?hFaPH2OgXR56Z%xD4IDB*!hw6p|msa|MUG9wzD?L zq7QYVTQ>l5-vU52@k;!@Hf^FDH*H}6R~&7-2nfgE<$nI+t9yI&YZ~D}n*KWwkIdB= zP5_2K@ef*bKDhzt3J_Rwd;f=}*DQ!+;p87TMZjQE`Fs|jFdsMlHf=rc_Ip83=k7{6sWDg^!~C(~+vlZ*0ejHj zlM~DRsbVJmmL#_29b)AST4MsI^C4R2r>l8)!6+_T-3(k>wMJ7p^#LKD0m|j`I>Fx! zj#*^L^wR?}T_NPsYFHm6&fUZd8~fKcMGS6-P5Dm;VOz5FAVuSX4~KR9FOL_5goOKU zNtV6SB+zv|*;{ElBdK*hcjtG*l>54yhT~7rm@DmZriNZz_8t@ED{+({V&~r%n7iNh zNSBWYAT59Lmq>R{@rmYMKa7$yKw37(m*&|Q83+k;{``~gio5H>)Vk=YF_;CaT*G*C z0shNPHfKjs(Xy)9A6J%m3rPTw+0E^!_j8~Uru_yyt7zEL*OutuTyHYc$MXlb1089D z(>nj=95+T&rw6=tN#Tnut*MS)Y&J-a;}UPI+6<0GcZ8Ofi(niT2!~COcV#!c(dl8< zy>3_g{qNILi@BA?g#EMh6@k?WmX;LekNxE34okD{W6pY@hj#!YooK4gY|tRII(^iL zgVMeO12K3cqTd~sXUawQw4t18<@6}!U)c8L+rp1-2OjQgk8Fio^v3Po!HvQk6V}v6 zwm@cBc&oor1si=%t_R|BgKq+m{tWFKKm`ym2&ndtDF2o_&r}rB^?+wZ+g%&uc-fQL zU4Bs@netSv@cjQxG}sYX*2*og@$@NXBsNTakp(>3gcI+}w$_)XL$@HWU<)h`o>emj zMr2#=hAPsXj!e?5=`$MH(!t6%Q+yQh5*8Nfb8DU7CHJY1PB`dGjjXxIw=WAd4G3meflQba5MLye_}MaBe~D@{GV{qu*nfM~ z!C;MZ{!9O$h1hnSN9bGRZ0bt?V(UD6gKJhTo#&w#N+`*1S8{z%`R!9Vxj z!R@VyMvFy#MS$xiDy4#@k$Y7hBa*l(;C{TLO6Dg%nGA1G<-(c!OiYWJhh#$1^m$B( zCZ)b6{eolW$So5HD*ZQKeZ3qcq;6aw8nDroET8isAQFm)mGZ!Hn`=xP>t+N#i4;MvDriB3V;qo&;~+bt>n0b~(ax?AjKxyJ=f`zK(bwpc zY{L09_jys9+8*Q8J}$U+r~I|$FT>*J&V{6UQ`=)b6+-b(vAS;SWY(&+zV$HO3?XW4i-B-D3HL zX~~5pGJ5~4NUcGBR!{1f zxo)kiPgoU+8gW%(C>UE6j$E|$&mu-nWKsJFI)&bpvb)r1F1$4rylxsmKXe zU~7;Q)STJ-zevsre@o{mpR}>$diTMg)-NO!k>!uuC9SnmBLSnlg_p^up5j~-c^r~= zr4+xNfoQk0GGEmad+V2@_V-BmS8DGM$tylsmC}0(liQal@@A_j0*FJfz#*>{i&O}9 z$dkZBxWwSL3WXL|QT$znbzBrMG!?`8_&o3V^ztMhC$f(Ob=+x=?ny~?f{p|#lSP)+ z!b+&~J3?ywnJk{oUdF;A5UrkLl%cL?`<6%&IHO(`RPbt5|JRp~W^$XMIC0 z)Z!Pk|4n9cEpKIwjQDV)iiJdxmXv$ zO@ob}54@A_s;1sm{CXFWejIOgqeb`kL&;Ruci#8X{Qo@*@Of(`jt+zaRk&0#R2Wds zQ96s1{tn3+b1sbt&H5(Pj67*5PE??{IwoO1=)~t(HtS{M!~uX-=YuOu_E`<%r{8>; zX*4I8*6NUO@Wigm9p*Ky z2PGpbd-p3`q!&n#{i6|!KfL!489>>|%zq0%&8YDI%KN}b|M%DNnDtFaJ%S0rVIhGX z_(t0rQ_C7tO6dGo!(2`zN%S^33a=%b$jTK;0rWJUZ~->vPO<`F&L{{H3~ zbS*ZhXxOFbFK0_eb&&gH!Cv;k^LE_V{@ffi^=xfom$A=L*pMgFN@{Trn<4q@Fw|}0 z@Z@Vc*V;yhwP5KVdsVdSI_s*wo6a+5l0~*r#UFX>s`*t2_1@%vmGUyc)a=rRtV~2j z1n<^q*V;Fbac314{l^rbIeB>c{T~PX9r_6^RV!!t02<%?e18D#u`puL-`M%|`T30W zCE>(pPml=6Tz&G~NxnF1fLxOw1%}M2#_p<0&C!7l2(2kg{{Z_fFpIEn^d#A;Pr9ckFvo7dmN zE(U`!;LL)_k5-`&7{R@E9v-%hrt%QDuHIfWV@h(ODA0R&YkyE>Clzr(eJPn9SoNs< z*kR2rBN1c93Ug)<|1yE~T@m+8k4t(&3biK8R1VmxOomW8=|@OGr*dnjd_$gmtJaRU z;q4ixPd}u^c-*##`uHS`s|pNzj9*6!#A;NU#u=%0+_P3zj&Yd+o3aBXX%^Y4cm zAaxeE9!&a3*0|!fltZ0buVRf6wtWOHz^~N<&B%d(Jj&?cJ%t`8bhVq5DkkV6z>V9& zuBor#s)tFy!MJft^yh8@{gkAw<~`$fJM>XO09{@-K9#ssE8*$-$^qXi^CA9W>vuI0 zZjG)r=#9Dv-wOf>GRp-A8IctTkkookTm37MZK-H4|IqZDfPxybF^(y^l4MJ&kopqJ zVLRGJvSRq^RWKbA5+tpbc=C%FN%ANhq3_d&b3GuhibG9)sWte3tEVeAqX7@opRv#B z-3@6m0g{6QBG>F4k2|b&pO^gC-kl!oluZa6Fuhtq#Vm1S52NpV0+;-zo_G#-In9rSS$G?0+&esDYKw~O$v=U4th=e=Wa7jD&x)5wdG7`h+w3~HBZd3NzNn0 zxtdRRYx)6%Kx(`E8)6c_wbeBj6?dmKE1;)2r@3s9jqRnF*UqTg)Cf3;EoR;!OY5*@ zHxgD*X;ywnxt^2r=7^#Se@<(|t}{M>d(xFtjYYPlep8Y3b2+6crQSZn85#(R_rN9e zPft&6C%z|J)%L!O1H|q`j%^2$#n!{Qk3+fNtR@RqP#CS(Tn92@?MSk>{h0-V+;Z3# zNj5spV%yAqUJOOYFtO@Bogx_2pNq|@#7-O5K;8la^q#N1HpYYC{=(2`u;i>tCoz7y zBnZDmuXQs?$|>spIh0@qoChe=PkuvPU2F7o$#)ZDw{uI4cs{~>;JE|MJxrJXR=jRs zeFpG)J&GBVEU*@}L6dW6y!Ia_h7`0ME*h@d%&bG@u@fx>S&S?enZLC9!wwKRLjADm zuD+?ZoJGYn4}&z3uqT(yY=ZM(G8^O1)@S&ldFriYPlF0E&1`6j6IyMmF74QW#QE!X zguTz!d;Y&=g-Ah0$`3T4?zN|twXrK^>LWxN3%&R!=5>E9TyZGt%Dj7>gx0Fg_{jaY z(IfA4y-)PMHmNHi^}v`k`P;mgzU@W6gMo=^BSX7>K`p0XMJgoDwbVgIF3ouqq+nFA zh)QZx&u(Wm0OlnoBZe*Zy)d2^UNz-gV!X&t)Az@IM!1qsu?u^{P_;p1m=VbN0qJa| zhtYJj`F6=dmOB(-vL!llp-fpzdkmn55`KS)Ti}4jC=iGV@109Sw3vv<*1tzX2Jp;5 zx)Ov*07-%-qbZ`Zl$AAGh|?zelhTBvk)+!Ht(ae2OQ=~2DFUhR>E&fmq2o3&`%Cm@ z!~*FIZtg@>Ryjp+8A6g;)BGDd;50!gB#0uUU@-Sm8rxh93oc1z^?Z9v=z2#YB{j)& z=rC5g&QOGVh|g+g{gCr0s4aOqQ*-blsD8Qit2>oz{}*5Br7w-I;SB#-FK%xAXW&?f z&;4|+#l`NJH<9wx^A@iblcm`bp85C|J{xSZfN{DQp%^l3>^rEXfl~Srte_w}S_Kg| zjjWJSIDV1Xim6pF#P z7g+&=fx32~@W&I3i$59-lmVzfp2!o3N9nM7T)$Kf% z{`N>qIRPFnJ~l6%MLjAfO`d2HSE~#UdmG+b(6praM*l=E!{50Bo?b~KPW0L1xaHt0 z@t2n!R{tS%-sP?Z%iOWo9SdMvqj`Xw`sks%YTJ_$BTp}qJg7LiPjlE{lZ*mI0wNRJ z^bT8=JejXRO-Zh#dx5<3!tNrY`jYvucv9Pc@!@g4b8R%TMmUZyvYd+C98UI%Wg{=g zk7kM9m}t^)PUnXQeDX$`6-gKlZ>gS{wakgp1PQ6F$Y+DrWLtla_p^PHg1$;bGMdQ9 z7ho?n^MH4S)`>ZKp-rM8TA(Rhc6N@RT?Hb;wJv7GROPl&WTom#gN5L-sr7AYM9!oc ze$SzwXjHm|7f-Im&ak!pTebynl_W8Uv|tn5FGh;`tQw1^gNg zY{iS_n8xv27<9`oy02WH%EXEI(2sGLyI6!pI>mU)@SaD74v0a4kPDCAO18Ux_5Fiw z&~mQ22ptpO=;nJ$d^;O^a{ zGHa(*Xtmw_>)vkV@n*3-U&8l56ty4gfwHo45zV#-78ryCW=Fs2e3Kb!4h55b9NgHQ zuWz6)-R(_$8op*uyu6wt53EnemL^a3lK4TwDZ(LLsJ16vDjffzM$}JvfOP~i(&>v% z+j$&%$$IF$_^{%&qyNeAESBrNFqgYS<_F!RZO@;uwhipxi_D(3;cn3EcW%u`?sodo zv)X*%GiCY-t>+@VA9Q?Yg_lnYKN2nojC;S_e|8o?1Wjq!PSjiTYD5*7U1TuZ>D7e- zvEpdSj~=4u$6$}8+^0F^z4O0C-u6BLKiq3*M>sLOS5W|NEEj|^7U;C+dh^|Ng(ocK zQsXW4k;QNVt3Vb!BAUo^M)-+GQUaBkSq1mQMTBIOmK2y8&RQmCcY7>A%Xy%4sq`cB z7yUZyfS(-#g}9tqm+!+TnK(%@i1u=Zn1xC|^*+6q_3(RvCKBNj`yE4I%M(eTo?|za z<7DEszhKmeLJ$zm(h^aukSb#B4J4LGZ@Uor9#4DzNrVE239JFS86>R2V4ZutESc)G zHisSeu_H?fSA)s^(&_P6zL;2a76tNx08ih#QLtnxt5K~S{Z`2C<=5z#*LB&LuQ8c! zF}@G?BGmca1AFtCoaB#j$)uzjh#*I9!ENHLo~N8peL&T$+0!Z78s8ow(L;AI|Ira^ zvAy_-@>(G=g5B!s_W4U&XgY2fU1H3eVAz?Lfkxw5I+LaqGqvLGwMS7yawX^0>+qV5 zGJN8OkqZLS9J3YQ147dD&6bg4vl4akj~s)5eWq(%Ya#~+47HJ2ht@Nqt5dK%+!#7- zshk)Mos;KyZ_4M~Och2ZmKu!LavodbybPL1yXKi-8&2mCy0*FVbDbl8}zxR}HsWB$8nD8oxVc@C8 zG?#0bOTqcr@QEzd&<8egny^|+M!nKuYvQEzth!S7n?pb{tIkhHRza_EUAOK0rTOzM zd&7}G9*J75RB^DwZZd>$pRU_8bv!TCwc4*kiQEorwfd%l5W+4%t`cT&<7`n z6us4OH}KlmH3k^n-`PrNo$n@n8XdKeUJ&iprh4Gv8nbacj#HpyC zU^bbWQL=ulg}A9<^?jIAjQeiqC<^<;eZLvv^v)tfFt^BcI-~mWaPz>^Wz22SQKHER z9D9^>RH!s%9*h@@a^xnjqa^o{P#kaSi#b@ztQtukXq zH|@(yiZ;$vhrm&2d;Psa5S=ARCD==MqZu`oEqm;(v@EmE=)LTK&YVA#Z#2GY3a}Ry zD`XBmo$)hz6p^<*GcKA9ar1W#=ie(}k}v5mwN`HM_!IXd=5zM?hZB!G5>jo*wHuJE zOSIST%dVW~NR+HDRpwNbdwVUBqtQ<;ZJ;VeuA6~P%kIf(ZkuwJyVe?czVy=fD@cIV ze>$@5GYd*u>wID_yRI5mFS$8}w1Lyp&dq7bP0n!C9@AFT$)^$D#%fDD zr;MV~aJMWh)?;#e^WGm31 Wq^d}5zu)cMI3B4SoBcEj=50SoCc4cscfRLOk{*f` zZAk_WxMh~7^NbbA)SE?6Owc0%{Dlo=aFPE;RN$xNivzz}Ixa~=+J1gO6`hC6v|HT1 zzKlu=*o@jykPIU)YZw$w?BAS#4;G*MwO# z?>B2z`b3je?*VU}kO(VX9FP;>_Q_#jm$^#Mk& zqyzRNq5Lu`MMQcKcTu_wSgO7@h$7CKJD-f~vn-ytm@3@1b#l{e&+lF|(T+d(Z7(&L zUQ<3)x&AU@o^NPv>r~nU>6!G_z4qkYiY|%16@`W#eP@CMAa~9j{6t^geyaP`Ib_#w`hs zDSJ0HN_I!O@_STqcy#KWxh|LoCPP{VC%mXSNQS`SGN`XtT#f*a$wo?uPiVA7FLPBs zbeQCt^=A1ND)s5$Dki=mA`!f+C|{kU(8^IEdBgJNTf1)8Cb<*J)M|)DipC6%o~I19Z2eRgRg~2ai6}ZU1<9aVnO}yq zX^MmjoGed!h7KoVm}he@H|VWx)MbR>W+T8{pmhy!WS~6_V5k$VhdTY9^cdI`@u4s0 zb&Dk`i6sc8E5hMGp;hTvZ=rQL&Fhhx{zQxJD4lo`%0Bjgl?B5ryX^>n zx(ha(LV?k9l&G&y4~+E4=OTMmK`o-Q_7JMB+WYU0IjFA5}6>+%dt;bHL{#ffM`CgV`ka-U9l z77@`o5|iM51iXbe=B7f=D-&l#C6AM<%VI;8i;f^e8PdZx#s)ViM6po}<|~PDvx2-1 zV&Zo{x$lp)UB;?>+Nrkd)lB8J!VuR%E(?X$G%46mLtr0yxaVuK56Gb)H`K)WV6up6 zih|M*fAYvv@zS=g*T8L}7mX8@6G6jo&0X}tOcmLBhu;xv^y|3l+g@?d_#w{tkrs$R zX4@4hIIW8NL5|tThsxB;Cqu^HH2ef`wAJwBYFH3la4NJX0R;b76h*g9a*-~1_1pRf z2ChP)3g{ytvPj8cH%0FF!8#weA?rLklxP3zRi@pkBbJMY>NDc&OLT7SZ0Emd4c~p) z95eHYX`4ckD5}f)LN^MKc@s>KsZ?3S;IOH_!Zb%W$pIo`#81#mAzP8B;4WhQCb$m$ z-c%@OOF(k0hxceBdoC?n|96&i#jqyvbc*k4uBNu(tX}2y>RRiZ-`vZKP)`mOg(HVi zh>5=*E>A-FH>5mG6l1s+yiaA8L>u&O3I$$H@Vl%pCleP#{x{rH>F|zk!RqAiF|$pr z5TovowC7`hmk@HJL947ig8=4$f~<1nRp*m!j{ggFNh_wk_fzM$H3R1x`Ih(ksc1*#tK`8b!Lg6ggtoN_7_xuk>;gFw|@61k{0 z^~a&kduP8b|L1X-QOlQ=wbQ+q=l4yz(w}r%vVJ8O%_FM?UIbC$(Fcw~h&bu#C9oor z2&80e`)1?~`0C=3AtqRw=w_egFhbPv&VL$a)0hXcaEqQFE6{ON%tS|(|YL| zT@;i2bV$Vyl6zmC3$y;ZS=)&^LPSV-=LevLC5$p+5V8mMLbgsVn#T@^2drp%Db>gjw+*smu8*!beo;h{$m#Yy9#<=vz zQuZL;|Ij<6_+B_Lg#JzGgz}x9ch~ImwW(i0#~7nwr?lXArs&ZR^R@IG0}QqFR0oB- zkpsj)3g5Gph?r~nkZ1rVMb9Bsu@KMj?sCN5`|!)O^TAw(jIFZECP^Ibep9xdR=+bP z4^#4%o=)9Ng7yls?65NvqH_IS&To-Am5{AoxH%d}J5Jxv&F6oS{U7!WeYYQJJGR6w zmlI)mH#1;&_`$-6PV1`IpRBc(lVR6%aviE*=cmHF`3#QZtX$W<7QfNM)I4x2>^CKU zj4RrbIpos}w4m7kEWPGq$@$!QJIy-%HbXL5=kK7t7ceSSPb~o_#>T2qw~5w-x#dB0 z_diXPf?uXDhO`ZKG-^7Pr};ZPZ@@|peAtc@lRE(l*n6-)g`1eY78pN4wP3?FxH|B2}i`ZndfY(>=O`dBmFtJqr1uJj$;TgL+ts z7U_s436q@A<^=`>PU-ufskDOfqg-gnXoL2@h}(01#S77Mni9bH+NsutL=hbLshjag zKkhyyjyst6_aA6Qxc3AovW3LWVKyb{Cn<0Z2tVw1Pv_W`kxY;$Q3{4!77J-0TJSE_ zXFT8$DfYx9=hz&%ist?q99>HZ>>*s}WU>$I=xEXuvr$)|n_oASyS;h>aZV%hd_2Qj zN}Fu%Auy28GV*lA1{gyc2=-v4*xZuVcSW+W+oSo2E>)Qd;^;;~dzdL2uLETBl1buP zxur8R6L))gCUGTdOzX-Q#7RVPChqS+xG=FpO)w_p*7GVU1>C@|n9f)7_KEryGRC`P zq~|!W6vmEh!vTFPT%tv?%~M@U`M@ZboHv=Ei8R+uZX?dliNsij4`1=Np61KVM7bC< zo@6pIH`<$9y>;3sp&HMp%o`H^PFm+A;%wwBvjII1jEgRHKDsxvRe6aCHl<{9gf@|! zkv7Jlw}*;}@`K4;OCe>{KdELECzl3QCDRC6#(Hiz0=5Jd7U!^0L3D7dL7apP;*>&@ zVueEEMMnqhyhZBk3`piQn&}cqf|{-bMO#9?k<&u=9&YTsTNzPLVb zt2~DQ=Z2hs1Aq2UkHROOnEt1T{#_G~qZ2;!Zv_B}Jt;A9*2X0DJIgCXQGgQ%Dnc+7 zDx8801>7p&=fg}=Vr;=tm7)SE={iIM#5)R`+@YwHeEOjF~bb51j|7kfh(cnNs&Yiwn}G9-Ri^XHXWZ^qZnXFH1vE9heGoe39TunTDl0e#WcqMc&T*I8#HpP&k~B%<%2HtZ1fa?Qe1?ER0d}EA_>?@xp?~xifN+9_&5(7(&tZ6}E;YAYXg*@Wmoe=tZVz6~n1e#eZN+hgi`nhwgayr| z9kAX;H4u7e(oChkY*IUYuw&&w!9pllj$$NEh>WZXEd+ZBhHENXq;z2Zo|?KMDeCe_ ztK!6W+r8xH80@NNv05A~Vgd^kl5R#Ps(0^)Ok=0REtt_!id;c0lN{GtvZ{Xws-lqX zDCP+BvOw-@AZGgW9p2h(JG%=PnGFg!O-=N=e;4B%C+L3c;NlX(9(J)eQP=u#UAQG9 zBjfi?Rl1;zs8}fpfkuFAODvx&dWyXgA!jYuValb=)?VBgc0s~N41RQFiPnsAh&n<& zK_M^+M#DS|+N_9{j^k1x6XLZKam}c z+?OaU&f`JJ&6^1#wjFfxUP_e=lMq9ekSPM;@sR&0tbnfvZ#I4e`^dXg064d-SC6K1 zpc@gwodZJCdE=->fifr|hK*$>9N;t_fBD{nfcRt2rX~^qaZGsI4<+4WbX|Z-`J7mV zixpDNwn0_Ok#7}m->x4u%CcbcF8#%?Jf%s9T|Q2~fls%oKn~qAvr5Bcl zU9rk_LfKeO08GVonZ&8EB|JwbZ~Ge`{@!dobfneJg(^z%TVxWsZXg%V9XPKb4fi{e z3%jbkv}yt!&VX@`l&-X7uI5PGliKQYO9aC8a3I4JboEWGz~{n`RYmm%3+J+L z4vNFPxqSg(yM%WnlXqg@Kdyt|HmuFo?U)H_ja-{7Iz+uUziSVm7fcmNkTDF>aHh%S zQ?np2cp=F}gROJ}w}RpO_c$ z=5*T>M8KhE-}GjcRm-U0)v6YuY*W?Q2q@#j>mTxI=v`O!+QgSrOu|J)cD+~O)<%=6 zO1f08wI*dQvR@RdjnWj;48SHR95gSf2WxhvM0$QslMhUYn)8+*qC-*GLm1D^IO|Bv z$QG%Sr=AJKUBiun!zoZ!r8B!Rf~P48`R*{)c({l|OEfU)TrIc_E12rBwuzQV@h$U> z^5K#SaA>=goZtF@R?71X_4>=rpEgf84lUWEj0=g!x!3lnp%lHp-UE%8$_yKl#zI= zURc~~IRQq5h6wnr)_R{r`t?dZm$Jwj*Z7<#Y1}&bcsLdAB@edP&gM&A5tKJg?XIKQJz+x&pLv{Qa3bqH?3T3(0*X*`wD_@*nW^Q2 z6M_Ww2M#K!CsZcDp8|~Yl*5P<8bLC8=fm1xMKuG4DC#g^k(ydWj2p`c)br*LW}YhK z_R5?=<6w~4x?AgR^9nq>42PXGDFqUri*Tr_9F>{)XgU_@ld$Quz_+Fc!bbM z(4U=p$u}+I)v1#0II#*9q51ouxdvn3-)OCeq>< ziJV2MoQ`xpju4SN_n`HXn2GQMlxlp_3Kv{p!4?%8t*AHz{IINoUjMILZJuk&A1-A= zJ!p?richzzoO0q$WQ9~{asAS08BA#IT5-*3fk|8vj*TNT66ET!aw!o0OoPc##bV|K zU4t713(sy{Yqj<~djxeqjiDdIm*eazDIeB2<{@D2?6+w77L@3;?J(qQLk^#(9rBl{ zi{LhX_WOos2HMWY^PNl>74_p+)OV(=lUfE|@_FBR!UJKPu>_b{kI>ft8~s)wJ`B=HuX|b;(%b z57L!(N4ff_RE!fxwPT0!9P*Zk>BvIk^&-!D&n-a921RL}{kV4)`tT0mLMPKiwlV?> zTUEaJC7WzsSHGG6N_^JcjBH_|N*FceaPV!TTf-S6JdEy5e(LA}N@%yI&J}VgjG&i1 z9Tl#znqGd8n1!kVI9zPh;V9Fcqy+(&+Lg{Kd~otCpz2LA&*2R2CE49!a^>hSWJJ%j z$OPM_HZ_ag83EBxwWvz>E5!q6>@`9HnPsGW9%9q^U*X;d(so|7Y)YiS)tZEl5A0u8 zgg5ke@yO-JCrUe^L83{6kIovHWgGXzCGVSCSA_VSDWc5x=Byt=$0JC zRMvS1AlJ{$@9=5=oYltn+rWoPQ>5{^?IE=g$@QPd=K<6&xUc1k&N?kA<%`^Jvop^i zl@wQ^G`i@Ex9oCR>S*$+aA5m;_2W-ubf8OYT)Yp)Y1-5WtAR;H;%XyNG-z;^e7eDP z??|~bvxdHt@kK!2!=)Zf`)ph@v*ZdW9ig{OT(UsfAC$ICkv$N2!HMgVHnLcdUp|nT=P41S#jSia#ZV2JnQPU-1Xv#EmF9Ekx0QE@lXS#oY z8EqXuu4|rVA3|7w&seP!@^d0hOBH!Rk%UX7;5BF;DCWdx$F9e3bKk?uoO3*~8e6DC zE%`1*-B(Net9W<3LJ}2pK+JlWwQ0rwO)?Vw=B5(ts6-Z|lr!%bE3+aO6vbHNeiq=E?quR}~Q78xS1%kv~gjdwI8Htqet zXgbS)sJ>{6E8X4F4Bg#5bPwG~cXx&f2Cqiv0<%4+ez{Fo&g=zXt}^zoQ8+)(@DdW+?m-o9nUUWArT`WfY}d zw+T=5^^;f43`u7i-U5~*uq_s4Km6DKDH{K#yD&fRJmv2E@CknONy3z8fYwxEKkjKJ zu4Q;JheEX>M@j8!GExEc5lD{gBV`ITQ#k3t3ev+Bw$xCRG7&Ww1C}ePf6AsT@N$At zu#W?9w2+7(a~(ZmWq^&PUswcA6mZ9&0Z?po%HP5q;`OXYvp=c8#L^^t(D{w$)y~IB zSgG(toue3ORg-{mLgJ>*s~B}L(x#mH|14sRbS{r`aPO7GZN>CbS@ zHBqY*Cs!y{0QiFlm(|LagkC`9K%r89Q?jNqDC(Y9zk?r%1810rz=%S%P5r9=(myaQ ztRE*A-UV5jk{HYiV@y!2dQ)`#m2QhTuN>y+z;%#y2QvK7#EBna$EU|GZ}l9%{T@1? zLi3gZ_cbGpU?0va1t}eiNs6FaHP7ht)5dXa;*>XLmyg46(}j#DRbnV$eCo2x(o`oy zr=Er>i|_VVwp`$~fK9fahzfVTh+dPx zuN57}Ong3u*hIXN4gZ7|SOwtHyRX3)LS?16Izh8vf={@(LU|xCD&+6d)eY*$2u|TQ zm=z0%Hu;iHx!JeObW#$ki%lu`e^WJX`=a!QG6L3ZRL@Z6fe+qF@kW#N<9H+WN-~S+ zNHpypYasZ^CU3%J#TS-4imWqv)Nu94_hHjS?3`>g0Sp(RkBp3z)i}u$lp<|8f~Kq) ztf-ZpN#oV|i|P(BSRu&x-@qG825^3BB#6+1_sj0x+Rt$tu{+{-pZ>H42jH1PPn)kl z?(-4CPw*O(##Fg1M%=!(b>H~9V5xr00b+a?2kxriw^IQ+u!sUBo|L0X4TYyD>qGY- zxeazO*(wqb5TUdK$+>UX_$<<28~P~`hTTtp-~I{+e0q20&EZ8=DJ|WmIFcL~4MtK{d|*xuxxc4E zzZTIR%{noqzrL>0=}Z@a>t*pcuhbi5T>*rJH*S`D_{AnYGc&sPxIYGh^IhrT5RVwX zj)4A^aWzA0@C}SxNFX!j28ggezMllXiW+aX988fLAlkBbnHKOhkOk!a$4V zkH+VJeeiaoxp`#Lqp?7YcP5v-UcjasCUuj@w#d!eYL6dcu~|>~IPr^npMRpXbr!42 znO}#2+4B?z0WSQV(Qc;%89Lzvv3R3TnoXs#ata=UW1{U>yEM_d-cLw^*cx3g;kx8) z2)G5FAr(9+wgdy}wBcSjes8zMEIbq)p4hyWj%~d@{^J0L=zLC-!d&1z@gevfsz$!> z@3}=nzoV%c8fLSsWCRLo#Mbo4ks?t&Jex{nYxQ#3#yNcU%REVpkOgLMV7PY(g?KvD^@$cOx{!A*8Mw}*$R5d7ID%CSJvqQ71nqSPK5?1;{i#dgn=SlLUgR(l35w8F zjc;qyQ>TqWC;7^inx#JS&h5KRO|k^ST@tHB$LXM?08aiJp6ajsM4xn$)% z4Z6_a&*J0Bs_)9G>0M__Vv35YU$dxE4mNJX_Elz8HQc^sQ723w>i9sX)Q;y|F<}ZMlCn(wODQ74!Yb#m6R5FRIgHjk4P|#pozkHu{fF*fGFh>(|lCd5aAKYG&OSgZSXAQt%Tl&MZ?q)3%T!@l!So-5WoRPgaC=WVG z!)6h3AX@h5=ltGil5|VN`fA|PB0==ubM4JP`l6+Z%W7{YMf_a zEpIL*2r)q^PDG-r2Q9*nHgo*WND|Ueh{F#_=sDJZR-ns{H9@A!9cq`SMJEAcpa}cs zeOe7ithLZd9eb~ZgD0LcVl21m&-uC<~nxz?Xd?Y+YZnybg zPd8xkRtg<1r9j+;1}g0Q8vb_=w!7dvyCE2uWSd&VAOGEXyz4epeVso*h2Qb$@@zbjdGN^{<=$_^k6 zi|;kww#p@~!~uM0Q&Q5EeHNO}R1VZc0V#uLciN-UVRLUte@EaRwgt6Cc*)jM*5SC5 z5u5LB*pGL2mGYBo_-?}PB?jOylb!hRY^fH`$CsR+(t~>*at_iolOfDi0h@6j;)&Kc zu7~$OY@U*sh>7iP{0w8SyK10vqvrwQ3aY|}#`6Td%{>-*vHDmHmN}aqGI%)_m*Io6 z2NB9(M=Q&!XfAkmk03oL0v9Kq3G6t9q-~32yPK`1WnSWQ>tkSByRQ9b_oz+z1*SqB z;)aP6$)up8vDUyMKXez-ZsN92fnV;)AZ*)Hak`hTl<+3B{`hvzqRc+Ylw%bygu zH3FYd>qJ-D{?+6i^q$+NRU&VIkLG0Q6pvM5CUOQLDH-o3)F)UGeD_38BFv;>%G8l* zwx-dH+aE=G;+3BiPl?M+8amCh(GUe&M@Hsh6*OeyY;^qKKREeC&PY&buc_6gekQ)N z$BL1(MuA70It9iC|CK7?C>52oB+m@)gNT>Y({n$SgUAPwTKQ&~Vn*tqR6z}L8#7wc z+-R1=&ze!We#2NecXkTQFkdRl*r^>(^{X!0cRy~nxu@6b&R^+0M_F5m=Ei&SE$C$S zD0@zL0EC1to$2cerIBrm$6=j6-0EdRncN8vf$1-c@JTmpex%dXG;(9;6sGV7&5?CX;_p_g~0JWGS4Ju=H z;rcqhKhphlsQVi_v^Dn6+|QRy&z=hvrTlEDz&5kz`4eI6xb0If)AQ3Ve>XRric8eL zGstFN=?-=&w90cPqk=OOjEKjR!>YN>sTKHc(pziaUk`V-j_J78Imk2JZvPEZPV)Qc z@+BX(>`_T|0YO=6EmkwHV4HjZRCCjHGi2BD!?^4Li|$7peM*#`b#zPdCXyo!Co_0U zo=we1Ks-A?T7D_s5ofzw`!g~%H{LEmW-aNM5Z0sw3vLau0Lq6RclT@^&z#(4INXzB zIVCVbNSQTi$ZRpS8$>AH;>(_QoMNF%qvk3hPh2T0w#?mlmQ4>J|uYSynTq$1SPV5YXb6K-h;#}VB z-FYEbc9v6OEP_1?6pr9O>$+~Z;27{~f@&gecpZ*2q%GZ`WB1f)FMBnf++p+I3FQhw zx0ZYl)%LoXZ|^wdBb$Pz%EWF&-|_3DdhyqA`o~;b0$?^ znzC#nJEWvAz9Yho=~l&%>-P1p z*X`C<69VKqm^v3#S6nQN6kH;H|Ns3I&k2fWgJ17nMqFMHdheBbht`{Ho?1-*@R|hP z$o%a1Wc&1c_V4Cw_eFR-RDcgI3MJn{)4U)utcDmc4b?GsXPlQT=10KtBDBou4nv*{QvH_69& z()hfsoxJcI+-W(ms{ZHAQt;s5WJG1P-Kj3wOdwK{-h0t5y^8`}WKBSqQaOzG1M8WB zO5=wxcT3n$zE$t`Wrmc|Khoo(%IO0(dguw$Qb+|c@lubwo0I}?F3GmL1ypF!b)Ugy zlkiLqX^44_+%pK?)mFI(%B}e!*D039Fw>DXggzL;!?VjPDSd_7X+61-M{Sv+9$X&h0*Q&P;=%v8cm&8E6@p2mKeRX3x2dw!bL{?VfrRQ~!_|h?y!g z?VRa+P{sB-IVhY>GvSw;El)_LP>hZ@pUxg=Ep<>e_pAm%)FuA=&-y(HyuR>61 z2dYbir2sSCP`Yr++o{SCV=%BeTK3j{b$R;sRdgKfwUcGdH0jzc076v(-Q7HqjC*ks z2a(OhsW|$8dmyOrsezEKF+R`U`b68DRkSdNVMu#?APdI6o3bSY)l0^?2&*+gUH=u@kB{ z8g>bO(D$NdDa!IveB;Grj{(g0n$F+5ChWq`L~A`ne&wM;r;KJrZ#|$5?QO!W1uBR5 zQ?hu}<9F$x@84ctuijpLUicH-*(v^Q+Gfo|1mMPdG{NM}R`~d`BadQeIGuv?SHc;& zYhvP^oRE|`;Rv2z%9Z5ezIf5LB5cfJL3d2z-VZoCj+btBHX|%V&*#6#hGXQBDcIO| zlgl_VE2entrsFd;Dq_cA^$C#JU0o_aM==(#rpOedg17vl+G+fJ+LZ$4Kq(L+t`X^T z+Ri@_Ch#ed0NU%nhLajOVYkZQ9CV^}j;086p&y+Uf+?3qOoI zb~E&1Tv1ZtsF9Uv>vc4U6;@C@2gt-;*0VpybmB5O37E19*czhLFf^N+qiYjqstGxs zS6GHCJCuIQS7A+MeLCA;ZMS9bp{fxs9xBGTuPxcbI|NzqW6aY#Vn<1jY{c5}_%SKy z*XuHGG)tYGeyFs2hvAZYZS(d}7iIG}#)%VGdWUR-SIdwjOq&;$QqNt7Wd&qV17+FF zPG=ZOyU(eiEWMgL9Ap%HWJVgPr29TUd;TZYdrM=M9Qzk9*RAM5Oz;htv$_1^g|Wdt zwm~AuJd#6HmwQv>$3gjzGhK{G)83e62o<0@$v2$?C(nPDmQ5u12;E{dF;a7yV|>VN zpezhR%#PC!xWr&Ksh+9#hSl(Q9;H40n=(A$T3P!v^5etm^UqtNB0O;s)>C9W9b8Yk zXytOQODe)@4J#p$V{dC^I>Vj%ZTNV^Q4{TgpONZdNn}VE5lm&`Ng@Z`M|at(Df8BR zQyHF{Uy zOfp(x>U*k0OTa`J3ru6=$qANF5p4MgHYQ0iBvKnw@V1u1@44WrRpJ_4Hd|mgM-B&3 zV0AS&^V;F(KE6nm8ADEoZPLWwBdShcdtV&jS~7e5dav{n{MA1*qmRVvjl1w>TT^d* z7iWbCfudgahp~j6LM(9!fRPRk>+PIbi~4ToFZ&z%x4^)if`7FXBZ0N=WuD?MHlwIX z=I?*{b2S5&jHM13J7U}Z(^2Mek^*OWUbuGid_L-Uf@o0GR$;z9d;~vvSF^@irsOiX z@s=ocjL}1u7%4izq(?auUHsD}BT7-G{p6<_0atWQ!$wch7HvzoPXB(a0LAX^tvgQj z%*aRh8Se7&MCPrILpr;=~tb*BV`V{Vk5mS{GDo>cW?>|#Df{2*c*qNBBkOdRn zrQi}#2P;qm0)H=%+nF>P@lFx&W_yhmGudUw>sviliNBG&?Ww?^G16EQ@Qx2r?-rG* z*K;7`a$gAtkuXxl)HGbm<@rTdFlFe+5J29}*UKtO4xhS%Vs#Eut_AZ`09X?AVG5LR zg*tf8{VS%RnhsC5O!(6!J_pdz!6#NqK~ziwKiv%OyqEJd+}2{u9WE-^5jrN(t=Gr}1E6 z?!^bj&av2s1Fl2#)vdx6B0!&2kVSn<4L%}_dWgTczAt5C^{`+ZD@Q5;o#W#c5@n=< zgI{|H6D2{0;au?zbpjAk8PDyhPT7<&I15&pICguyq2Z=5Tf&TW(&=fVXfZrrNBqO`$$0?1`^PH}{&2D#&*n6k?uZld(maW z(PEGDkR-}7OaLPDft)yC7u+};vDgJ$x{1Is`Ai0mEHKs9&&+%Yeq|VE$H3tcZ|(L= zub-RSXFWBOfxeR?h`O1(BMnqnYE0S{4`L2=(D;t?mX)TwdMpKN^nNxY(Fh(mRdX7WUVE(DnpaCnH{pPdqV;5@Z`Ino^lh zw+76*k50Y!Z^{25j5IGH*e|X2RR-k-v~Jj%JOAO}rM35=&%rOJtP8nqj^Z}>WqIeW z0GeX;rg3a4)H1%>`+*q!#3@~r<6OJBBR2(3D^{@VQyrMWss_00Qa96%L`uz}3epi65gAbpjWw)D z7Bh`i_y%6XJpPmx>G}in$WB^>hi!f!ZXz%k;4C)P%J$WwVSX?Cl`TdgxqIc;q;*6n zM9SYg8XFUH#(ifG;m!4s<&m8N__I%E-e!p0K|YT-=lF6R_ob|=Od*A8WXyeq_IF=+ zKih{m!I=afU)|17ym}9>A>192VKNutiGAoV?3GY-AbxsbVWmKjUqa|NnUK=xc=>6X z&e_|(0c3Z5n!@2>NIc&86V(KNh8@5XmM9Lj(f6-P@|NT{H{rMS4RZH`YwEIDqr-2w z4kEvDV>bPc-;)RIk^1boCAx@zicfB>xjWD#Y&$*Sn*G`_Frk<}nI2G_d6-5M(>z>k zX*ZF==t3&)`OX^pN7Doq{F!oBYI@l`>|bq^5DjB^Zu!(6W<1JUB!u;M z1EF@R#?MF)BGMu~H~+Tbe(UtF2J89ShI>_dK0SIQ{vW&KemH!a#FqPxnnU7v!~H>y zF;GET1x7$cRKHx-Z1;I;lxos0{q|3e0<7!o3w1bq65AdC$xMJ@?esA4cpSCMsYH~K z8&^G?gca_QwR&zU`_F`Sj0PANhMs0rt(uF?K}cW9L=Y~-(8WZSXgYIIn1$kJA(s3e za2LzgHp+)Q1rFIKZ!_cm*x<>~75uA(*cW|eRdbuv@hqz`I`9w`^R91pJ01&*28qhV zKh5Oj(dYGt;Okd*aj3T&l7TgDH zoko6!bv*}<`va!w^%Ptmm$~y|(jKQ&S>}&9y$diKe1z zZL&m()PGaeki4{KI}FfjJa~ALNfSnAi}hJ&V=@?NG)7;mr14>^buDe3w6BuZBB8G} zoiPB8^4I3J8m(b*)dEeUdlnrCm1$u1C?<e@Avm@rbhPyq2W2b#>KZp|yQHmN>2`K; zSjjlM7v^6Aj#i(XU1E~h1^G9uIqh!ZOVHsW?)G!X1AwZ|=Oe6>&BxzaYNyqY#0CBY z3$R7i(Dfs!V_SM%6sao4b6Hg|Vh>Q_S;|r!91Lp*sBzR8rN#Xb^g^1d_8KF|nwoC4 zo#H>?!*%971LTG!Kav(N&$R7tOY@K*JG8PaG2hISIP7lNBq%4{0rye#xtX4sgbk< zkmEtn&?=$DGrlZ<&~NfZ<0!T;6F4FRMdA-)j{S8R04^}KmJ%V za3U4s0Tj)e`?Ql7D3QkJ_p7GZnok~4k+8#n3Ie)DB`CZe*C;`_pDE$H@VMRuv994o zAqfJb72X|ydX$uGNS&t}j4>Fy_iHn={T$C=d}c@wqN0SOQWn7{LZ%6^!JU{ z3*524pY|qUFxhv|xj{e7Rj^SuR%_Yo$aF!j9(V7WzJ&vBjaq^~QcCUKpRjnj=Eyt4 zAm5!e$yYU0{5Zm`%2?u%l?qd42H`%62zM3WZfX!GW`}Wz5taEfpjWVrPbsarf zcb+f(E=}##1rtzkz<~L9RnS~R-X}cEC$MX8=vy3~lCP;?%eS+u#&JlWDEm<|0P5`rIbd~)=T+qtth{Q~3mgbaR) z0du0mh@ybd_p@uiehh9wk4_h4@=8vjUJ~gFi1=zE(*M`ttU1oA){aP*R|?)a@5)`^ z8@6P!-Lww^VVj<_$NGh9wh0~4_3d*%A{Crc9Nk@9Y#)oPJsdV8J-F`ivyw#<;K|5BUrFAfHqi=dU@NYnl?hvJXbC35d8RkXK z(d#fxtg%cftsP{pC9Cs@uZ@S?-Pt$%uzE5!7mflEt^({NVR?T!hbyw0g0AF`u)8#dR+arBh_PC6+-Womrez*TBk&lVyyCW!*;0T&6W#-~?)iD};n*J&3>B+C> zp{34kQHB4njh8F5Xo(X8c{3T(3aFQ};$)+(GviZjkuxhf>D0$QbKz*n6vI_K_Lc_5 zA|Zp|2$I8kDU2+6+ryjo??}hvJ<1oukt%ZGB)f^~dhwyA5>5$20$b$`vQN_M39(O%J_ zj8AGm<<-&zldMeqesj~L#DQsBC^)jF@Cf9V`d!$^wPbDI%p=~T$f>!yy}f&eMwqb8 z$kDw%yC81A=a9Cz+Sl?J?MhE%0#@lPvhmX|<60s?&Yh2)q>u`ff`V+B+9g39$qV?b zEBN`rQg1Yg6jP(ZY_usroqJEqo8q3Or>)&x#? zUvhEjb=*iM-114&0dWT<7M!x`SciZ!mojn))A0UZj~qub|I;puCS3kLr1PiuJKLhO zH-n1_P{N&#bbOK(Y(> zSH5)&8YI^k+ipN!z|MoQNd*}retUf@FHfU+3E6+r^)pr z*W1~(Z;;!4exL7l8YNU1ZdS8AVmkR5oztvj=p-@*U&mf{nLtP7GI%F$y^>B}!C{@$ z#aNFvS%v(2cWmPa-&16E50hw4kPg2$ejv63o=xq!>z|(^Jr@Z~OGc!R0^24sDAG){ zvdbx6l$~kqf}{j!bxjoYUVaJX_}c@VSSsvCoqR|O%b~&Rhdi**R*pY|Lg*bgDMtI->z~udKmRG`&;)xqUuY^-w~O0N zg<4RwTHqe;rq`;mQBPo|PSr1(i~A4LM@Mx3(KY^MKv!s%=@}azLZjj-{u^uZK41H= z)y=56ouXGT&-HPcZBc_H%8X9i5|l`yQd&@fzfIyI1Hls*gBQT$-3R*Nm|7`QrkbjLXAC}|A6$KwWM5{ zavA3)sG=_psG%TT$?N2VJ&@lrpx3s4fH3Vn;+x?y+KrgFfK^=JL`#k?MRmYT7+5jG zVK1>rSKOaifp;ZGYRdwtKmfsQH#EQJbkFzWHuQ_qfIL={7TqT?Efq5*2ApK2AQHHk z^J$#xSXgJNOnFVTngGk`P`?dBJ+{TAD7@&Y3mGlVT8fKP^PJ$)_V9RT<2deGFcg zk_rPNJK}X>$U%T42^E)+&H@**Rl$v7L-QP!68e^E=yx^eIp-2MyF?)>6_VzuNFTP% zk<^-zo-Gja$&eXnc--R5@mSCVZrgiQ652qrdt))Vug+`Zl&rIPSeG31v}fC8A~@kz zRMIt+$;Te`bYf_>MN?9{blzbZ$dAlZm63Fbr#U{j6CC-kJ+S%P;ka^=+j~v__&E#$ z;=NCZO=}>Goxteq37suvPGqd(zRAj{=GzqYc}HbNrGmtn&opSF%|Sz5g2dC5(t*+Z zf%tLLE76ksgM^b z`H%MQ~QtB!G<#s;^(jLoh2<_6vO~faM5& zunCs!-T80M^=YY04E{67-t^s3KOzNSl1uENA>rm9JmNp?KB0Qhg$Gmg9_wHF?qksQ zVwu|A`s}B)*-sBmFUzKX@q3@EdY=&8VLLr)R_8Mt9RZ6p_>WAMr2cUepXUN5CYf~-$eCx^6mso>3zuspX} zH~D)v^z3eXW5_>o?7ve3)ePXzy+WvJD;bn#%Oe_;%C!_P(FfNo^-!C`glt(@-3iw# zl=4d}aANTS9gflHg&ev#Hujv|a=4Hph<>UkuadvS+2}7EhE*!W(aS54;VJ4%aU2Y& zD|yruOXttQX)NAHh)56%8?lleBL@9^4tP`u5BVgTkU*;yqVDf$vM+~Ett4**M6>S- zT?kNh!E8Wfji?<3dLIY;omP^Q%#Q@S12jx4P`HLsvTpzadY^ zBot`2Yikish>f^<@UA!uX{iqb-2Sqe#kv^!VxZ${X%}yRxY-PMItr=0?tMU#J&v5taM)+lVl&j=qX*H!Wqm0z1& zPqm{uI%5d>@)elsPF+}?qmOKQxrWn2JEq*x72kt<7oku}3B3XQh#cBcNDQ-t!C#BjA}u7h{9#`38g_F9I22D)V~eGoUs+Ji(@$)a zN>vptWbdvkm4fE3)`U0o5r|>G;1<`R`p(*?DgiagrQ0=69o|_#^Z3cbuzJQvfd8EP zyL~9)``k zcVf_x#-5*k|F8v5|0XN{QFC5~;LMi&{kLBp^0OiW(;(N!~VXCnnL)I-WYEM?{|fH&bGQ=mO$HY)+VHK-GO;w39Z3*BT4N>&;#Ikg<`YT71jrSwK+Vr`r38{>EWAI0|&^~;~$FzDuhOsUg0d?)Zc;=s<)GWOXC37cYe8vDa+HwSG#7gHxn);EX)g;xe5Tdz>{hL^&K}TzSW%~Y#CiKyby=5W(Dy&52#S751tV4#Y|^+a;58)-Tmc${%i_RvWKRzj6>C8Ovw# zyBxqcJ0pXmbO^78FBh(Qi1#u(jYwcA-r0R z#X69#T4a8#AG{_-Ur>thS3VS{4v|FWYvA>RR^C(aqA0~v5=mp59iYP!MsMccbmqy@ZWU>asFc9ej;ICNe-ASdBEGp3J45rBPE)Rl-7p62%d3 zqD_f0WScS0dkk4eDa z5xI_jHs12~jnE%9#wh zarGkiI0n{F)#Y+&?v@qL$>(r}$oB%&h=TlEUcRQnQlIPSJ1q=pB*j-#tU}mu7K{}v z78lzLk}=?|S=48!3#m|5q$(=pNcb0)Xq2?Amt;cyb9N(;hZ#yHSi3)hUwc+9j1iwZ z@%^0Fi3K3GN!q{zazT>2z5uoQhPlFC?i?bD1BiPLD3!Po0$9z|%QT=wAtHn@!}jOb zFBPG++a&raimj-Z0CZXHW+|)i^h-`QsG(pB<6?(wpiL4@)Vb1uyreUIveRRb)#7FORzBUe z_b1>!44QHI{L%aolw?%T3WXfm1m07<1qN0+lE#bzlsJ+Pw;zGA_}-54C^6-%Js}$b zd+5|@9RvUiNv@P+2aLX0cy9nlyDUC}vHrmrWdsUuePjc5EWJeo1xcW3(I1@ek81@I z2>@$=I*s6yQOodl-+UdDJp-9Lnmw8~5ob^oDVT}3ASI>U(n$U%b$F5_I$kBcSqkMO z-S8MF4!7B%DQ9}u0;rRuL#^Q@vrfUixYTv5yK_^y<7bZV&p(QRz!QO?Dak^sP@v!s zBaBtfSuTa`5k<-j`3P7?^#qz(iIoJ9IaS`2!@U2wVLe)2E!f&Js_X+9U+8)`_v|E| zHCfAA?t71eG3>m+TLoyHsj}}}`UR}E z_x65>IDTon`Ny_-2Sw~rv|rx*x1jz3+p3^|5GY)0SKMk9+BPmOUPIP3iWeVaV*v=@ zO4<%8Y*lK9s41FAc>^WL=DZ@W9ryZbJWyR&jR7u*v7tw%n%8b;Zq2J)3I494ctblj z4$u%Gl{QsLU=Nt50rTPDD8*6w%PWS~(S*k>^*1$%%Ceqc^+v+r0~+Sgp5sAFQ^Ij9 z%sRRTFND1h7+FmTjiL;F@I*0DK{nTs)R2}1-A&vJ_{v1B)c!Vvo~3drivUW4w5_T6 z$h0Ht@N`K3M-?z-4bOm*Bfphiisw%RdxrUvAzAPOP6ggiZO8IB5FiN4pnzEc4Z8-u z@trY>vNTl~bmq5aU_A_`990cu=UFAG8DOHr8>WpS%(XNUnlQFNGeV>68d-T{`m)!l zC*Gy}U7=RCKj;ooLpodoS*%WjU1>dvYHxYSJ7ah6|BkUG=2hJKZFB^ZDAsQ;~zB1af^vN+@&9$G%rXUniIn>jMC)U6| z#K85sB!fEnVjk*L3Q566vJ>R(V+zVLIreYLeq=Xd5*ZmkH6#gRNKn!8@8tKH?mvVG zB~MK^NB%kxwKPnt>DYC>-J>?3Ha8PlV}JL-;=o{wjtbLKwEzZS!69Ux(+9`lMh(31 zNJzyw16aR{qij%-W-cyHEvOV>Wyzf5VGd`6n{H285VR+xTkXI=P~gI1Am+rDf@z2^ zr<4aQY3vynYcN4@y5Ml(78JCk3)}_gKN2G>7)SAA6&5qltN`Wdtd#8^5QsUf;6WDd zk~;F$+4qC8@^P{#VAK!>0F(TJlqLo&mm*Kdgi>{LxdBcCseK(aQ&g?U+j8)u>Fv|( z3wq~w>Fv9^ohTL4t##gUv}wJYI*J#W*TEgJ;RoMXZODjx(uE8Yy5i?=I8=E0@5ix} zdv~|qZpkm7PjOeB_$dhHX69B$?$)0WX0I+9+t!ZS?+noplYNXA_@-)_?R@Ax&^@O6 zc2APvqc@Xk+3R%)cr>SbzyVNg@9p4a?tKPk;4UmwtN8jKEc0KUy650s&wUB|`~T)O z>$-hhxXAquu-{=&h`m%ETdg4N<-2@HabG#-iit;V?P&n%-C1^t@e|MYs$KHMr<+aV$Ui zoR;4SC7Z>RQ<5aE5>!)%mLpY0Su5|P^2AF2w1cyrIFp0=+=hlY>*AYRh7lxn7$Bta zBYb6}f)`ekN&BqcU%&6$`jBVaU-n*5R&bGuHv+44A`R3J4|^UKhvrl?%csf`QQ5IAaiR%Q4NJCMHn@fJ?Ok|cTfVWis ze=k7gFR_MS>5DpPvW&KEpRsW$;I(ViF`6T6(Kt~SI5S8KF(N7LkQAul4(xG=Ho`4C zKSz`j>@rD$P_)!fl#|AF=Hg6e&?<3{-M(R8qpwLQ;9UsgRLNan>{d7?kKC zk;UH?#={5GaAJS}^w`xkF8AFvl-`?N_S@iBwYNNJ5OZqpfKFmUAgc3{E1(n97^qkH)ys$ z=eyo()ZXi?I=5dxwN<~0{mlyg1eGJ0Ev|^qeGK8r*zELsRp|)Q1Wvd=;Ah|~h18X1>shefx~@88G&pz0%4Oqa=hpIF-%oTv zJ)z8=gu(}dAsheW5vW1W?hyDO@LK1u_Em zu_RDXkW22uc9Z(AH_c+CbBR5%qlzR1tJN_oN#x;&A5}I?RgHz8(`C!!kCsx6y%8+7 z{ce$#O`sZnsP+yC%`RZ^~Sg@<`-!)2!#MXxRx*;Y){W@)e59^C4|twBpgLu z2Xg~x0RiyyG9%q6NvPxjC-9d7U2rohKZWghvyNrw%C?fo*x^eB!YxL!*p^j$qi zxka=rO0kMd4+#(5in3N=BK||-LW}xEh$qL~lC&6x3ZSE}bB@MZV8^7E3A8866rZCd z>eqWS6TX1n3wQPWTZyV=ga1%n+YjGbZ~8GmC1QTM4rM3f9@+i-XaX^XBCiEpcl#1b z%UsO69{-)a4*nt9s;a7>^^wAN+Nt{=fdERy`=lb?+1~z?RVQpUaW*|TYnCA;rn6+xo`vrYzN%pUm(FLhA7e+)3j?Lj&$@*@r@B`vbpHK zd}kLM*mccr{7{j_Tb|X!Fvb-clVs3`&wuceKZ`H8m$$-X0#rO>bX`lM8~Y2xG=R$H z{3zJSH`;32HuQa!-&RIa8TYkr_EY8{J?6E~*Ea-VngrtzEK#-G-ViJpUXQ;4pbxHe zI4Q@VEsLV90xa_H5G|)M?YK$mtzkSDGqvL-Uo8lh=fQfv_DUnh%3z!B^^oRq`&%9j z68^m6?u4$sC5rF!snVw3tmIKLns{}R_QB2Q>|MMM1r3v=GL;ZG`T9B)+S~{mojtKk1!^0_s-jG|Wp8-8%$uI25|$L*)PNB07LY8Ig4G4^)T zIt4Ys(c>e#ta?6|!gjTr6(y5ojYGADz~N2B=;?dbOm#UVFG>>+&F77Mo3^W3>33~I z8oaR7nUPOv8#G!uDUE;Uigr`@VL?bE{f&pbE!FChl#xS}ks#IkPrF&z!W_+&asf#O z2uxM-{t+GJ4=ofj2bt5X&W3s&d~{5fNTfm>Umlan$b|+C--c_-wL+4BbnEo6XYw7$ z+VosFyo@M7AVX9=#7Iz?SrSRX8FgcT<5TJm{wdWCIXFh-&lK^c-y`dJ-c^!bcr*-S zK83?Z6dfSs%4FR-s9+Lz*3>*GC=F%y$ag6Al#7%g)?pNN*2HQ=@25$Wo>Ngca7UsU z$RN{jAzAZ835Sib+yPoS5Upw}$dhD{aMOXzwOe=`bzBGSc4}iImYUwH0oEjlnX>Gph#$W%@fBM#I_;v) zx-U>`5)i_OE#sM7>%Q%$ubro!pU3H?aSu5puXI%=@y`)g#MFbz<`U^|)kQNBy2LiI_`cwJ0PjQeiYNv09 zijD>R%+Z$}-F|`IHX0&1aBvcQ@@nkEaFb(mC~0WyBYO6vE+5yeWhn$(nqVcavCC*X zGI2sE>5zAR|6H7^o90r@uq6x|E6-CF3;6rm^D0P@sI!-iv+OFs90{TrS}<2M|3lMPhPBx>-4=Iu z*Wm8OiUxwaySuv-m*DOW!QH*MyA~-@9E!I+y{_X60&&--7+812N;aCMd zy|bxwXfo_}dgEJvF(_m%FQ>Mjld4av**7?%Yq z*y*$>vmhRl84<%!W=~YyH&ee{@M&Ov-nU6r{1Z$SUFO{nOwSFXUagKQHpj9^whp}P zKADKL1fS^Lpjj4so9ZiM@8f6!UIht;8nP5`yhfwE1lYQ70tyQKS>y$`X^^}Wxo~Vz zk5|}9LBg%sc(99BPCt*l=%SP9$!Vr+S!&SlrY|4>{;(Y7pFd|W7tgoN-Q2zrN&P?i zP*UUjq-z0*bZV$>6p0_^nkNv4#~WzWhk8tk3BH+~Jy3eGZtmBl>Kqy7wdx;gNnFNy z!nne9fVH?arbAmPn_wm794M--N*JiUO9Ut>@OOUaJZcwTRR4#5%sTGW~e|7+55R>ueUsS`d zufkVXSD(sEps4%l;WTgdMJG>V0%Oe_?r_5_T8_Jwb>(z-ufT9Z$>q?@eA8M83^pz8 zoK;z^@~{z|nX@tmK5tqM$|bVwY)MH=O|R|5Clo)`300Sfi# z^}b|l*2*++jfY>Y=QJ20M|^!eNC@RTath#<@LB6*U)$md}be3brJ0*2Z){NBTK4G%Z1DS42OiS~v&lQ%~2x|D|1Od=^7IaK08K#&N3yqmy>7R_= zWy&(Gjxj_A6$u!9I(Te0aSh>(3@zmOV3a8|p9(6dcxpAI9DCt&A6~i1311oy_Hz0E zuKIFdOOGkYCg5<=s>p@M{piIBbdPjhpsB&$HfxvLkucVcq;^-1*ZosM(8qE_AJ zz?#LCX<0rG)5??CR2@x0_(A3px@iN#7KAp?2r}3T_l0CKt#N@GXV?9TW%Tp##zIO* z1)5|DpV{!F1pPt%kZl%MBTfyZmcsP?O}hVI`KM>NFMoJdi!7@VOk_to4q{y$)~0BT zqZ;6k)L|r;>Gljb#C?B9!{pfUH`0|{r3huL=$$b%hB07QNKKGhOFG8zVcLsH1<2H^ zcqc6Tl z1M0(08;7}j46~2yGquN;c9FPCmv$O-)o-!-s};p(MjVJ^1{UQ&f5|P*?&mR>GPIv^ zmZabbUBM#j0b(KMNrF~9Q2$V}!;P5x2fi2dR-m$EMJbPtoO2L&ZnSMp815RBrJp~c z=K-+|Sk$Nce&g@iG*dqiClar$F~4WXZr|%{2jtCK&!QpY;&Xs|rGw!S?W7^*4Ykq> zu`;8c5`Z5)rwT7=k%N;Sk{~umPhO@3vDa+P@5u{n(K{~A{Ic0&?`(USWY;jZVvv0T zs`p~4Nzgp%jDcefaTxa=2X2V~4(%z?^@3X*FT@I3+sLCRnS z4Z?&LF^cyhZJOYG3my6cbBzEpdx}Cy;_3FIum9`CWA`Ytlw!idlyeSbZjo%itjv@i_*Mgji62d0f!qb>~5|-AurfrRhThJxj(dlc?QcV{$>1#C_o;X z{X0jR*TG(uWrM~_wDJ10En}Pwjt&{t%0~WDUK6=?IK!kV>?gLdkb3C7!C^k`Ci=Nl zbMx0SQvCB3%W%kAih?p-Y9ukrkmqLCR6R|TgMdu(=RA*qfl*0*Lvmbo?2J$#>QP?B zju{U}cblN754!6qgy=>?51br^4JV0gP?!<$FZRSco{fCI1c#DzmPDMT)Ai=@97HyU zZq2%6pY3OA*)AECR+*4<0HT*KUR{E*SIko=35p`1JW^~=%NVw_GNa?>TRG|Z%VWC` zIM+vLHuG?-Hktln!uByFJ(l|cig=&}{fE@kQT;~#p9$~l>uaD`{YTF|qJnKBYE@W< z<)DWeG^;=ye?4mHv5mO)8oMeKC|obx>h6F2_1bCz3U*&gNF!7-a4})xXt>La5l5AT z@zEuqDjf;b@t7ZX>0zgZ?LgQ!)q7(=_*e~`kBRSnqT70vNr1XU2F{E=`M`hIEzSgq zQkEGO<@=CgE3Vp9Sf8W``T>AX62n^N+1mm%;AMCinh9W zCT-l%nl@htWEHyvwIa*toXyQvv=lXO_L^X3F5O>IIEo1%=qp$6!m*^pMi{}WU=bT@ z$jbxF8}cYR)M$zy`2n2W|+0<`ks!}QFP6)^czL1 zrf7UhxZfh?1|Nn;cDV|&Z^5Hrz6-0l!7rvuq*$nfOcFMMh97<0&{cRNEl?Gk*S(U3 zXRRX4ILB8q?=hmhR%~0o-96}T7tvwI^XwqhgzjWzo2O<)$<0p`LVRR-uzrt0d0u$9 z{eqY+Le|eSFrGU>YP>oMc-{%k14*%hn2i%@E#TR_d3+3+H%<3!+=7cA&$8@3tuUgh z*5WJ3nh15z(xEvz_2DG5HPEnz>7bUwLlTUruwr>0hNO~RDO~Qu_WbM9tP)RKCYfou z*wqTHY+7a%5&P&CT)fmJ%gY&-QJE2>{Go~-FRc+lmv2&DeMb8FmFq3%I6nyuy(qs? zQz>=-eh_$v2rz_VlX^wPtnOr#KyFNm|FiKR7bmv97$DBEP# zXlP_7F>dI%vk#{due6{rAsA>Pb^ACcvtkv0KW%`y{%c5tl4L2G2hF5sU@lF;E%I}N z>u8SM{xq^4_RA&T0A+(vWNIL`DY?skoEQvDr%w}EcSbx(N!&o~nh-H^D*m2%PtoYL zc(;9wh~*{NBQQ7(S+F;u*gsYB%p_ZN&RV7H8>gvhssFk<)pe01WV=v6g?VcbYTvc9 z_N&j3JK^3{uI82siZnj{UJNPvA0Gp%?Oc9#63pX0yTv`Jrgh*)1F_Q$K6JY$b|UJ^ z6<{UA;o{*-t>@rvn_$kOGKzL!k)vX9m!oQG$-51=6lSv#gFO)ph+Pt3#n|;gx-~)b zt;S~y6(#OXWHZJ60TEaQCPz1Za~hiuyMF}&$BF+{&LE!vmSv>~NPei^Q6$gM1^Q0z z4)Rk6bhq)BEX%uTE7$W?1+aHw##H0!+}5f!r>oinF#f*XU=$g2k6El7Y`Do>BiK!% z^;uGyTs%TV1Y!ItLsEG{eZx7J9q{kuKBkWryf#Y|Csim&#vTuQUY)QDB-b!Jh~K@n zZNfBzZFo4CAM$if_fB(HlO;K(Sx39;+TG8+kdI_kDAooQ-hR@Km4I99b?RS0L6l)%E3bdYL&1b66(jE!}9Z3}Y5jpCh>ni$K1y z$==r4;Req(N?9m2-Fy4+CRS&&lzUG{5*AE&*;LgerLD2QOVAZZvQIwwkL2nY%e+E{ zrl2DMMO7Ev-TG~wMaOMP&+8}gDnn<)@`8(YD|+$?CNFkydRqAoTvpb$k{m*5^_{rJ zpRMM0S-Z zqqPOz@}4QlXbk1Bx3Cf4aK?v4>bzX}aK9gPKQaWUUP=z1lP!=ixUMY$Dr zKS?KD*}{n^i2$>p;>L@Vnhei|NG<-GU|o%cE&(o{BO}LjtqSO=rCmfmvPa-#Wx3F$ zC^-yQ7vP>Tb9tWjSM@u>*m!#4`OYOaH#&B9b?w`MzS;4;fQw(imY@E7J`wzUB>3Uw zegEHk&kMBf^;rqc*>@Q7&MJ_kaA;&<;_~uFBflI(VO)-+S~E5+$=DQm5g`Qrj%}F6 z!SY$S|F<_VEJxUMmp$qz+ObwvLpl{$oP;wd{`KT&Hv9K#p{~9&TSPXtE$6;zPjEKl zV!e7s5^Dqhf;Ht$SDj_}kbW~^o*k`T#e7UzYD3S zcz6*agH0vE^wGC3JY3#m7%j8ns_9v|xnF-55$$gsE1XU_^TpJgwIQJGing5Su?1t! z3IHfZI?g)vjGWrqyr)j10O6P!{<10ISDfF(bV5@#+*M?~bLo*^ zMfvpu{JqJCmtTj-%-cb~4+vG+i;lM54ULS2W_6JSdsem&e(n$hH}ajeXi{iOGHI1q zWiEys<^u9zW3W1%L=3h>lf< zy_P%y?Ejs09X-kyeGB9L;Y!u&(~I=inO1RRAn7p^y3eZ?^A;EREcpR`e|zU_*$VvG z4r;QQ#Z{QmO?<%*r8`#>yWg8g+u?-Cw^@VQ^w(!cEaG*Z7HWT!&Eua){*IM1i;&3( zQ$xb%l~j=Vx<%5;f`H~?Qz)E7OeY1aa`$!!BQl<%c&$Aswtd>N$6)%Ye_Zq3Q#8;m zzKU@1@yB1~B539B8O=AksJ~yis{MM~yM3pGS_yxdTd&jo�#3);=^uv-&FUKcwSBeFKGSqF-V0`&RMEf1aBm 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 Sz)oQhq^+T^UU<>={(k@~*o_PT literal 77045 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 PM~Toi(kZ`WfA>ECU9%5L diff --git a/articles/align_test_sounds_files/figure-html/unnamed-chunk-1-1.png b/articles/align_test_sounds_files/figure-html/unnamed-chunk-1-1.png index 7d57741d48b40ce82a67a6577a1eae83cb99cb47..11e5a1f7582d2df3d1490e32c5581a5d9d5ef5ba 100644 GIT binary patch literal 85382 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 z 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 literal 84888 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 diff --git a/articles/quantify_degradation.html b/articles/quantify_degradation.html index af6b1ab0..84f92728 100644 --- a/articles/quantify_degradation.html +++ b/articles/quantify_degradation.html @@ -1969,9 +1969,9 @@

Visual inspection
 degrad_imgs

-
## [1] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpTcRh7t/plot_degradation_p1.jpeg"
-## [2] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpTcRh7t/plot_degradation_p2.jpeg"
-

+
## [1] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmpn5xAcE/plot_degradation_p1.jpeg"
+## [2] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmpn5xAcE/plot_degradation_p2.jpeg"
+

 

Each row includes all the copies of a sound id for a given transect (the row label includes the sound id in the first line and transect in @@ -2939,12 +2939,12 @@

Blur ratio
 head(blur_imgs)
-
## [1] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpTcRh7t/blur_ratio_freq:1-1m_open.wav-4-10m_closed.wav-4.jpeg"
-## [2] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpTcRh7t/blur_ratio_freq:1-1m_open.wav-4-30m_closed.wav-4.jpeg"
-## [3] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpTcRh7t/blur_ratio_freq:1-1m_open.wav-4-10m_open.wav-4.jpeg"  
-## [4] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpTcRh7t/blur_ratio_freq:1-1m_open.wav-4-30m_open.wav-4.jpeg"  
-## [5] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpTcRh7t/blur_ratio_freq:4-1m_open.wav-3-10m_closed.wav-3.jpeg"
-## [6] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpTcRh7t/blur_ratio_freq:4-1m_open.wav-3-30m_closed.wav-3.jpeg"
+
## [1] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmpn5xAcE/blur_ratio_freq:1-1m_open.wav-4-10m_closed.wav-4.jpeg"
+## [2] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmpn5xAcE/blur_ratio_freq:1-1m_open.wav-4-30m_closed.wav-4.jpeg"
+## [3] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmpn5xAcE/blur_ratio_freq:1-1m_open.wav-4-10m_open.wav-4.jpeg"  
+## [4] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmpn5xAcE/blur_ratio_freq:1-1m_open.wav-4-30m_open.wav-4.jpeg"  
+## [5] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmpn5xAcE/blur_ratio_freq:4-1m_open.wav-3-10m_closed.wav-3.jpeg"
+## [6] "/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmpn5xAcE/blur_ratio_freq:4-1m_open.wav-3-30m_closed.wav-3.jpeg"

Output image files (in the working directory) look like these ones:

diff --git a/pkgdown.yml b/pkgdown.yml index 9c8949d9..eb9fd00e 100644 --- a/pkgdown.yml +++ b/pkgdown.yml @@ -4,7 +4,7 @@ pkgdown_sha: ~ articles: align_test_sounds: align_test_sounds.html quantify_degradation: quantify_degradation.html -last_built: 2024-03-05T00:04Z +last_built: 2024-03-05T04:21Z urls: reference: https://marce10.github.io/baRulho/reference article: https://marce10.github.io/baRulho/articles diff --git a/reference/master_sound_file.html b/reference/master_sound_file.html index 61aa9dc1..0b80dff7 100644 --- a/reference/master_sound_file.html +++ b/reference/master_sound_file.html @@ -177,7 +177,7 @@

Examples#> checking selections (step 1 of 2): #> saving wave objects into extended selection table (step 2 of 2): -#> The file example_master.wav has been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpbFxUr5' +#> The file example_master.wav has been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpMy3SyV' diff --git a/reference/plot_aligned_sounds.html b/reference/plot_aligned_sounds.html index 6a6980fa..1201d653 100644 --- a/reference/plot_aligned_sounds.html +++ b/reference/plot_aligned_sounds.html @@ -220,7 +220,7 @@

Examples # plot (look into temporary working directory `tempdir()`) plot_aligned_sounds(X = test_sounds_est, dest.path = tempdir(), duration = 3, ovlp = 0) } -#> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpbFxUr5' +#> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpMy3SyV' diff --git a/reference/plot_blur_ratio.html b/reference/plot_blur_ratio.html index 7cea6141..1114ecb2 100644 --- a/reference/plot_blur_ratio.html +++ b/reference/plot_blur_ratio.html @@ -197,7 +197,7 @@

Examples # create plots plot_blur_ratio(X = X, dest.path = tempdir()) } -#> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpbFxUr5' +#> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpMy3SyV' diff --git a/reference/plot_degradation.html b/reference/plot_degradation.html index 52eb3a55..bbe9a894 100644 --- a/reference/plot_degradation.html +++ b/reference/plot_degradation.html @@ -256,11 +256,11 @@

Examples # more rows than needed (will adjust it automatically) plot_degradation(X = Y, nrow = 10, ovlp = 90) } -#> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpbFxUr5' -#> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpbFxUr5' -#> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpbFxUr5' -#> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpbFxUr5' -#> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpbFxUr5' +#> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpMy3SyV' +#> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpMy3SyV' +#> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpMy3SyV' +#> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpMy3SyV' +#> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpMy3SyV' diff --git a/search.json b/search.json index bf24dce4..1c7196b1 100644 --- a/search.json +++ b/search.json @@ -1 +1 @@ -[{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing","title":"Contributing","text":"First , thanks taking time contribute! types contributions encouraged valued. See Table Contents different ways help details project handles . Please make sure read relevant section making contribution. make lot easier us maintainers smooth experience involved. community looks forward contributions. like project, just don’t time contribute, ’s fine. easy ways support project show appreciation, also happy : - Star project - Tweet - Refer project project’s readme - Mention project local meetups tell friends/colleagues","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"table-of-contents","dir":"","previous_headings":"","what":"Table of Contents","title":"Contributing","text":"Code Conduct Question Want Contribute Reporting Bugs Suggesting Enhancements","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing","text":"Please note baRulho released Contributor Code Conduct. contributing project agree abide terms. See rOpenSci contributing guide details.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"i-have-a-question","dir":"","previous_headings":"","what":"I Have a Question","title":"Contributing","text":"want ask question, assume read available Documentation. ask question, best search existing Issues might help . case found suitable issue still need clarification, can write question issue. also advisable search internet answers first. still feel need ask question need clarification, recommend following: Open https://github.com/ropensci/baRulho/issues/. Provide much context can ’re running . Provide project platform versions (nodejs, npm, etc), depending seems relevant. take care issue soon possible.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"i-want-to-contribute","dir":"","previous_headings":"","what":"I Want To Contribute","title":"Contributing","text":"contributing project, must agree authored 100% content, necessary rights content content contribute may provided project license.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"before-submitting-a-bug-report","dir":"","previous_headings":"I Want To Contribute > Reporting Bugs","what":"Before Submitting a Bug Report","title":"Contributing","text":"good bug report shouldn’t leave others needing chase information. Therefore, ask investigate carefully, collect information describe issue detail report. Please complete following steps advance help us fix potential bug fast possible. Make sure using latest version. Determine bug really bug error side e.g. using incompatible environment components/versions (Make sure read documentation. looking support, might want check section). see users experienced (potentially already solved) issue , check already bug report existing bug erro. Also make sure search internet (including Stack Overflow) see users outside GitHub community discussed issue. Collect information bug: Stack trace (Traceback) OS, Platform Version (Windows, Linux, macOS, x86, ARM) Version interpreter, compiler, SDK, runtime environment, package manager, depending seems relevant. Possibly input output Can reliably reproduce issue? can also reproduce older versions?","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"how-do-i-submit-a-good-bug-report","dir":"","previous_headings":"I Want To Contribute > Reporting Bugs","what":"How Do I Submit a Good Bug Report?","title":"Contributing","text":"must never report security related issues, vulnerabilities bugs including sensitive information issue tracker, elsewhere public. Instead sensitive bugs must sent email marcelo.araya@ucr.ac.cr. use GitHub issues track bugs errors. run issue project: Open Issue. (Since can’t sure point whether bug , ask talk bug yet label issue.) Explain behavior expect actual behavior. Please provide much context possible describe reproduction steps someone else can follow recreate issue . usually includes code. good bug reports isolate problem create reduced test case. Provide information collected previous section. ’s filed: project team label issue accordingly. team member try reproduce issue provided steps. reproduction steps obvious way reproduce issue, team ask steps mark issue needs-repro. Bugs needs-repro tag addressed reproduced. team able reproduce issue, marked needs-fix, well possibly tags (critical), issue left implemented someone.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"suggesting-enhancements","dir":"","previous_headings":"I Want To Contribute","what":"Suggesting Enhancements","title":"Contributing","text":"section guides submitting enhancement suggestion, including completely new features minor improvements existing functionality. Following guidelines help maintainers community understand suggestion find related suggestions.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"before-submitting-an-enhancement","dir":"","previous_headings":"I Want To Contribute > Suggesting Enhancements","what":"Before Submitting an Enhancement","title":"Contributing","text":"Make sure using latest version. Read documentation carefully find functionality already covered, maybe individual configuration. Perform search see enhancement already suggested. , add comment existing issue instead opening new one. Find whether idea fits scope aims project. ’s make strong case convince project’s developers merits feature. Keep mind want features useful majority users just small subset. ’re just targeting minority users, consider writing add-/plugin library.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"how-do-i-submit-a-good-enhancement-suggestion","dir":"","previous_headings":"I Want To Contribute > Suggesting Enhancements","what":"How Do I Submit a Good Enhancement Suggestion?","title":"Contributing","text":"Enhancement suggestions tracked GitHub issues. Use clear descriptive title issue identify suggestion. Provide step--step description suggested enhancement many details possible. Describe current behavior explain behavior expected see instead . point can also tell alternatives work . may want include screenshots animated GIFs help demonstrate steps point part suggestion related . can use tool record GIFs macOS Windows, tool tool Linux. Explain enhancement useful users. may also want point projects solved better serve inspiration.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributing","text":"guide based contributing.md. Make !","code":""},{"path":"https://marce10.github.io/baRulho/articles/align_test_sounds.html","id":"synthesize-sounds","dir":"Articles","previous_headings":"","what":"Synthesize sounds","title":"Synthesize and align test sounds","text":"often want figure transmission properties vary across range frequencies. instance, Tobias et al (2010) studied whether acoustic adaptation (special case sensory drive; Morton 1975), explain song evolution Amazonian avian communities. test authors created synthetic pure tone sounds used playback re-recorded different habitats. actual procedure creating synthetic sounds described : “Tones synthesized six different frequencies (0.5, 1.0, 2.0, 3.0, 4.0, 5.0 kHz) encompass range maximum avian auditory sensitivity (Dooling 1982). frequency, generated two sequences two 100-msec tones. One sequence relatively short interval 150 msec, close mean internote interval sample (152± 4 msec). sequence longer interval 250 msec, close mean maximum internote interval sample (283± 74 msec). first sequence reflects fast-paced song second slower paced song (sensu Slabbekoorn et al. 2007). master file (44100 Hz/16 bit WAV) thereby consisted series 12 pairs artificial 100-ms constant-frequency tones six different frequencies (0.5, 1.0, 2.0, 3.0, 4.0, 5.0 kHz).” can synthesize pure tones using function synth_sounds(). function requires 1) frequencies tones synthesize (argument frequencies, kHz) 2) duration tones (durations, seconds). addition, logical arguments fm allow create frequency amplitude modulated sounds respectively. case need six tones 100 ms 0.5, 1, 2, 3, 4, 5 kHz separated intervals 150 ms (least first synthetic file described Tobias et al 2010). can also get selection table (sensu warbleR) information time frequency location every sound. required order make master sound file. get selection table need set argument selec.table = TRUE. can done follows:   function can add complexity additional acoustic dimensions. instance following code generates possible combinations frequencies (2, 3 4 kHz), durations (0.1, 0.2 s), frequency modulation (tonal modulated) amplitude modulation (flat modulated envelope): Note output extended selection table contains time-frequency annotations synthetic sounds:   extended selection table, ‘sound.files’ column refers Wave objects included attributes instead files directory:  ","code":"# load packages library(viridis) library(baRulho) library(Rraven) # synthesize synth_est <- baRulho::synth_sounds( mar = 0.1, frequencies = c(0.5, 1:5), durations = 0.1, fm = FALSE, am = FALSE, sampling.rate = 12 ) # convert into a single wave object synth_wav <- Rraven::exp_est(X = synth_est, single.file = TRUE, wave.object = TRUE) # plot spectro seewave::spectro( wave = synth_wav, scale = FALSE, palette = viridis, grid = FALSE, flim = c(0, 5.5), collevels = seq(-20, 0, 1), osc = TRUE, colwave = \"#482878FF\", heights = c(2, 1), wl = 100 ) # synthesize synth_est2 <- baRulho::synth_sounds( mar = 0.01, sig2 = 0.5, frequencies = 2:4, durations = c(0.1, 0.2), fm = TRUE, am = TRUE, shuffle = TRUE, seed = 123, sampling.rate = 12 ) # convert into a single wave object synth_wav2 <- Rraven::exp_est( X = synth_est2, single.file = TRUE, path = tempdir(), wave.object = TRUE ) # plot spectro seewave::spectro( synth_wav2, tlim = c(0, 3), scale = FALSE, palette = viridis, grid = FALSE, flim = c(0.5, 5.5), collevels = seq(-20, 0, 1), osc = TRUE, colwave = \"#482878FF\", heights = c(2, 1), wl = 140 ) # check first 6 rows head(as.data.frame(synth_est2)) # check name of wave objects names(attributes(synth_est2)$wave.objects) ## [1] \"synthetic_sound_1\" \"synthetic_sound_2\" \"synthetic_sound_3\" ## [4] \"synthetic_sound_4\" \"synthetic_sound_5\" \"synthetic_sound_6\" ## [7] \"synthetic_sound_7\" \"synthetic_sound_8\" \"synthetic_sound_9\" ## [10] \"synthetic_sound_10\" \"synthetic_sound_11\" \"synthetic_sound_12\" ## [13] \"synthetic_sound_13\" \"synthetic_sound_14\" \"synthetic_sound_15\" ## [16] \"synthetic_sound_16\" \"synthetic_sound_17\" \"synthetic_sound_18\" ## [19] \"synthetic_sound_19\" \"synthetic_sound_20\" \"synthetic_sound_21\" ## [22] \"synthetic_sound_22\" \"synthetic_sound_23\" \"synthetic_sound_24\""},{"path":"https://marce10.github.io/baRulho/articles/align_test_sounds.html","id":"create-master-sound-file-for-playback","dir":"Articles","previous_headings":"","what":"Create master sound file for playback","title":"Synthesize and align test sounds","text":"function master_sound_file() creates master sound file (probably guessed) playback experiments. function takes wave objects data frame (extended) selection table containing model sounds concatenates single sound file (silence sounds length can modified). master_sound_file() adds acoustic markers start end playback can used time-sync re-recorded sounds, streamlines quantification acoustic degradation. following example shows create master sound file using synthetic sounds generated . synthetic sounds need add little space top bottom frequency sim_songs() make values exactly pure tones:   function saves master sound file wave file returns selection table R environment time frequency ‘coordinates’ sounds file (careful playing master sound file can shocking audiences!). can look spectrogram output file using seewave function spectro() follows: function can also create master sound file sounds found sound files several sounds files, likely case recordings collected field. following example shows create master sound file using several sound files. code uses example data recordings package warbleR:   , can look spectrogram output file: Note output also exported Raven sound analysis software (Cornell Lab Ornithology) visualization manipulation using function exp_raven() Rraven package. exp_raven() exports selections R environment ‘.txt’ file can read Raven:   sound files annotations can visualized Raven ( acoustic analysis software):   Take look Rraven vignette details export import data R Raven. Note start end markers placed relatively low frequencies less affected degradation. frequency range markers can set argument flim. relative amplitude markers can also adjusted amp.marker argument. Amplitude markers multiplied value supplied markers louder sounds. two features increases chances detecting markers distances.","code":"# create master sound file synth_master_annotations <- baRulho::master_sound_file( X = synth_est, file.name = \"synthetic_master\", dest.path = tempdir(), gap.duration = 0.15 ) ## The file synthetic_master.wav has been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpxfkYip' # read wave file wave <- tuneR::readWave(file.path(tempdir(), \"synthetic_master.wav\")) # plot spectrogram seewave::spectro( wave, scale = FALSE, palette = viridis, wl = 150, grid = FALSE, flim = c(0, 4.7) ) # load example data from warbleR data(list = c( \"Phae.long1\", \"Phae.long2\", \"Phae.long3\", \"Phae.long4\", \"lbh_selec_table\" )) # save sound files to temporary folder writeWave(Phae.long1, file.path(tempdir(), \"Phae.long1.wav\")) writeWave(Phae.long2, file.path(tempdir(), \"Phae.long2.wav\")) writeWave(Phae.long3, file.path(tempdir(), \"Phae.long3.wav\")) writeWave(Phae.long4, file.path(tempdir(), \"Phae.long4.wav\")) # make an extended selection table est <- warbleR::selection_table( X = lbh_selec_table, extended = TRUE, confirm.extended = FALSE, path = tempdir(), pb = FALSE ) # add sound_id column est$sound.id <- paste0(abbreviate(est$sound.files), est$selec) # create master sound file master_annotations <- baRulho::master_sound_file( X = est, file.name = \"example_master\", dest.path = tempdir(), gap.duration = 0.3 ) ## The file example_master.wav has been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpxfkYip' # read wave file wave <- tuneR::readWave(file.path(tempdir(), \"example_master.wav\")) # plot spectrogram seewave::spectro( wave, scale = FALSE, palette = viridis, collevels = seq(-120, 0, 5), wl = 500, grid = FALSE, flim = c(0, 10) ) Rraven::exp_raven(master_annotations, path = tempdir(), file.name = \"example_master_selection_table\")"},{"path":"https://marce10.github.io/baRulho/articles/align_test_sounds.html","id":"align-re-recorded-sounds","dir":"Articles","previous_headings":"","what":"Align re-recorded sounds","title":"Synthesize and align test sounds","text":"went field (lab) re-recorded master sound files different distances, ready start data analysis. first step getting data ready analysis involves finding sounds within re-recorded sound files. need align start marker master playback re-recorded sound files, based fact time difference marker sounds cases:   use acoustic data included package example data. data subset sound transmission experiment. complete data set experiment hosted repository. two example objects used:   files contained data set:   names self-explanatory: master sound file (“master.wav”) annotations, reference sound file (“reference_1m.wav”) two test files (“test_10m.wav” “test_20m.wav”) re-recorded 10 20 m respectively. Now save files temporary working directory (objects extended selection tables R environment) resemble usual case acoustic data found sound files.   annotations needed aligning test sound must share following structure:   Note ‘sound.id’ column contains unique identifier sound. used label counterparts test sound files. Users can import annotations Raven using Rraven package (see vignette). find location start marker test sound files use functions find_markers() run cross-correlation one markers across test files order determine exact time marker found:   position markers determined highest spectrogram cross-correlation value marker using functions find_markers(). two markers used function computes additional column, ‘time.mismatch’, compares time difference two markers test files master sound file. perfect detection value must 0. number can used measure error. cases precision can improve increasing time resolution spectrogram, , lowering size time window. done argument ‘hop.size’. default 11.6 ms (equivalent 512 samples window length 44.1 kHz file). Let’s try 4 ms:   time location acoustic markers can infer position sounds new recordings. selection table re-recorded files can generated using function align_test_files():   function returns object class input object ‘X’. case ‘X’ data.frame: can check precision alignment looking spectrograms. function plot_aligned_sounds() can create spectrograms visually inspect alignment precision test sound files. spectrograms saved individual JPEG image files (‘dest.path’ supplied). One file created sound file: two files generated code :  ","code":"data(\"master_est\") data(\"test_sounds_est\") unique(master_est$sound.files) ## [1] \"master.wav\" unique(test_sounds_est$sound.files) ## [1] \"10m_closed.wav\" \"10m_open.wav\" \"1m_open.wav\" \"30m_closed.wav\" ## [5] \"30m_open.wav\" # first remove any other wave file in the temporary working directory (dont do it with your data!) unlink(list.files( path = tempdir(), full.names = TRUE, pattern = \".wav\" )) # save master sound file writeWave(object = attr(master_est, \"wave.objects\")[[1]], file.path(tempdir(), \"master.wav\")) # save test sound files for (i in unique(test_sounds_est$sound.files)) { writeWave(object = attr(test_sounds_est, \"wave.objects\")[[i]], file.path(tempdir(), i)) } # make annotations a data frame master_annotations <- as.data.frame(master_est) master_annotations markers_position <- baRulho::find_markers(X = master_annotations, path = tempdir()) ## running cross-correlation (step 1 out of 2): ## running peak detection (step 2 out of 2): markers_position # lower window length markers_position <- baRulho::find_markers(X = master_annotations, hop.size = 4, path = tempdir()) ## running cross-correlation (step 1 out of 2): ## running peak detection (step 2 out of 2): markers_position aligned_tests <- baRulho::align_test_files( X = master_annotations, Y = markers_position, by.song = TRUE, remove.markers = FALSE, path = tempdir() ) is.data.frame(aligned_tests) ## [1] TRUE aligned_tests aligned_imgs <- baRulho::plot_aligned_sounds( X = aligned_tests, path = tempdir(), dest.path = tempdir(), duration = 2.4, ovlp = 0 ) ## The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpxfkYip' aligned_imgs ## [1] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpxfkYip/plot_align_10m_closed.jpeg\" ## [2] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpxfkYip/plot_align_10m_open.jpeg\" ## [3] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpxfkYip/plot_align_1m_open.jpeg\" ## [4] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpxfkYip/plot_align_30m_closed.jpeg\" ## [5] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpxfkYip/plot_align_30m_open.jpeg\""},{"path":"https://marce10.github.io/baRulho/articles/align_test_sounds.html","id":"manually-fixing-alignment","dir":"Articles","previous_headings":"Align re-recorded sounds","what":"Manually fixing alignment","title":"Synthesize and align test sounds","text":"cases alignments might accurate, particularly markers considerably degraded test sound files. function manual_realign() allows users interactively adjust alignment test sound files produced align_test_files(). function generates multipanel graph spectrogram master sound file top test sound files, highlighting position correspondent test sounds order simplify assessing adjusting alignment: Spectrograms include first seconds sound files (controlled ‘duration’) usually enough tell precision alignment. lower spectrogram shows series ‘buttons’ users can click control test sound file spectrogram (low panel) needs moved left (“<”) right (“>”). Users can also reset spectrogram original position (‘reset’), move next sound file ‘X’ (test sound file annotations) stop process (stop button). function returns object similar input object ‘X’ start end sounds adjusted. default uses start marker reference can modified argument ‘marker’.","code":"baRulho::manual_realign( X = aligned_tests, Y = master_annotations, duration = 2.4, path = tempdir() )"},{"path":"https://marce10.github.io/baRulho/articles/align_test_sounds.html","id":"further-aligning","dir":"Articles","previous_headings":"Align re-recorded sounds","what":"Further aligning","title":"Synthesize and align test sounds","text":"alignments done manually (broadcasting devices add short delays case bluetooth transmitters) small misalignment inferred versus actual start time re-recorded sounds. problematic quantifying degradation baRulho (sound analysis software) precise alignment sound crucial accuracy downstream measures sound degradation. Misalignment can fixed function auto_realign(). function uses spectrogram cross-correlation sync position time sounds regard reference sound. manual_realign() takes sound recorded closest distance source reference sound. function calls warbleR’s cross_correlation() (just ) internally align sounds using cross-correlation. can simulate aligned data set test sound slightly position: Now can re-aligned test sounds: sounds look aligned:   case doesn’t work expected another option. function seltailor() warbleR allows user manually adjust start end sounds extended selection table. Alternatively, users can manually determined position markers using Raven import annotations ‘R’ using function ‘imp_raven()’ Rraven package.   Please report bugs . package baRulho cited follows: Araya-Salas, M. (2020), baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.0.","code":"data(\"test_sounds_est\") data(\"master_est\") # create \"unaligned_test_sounds_est\" by # adding error to \"test_sounds_est\" start and end unaligned_test_sounds_est <- test_sounds_est set.seed(123) noise_time <- sample(c(0.009, -0.01, 0.03, -0.03, 0, 0.07, -0.007), nrow(unaligned_test_sounds_est), replace = TRUE) attr(unaligned_test_sounds_est, \"check.res\")$start <- unaligned_test_sounds_est$start <- unaligned_test_sounds_est$start + noise_time attr(unaligned_test_sounds_est, \"check.res\")$end <- unaligned_test_sounds_est$end <- unaligned_test_sounds_est$end + noise_time #re align rts <- auto_realign(X = unaligned_test_sounds_est, Y = master_est) ## running cross-correlation (step 1 of 2): ## finding peaks and aligning (step 2 out of 2)"},{"path":"https://marce10.github.io/baRulho/articles/align_test_sounds.html","id":"references","dir":"Articles","previous_headings":"","what":"References","title":"Synthesize and align test sounds","text":"Araya-Salas, M. (2017). Rraven: connecting R Raven bioacoustic software. R package version 1.0.0. Araya-Salas, M. (2020), baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.0 Araya-Salas M, Smith-Vidaurre G. (2017) warbleR: R package streamline analysis animal acoustic signals. Methods Ecol Evol 8:184–191. Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206. Marten, K., & Marler, P. (1977). Sound transmission significance animal vocalization. Behavioral Ecology Sociobiology, 2(3), 271-290. Morton, E. S. (1975). Ecological sources selection avian sounds. American Naturalist, 109(965), 17-34. Tobias, J. ., Aben, J., Brumfield, R. T., Derryberry, E. P., Halfwerk, W., Slabbekoorn, H., & Seddon, N. (2010). Song divergence sensory drive Amazonian birds. Evolution, 64(10), 2820-2839. Session information","code":"## R version 4.3.3 (2024-02-29) ## Platform: x86_64-apple-darwin20 (64-bit) ## Running under: macOS Monterey 12.7.3 ## ## Matrix products: default ## BLAS: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRblas.0.dylib ## LAPACK: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRlapack.dylib; LAPACK version 3.11.0 ## ## locale: ## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 ## ## time zone: UTC ## tzcode source: internal ## ## attached base packages: ## [1] stats graphics grDevices utils datasets methods base ## ## other attached packages: ## [1] Rraven_1.0.13 baRulho_2.1.0 ohun_1.0.1 warbleR_1.1.30 ## [5] NatureSounds_1.0.4 seewave_2.2.3 tuneR_1.4.6 viridis_0.6.5 ## [9] viridisLite_0.4.2 knitr_1.45 ## ## loaded via a namespace (and not attached): ## [1] gtable_0.3.4 rjson_0.2.21 xfun_0.42 bslib_0.6.1 ## [5] ggplot2_3.5.0 vctrs_0.6.5 tools_4.3.3 bitops_1.0-7 ## [9] parallel_4.3.3 tibble_3.2.1 proxy_0.4-27 fansi_1.0.6 ## [13] highr_0.10 pkgconfig_2.0.3 KernSmooth_2.23-22 checkmate_2.3.1 ## [17] desc_1.4.3 lifecycle_1.0.4 compiler_4.3.3 stringr_1.5.1 ## [21] textshaping_0.3.7 brio_1.1.4 munsell_0.5.0 class_7.3-22 ## [25] htmltools_0.5.7 sass_0.4.8 RCurl_1.98-1.14 yaml_2.3.8 ## [29] pillar_1.9.0 pkgdown_2.0.7 jquerylib_0.1.4 MASS_7.3-60.0.1 ## [33] classInt_0.4-10 cachem_1.0.8 Deriv_4.1.3 digest_0.6.34 ## [37] stringi_1.8.3 sf_1.0-15 purrr_1.0.2 fastmap_1.1.1 ## [41] grid_4.3.3 colorspace_2.1-0 cli_3.6.2 magrittr_2.0.3 ## [45] utf8_1.2.4 e1071_1.7-14 scales_1.3.0 backports_1.4.1 ## [49] rmarkdown_2.25 Sim.DiffProc_4.8 signal_1.8-0 igraph_2.0.2 ## [53] gridExtra_2.3 png_0.1-8 ragg_1.2.7 kableExtra_1.4.0 ## [57] memoise_2.0.1 pbapply_1.7-2 evaluate_0.23 dtw_1.23-1 ## [61] fftw_1.0-8 testthat_3.2.1 rlang_1.1.3 Rcpp_1.0.12 ## [65] glue_1.7.0 DBI_1.2.2 xml2_1.3.6 svglite_2.1.3 ## [69] rstudioapi_0.15.0 jsonlite_1.8.8 R6_2.5.1 units_0.8-5 ## [73] systemfonts_1.0.5 fs_1.6.3"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"required-data-structure","dir":"Articles","previous_headings":"","what":"Required data structure","title":"Quantify degradation","text":"input data contain additional information. baRulho comes example annotation data set can used understand required data structure:   Transmission experiments tend follow common experimental design model sounds re-recorded increasing distance within transect. structure data must indicate transect distance within transect sound. Hence, besides basic acoustic annotation information (e.g. sound file, time, frequency) table also includes following columns: sound.files: character factor column name sound files including file extension (e.g. “rec_1.wav”) selec: numeric, character factor column unique identifier (least within sound file) annotation (e.g. 1, 2, 3 “”, “b”, “c”) start: numeric column start position time annotated sound (seconds) end: numeric column end position time annotated sound (seconds) ‘bottom.freq’: numeric column bottom frequency frequency range annotation (kHz, used bandpass filtering) top.freq: numeric column top frequency frequency range annotation (kHz, used bandpass filtering) channel: numeric column number channel annotation found multi-channel sound file (optional, default 1 supplied) sound.id: numeric, character factor column ID sounds used identify sounds different distances transects. transect: numeric, character factor column transect ID. distance: numeric column distance (m) source sound recorded. package assumes distance replicated within transect. Importantly, sound ID can one sample distance/transect combination. combined information columns used identify reference sounds test sound. function set_reference_sounds() exactly . two possible experimental designs defining reference sounds (controlled argument ‘method’ set_reference_sounds()): 1: compare sounds (‘sound.id’) counterpart recorded closest distance source (e.g. compare sound recorded 5m, 10m 15m counterpart recorded 1m). default method. design users can single example shortest distance used reference (instance 1m case studies) function try use references transect. However, another test sound ‘sound.id’ shorter distance transects, used reference instead. behavior aims account fact type experiments reference sounds typically recorded 1 m single transect. 2: compare sounds counterpart recorded distance immediately within transect (e.g. sound recorded 10m compared sound recorded 5m, sound recorded 15m compared sound recorded 10m ). Also note selections labeled “ambient” ‘sound.id’. selections refer ambient (background) noise. Ambient noise can used functions correct amplitude differences due non-target sounds. example data 4 recordings increasing distances: 1m, 5m, 10m 15m: data contains selections 5 sounds well 1 ambient noise selections distance/recording:   baRulho can take sound file annotations represented following R objects: Data frames Selection tables Extended selection tables last 2 annotation specific R classes included warbleR. Take look annotation format vignette warbleR details formats.","code":"# load packages library(baRulho) library(viridis) library(ggplot2) # load example data data(\"test_sounds_est\") test_sounds_est # count selection per recordings unique(test_sounds_est$sound.files) ## [1] \"10m_closed.wav\" \"10m_open.wav\" \"1m_open.wav\" \"30m_closed.wav\" ## [5] \"30m_open.wav\" table(test_sounds_est$sound.id, test_sounds_est$distance)"},{"path":[]},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"data-format","dir":"Articles","previous_headings":"Measuring degradation","what":"Data format","title":"Quantify degradation","text":"functions set_reference_sounds() can used determined, row input data, sounds used references. function can using two methods described :   function adds column ‘reference’ used downstream functions plotting measuring degradation. References indicated combination ‘sound.files’ ‘selec’ column. instance, ‘10m.wav-1’ indicates row ‘selec’ column ‘1’ sound file ‘10m.wav’ used reference. function also checks information ‘X’ (input annotation data) right format wont produce errors downstream analysis (see ‘X’ argument description details format). function ignore rows ‘sound.id’ ‘ambient’, ‘start_marker’ ‘end_marker’.","code":"# add reference column test_sounds_est <- set_reference_sounds(test_sounds_est, method = 1) # print test_sounds_est"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"visual-inspection","dir":"Articles","previous_headings":"Measuring degradation","what":"Visual inspection","title":"Quantify degradation","text":"function plot_degradation() aims simplify visual inspection sound degradation producing multipanel figures (saved JPEG files ‘dest.path’) containing visualizations test sound reference. Sounds sorted distance (columns) transect. Visualizations include spectrograms, amplitude envelopes power spectra (last 2 optional): paths image files:   row includes copies sound id given transect (row label includes sound id first line transect second line), also including reference comes another transect. Ambient noise annotations (sound.id ‘ambient’) excluded.","code":"# sort to order panels test_sounds_est <- test_sounds_est[order(test_sounds_est$sound.id, test_sounds_est$transect, decreasing = FALSE),] # create plots degrad_imgs <- plot_degradation(test_sounds_est, dest.path = tempdir()) degrad_imgs ## [1] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpTcRh7t/plot_degradation_p1.jpeg\" ## [2] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpTcRh7t/plot_degradation_p2.jpeg\""},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"blur-ratio","dir":"Articles","previous_headings":"Measuring degradation","what":"Blur ratio","title":"Quantify degradation","text":"Blur ratio quantifies degradation sound function distortion amplitude envelope (time domain) excluding changes due energy attenuation. measure first described Dabelsteen et al. (1993). Blur ratio measured mismatch amplitude envelopes (expressed probability density functions) reference sound re-recorded sound. Low values indicate low degradation sounds. function blur_ratio() measures blur ratio sounds reference playback re-recorded different distances. function compares sound corresponding reference sound within supplied frequency range (e.g. bandpass) reference sound (‘bottom.freq’ ‘top.freq’ columns ‘X’). ‘sound.id’ column must used tell function compare sounds belonging category (e.g. song-types). sound files (wave objects extended selection table) must sampling rate length envelopes comparable. Blur ratio can calculated follows:   output data frame simply input data additional column (‘blur.ratio’) blur ratio values. Note NAs returned sounds used reference ‘ambient’ noise selections. function plot_blur_ratio() can used generate image files (‘jpeg’ format) comparison showing spectrograms sounds overlaid amplitude envelopes (probability mass functions (PMF)). paths image files: Output image files (working directory) look like ones:   image shows spectrogram reference re-recorded sound, well envelopes sounds overlaid single graph. Colors indicate sound spectrograms envelopes belong . blur ratio value also displayed. function can also return amplitude spectrum contours argument envelopes = TRUE. contours can directly input ggplot visualize amplitude envelopes, vary distance across sound types (ambient noise included): env.smooth argument change envelope shapes related measurements, higher values tend smooth envelopes. following code sets env.smooth = 800 produces smoother envelopes:  ","code":"# run blur ratio br <- blur_ratio(X = test_sounds_est) ## Computing amplitude envelopes (step 1 out of 2): ## Computing blur ratio (step 2 out of 2): # see output br # plot blur ratio blur_imgs <- plot_blur_ratio(X = test_sounds_est, dest.path = tempdir()) ## Computing amplitude envelopes (step 1 out of 2): ## Producing images (step 2 out of 2): head(blur_imgs) ## [1] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpTcRh7t/blur_ratio_freq:1-1m_open.wav-4-10m_closed.wav-4.jpeg\" ## [2] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpTcRh7t/blur_ratio_freq:1-1m_open.wav-4-30m_closed.wav-4.jpeg\" ## [3] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpTcRh7t/blur_ratio_freq:1-1m_open.wav-4-10m_open.wav-4.jpeg\" ## [4] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpTcRh7t/blur_ratio_freq:1-1m_open.wav-4-30m_open.wav-4.jpeg\" ## [5] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpTcRh7t/blur_ratio_freq:4-1m_open.wav-3-10m_closed.wav-3.jpeg\" ## [6] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//RtmpTcRh7t/blur_ratio_freq:4-1m_open.wav-3-30m_closed.wav-3.jpeg\" # get envelopes br <- blur_ratio(X = test_sounds_est, envelopes = TRUE) ## Computing amplitude envelopes (step 1 out of 3): ## Computing blur ratio (step 2 out of 3): ## Saving envelopes (step 3 out of 3): envs <- attributes(br)$envelopes # make distance a factor for plotting envs$distance <- as.factor(envs$distance) # plot ggplot(envs, aes(x = time, y = amp, col = distance)) + geom_line() + facet_wrap( ~ sound.id) + scale_color_viridis_d(alpha = 0.7) + labs(x = \"Time (s)\", y = \"Amplitude (PMF)\") + theme_classic() # get envelopes br <- blur_ratio(X = test_sounds_est, envelopes = TRUE, env.smooth = 800) ## Computing amplitude envelopes (step 1 out of 3): ## Computing blur ratio (step 2 out of 3): ## Saving envelopes (step 3 out of 3): envs <- attributes(br)$envelopes envs$distance <- as.factor(envs$distance) ggplot(envs, aes(x = time, y = amp, col = distance)) + geom_line() + facet_wrap( ~ sound.id) + scale_color_viridis_d(alpha = 0.7) + labs(x = \"Time (s)\", y = \"Amplitude (PMF)\") + theme_classic()"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"spectrum-blur-ratio","dir":"Articles","previous_headings":"Measuring degradation","what":"Spectrum blur ratio","title":"Quantify degradation","text":"Spectrum blur ratio (measured spectrum_blur_ratio()) quantifies degradation sound function change sound energy across frequency domain, analogous blur ratio described time domain (implemented blur_ratio()). Low values also indicate low degradation sounds. Spectrum blur ratio measured mismatch power spectra (expressed probability density functions) reference sound re-recorded sound. works way blur_ratio(), comparing sound corresponding reference sound, output images alike well. Spectrum blur ratio can calculated follows:   blur_ratio(), spectrum_blur_ratio() can also return amplitude spectrum contours argument spectra = TRUE:  ","code":"# run Spectrum blur ratio sbr <- spectrum_blur_ratio(test_sounds_est) ## Computing power spectra (step 1 out of 2): ## Computing spectrum blur ratio (step 2 out of 2): # see output sbr sbr <- spectrum_blur_ratio(X = test_sounds_est, spectra = TRUE) ## Computing power spectra (step 1 out of 3): ## Computing spectrum blur ratio (step 2 out of 3): ## Saving spectra (step 3 out of 3): spctr <- attributes(sbr)$spectra spctr$distance <- as.factor(spctr$distance) ggplot(spctr[spctr$freq > 0.3,], aes(y = amp, x = freq, col = distance)) + geom_line() + facet_wrap( ~ sound.id) + scale_color_viridis_d(alpha = 0.7) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (PMF)\") + coord_flip() + theme_classic()"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"excess-attenuation","dir":"Articles","previous_headings":"Measuring degradation","what":"Excess attenuation","title":"Quantify degradation","text":"every doubling distance, sounds attenuate 6 dB loss amplitude (Morton, 1975; Marten & Marler, 1977). additional loss amplitude results excess attenuation, energy loss excess expected occur distance via spherical spreading, due atmospheric conditions habitat (Wiley & Richards, 1978). degradation metric can measured using excess_attenuation() function. Low values indicate little sound attenuation. function compare sound corresponding reference sound within frequency range (e.g. bandpass) reference sound (‘bottom.freq’ ‘top.freq’ columns ‘X’). excess_attenuation() can measured like : output, similar functions, extended selection table input data, also including two new columns (‘reference’ ‘excess.attenuation’) reference sound excess attenuation:  ","code":"# run envelope correlation ea <- excess_attenuation(test_sounds_est) ## Computing amplitude envelopes (step 1 out of 2): ## Computing excess attenuation (step 2 out of 2): # print output ea"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"envelope-correlation","dir":"Articles","previous_headings":"Measuring degradation","what":"Envelope correlation","title":"Quantify degradation","text":"Amplitude envelope correlation measures similarity two sounds time domain. envelope_correlation() function measures envelope correlation coefficients reference playback re-recorded sounds. Values close 1 means similar amplitude envelopes (.e. little degradation occurred). envelopes different lengths (sounds different lengths) cross-correlation applied maximum correlation coefficient returned. Cross-correlation achieved sliding shortest sound along largest one calculating correlation step. functions detailed , ‘sound.id’ column must used instruct function compare sounds belong category. envelope_correlation() can run follows: output also similar functions; extended selection table similar input data, also includes two new columns (‘reference’ ‘envelope.correlation’) reference sound amplitude envelope correlation coefficients:   Note function doesn’t provide graphical output. However, graphs generated blur_ratio() can used inspect envelope shapes alignment sounds.","code":"# run envelope correlation ec <- envelope_correlation(test_sounds_est) ## Computing amplitude envelopes (step 1 out of 2): ## Computing envelope correlations (step 2 out of 2): # print output ec"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"spectrum-correlation","dir":"Articles","previous_headings":"Measuring degradation","what":"Spectrum correlation","title":"Quantify degradation","text":"Spectrum correlation measures similarity two sounds frequency domain. similar envelope_correlation(), frequency domain. sounds compared within frequency range reference sound (spectra length). , values near 1 indicate identical frequency spectrum (.e. degradation). output also similar envelope_correlation():   envelope_correlation(), spectrum_correlation() doesn’t provide graphical output. However, graphs generated spectrum_blur_ratio() can also used inspect spectrum shapes sound alignment.","code":"# run spectrum correlation sc <- spectrum_correlation(test_sounds_est) ## Computing power spectra (step 1 out of 2): ## Computing spectrum correlations (step 2 out of 2): # print output sc"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"signal-to-noise-ratio","dir":"Articles","previous_headings":"Measuring degradation","what":"Signal-to-noise ratio","title":"Quantify degradation","text":"Signal--noise ratio (SNR) quantifies sound amplitude level relation ambient noise metric overall sound attenuation. Therefore, attenuation refers loss energy described Dabelsteen et al (1993). method implemented function signal_to_noise_ratio(), uses envelopes quantify sound power signals background noise. function requires measurement ambient noise, either noise right sound (noise.ref = \"adjacent\") one ambient noise measurements per recording (noise.ref = \"custom\"). latter, selections sound parameters ambient noise measured must specified. Alternatively, one selections ambient noise can used reference (see ‘noise.ref’ argument). can potentially provide accurate representation ambient noise. margins overlap another acoustic signal nearby, SNR inaccurate, margin length carefully considered. SNR less equal one suggests background noise equal overpowering acoustic signal. SNR can measured follows: output also similar functions:   Negative values can occur background noise measured higher power signal. Note function compare sounds references, reference column added.","code":"# run signal to noise ratio snr <- signal_to_noise_ratio(test_sounds_est, pb = FALSE, noise.ref = \"custom\", mar = 0.1) # print output snr"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"tail-to-signal-ratio","dir":"Articles","previous_headings":"Measuring degradation","what":"Tail-to-signal ratio","title":"Quantify degradation","text":"Tail--signal ratio (TSR) used quantify reverberations. Specifically TSR measures ratio energy reverberation tail (time segment right sound) energy sound. general margin reverberation tail measured must specified. function measure TSR within supplied frequency range (e.g. bandpass) reference sound (‘bottom.freq’ ‘top.freq’ columns ‘X’). Two methods calculating reverberations provided (see ‘type’ argument). Type 1 based original description TSR Dabelsteen et al. (1993) type 2 better referred “tail--noise ratio”, given compares amplitude tails ambient noise. types higher values represent reverberations. TSR can measured follows: , output similar functions: Tail--signal ratio values typically negative signals tend higher power reverberating tail.  ","code":"# run tail to signal ratio tsr <- tail_to_signal_ratio(test_sounds_est, tsr.formula = 1, mar = 0.05) # print output tsr"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"spectrogram-correlation","dir":"Articles","previous_headings":"Measuring degradation","what":"Spectrogram correlation","title":"Quantify degradation","text":"Finally, function spcc() measures spectrogram cross-correlation metric sound distortion sounds. Values close 1 means similar spectrograms (.e. little sound distortion). function wrapper warbleR’s cross_correlation(). can run follows: , output similar functions:  ","code":"# run spcc sc <- spcc(X = test_sounds_est, wl = 512) # print output sc"},{"path":[]},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"noise-profiles","dir":"Articles","previous_headings":"Other measurements","what":"Noise profiles","title":"Quantify degradation","text":"function noise_profile() allows estimate frequency spectrum ambient noise. can done extended selection tables (using segments containing sound) entire sound files working directory (path supplied). function uses seewave function meanspec() internally calculate frequency spectra. following code measures ambient noise profile recordings distance >= 5m example extended selection table: output data frame amplitude values frequency bins wave object extended selection table: can graphically represented follows: output data actually average several frequency spectra sound file. can obtain original spectra setting argument averaged = FALSE: Note can limit frequency range using bandpass filter (‘bp’ argument). addition, argument ‘hop.size’, control size time windows, affects precision frequency domain. can get better precision increasing ‘hop.size’ (‘wl’): function can estimate noise profiles entire sound files, supplying list files (argument ‘files’, supplying ‘X’) simply running without supplying ‘X’ ‘files’. case run sound files working directory (‘path’ supplied). Please report bugs . package baRulho cited follows: Araya-Salas, M. (2020), baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.0.","code":"# run noise profile np <- noise_profile(X = test_sounds_est[test_sounds_est$distance > 5,], mar = 0.05) # print output head(np, 20) ggplot(np, aes(y = amp, x = freq, col = sound.files)) + geom_line(linewidth = 1.4) + scale_color_viridis_d(begin = 0.2, end = 0.8, alpha = 0.5) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (dBA)\") + coord_flip() + theme_classic() np <- noise_profile(X = test_sounds_est[test_sounds_est$distance > 5, ], mar = 0.1, averaged = FALSE) # make a column containing sound file and selection np$sf.sl <- paste(np$sound.files, np$selec) ggplot(np, aes( y = amp, x = freq, col = sound.files, group = sf.sl )) + geom_line(linewidth = 1.4) + scale_color_viridis_d(begin = 0.2, end = 0.8, alpha = 0.5) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (dBA)\") + coord_flip() + theme_classic() np <- noise_profile( X = test_sounds_est[test_sounds_est$distance > 5,], mar = 0.05, bp = c(0, 10), averaged = FALSE, hop.size = 3 ) # make a column containing sound file and selection np$sf.sl <- paste(np$sound.files, np$selec) ggplot(np, aes( y = amp, x = freq, col = sound.files, group = sf.sl )) + geom_line(linewidth = 1.4) + scale_color_viridis_d(begin = 0.2, end = 0.8, alpha = 0.5) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (dBA)\") + coord_flip() + theme_classic()"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"references","dir":"Articles","previous_headings":"","what":"References","title":"Quantify degradation","text":"Araya-Salas, M. (2017). Rraven: connecting R Raven bioacoustic software. R package version 1.0.0. Araya-Salas, M. (2020), baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.0 Araya-Salas M, Smith-Vidaurre G. (2017) warbleR: R package streamline analysis animal acoustic signals. Methods Ecol Evol 8:184–191. Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206. Marten, K., & Marler, P. (1977). Sound transmission significance animal vocalization. Behavioral Ecology Sociobiology, 2(3), 271-290. Morton, E. S. (1975). Ecological sources selection avian sounds. American Naturalist, 109(965), 17-34. Tobias, J. ., Aben, J., Brumfield, R. T., Derryberry, E. P., Halfwerk, W., Slabbekoorn, H., & Seddon, N. (2010). Song divergence sensory drive Amazonian birds. Evolution, 64(10), 2820-2839. Session information","code":"## R version 4.3.3 (2024-02-29) ## Platform: x86_64-apple-darwin20 (64-bit) ## Running under: macOS Monterey 12.7.3 ## ## Matrix products: default ## BLAS: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRblas.0.dylib ## LAPACK: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRlapack.dylib; LAPACK version 3.11.0 ## ## locale: ## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 ## ## time zone: UTC ## tzcode source: internal ## ## attached base packages: ## [1] stats graphics grDevices utils datasets methods base ## ## other attached packages: ## [1] ggplot2_3.5.0 viridis_0.6.5 viridisLite_0.4.2 baRulho_2.1.0 ## [5] ohun_1.0.1 warbleR_1.1.30 NatureSounds_1.0.4 seewave_2.2.3 ## [9] tuneR_1.4.6 knitr_1.45 ## ## loaded via a namespace (and not attached): ## [1] gtable_0.3.4 rjson_0.2.21 xfun_0.42 bslib_0.6.1 ## [5] vctrs_0.6.5 tools_4.3.3 bitops_1.0-7 parallel_4.3.3 ## [9] tibble_3.2.1 proxy_0.4-27 fansi_1.0.6 highr_0.10 ## [13] pkgconfig_2.0.3 KernSmooth_2.23-22 checkmate_2.3.1 desc_1.4.3 ## [17] lifecycle_1.0.4 farver_2.1.1 compiler_4.3.3 stringr_1.5.1 ## [21] textshaping_0.3.7 brio_1.1.4 munsell_0.5.0 htmltools_0.5.7 ## [25] class_7.3-22 sass_0.4.8 RCurl_1.98-1.14 yaml_2.3.8 ## [29] pkgdown_2.0.7 pillar_1.9.0 jquerylib_0.1.4 MASS_7.3-60.0.1 ## [33] classInt_0.4-10 cachem_1.0.8 Deriv_4.1.3 digest_0.6.34 ## [37] stringi_1.8.3 sf_1.0-15 purrr_1.0.2 labeling_0.4.3 ## [41] fastmap_1.1.1 grid_4.3.3 colorspace_2.1-0 cli_3.6.2 ## [45] magrittr_2.0.3 utf8_1.2.4 e1071_1.7-14 withr_3.0.0 ## [49] scales_1.3.0 backports_1.4.1 rmarkdown_2.25 Sim.DiffProc_4.8 ## [53] signal_1.8-0 igraph_2.0.2 gridExtra_2.3 png_0.1-8 ## [57] ragg_1.2.7 kableExtra_1.4.0 memoise_2.0.1 pbapply_1.7-2 ## [61] evaluate_0.23 dtw_1.23-1 fftw_1.0-8 testthat_3.2.1 ## [65] rlang_1.1.3 Rcpp_1.0.12 glue_1.7.0 DBI_1.2.2 ## [69] xml2_1.3.6 svglite_2.1.3 rstudioapi_0.15.0 jsonlite_1.8.8 ## [73] R6_2.5.1 units_0.8-5 systemfonts_1.0.5 fs_1.6.3"},{"path":"https://marce10.github.io/baRulho/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Marcelo Araya-Salas. Author, maintainer.","code":""},{"path":"https://marce10.github.io/baRulho/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Araya-Salas, M. (2020), baRulho: quantifying habitat-induced degradation (animal) acoustic signals R. R package version 1.0.0","code":"@Misc{, title = {baRulho: quantifying habitat-induced degradation of (animal) acoustic signals in R}, author = {M. Araya-Salas}, year = {2020}, }"},{"path":"https://marce10.github.io/baRulho/index.html","id":"barulho-quantifying-degradation-of-animal-sounds","dir":"","previous_headings":"","what":"Quantifying (Animal) Sound Degradation ","title":"Quantifying (Animal) Sound Degradation ","text":"baRulho intended facilitate implementation (animal) sound transmission experiments, typically aim quantify changes signal structure transmitted given habitat broadcasting re-recording animal sounds increasing distances. experiments aim answer research questions : habitat structure shaped transmission properties animal acoustic signals? acoustic features shaped selection improving transmission? features degraded different habitats? far acoustic signals can detected? common sequence steps experimentally test hypotheses related sound transmission depicted following diagram: Diagram depicting typical workflow experiment working signal transmission degradation. Nodes black font indicate steps can conducted using baRulho functions. Blue nodes denote functions can used steps.   baRulho offers functions critical steps workflow (black, including ‘checks’) required acoustic data manipulation analysis. main features package : use loops apply tasks sounds referenced selection table (sensu warbleR) production image files graphic representations sound time /frequency let users verify acoustic analyses use annotation tables object format input acoustic data annotations output results use parallelization distribute tasks among several cores improve computational efficiency baRulho builds upon functions data formats warbleR seewave packages, experience packages advised. Take look vignettes overview main features packages: Align test sounds Quantify degradation","code":""},{"path":"https://marce10.github.io/baRulho/index.html","id":"installing-barulho","dir":"","previous_headings":"","what":"Installing baRulho","title":"Quantifying (Animal) Sound Degradation ","text":"Install/load package CRAN follows: install latest developmental version github need R package remotes: system requirements due dependency seewave may needed. Take look link instruction install/troubleshoot external dependencies.","code":"# From CRAN would be # install.packages(\"baRulho\") # load package library(baRulho) # From github remotes::install_github(\"maRce10/baRulho\") # load package library(baRulho)"},{"path":"https://marce10.github.io/baRulho/index.html","id":"other-packages","dir":"","previous_headings":"","what":"Other packages","title":"Quantifying (Animal) Sound Degradation ","text":"packages seewave tuneR provide huge variety functions acoustic analysis manipulation. mostly work wave objects already imported R environment. package warbleR provides functions visualize measure sounds already referenced annotation tables, similar baRulho. package Rraven facilitates exchange data R Raven sound analysis software (Cornell Lab Ornithology) can helpful incorporating Raven annotating tool acoustic analysis workflow R. package ohun works automated detection sound events, providing functions diagnose optimize detection routines.","code":""},{"path":"https://marce10.github.io/baRulho/index.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Quantifying (Animal) Sound Degradation ","text":"Please cite baRulho follows: Araya-Salas, M. (2020), baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.0.","code":""},{"path":"https://marce10.github.io/baRulho/index.html","id":"references","dir":"","previous_headings":"","what":"References","title":"Quantifying (Animal) Sound Degradation ","text":"Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206. Marten, K., & Marler, P. (1977). Sound transmission significance animal vocalization. Behavioral Ecology Sociobiology, 2(3), 271-290. Morton, E. S. (1975). Ecological sources selection avian sounds. American Naturalist, 109(965), 17-34.","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":null,"dir":"Reference","previous_headings":"","what":"Add synthetic noise — add_noise","title":"Add synthetic noise — add_noise","text":"add_noise adds synthetic noise annotations extended selection tables","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add synthetic noise — add_noise","text":"","code":"add_noise( X, mar = NULL, target.snr = 2, precision = 0.1, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), max.iterations = 1000, ... )"},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add synthetic noise — add_noise","text":"X Object class 'extended_selection_table' (created function selection_table warbleR package), generated 'element', reference test sounds (typically output align_test_files). Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass 7) \"sound.id\": ID sounds (needed calculate signal noise ratio internally using signal_to_noise_ratio). mar numeric vector length 1. Specifies margins adjacent start point annotation measure ambient noise. target.snr numeric vector length 1. Specifies desired signal--noise ratio. Must lower current signal--noise ratio. Annotations showing signal--noise ratio higher 'target.snr' remain unchanged. Must supplied. precision numeric vector length 1. Specifies precision adjusted signal--noise ratio (dB). cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. max.iterations Numeric vector length 1. Specifies maximum number iterations internal signal--noise adjusting routine run stopping. Note cases default maximum number iterations (1000) reached. ... Additional arguments passed internally signal_to_noise_ratio.","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add synthetic noise — add_noise","text":"Object 'X' wave objects modified match target signal--noise ratio. also includes additional column, 'adjusted.snr', new signal--noise ratio values.","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Add synthetic noise — add_noise","text":"function adds synthetic noise sounds referenced extended selection table (class created function selection_table warbleR package) decrease signal--noise ratio. can useful, instance, evaluating effect background noise signal structure. Note implementation slow.","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Add synthetic noise — add_noise","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Add synthetic noise — add_noise","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add synthetic noise — add_noise","text":"","code":"if (FALSE) { # load example data data(\"test_sounds_est\") # make it a 'by element' extended selection table X <- warbleR::by_element_est(X = test_sounds_est) # add noise to the first five rows X_noise <- add_noise(X = X[1:5, ], mar = 0.2, target.snr = 3) }"},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":null,"dir":"Reference","previous_headings":"","what":"Align test sound files — align_test_files","title":"Align test sound files — align_test_files","text":"align_test_files aligns test (re-recorded) sound files.","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Align test sound files — align_test_files","text":"","code":"align_test_files( X, Y, path = getOption(\"sound.files.path\", \".\"), by.song = TRUE, marker = NULL, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), ... )"},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Align test sound files — align_test_files","text":"X object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package). data used finding position markers find_markers. also contain 'sound.id' column used label re-recorded sounds according counterpart master sound file. Y object class 'data.frame' output find_markers. object contains position markers re-recorded sound files. one marker supplied sound file one highest correlation score ('scores' column 'X') used. path Character string containing directory path test (re-recorded) sound files found. .song Logical argument indicate extended selection table created song (see '.song' selection_table argument). Default TRUE. marker Character string define whether \"start\" \"end\" marker used aligning re-recorded sound files. Default NULL. DEPRECATED. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. ... Additional arguments passed selection_table customizing extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Align test sound files — align_test_files","text":"object class 'X' aligned sounds test (re-recorded) sound files.","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Align test sound files — align_test_files","text":"function aligns sounds found re-recorded sound files (referenced 'Y') according master sound file (referenced 'X'). one marker supplied sound file one highest correlation score ('scores' column 'X') used. function outputs 'extended selection table' default.","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Align test sound files — align_test_files","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Align test sound files — align_test_files","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Align test sound files — align_test_files","text":"","code":"{ # load example data data(\"master_est\") # save example files in working director to recreate a case in which working # with sound files instead of extended selection tables. # This doesn't have to be done with your own data as you will # have them as sound files already. for (i in unique(test_sounds_est$sound.files)[1:2]) { writeWave(object = attr(test_sounds_est, \"wave.objects\")[[i]], file.path(tempdir(), i)) } # save master file writeWave(object = attr(master_est, \"wave.objects\")[[1]], file.path(tempdir(), \"master.wav\")) # get marker position for the first test file markers <- find_markers(X = master_est, test.files = unique(test_sounds_est$sound.files)[1], path = tempdir()) # align all test sounds alg.tests <- align_test_files(X = master_est, Y = markers, path = tempdir()) } #> running cross-correlation (step 1 out of 2): #> running peak detection (step 2 out of 2): #> Aligning test sound files (step 1 out of 2): #> Creating extended selection table (step 2 out of 2): #> checking selections (step 1 of 2): #> saving wave objects into extended selection table (step 2 of 2):"},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate attenuation of sound pressure level — attenuation","title":"Estimate attenuation of sound pressure level — attenuation","text":"attenuation estimates atmospheric attenuation atmospheric absorption.","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate attenuation of sound pressure level — attenuation","text":"","code":"attenuation( frequency, dist0, dist, temp = 20, rh = 60, pa = 101325, hab.att.coef = 0.02 )"},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate attenuation of sound pressure level — attenuation","text":"frequency Numeric vector length 1 frequency (Hertz). dist0 Numeric vector length 1 distance (m) reference SPL. dist Numeric vector length 1 distance (m) sound propagates. temp Numeric vector length 1 frequency (Celsius). Default 20. rh Numeric vector length 1 relative humidity (percentage). Default 60. pa Numeric vector length 1 atmospheric (barometric) pressure Pa (standard: 101325, default). Used atmospheric attenuation. hab.att.coef Attenuation coefficient habitat (dB/kHz/m).","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate attenuation of sound pressure level — attenuation","text":"Returns geometric, atmospheric habitat attenuation (dB) well combined attenuation.","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Estimate attenuation of sound pressure level — attenuation","text":"Calculate geometric, atmospheric habitat attenuation overall expected attenuation (sum three) based temperature, relative humidity, atmospheric pressure sound frequency. Attenuation values given dB. function modified http://www.sengpielaudio.com","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Estimate attenuation of sound pressure level — attenuation","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Estimate attenuation of sound pressure level — attenuation","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Estimate attenuation of sound pressure level — attenuation","text":"","code":"{ # measure attenuation attenuation(frequency = 2000, dist = 50, dist0 = 1) } #> frequency dist geometric.attenuation atmopheric.attenuation #> 1 2000 50 33.9794 0.4547757 #> habitat.attenuation combined.attenuation #> 1 1.96 36.39418"},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":null,"dir":"Reference","previous_headings":"","what":"Fix small misalignments in the time position test sounds — auto_realign","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"auto_realign fixes small misalignments time position test sounds extended selection table using spectrographic cross-correlation","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"","code":"auto_realign( X, Y, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 90), wn = c(\"hanning\", \"hamming\", \"bartlett\", \"blackman\", \"flattop\", \"rectangle\") )"},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"X object class 'extended_selection_table' created function selection_table warbleR package. object must include following additional columns: 'sound.id', 'bottom.freq' 'top.freq'. Y object class 'extended_selection_table' (class created function selection_table warbleR package) master sound file annotations. data used finding position markers find_markers. also contain 'sound.id' column. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 90. High values slow function produce accurate results. wn character vector length 1 specifying window name ftwindow.","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"Object 'X' time parameters (columns 'start' 'end') tailored closely match start end reference sound.","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"Precise alignment crucial downstream measures sound degradation. function uses spectrographic cross-correlation align position time test sounds. master sound file used reference. function calls warbleR's cross_correlation internally align sounds using cross-correlation. output extended selection table contains new start end values alignment. Note function works improve alignments estimated position test sound already close actual position. Note 'X' 'Y' must extended selection tables sensu selection_table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Clark, C.W., Marler, P. & Beeman K. (1987). Quantitative analysis animal vocal phonology: application Swamp Sparrow song. Ethology. 76:101-115.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"","code":"{ # load example data data(\"test_sounds_est\") data(\"master_est\") # create \"unaligned_test_sounds_est\" by # adding error to \"test_sounds_est\" start and end unaligned_test_sounds_est <- test_sounds_est set.seed(123) noise_time <- sample(c(0.009, -0.01, 0.03, -0.03, 0, 0.07, -0.007), nrow(unaligned_test_sounds_est), replace = TRUE) attr(unaligned_test_sounds_est, \"check.res\")$start <- unaligned_test_sounds_est$start <- unaligned_test_sounds_est$start + noise_time attr(unaligned_test_sounds_est, \"check.res\")$end <- unaligned_test_sounds_est$end <- unaligned_test_sounds_est$end + noise_time # re align realigned_est <- auto_realign(X = unaligned_test_sounds_est, Y = master_est) } #> running cross-correlation (step 1 of 2): #> finding peaks and aligning (step 2 out of 2)"},{"path":"https://marce10.github.io/baRulho/reference/baRulho-package.html","id":null,"dir":"Reference","previous_headings":"","what":"baRulho: quantifying acoustic signal degradation — baRulho-package","title":"baRulho: quantifying acoustic signal degradation — baRulho-package","text":"`baRulho` package intended quantify habitat-induced degradation (animal) acoustic signals.","code":""},{"path":"https://marce10.github.io/baRulho/reference/baRulho-package.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"baRulho: quantifying acoustic signal degradation — baRulho-package","text":"main features package : Loops apply tasks sounds referenced extended selection table comparison playback sounds re-recorded different distances functions allow parallelization tasks, distributes tasks among several processors improve computational efficiency. License: GPL (>= 2)","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/baRulho-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"baRulho: quantifying acoustic signal degradation — baRulho-package","text":"Marcelo Araya-Salas Maintainer: Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure blur ratio in the time domain — blur_ratio","title":"Measure blur ratio in the time domain — blur_ratio","text":"blur_ratio measures blur ratio sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure blur ratio in the time domain — blur_ratio","text":"","code":"blur_ratio( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), env.smooth = getOption(\"env.smooth\", 200), envelopes = FALSE, hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), n.samples = 100, path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure blur ratio in the time domain — blur_ratio","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. env.smooth Numeric vector length 1 determining length sliding window (amplitude samples) used sum smooth amplitude envelope calculation (used internally env). Default 200. envelopes Logical control envelopes returned (attributes, 'attributes(X)$envelopes'). Default FALSE. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 70. Used applying bandpass filtering. n.samples Numeric vector length 1 specifying number amplitude samples use representing amplitude envelopes. Default 100. null raw amplitude envelope used (note can result high RAM memory usage large data sets). Amplitude envelope values interpolated using approx. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure blur ratio in the time domain — blur_ratio","text":"Object 'X' additional column, 'blur.ratio', containing computed blur ratio values. envelopes = TRUE output include amplitude envelopes sounds attributes ('attributes(X)$envelopes').","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure blur ratio in the time domain — blur_ratio","text":"Blur ratio measures degradation sound change sound power time domain described Dabelsteen et al (1993). Low values indicate low degradation sounds. function measures blur ratio sounds reference playback re-recorded different distances. Blur ratio measured mismatch amplitude envelopes (expressed probability mass functions) reference sound re-recorded sound. converting envelopes probability mass functions effect energy attenuation removed, focusing analysis modification envelope shape. function compares sound corresponding reference sound within supplied frequency range (e.g. bandpass) reference sound ('bottom.freq' 'top.freq' columns 'X'). 'sound.id' column must used tell function compare sounds belonging category (e.g. song-types). Two methods setting experimental design provided. wave objects extended selection table must sampling rate length envelopes comparable.","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure blur ratio in the time domain — blur_ratio","text":"Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206.Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure blur ratio in the time domain — blur_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure blur ratio in the time domain — blur_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) blur_ratio(X = X) # using method 2 X <- set_reference_sounds(X = test_sounds_est, method = 2) blur_ratio(X = X) # get envelopes br <- blur_ratio(X = X, envelopes = TRUE) envs <- attributes(br)$envelopes # make distance a factor for plotting envs$distance <- as.factor(envs$distance) # plot rlang::check_installed(\"ggplot2\") library(ggplot2) ggplot(envs, aes(x= time, y = amp, col = distance)) + geom_line() + facet_wrap(~ sound.id) + scale_color_viridis_d() + labs(x = \"Time (s)\", y = \"Amplitude (PMF)\") + theme_classic() } #> Computing amplitude envelopes (step 1 out of 2): #> Computing blur ratio (step 2 out of 2): #> Computing amplitude envelopes (step 1 out of 2): #> Computing blur ratio (step 2 out of 2): #> Computing amplitude envelopes (step 1 out of 3): #> Computing blur ratio (step 2 out of 3): #> Saving envelopes (step 3 out of 3):"},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure detection distance of sound — detection_distance","title":"Measure detection distance of sound — detection_distance","text":"detection_distance detection distance sounds.","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure detection distance of sound — detection_distance","text":"","code":"detection_distance( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), path = getOption(\"sound.files.path\", \".\"), spl = NULL, spl.cutoff = NULL, temp = 20, rh = 60, pa = 101325, hab.att.coef = 0.02, max.distance = 1000, resolution = 0.1, subtract.bgn = TRUE, envelope = c(\"abs\", \"hil\"), mar = NULL )"},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure detection distance of sound — detection_distance","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. spl numeric vector length 1 specifying sound pressure level sounds. supplied measured sounds . spl.cutoff numeric vector length 1 specifying sound pressure level cutoff define sound longer detected. Ideally estimated based sound detection threshold species. temp Numeric vector length 1 frequency (Celsius). Default 20. rh Numeric vector length 1 relative humidity (percentage). Default 60. pa Numeric vector length 1 ambient pressure Pa (standard: 101325, default). Used Atmospheric attenuation. hab.att.coef Attenuation coefficient habitat (dB/kHz/m). max.distance Numeric vector length 1 maximum distance (m) detection evaluated. Note function calculates expected sound pressure level values along vector distances find distance expected sound pressure level equates 'spl.cutoff'. Default 1000 m. resolution Numeric vector length 1 distance resolution (m) estimated detection distance. Higher resolutions take longer estimate. Default 0.1 m. subtract.bgn Logical argument control SPL background noise excluded measured signal SPL. Default FALSE. envelope Character string vector method calculate amplitude envelopes (SPL measured, used required 'spl' supplied), env. Must either 'abs' (absolute envelope, default) 'hil' (Hilbert transformation). mar numeric vector length 1. Specifies margins adjacent start end points selection measure background noise. required subtract background noise sound pressure level (needed 'subtract.bgn = TRUE').","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure detection distance of sound — detection_distance","text":"Object 'X' additional column, 'detection.distance', containing computed detection distances (m).","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure detection distance of sound — detection_distance","text":"function computes maximum distance sound detected, calculated distance sound pressure level (SPL) goes specified SPL cutoff ('spl.cutoff')). function uses internally attenuation estimate SPL increasing values reaches defined cutoff. peak frequency (calculated power spectrum reference sound) reference sound sound ID used carrier frequency distance estimation. sound recorded lowest distance used reference. function assumes recordings made recording volume.","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure detection distance of sound — detection_distance","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Clark, C.W., Marler, P. & Beeman K. (1987). Quantitative analysis animal vocal phonology: application Swamp Sparrow song. Ethology. 76:101-115.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure detection distance of sound — detection_distance","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure detection distance of sound — detection_distance","text":"","code":"if (FALSE) { # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) detection_distance(X = X[X$distance %in% c(1, 10), ], spl.cutoff = 5, mar = 0.05) }"},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure amplitude envelope correlation — envelope_correlation","title":"Measure amplitude envelope correlation — envelope_correlation","text":"envelope_correlation measures amplitude envelope correlation sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure amplitude envelope correlation — envelope_correlation","text":"","code":"envelope_correlation( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), cor.method = c(\"pearson\", \"spearman\", \"kendall\"), env.smooth = getOption(\"env.smooth\", 200), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure amplitude envelope correlation — envelope_correlation","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. cor.method Character string indicating correlation coefficient applied (\"pearson\", \"spearman\", \"kendall\", see cor). env.smooth Numeric vector length 1 determine length sliding window used sum smooth amplitude envelope calculation (used internally env). hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 70. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure amplitude envelope correlation — envelope_correlation","text":"Object 'X' additional column, 'envelope.correlation', containing computed envelope correlation coefficients.","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure amplitude envelope correlation — envelope_correlation","text":"Amplitude envelope correlation measures similarity two sounds time domain. function measures envelope correlation coefficients sounds reference playback re-recorded increasing distances. Values close 1 means similar amplitude envelopes (.e. little degradation occurred). envelopes different lengths (means sounds different lengths) cross-correlation used maximum correlation coefficient returned. Cross-correlation achieved sliding shortest sound along largest one computing correlation step. 'sound.id' column must used indicate function compare sounds belonging category (e.g. song-types). function compares sound corresponding reference sound within supplied frequency range (e.g. bandpass) reference sound ('bottom.freq' 'top.freq' columns 'X'). Two methods computing envelope correlation provided (see 'method' argument). Use blur_ratio create envelopes graphs.","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure amplitude envelope correlation — envelope_correlation","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Apol, C.., Sturdy, C.B. & Proppe, D.S. (2017). Seasonal variability habitat structure may shaped acoustic signals repertoires black-capped boreal chickadees. Evol Ecol. 32:57-74.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure amplitude envelope correlation — envelope_correlation","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure amplitude envelope correlation — envelope_correlation","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) envelope_correlation(X = X) # method 2 # add reference to X X <- set_reference_sounds(X = test_sounds_est, method = 2) envelope_correlation(X = X) } #> Computing amplitude envelopes (step 1 out of 2): #> Computing envelope correlations (step 2 out of 2): #> Computing amplitude envelopes (step 1 out of 2): #> Computing envelope correlations (step 2 out of 2): #> Object of class 'extended_selection_table' #> * The output of the following call: #> selection_table(X = alg, path = \"./testing/example_data/tailored_files_tlalpan/\", extended = TRUE, confirm.extended = FALSE, mar = 10, by.song = \"sound.files\") #> #> Contains: #> * A selection table data frame with 25 row(s) and 11 columns: #> | |sound.files | selec| start| end| bottom.freq| top.freq| #> |:--|:--------------|-----:|------:|------:|-----------:|--------:| #> |8 |10m_closed.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> |9 |10m_closed.wav | 2| 1.3000| 1.5000| 7.8750| 8.8050| #> |10 |10m_closed.wav | 3| 1.5500| 1.7500| 3.2080| 4.0690| #> |11 |10m_closed.wav | 4| 1.8000| 2.0001| 0.4220| 1.2230| #> |12 |10m_closed.wav | 5| 2.0501| 2.2501| 6.9050| 7.9170| #> |13 |10m_open.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> ... 5 more column(s) (sound.id, transect, distance, reference, envelope.correlation) #> and 19 more row(s) #> #> * 5 wave object(s) (as attributes): #> 10m_closed.wav, 10m_open.wav, 1m_open.wav, 30m_closed.wav, 30m_open.wav #> #> * A data frame (check.results) with 25 rows generated by check_sels() (as attribute) #> #> Additional information: #> * The selection table was created by song (see 'class_extended_selection_table') #> * 1 sampling rate(s) (in kHz): 22.05 #> * 1 bit depth(s): 16 #> * Created by warbleR 1.1.29"},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure excess attenuation — excess_attenuation","title":"Measure excess attenuation — excess_attenuation","text":"excess_attenuation measures excess attenuation sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure excess attenuation — excess_attenuation","text":"","code":"excess_attenuation( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), hop.size = getOption(\"hop.size\", 1), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 50), bp = \"freq.range\", path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure excess attenuation — excess_attenuation","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. hop.size numeric vector length 1 specifying time window duration (ms). Default 1 ms, equivalent ~45 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Note lower values increase time resolution, important amplitude calculations. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 50. used bandpass filtering. bp Numeric vector length 2 giving lower upper limits frequency bandpass filter (kHz). Alternatively, set 'freq.range' (default), function use 'bottom.freq' 'top.freq' sound bandpass range. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure excess attenuation — excess_attenuation","text":"Object 'X' additional column, 'excess.attenuation', containing computed excess attenuation values (dB).","code":""},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure excess attenuation — excess_attenuation","text":"Excess attenuation amplitude loss sound excess due spherical spreading (observed attenuation - expected attenuation). every doubling distance, sounds attenuate 6 dB loss amplitude (Morton, 1975; Marten & Marler, 1977). additional loss amplitude results energy loss excess expected occur distance via spherical spreading. represents power loss due additional factors like vegetation atmospheric conditions (Wiley & Richards, 1978). Excess attenuation computed -20 * log10(rms(\"test signal\") / rms(\"reference signal\"))) - (20 * log10(1 / \"distance\") 'rms(..)' represents root mean squared amplitude envelope. Low values indicate little additional attenuation. goal function measure excess attenuation sounds reference playback re-recorded increasing distances. 'sound.id' column must used indicate sounds belonging category (e.g. song-types). function compare sound type corresponding reference sound. Two approaches computing excess attenuation provided (see 'type' argument). NAs returned one envelopes completely flat (e.g. variation amplitude).","code":""},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure excess attenuation — excess_attenuation","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206.Dabelsteen, T., & Mathevon, N. (2002). songbirds sing intensively dawn?. Acta ethologica, 4(2), 65-72.Darden, SK, Pedersen SB, Larsen , & Dabelsteen T. (2008). Sound transmission ground level short-grass prairie habitat implications long-range communication swift fox *Vulpes velox*. Journal Acoustical Society America, 124(2), 758-766.Marten K, & Marler P. (1977). Sound transmission significance animal vocalization. Behavioral Ecology Sociobiology, 2(3), 271-290.Morton ES. (1975). Ecological sources selection avian sounds. American Naturalist, 109(965), 17-34.Wiley, R., & Richards, D. G. (1978). Physical constraints acoustic communication atmosphere: implications evolution animal vocalizations. Behavioral Ecology Sociobiology, 3(1), 69-94.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure excess attenuation — excess_attenuation","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure excess attenuation — excess_attenuation","text":"","code":"{ # load example data data(\"test_sounds_est\") # using method 1 # add reference to X X <- set_reference_sounds(X = test_sounds_est) excess_attenuation(X = X) # using method 2 X <- set_reference_sounds(X = test_sounds_est, method = 2) # excess_attenuation(X = X) } #> Computing amplitude envelopes (step 1 out of 2): #> Computing excess attenuation (step 2 out of 2):"},{"path":"https://marce10.github.io/baRulho/reference/find_markers.html","id":null,"dir":"Reference","previous_headings":"","what":"Find acoustic markers on test sound files — find_markers","title":"Find acoustic markers on test sound files — find_markers","text":"find_markers find acoustic markers test (re-recorded) sound files using spectrographic cross-correlation.","code":""},{"path":"https://marce10.github.io/baRulho/reference/find_markers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Find acoustic markers on test sound files — find_markers","text":"","code":"find_markers( X, markers = c(\"start_marker\", \"end_marker\"), test.files = NULL, path = getOption(\"sound.files.path\", \".\"), pb = getOption(\"pb\", TRUE), cores = getOption(\"mc.cores\", 1), ... )"},{"path":"https://marce10.github.io/baRulho/reference/find_markers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Find acoustic markers on test sound files — find_markers","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference sounds master sound file. Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time, 4) \"end\": end time selections 5) \"sound.id\": unique identifier annotated sounds 'X'. Columns 'top.freq', 'bottom.freq' 'channel' optional. acoustic start end markers (added master_sound_file) labeled \"start_marker\" \"end_marker\" respectively. Required. markers Character vector name annotations (column 'sound.id') used templates cross-correlation. Default c(\"start_marker\", \"end_marker\"). Using one marker recommended time difference position can used evaluate precision detection (see 'Value' section). test.files Character vector length 1 name(s) test (re-recorded) file(s) search marker(s). supplied sound files 'path' used instead. path Character string containing directory path test (re-recorded) sound files found. pb Logical argument control progress bar shown. Default TRUE. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). ... Additional arguments passed template_correlator setting cross-correlation parameters (e.g. 'wl', 'ovlp', etc).","code":""},{"path":"https://marce10.github.io/baRulho/reference/find_markers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Find acoustic markers on test sound files — find_markers","text":"data frame test file names, marker id, maximum cross-correlation score marker start end detected. two markers used function computes additional column, 'time.mismatch', compares time difference two markers test-files master sound file. perfect detection value must 0.","code":""},{"path":"https://marce10.github.io/baRulho/reference/find_markers.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Find acoustic markers on test sound files — find_markers","text":"function takes master sound file's reference data ('X') finds position acoustics markers ('markers' argument, included selections 'X') re-recorded sound files. used align signals found re-recorded sound files according master sound file referenced 'X'. position markers determined highest spectrogram cross-correlation value marker using functions template_correlator template_detector. Make sure master sound file (referred 'X') found folder re-recorded sound files. Take look package vignette information incorporate function sound degradation analysis workflow. cases markers correctly detected editing test sound files remove audio segments target sounds (start marker end marker) can improve performance. Using low 'hop.size' window length 'wl' (used internally template_correlator) can help improve precision spectrogram types (argument 'type' template_correlator) can sometimes show better performance markers highly degraded.","code":""},{"path":"https://marce10.github.io/baRulho/reference/find_markers.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Find acoustic markers on test sound files — find_markers","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/find_markers.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Find acoustic markers on test sound files — find_markers","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/find_markers.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Find acoustic markers on test sound files — find_markers","text":"","code":"{ # set temporary directory td <- tempdir() # load example data data(\"master_est\") # save example files in working director to recreate a case in which working # with sound files instead of extended selection tables. # This doesn't have to be done with your own data as you will # have them as sound files already. for (i in unique(test_sounds_est$sound.files)[1:2]) { writeWave(object = attr(test_sounds_est, \"wave.objects\")[[i]], file.path(td, i)) } # save master file writeWave(object = attr(master_est, \"wave.objects\")[[1]], file.path(td, \"master.wav\")) # set path and no progress bar in global options options(sound.files.path = td, pb = FALSE) # get marker position markers <- find_markers(X = master_est, test.files = unique(test_sounds_est$sound.files)[2]) }"},{"path":"https://marce10.github.io/baRulho/reference/manual_realign.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot spectrograms to check test sound files alignment — manual_realign","title":"Plot spectrograms to check test sound files alignment — manual_realign","text":"manual_realign plots spectrograms visually inspect alignment precision test sound files.","code":""},{"path":"https://marce10.github.io/baRulho/reference/manual_realign.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot spectrograms to check test sound files alignment — manual_realign","text":"","code":"manual_realign( X, Y, hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 0), path = getOption(\"sound.files.path\", \".\"), collevels = seq(-120, 0, 5), palette = viridis::viridis, duration = 2, mar = 0.2, step.lengths = c(5, 30), flim = NULL, label.col = \"white\", ext.window = TRUE, width = 10, height = 5, srt = 0, cex = 1, fast.spec = TRUE, marker = \"start_marker\", grid = 0.2, ... )"},{"path":"https://marce10.github.io/baRulho/reference/manual_realign.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot spectrograms to check test sound files alignment — manual_realign","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds (typically output align_test_files). Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass 7) \"sound.id\": ID sounds used identify counterparts across distances. sound must unique ID within distance. Y object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) master sound file annotations. data used finding position markers find_markers. also contain 'sound.id' column. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 0. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. collevels numeric vector length 3. Specifies levels partition amplitude range spectrogram (dB). levels higher resolution spectrogram. Default seq(-120, 0, 1). palette Color palette function spectrogram. Default viridis. See spectro palettes. Palettes gray.2 may work better fast.spec = TRUE (argument can passed internal spectrogram function using \"...\"). duration numeric vector length 1. Specifies overall duration clip plotted. Notice initial part test files plotted enough tell precision alignment. mar numeric vector length 1. Specifies minimum margins adjacent () start marker used checking alignments (see 'marker' argument). Default 0.2. step.lengths Numeric vector length 2 indicating time length (ms) short (min(step.lengths)) long steps (max(step.lengths)) manually aligning spectrograms. Default c(5, 30). flim numeric vector length 2 indicating highest lowest frequency limits (kHz) spectrogram, spectro. Default NULL plot spectrograms full frequency range (0 - nyquist frequency). label.col Character string controlling color lines sound ID labels. ext.window Logical. TRUE external graphic window used.Dimensions can set using 'width' 'height' arguments. Default TRUE. width Numeric vector length 1. Single value (inches) indicating width output image files. Default 10. height Numeric vector length 1. Single value (inches) indicating height output image files. Default 5. srt Numeric argument length 1. rotation (degrees) sound id labels. Default 0. cex Numeric argument length 1controlling size sound id text labels. Default 1. fast.spec Logical. TRUE image function used internally create spectrograms, substantially increases performance (much faster), although options become unavailable, collevels (amplitude scale). Default FALSE. marker Character string name marker used main reference checking/adjusting time alignments. Default 'start_marker'. Note can take sound IDs 'Y$sound.id'. grid Numeric vector length 1 controlling spacing vertical lines spectrogram. Default 0.2 s. Use 0 remove grid. ... Additional arguments passed internal spectrogram creating function customizing graphical output. function modified version spectro, takes arguments.","code":""},{"path":"https://marce10.github.io/baRulho/reference/manual_realign.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot spectrograms to check test sound files alignment — manual_realign","text":"Creates multipanel graph spectrograms master test sound files users can interactively adjust alignment time. Return object similar input object 'X' start end sounds adjusted.","code":""},{"path":"https://marce10.github.io/baRulho/reference/manual_realign.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot spectrograms to check test sound files alignment — manual_realign","text":"function allows interactive adjustment alignment test sound files produced align_test_files. function generates multipanel graph spectrogram master sound file top test sound files, highlighting position correspondent test sounds order simplify assessing adjusting alignment. Spectrograms include first seconds sound files (controlled 'duration') usually enough tell precision alignment. lower spectrogram shows series 'buttons' users can click control test sound file spectrogram (low panel) needs moved left (\"<\") right (\">\"). Users can also reset spectrogram original position ('reset'), move next sound file 'X' (test sound file annotations) stop process (stop button). function returns object similar input object 'X' start end sounds adjusted.","code":""},{"path":"https://marce10.github.io/baRulho/reference/manual_realign.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plot spectrograms to check test sound files alignment — manual_realign","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/manual_realign.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot spectrograms to check test sound files alignment — manual_realign","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/manual_realign.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot spectrograms to check test sound files alignment — manual_realign","text":"","code":"{ # load example data data(\"master_est\") # save example files in working director to recreate a case in which working # with sound files instead of extended selection tables. # This doesn't have to be done with your own data as you will # have them as sound files already. for (i in unique(test_sounds_est$sound.files)[1:2]) { writeWave(object = attr(test_sounds_est, \"wave.objects\")[[i]], file.path(tempdir(), i)) } # save master file writeWave(object = attr(master_est, \"wave.objects\")[[1]], file.path(tempdir(), \"master.wav\")) # get marker position markers <- find_markers(X = master_est, test.files = unique(test_sounds_est$sound.files)[2], path = tempdir()) # align all test sounds alg.tests <- align_test_files(X = master_est, Y = markers) # add error to alignment lag <- (as.numeric(as.factor(alg.tests$sound.files)) - 2) / 30 alg.tests$start <- alg.tests$start + lag alg.tests$end <- alg.tests$end + lag if(interactive()){ realigned_est <- manual_realign(X = alg.tests, Y = master_est, duration = 2, ovlp = 50, hop.size = 14, collevels = seq(-140, 0, 5), palette = viridis::mako, ext.window = FALSE) } }"},{"path":"https://marce10.github.io/baRulho/reference/master_est.html","id":null,"dir":"Reference","previous_headings":"","what":"Extended selection table of master acoustic data — master_est","title":"Extended selection table of master acoustic data — master_est","text":"Extended selection table (est) acoustic data annotations master sound file synthetic sounds. synthetic sounds 2 s long, frequency modulated amplitude modulated. data created function selection_table warbleR package. re-recorded data generated sounds found example object test_sounds_est.","code":""},{"path":"https://marce10.github.io/baRulho/reference/master_est.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extended selection table of master acoustic data — master_est","text":"","code":"data(master_est)"},{"path":"https://marce10.github.io/baRulho/reference/master_est.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Extended selection table of master acoustic data — master_est","text":"Extended selection table object warbleR format, contains annotations acoustic data.","code":""},{"path":"https://marce10.github.io/baRulho/reference/master_est.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Extended selection table of master acoustic data — master_est","text":"Marcelo Araya-Salas","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/master_sound_file.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a master sound file — master_sound_file","title":"Create a master sound file — master_sound_file","text":"master_sound_file creates master sound file used playback experiments related sound degradation.","code":""},{"path":"https://marce10.github.io/baRulho/reference/master_sound_file.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a master sound file — master_sound_file","text":"","code":"master_sound_file( X, file.name, dest.path = getOption(\"dest.path\", \".\"), overwrite = FALSE, delay = 1, gap.duration = 1, amp.marker = 2, flim = c(0, 4), cex = 14, path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/master_sound_file.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a master sound file — master_sound_file","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference model sounds. Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass 6) \"top.freq\": high frequency bandpass. optional 'sound.id' column can included use custom label sound output. column must contain unique id sound (labels repeated). supplied function make combining sound file selection columns. file.name Character string indicating name sound file. dest.path Character string containing directory path sound file saved. NULL (default) current working directory used instead. overwrite Logical argument determine function overwrite existing sound file file name. Default current working directory. delay Numeric vector length 1 control duration (s) silence gap beginning (end) sound file. can useful allow time start playback experiment. Default 1. gap.duration Numeric vector length 1 control duration (s) silence gaps placed sounds. Default 1 s. amp.marker Numeric vector length 1 use constant amplify markers amplitude. useful increase amplitude markers relation sounds, picked distances. Default 2. flim Numeric vector length 2 control frequency range markers found. NULL markers display across whole frequency range. Default c(0, 4). cex Numeric vector length 1 indicating font size start end markers. Default 14. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/master_sound_file.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a master sound file — master_sound_file","text":".wav file 'path' well data frame R environment annotations (.e. time position) sounds master sound file additional column 'sound.id' provides unique id sound sound file. useful identifying/labeling sounds test (re-recorded) sound files downstream analyses.","code":""},{"path":"https://marce10.github.io/baRulho/reference/master_sound_file.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create a master sound file — master_sound_file","text":"function intended simplify creation master sound files playback experiments sound degradation studies. function clips sounds sound files (wave objects extended selection tables) concatenates single sound file. function also adds acoustic markers start end playback can used time-sync test (re-recorded) sounds facilitate streamlining degradation quantification.","code":""},{"path":"https://marce10.github.io/baRulho/reference/master_sound_file.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Create a master sound file — master_sound_file","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/master_sound_file.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Create a master sound file — master_sound_file","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/master_sound_file.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a master sound file — master_sound_file","text":"","code":"{ # load example data from warbleR data(list = c( \"Phae.long1\", \"Phae.long2\", \"Phae.long3\", \"Phae.long4\", \"lbh_selec_table\" )) # save sound files to temporary folder writeWave(Phae.long1, file.path(tempdir(), \"Phae.long1.wav\")) writeWave(Phae.long2, file.path(tempdir(), \"Phae.long2.wav\")) writeWave(Phae.long3, file.path(tempdir(), \"Phae.long3.wav\")) writeWave(Phae.long4, file.path(tempdir(), \"Phae.long4.wav\")) # make an extended selection table est <- selection_table( X = lbh_selec_table, extended = TRUE, confirm.extended = FALSE, path = tempdir() ) # create master sound file master.sel.tab <- master_sound_file( X = est, file.name = \"example_master\", dest.path = tempdir(), gap.duration = 0.3 ) if (FALSE) { # the following code exports the selection table to Raven # using the Rraven package Rraven::exp_raven(master.sel.tab, path = tempdir(), file.name = \"example_master_selection_table\") } } #> checking selections (step 1 of 2): #> saving wave objects into extended selection table (step 2 of 2): #> The file example_master.wav has been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpbFxUr5'"},{"path":"https://marce10.github.io/baRulho/reference/noise_profile.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure full spectrum sound noise profiles — noise_profile","title":"Measure full spectrum sound noise profiles — noise_profile","text":"noise_profile Measure full spectrum sound pressure levels (.e. noise profiles) sound files extended selection tables.","code":""},{"path":"https://marce10.github.io/baRulho/reference/noise_profile.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure full spectrum sound noise profiles — noise_profile","text":"","code":"noise_profile( X = NULL, files = NULL, mar = NULL, noise.ref = c(\"adjacent\", \"custom\"), cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), path = getOption(\"sound.files.path\", \".\"), bp = NULL, hop.size = getOption(\"hop.size\", 1), wl = getOption(\"wl\", NULL), PSD = FALSE, norm = TRUE, dB = c(\"A\", \"B\", \"C\", \"D\", \"ITU\", \"max0\"), averaged = TRUE )"},{"path":"https://marce10.github.io/baRulho/reference/noise_profile.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure full spectrum sound noise profiles — noise_profile","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass 7) \"sound.id\": ID sounds used identify counterparts across distances (needed \"custom\" noise reference, see \"noise.ref\" argument). Default NULL. files Character vector names wave files analyzed. Files must found 'path' supplied (working directory 'path' supplied). Default NULL. mar numeric vector length 1. Specifies margins adjacent start end points selection measure ambient noise. Required 'X' supplied ignored supplied. Default NULL. noise.ref Character vector length 1 determined noise segment must used measuring ambient noise. Ignored 'X' supplied. Two options available: adjacent: measure ambient noise right sound (using argument 'mar' define duration ambient noise segments). custom: measure ambient noise segments referenced selection table (labeled 'ambient' 'sound.id' column). cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. bp Numeric vector length 2 giving lower upper limits frequency bandpass filter (kHz). Default NULL. hop.size numeric vector length 1 specifying time window duration (ms). Default 1 ms, equivalent ~45 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. Ignored bp = NULL. supplied, 'hop.size' ignored. Note lower values increase time resolution, important amplitude ratio calculations. PSD Logical control whether Probability Mass Function (probability distribution frequencies). See meanspec. Default FALSE. norm Logical control whether amplitude values normalized (divided maximum) highest value 1. See meanspec. Default TRUE. dB character string length 1 specifying type dB return: \"max0\" maximum dB value 0, \"\", \"B\", \"C\", \"D\", \"ITU\" common dB weights. See meanspec. Default \"\". averaged Logical control frequency spectra averaged within sound file. Default TRUE.","code":""},{"path":"https://marce10.github.io/baRulho/reference/noise_profile.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure full spectrum sound noise profiles — noise_profile","text":"data frame containing frequency spectra sound file wave object ('X' supplied class 'extended.selection.table').","code":""},{"path":"https://marce10.github.io/baRulho/reference/noise_profile.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure full spectrum sound noise profiles — noise_profile","text":"function estimates full spectrum sound pressure levels (.e. noise profiles) ambient noise. can done data frames/(extended) selection tables (using segments containing target sound 'ambient' sound id) complete sound files working directory (path supplied). function uses meanspec internally calculate frequency spectra.","code":""},{"path":"https://marce10.github.io/baRulho/reference/noise_profile.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure full spectrum sound noise profiles — noise_profile","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/noise_profile.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure full spectrum sound noise profiles — noise_profile","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/noise_profile.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure full spectrum sound noise profiles — noise_profile","text":"","code":"{ # load example data data(\"test_sounds_est\") # measure on custom noise reference noise_profile(X = test_sounds_est, mar = 0.01, pb = FALSE, noise.ref = \"custom\") # remove noise selections so noise is measured right before the signals pe <- test_sounds_est[test_sounds_est$sound.id != \"ambient\", ] noise_profile(X = pe, mar = 0.01, pb = FALSE, noise.ref = \"adjacent\") } #> sound.files freq amp #> 1 10m_closed.wav 1.002273 -1.478756370 #> 2 10m_closed.wav 2.004545 -8.554912560 #> 3 10m_closed.wav 3.006818 -15.653879395 #> 4 10m_closed.wav 4.009091 -20.594564397 #> 5 10m_closed.wav 5.011364 -24.596826317 #> 6 10m_closed.wav 6.013636 -27.741536121 #> 7 10m_closed.wav 7.015909 -28.631141207 #> 8 10m_closed.wav 8.018182 -29.343274598 #> 9 10m_closed.wav 9.020455 -31.581649783 #> 10 10m_closed.wav 10.022727 -37.142756979 #> 11 10m_open.wav 1.002273 -1.470944432 #> 12 10m_open.wav 2.004545 -5.716210091 #> 13 10m_open.wav 3.006818 -14.060376878 #> 14 10m_open.wav 4.009091 -21.637019767 #> 15 10m_open.wav 5.011364 -28.007595476 #> 16 10m_open.wav 6.013636 -31.998254047 #> 17 10m_open.wav 7.015909 -33.040067144 #> 18 10m_open.wav 8.018182 -33.446761775 #> 19 10m_open.wav 9.020455 -36.054384166 #> 20 10m_open.wav 10.022727 -40.262096085 #> 21 1m_open.wav 1.002273 0.001384514 #> 22 1m_open.wav 2.004545 -4.328099010 #> 23 1m_open.wav 3.006818 -12.731830547 #> 24 1m_open.wav 4.009091 -20.519891620 #> 25 1m_open.wav 5.011364 -24.786032150 #> 26 1m_open.wav 6.013636 -27.331145913 #> 27 1m_open.wav 7.015909 -27.522403062 #> 28 1m_open.wav 8.018182 -27.601169568 #> 29 1m_open.wav 9.020455 -30.958903505 #> 30 1m_open.wav 10.022727 -36.213758740 #> 31 30m_closed.wav 1.002273 -5.018620398 #> 32 30m_closed.wav 2.004545 -19.660800804 #> 33 30m_closed.wav 3.006818 -26.467263845 #> 34 30m_closed.wav 4.009091 -29.190019017 #> 35 30m_closed.wav 5.011364 -33.368022266 #> 36 30m_closed.wav 6.013636 -37.485873353 #> 37 30m_closed.wav 7.015909 -39.725404754 #> 38 30m_closed.wav 8.018182 -42.088478865 #> 39 30m_closed.wav 9.020455 -44.455196777 #> 40 30m_closed.wav 10.022727 -47.253627732 #> 41 30m_open.wav 1.002273 -0.794205765 #> 42 30m_open.wav 2.004545 -5.394132145 #> 43 30m_open.wav 3.006818 -16.362837354 #> 44 30m_open.wav 4.009091 -21.711879855 #> 45 30m_open.wav 5.011364 -26.204882614 #> 46 30m_open.wav 6.013636 -26.312227870 #> 47 30m_open.wav 7.015909 -28.104324225 #> 48 30m_open.wav 8.018182 -28.673914281 #> 49 30m_open.wav 9.020455 -32.218532962 #> 50 30m_open.wav 10.022727 -34.076725570"},{"path":"https://marce10.github.io/baRulho/reference/plot_aligned_sounds.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","title":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","text":"plot_aligned_sounds plots spectrograms visually inspect alignment precision test sound files.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_aligned_sounds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","text":"","code":"plot_aligned_sounds( X, hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 50), path = getOption(\"sound.files.path\", \".\"), cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), collevels = seq(-120, 0, 5), palette = viridis::viridis, duration = 2, mar = 0.2, dest.path = getOption(\"dest.path\", \".\"), flim = NULL, col = \"white\", width = 7, height = 4, res = 100, label = TRUE, fast.spec = FALSE, srt = 0, cex = 1, ... )"},{"path":"https://marce10.github.io/baRulho/reference/plot_aligned_sounds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass 7) \"sound.id\": ID sounds used identify counterparts across distances. sound must unique ID within distance. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. Ignored bp = NULL. supplied, 'hop.size' ignored. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 0. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. collevels numeric vector length 3. Specifies levels partition amplitude range spectrogram (dB). levels higher resolution spectrogram. Default seq(-40, 0, 1). seq(-115, 0, 1) produces spectrograms similar acoustic analysis software packages. palette Color palette function spectrogram. Default viridis. See spectro palettes. Palettes gray.2 may work better fast.spec = TRUE. duration numeric vector length 1. Specifies overall duration clip plotted. Notice initial part test files plotted enough tell precision alignment. mar numeric vector length 1. Specifies margins adjacent start first annotation included plot. dest.path Character string containing directory path image files saved. supplied current working directory used instead. flim numeric vector length 2 indicating highest lowest frequency limits (kHz) spectrogram, spectro. Default NULL plot spectrograms full frequency range (0 - nyquist frequency). col Character string controlling color lines sound ID labels. width Numeric vector length 1. Single value (inches) indicating width output image files. Default 7. height Numeric vector length 1. Single value (inches) indicating height output image files. Default 4. res Numeric argument length 1. Controls image resolution. Default 100 (faster) although 300 - 400 recommended publication/presentation quality. label Logical control labels ('sound.id' column 'X') plotted. Default TRUE. fast.spec Logical. TRUE image function used internally create spectrograms, substantially increases performance (much faster), although options become unavailable, collevels (amplitude scale). Default FALSE. srt Numeric argument length 1. rotation (degrees) sound id labels. Default 0. cex Numeric argument length 1controlling size sound id text labels. Default 1. ... Additional arguments passed internal spectrogram creating function customizing graphical output. function modified version spectro, takes arguments.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_aligned_sounds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","text":"Image files jpeg format spectrograms working directory, one sound file 'X'. also returns file path images invisibly.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_aligned_sounds.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","text":"functions aims simplify evaluation alignment test sound files align_test_files. function creates single spectrogram sound file (saved 'dest.path'). Spectrograms include first seconds sound files (controlled 'duration') usually enough tell precision alignment. plots include vertical lines denoting start end sound well sound ID ('sound.id' column 'X'). Note plot created R graphic device.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_aligned_sounds.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/plot_aligned_sounds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_aligned_sounds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","text":"","code":"{ # load example data data(\"test_sounds_est\") # plot (look into temporary working directory `tempdir()`) plot_aligned_sounds(X = test_sounds_est, dest.path = tempdir(), duration = 3, ovlp = 0) } #> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpbFxUr5'"},{"path":"https://marce10.github.io/baRulho/reference/plot_blur_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot blur ratio — plot_blur_ratio","title":"Plot blur ratio — plot_blur_ratio","text":"plot_blur_ratio plots time frequency blur ratio sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_blur_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot blur ratio — plot_blur_ratio","text":"","code":"plot_blur_ratio( X, type = c(\"envelope\", \"spectrum\"), cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), env.smooth = getOption(\"env.smooth\", 200), spec.smooth = getOption(\"spec.smooth\", 5), res = 150, flim = c(\"-1\", \"+1\"), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), palette = viridis::viridis, collevels = seq(-120, 0, 5), dest.path = getOption(\"dest.path\", \".\"), path = getOption(\"sound.files.path\", \".\"), colors = viridis::viridis(3), n.samples = 100 )"},{"path":"https://marce10.github.io/baRulho/reference/plot_blur_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot blur ratio — plot_blur_ratio","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. type Character vector length 1 indicating type blur ratio plot. two options 'envelope' (regular blur ratio blur_ratio, default) 'spectrum' (spectrum blur ratio spectrum_blur_ratio). cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. env.smooth Numeric vector length 1 determining length sliding window (amplitude samples) used sum smooth amplitude envelope calculation (used internally env). Default 200. spec.smooth Numeric vector length 1 determining length sliding window used sum smooth power spectrum calculation (kHz). Default 5. res Numeric argument length 1. Controls image resolution. Default 150 (faster) although 300 - 400 recommended publication/presentation quality. flim numeric vector length 2 indicating highest lowest frequency limits (kHz) spectrograms, spectro. Default NULL. Alternatively, character vector similar c(\"-1\", \"1\") first number value added minimum bottom frequency 'X' second value added maximum top frequency 'X'. computed independently sound id frequency limit better fits frequency range annotated signals. useful test sounds show marked differences frequency ranges. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. used plotting. Default 70. Applied spectra spectrograms image files. palette color palette function used assign colors plot, spectro. Default viridis. collevels Numeric vector indicating set levels used partition amplitude range spectrogram (dB) spectro. Default seq(-120, 0, 5). dest.path Character string containing directory path image files saved. supplied current working directory used instead. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. colors Character vector length 4 containing colors used color identify reference sound (element 1), color identify test sound (element 2) color blurred region (element 3). n.samples Numeric vector length 1 specifying number amplitude samples (frequency bins spectrum = TRUE) use representing power distributions. Default 100. null raw power distribution used (note can result high RAM memory usage large data sets).","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_blur_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot blur ratio — plot_blur_ratio","text":"returns 1 image file ('jpeg' format) blur ratio estimation, showing spectrograms sounds overlaid amplitude envelopes (power spectra spectrum = TRUE) probability mass functions (PMF). Spectrograms shown within frequency range reference sound. also returns file path images invisibly.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_blur_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot blur ratio — plot_blur_ratio","text":"function generates image files ('jpeg' format) possible blur ratio estimation 'X'. image files show spectrograms sounds overlaid power distribution (either amplitude envelopes power spectrum, see argument 'type') probability mass functions (PMF). output graphs highlight mismatch compared distribution represent estimated blur ratio returned either blur_ratio spectrum_blur_ratio. Spectrograms shown within frequency range reference sound also show dotted lines time (type = \"envelope\") frequency range (type = \"spectrum\") energy distributions computed.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_blur_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plot blur ratio — plot_blur_ratio","text":"Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206.Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/plot_blur_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot blur ratio — plot_blur_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_blur_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot blur ratio — plot_blur_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) # create plots plot_blur_ratio(X = X, dest.path = tempdir()) } #> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpbFxUr5'"},{"path":"https://marce10.github.io/baRulho/reference/plot_degradation.html","id":null,"dir":"Reference","previous_headings":"","what":"Save multipanel plots with reference and test sounds — plot_degradation","title":"Save multipanel plots with reference and test sounds — plot_degradation","text":"plot_degradation creates multipanel plots (image files) reference test sounds distance transect.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_degradation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Save multipanel plots with reference and test sounds — plot_degradation","text":"","code":"plot_degradation( X, nrow = 4, env.smooth = getOption(\"env.smooth\", 200), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), path = getOption(\"sound.files.path\", \".\"), dest.path = getOption(\"dest.path\", \".\"), cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), collevels = seq(-120, 0, 5), palette = viridis::viridis, flim = c(\"-1\", \"+1\"), envelope = TRUE, spectrum = TRUE, heights = c(4, 1), widths = c(5, 1), margins = c(2, 1), row.height = 2, col.width = 2, cols = viridis::mako(4, alpha = 0.3), res = 120, ... )"},{"path":"https://marce10.github.io/baRulho/reference/plot_degradation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Save multipanel plots with reference and test sounds — plot_degradation","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. nrow Numeric vector length 1 number rows per image file. Default 4. dynamically adjusted rows needed set. env.smooth Numeric vector length 1 determining length sliding window (amplitude samples) used sum smooth amplitude envelope power spectrum calculations (used internally env). Default 200. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. used plotting. Default 70. Applied spectra spectrograms image files. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. dest.path Character string containing directory path image files saved. supplied current working directory used instead. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. collevels Numeric vector indicating set levels used partition amplitude range spectrogram (dB) spectro. Default seq(-120, 0, 5). palette color palette function used assign colors plot, spectro. Default viridis. flim numeric vector length 2 indicating highest lowest frequency limits (kHz) spectrogram, spectro. Default NULL. Alternatively, character vector similar c(\"-1\", \"1\") first number value added minimum bottom frequency 'X' second value added maximum top frequency 'X'. computed independently sound id frequency limit better fits frequency range annotated signals. useful test sounds show marked differences frequency ranges. envelope Logical control envelopes plotted. Default TRUE. spectrum Logical control power spectra plotted. Default TRUE. heights Numeric vector length 2 control relative heights spectrogram (first number) amplitude envelope (second number) envelope = TRUE. Default c(4, 1). widths Numeric vector length 2 control relative widths spectrogram (first number) power spectrum (second number) spectrum = TRUE. Default c(5, 1). margins Numeric vector length 2 control relative time test sound (first number) adjacent margins (.e. adjacent background noise, second number) included spectrogram spectrum = TRUE. Default c(2, 1) means margin next sound half duration sound. Note spectrograms time length margins calculated ensure spectrograms match duration spectrogram longest sound. , argument controls margin longest sound. row.height Numeric vector length 1 controlling height (inches) sound panels output image file. Default 2. col.width Numeric vector length 1 controlling width (inches) sound panels output image file. Default 2. cols Character vector length 4 containing colors used background column row title panels (element 1), color amplitude envelopes (element 2), color power spectra (element 3), background color envelopes spectra (element 4). res Numeric argument length 1. Controls image resolution. Default 120 (faster) although 300 - 400 recommended publication/presentation quality. ... Additional arguments passed internal spectrogram creating function customizing graphical output. function modified version spectro, takes arguments.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_degradation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Save multipanel plots with reference and test sounds — plot_degradation","text":"One ore image files multipanel figure spectrograms test sound distance, sound id transect. also returns file path images invisibly.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_degradation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Save multipanel plots with reference and test sounds — plot_degradation","text":"function aims simplify visual inspection sound degradation producing multipanel figures (saved 'dest.path') containing visualizations test sound reference. Sounds sorted distance (columns) transect (1). Visualizations include spectrograms, amplitude envelopes power spectra (last 2 optional). row includes copies sound id given transect (row label includes sound id first line transect second line), also including reference comes another transect. Ambient noise annotations (sound.id 'ambient') excluded. Amplitude envelopes power spectra computed using functions envelope (warbleR package) spec (seewave package) respectively. two visualizations show power distribution time frequency minimum maximum power values sound. Therefore scales necessarily comparable across panels.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_degradation.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Save multipanel plots with reference and test sounds — plot_degradation","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/plot_degradation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Save multipanel plots with reference and test sounds — plot_degradation","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_degradation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Save multipanel plots with reference and test sounds — plot_degradation","text":"","code":"{ # load example data data(\"test_sounds_est\") # order so spectrograms from same sound id as close in the graph test_sounds_est <- test_sounds_est[order(test_sounds_est$sound.id), ] # set directory to save image files options(dest.path = tempdir()) # method 1 Y <- set_reference_sounds(X = test_sounds_est) # plot degradation spectrograms plot_degradation( X = Y, nrow = 3, ovlp = 95 ) # using other color palettes plot_degradation( X = Y, nrow = 3, ovlp = 95, cols = viridis::magma(4, alpha = 0.3), palette = viridis::magma ) # missing some data, 2 rows plot_degradation( X = Y[-3, ], nrow = 2, ovlp = 95, cols = viridis::mako(4, alpha = 0.4), palette = viridis::mako, wl = 200 ) # changing marging and high overlap plot_degradation(X = Y, margins = c(5, 1), nrow = 6, ovlp = 95) # more rows than needed (will adjust it automatically) plot_degradation(X = Y, nrow = 10, ovlp = 90) } #> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpbFxUr5' #> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpbFxUr5' #> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpbFxUr5' #> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpbFxUr5' #> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpbFxUr5'"},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":null,"dir":"Reference","previous_headings":"","what":"Set reference for test sounds — set_reference_sounds","title":"Set reference for test sounds — set_reference_sounds","text":"set_reference_sounds set rows used reference test sound.","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set reference for test sounds — set_reference_sounds","text":"","code":"set_reference_sounds( X, method = getOption(\"method\", 1), cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set reference for test sounds — set_reference_sounds","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances (transects 1) 8) \"distance\": distance (numeric) test sound re-recorded. 'transect' column labeling sounds recorded transect required 'method = 2'. 'X' can 1 copy given sound id distance transect-distance combination (column 'transect' supplied). addition, 'selec' column values 'X' duplicated within sound file ('sound.files' column) combination used refer specific rows output 'reference' column. method Integer vector length 1 indicate 'experimental design' measuring degradation. Two methods available: 1: compare sounds ('sound.id') counterpart recorded closest distance source (e.g. compare sound recorded 5m, 10m 15m counterpart recorded 1m). default method. function try use references transect. However, another test sound 'sound.id' shorter distance transects, used reference instead. 2: compare sounds counterpart recorded distance immediately within transect (e.g. sound recorded 10m compared sound recorded 5m, sound recorded 15m compared sound recorded 10m ). 'transect' column 'X' required. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set reference for test sounds — set_reference_sounds","text":"object similar 'X' one additional column, 'reference', ID sounds used reference degradation-quantifying functions downstream analyses. ID created paste(X$sound.files, X$selec, sep = \"-\").","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Set reference for test sounds — set_reference_sounds","text":"function adds 'reference' column defining sounds used functions reference. Two methods available (see 'methods' argument description). Note users want define reference sound can set manually. NAs must used indicate rows ignored. References must indicated combination 'sound.files' 'selec' column. instance, '10m.wav-1' indicates row 'selec' column '1' sound file '10m.wav' used reference. function also checks information 'X' right format wont produce errors downstream analysis (see 'X' argument description details format). function ignore rows 'sound.id' 'ambient', 'start_marker' 'end_marker'","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Set reference for test sounds — set_reference_sounds","text":"Araya-Salas, M., & Smith-Vidaurre, G. (2017). warbleR: R package streamline analysis animal acoustic signals. Methods Ecology Evolution, 8(2), 184-191.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set reference for test sounds — set_reference_sounds","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set reference for test sounds — set_reference_sounds","text":"","code":"{ # load example data data(\"test_sounds_est\") # save wav file examples X <- test_sounds_est[test_sounds_est$sound.files != \"master.wav\", ] # method 1 Y <- set_reference_sounds(X = X) # method 2 Y <- set_reference_sounds(X = X, method = 2) }"},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"signal_to_noise_ratio measures attenuation signal--noise ratio sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"","code":"signal_to_noise_ratio( X, mar = NULL, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), eq.dur = FALSE, noise.ref = c(\"adjacent\", \"custom\"), snr.formula = 1, bp = \"freq.range\", hop.size = getOption(\"hop.size\", 1), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 0), path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds (typically output align_test_files). Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass 7) \"sound.id\": ID sounds used identify counterparts across distances (needed \"custom\" noise reference, see \"noise.ref\" argument). mar numeric vector length 1. Specifies margins adjacent start point annotation measure ambient noise. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. eq.dur Logical. Controls whether ambient noise segment measured duration sound (TRUE. Default FALSE). TRUE 'mar' 'noise.ref' arguments ignored. noise.ref Character vector length 1 determined noise segment must used measuring ambient noise. Two options available: adjacent: measure ambient noise right test sounds (using argument 'mar' define duration ambient noise segments). custom: measure ambient noise segments referenced selection table (labeled 'ambient' 'sound.id' column). segments used apply ambient noise reference sounds sound file. Therefore, least one 'ambient' selection sound file must provided. several 'ambient' selections sound file supplied, root mean square amplitude envelope averaged across selections. snr.formula Integer vector length 1. Selects formula used calculate signal--noise ratio (S = signal , N = background noise): 1: ratio S amplitude envelope root mean square N amplitude envelope root mean square (20 * log10(rms(env(S))/rms(env(N)))) described Darden (2008). 2: ratio difference S amplitude envelope root mean square N amplitude envelope root mean square N amplitude envelope root mean square (20 * log10((rms(env(S)) - rms(env(N)))/rms(env(N))), described Dabelsteen et al (1993). bp Numeric vector length 2 giving lower upper limits frequency bandpass filter (kHz). Alternatively, set 'freq.range' (default), function use 'bottom.freq' 'top.freq' sound bandpass range. hop.size numeric vector length 1 specifying time window duration (ms). Default 1 ms, equivalent ~45 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. Ignored bp = NULL. supplied, 'hop.size' ignored. Note lower values increase time resolution, important amplitude ratios calculations. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 0. used bandpass filtering. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"Object 'X' additional column, 'signal..noise.ratio', signal--noise ratio values (dB).","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"Signal--noise ratio (SNR) measures sound amplitude level relation ambient noise. Noise measured background noise immediately test sound. general margin ambient noise measured must specified. Alternatively, selection ambient noise can used reference (see 'noise.ref' argument). margins overlap another sound nearby, SNR inaccurate, margin length carefully considered. SNR less equal one suggests background noise equal overpowering sound. function measure signal--noise ratio within supplied frequency range (e.g. bandpass) reference signal ('bottom.freq' 'top.freq' columns 'X') default (, bp = 'freq.range'. SNR can ~0 tail signal low amplitude.","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206.Darden, SK, Pedersen SB, Larsen , & Dabelsteen T. (2008). Sound transmission ground level short-grass prairie habitat implications long-range communication swift fox *Vulpes velox*. Journal Acoustical Society America, 124(2), 758-766.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # using measure ambient noise reference selections signal_to_noise_ratio(X = test_sounds_est, mar = 0.05, noise.ref = \"custom\") # using margin for ambient noise of 0.05 and adjacent measure ambient noise reference signal_to_noise_ratio(X = test_sounds_est, mar = 0.05, noise.ref = \"adjacent\") } #> Object of class 'extended_selection_table' #> * The output of the following call: #> selection_table(X = alg, path = \"./testing/example_data/tailored_files_tlalpan/\", extended = TRUE, confirm.extended = FALSE, mar = 10, by.song = \"sound.files\") #> #> Contains: #> * A selection table data frame with 25 row(s) and 10 columns: #> | |sound.files | selec| start| end| bottom.freq| top.freq| #> |:--|:--------------|-----:|------:|------:|-----------:|--------:| #> |8 |10m_closed.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> |9 |10m_closed.wav | 2| 1.3000| 1.5000| 7.8750| 8.8050| #> |10 |10m_closed.wav | 3| 1.5500| 1.7500| 3.2080| 4.0690| #> |11 |10m_closed.wav | 4| 1.8000| 2.0001| 0.4220| 1.2230| #> |12 |10m_closed.wav | 5| 2.0501| 2.2501| 6.9050| 7.9170| #> |13 |10m_open.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> ... 4 more column(s) (sound.id, transect, distance, signal.to.noise.ratio) #> and 19 more row(s) #> #> * 5 wave object(s) (as attributes): #> 10m_closed.wav, 10m_open.wav, 1m_open.wav, 30m_closed.wav, 30m_open.wav #> #> * A data frame (check.results) with 25 rows generated by check_sels() (as attribute) #> #> Additional information: #> * The selection table was created by song (see 'class_extended_selection_table') #> * 1 sampling rate(s) (in kHz): 22.05 #> * 1 bit depth(s): 16 #> * Created by warbleR 1.1.29"},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"spcc measures spectrographic cross-correlation measure sound distortion sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"","code":"spcc( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), cor.method = c(\"pearson\", \"spearman\", \"kendall\"), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 90), wn = \"hanning\", path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. cor.method Character string indicating correlation coefficient applied (\"pearson\", \"spearman\", \"kendall\", see cor). hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying % overlap two consecutive windows, spectro. Default 90. High values ovlp slow function produce accurate results. wn character vector length 1 specifying window name ftwindow. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"Object 'X' additional column, 'cross.correlation', containing computed spectrogram cross-correlation coefficients.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"Spectrographic cross-correlation measures frequency distortion sounds similarity metric. Values close 1 means similar spectrograms (.e. little sound distortion occurred). Cross-correlation measured sounds reference playback re-recorded increasing distances. 'sound.id' column must used indicate function compare sounds belonging category (e.g. song-types). function compares sound corresponding reference sound within supplied frequency range (e.g. bandpass) reference sound ('bottom.freq' 'top.freq' columns 'X'). Two methods computing cross-correlation provided (see 'method' argument). function wrapper warbleR's cross_correlation function.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Clark, C.W., Marler, P. & Beeman K. (1987). Quantitative analysis animal vocal phonology: application Swamp Sparrow song. Ethology. 76:101-115.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) # get spcc spcc(X = X) } #> Object of class 'extended_selection_table' #> * The output of the following call: #> selection_table(X = alg, path = \"./testing/example_data/tailored_files_tlalpan/\", extended = TRUE, confirm.extended = FALSE, mar = 10, by.song = \"sound.files\") #> #> Contains: #> * A selection table data frame with 25 row(s) and 11 columns: #> | |sound.files | selec| start| end| bottom.freq| top.freq| #> |:--|:--------------|-----:|------:|------:|-----------:|--------:| #> |8 |10m_closed.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> |9 |10m_closed.wav | 2| 1.3000| 1.5000| 7.8750| 8.8050| #> |10 |10m_closed.wav | 3| 1.5500| 1.7500| 3.2080| 4.0690| #> |11 |10m_closed.wav | 4| 1.8000| 2.0001| 0.4220| 1.2230| #> |12 |10m_closed.wav | 5| 2.0501| 2.2501| 6.9050| 7.9170| #> |13 |10m_open.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> ... 5 more column(s) (sound.id, transect, distance, reference, cross.correlation) #> and 19 more row(s) #> #> * 5 wave object(s) (as attributes): #> 10m_closed.wav, 10m_open.wav, 1m_open.wav, 30m_closed.wav, 30m_open.wav #> #> * A data frame (check.results) with 25 rows generated by check_sels() (as attribute) #> #> Additional information: #> * The selection table was created by song (see 'class_extended_selection_table') #> * 1 sampling rate(s) (in kHz): 22.05 #> * 1 bit depth(s): 16 #> * Created by warbleR 1.1.29"},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"spectrum_blur_ratio measures blur ratio frequency spectra sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"","code":"spectrum_blur_ratio( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), spec.smooth = getOption(\"spec.smooth\", 5), spectra = FALSE, res = 150, hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), path = getOption(\"sound.files.path\", \".\"), n.bins = 100 )"},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. spec.smooth Numeric vector length 1 determining length sliding window used sum smooth power spectrum calculation (kHz). Default 5. spectra Logical control power spectra returned (attributes). Default FALSE. res Numeric argument length 1. Controls image resolution. Default 150 (faster) although 300 - 400 recommended publication/presentation quality. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Applied spectra spectrograms image files. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 70. Applied spectra spectrograms image files. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. n.bins Numeric vector length 1 specifying number frequency bins use representing power spectra. Default 100. null raw power spectrum used (note can result high RAM memory usage large data sets). Power spectrum values interpolated using approx.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"Object 'X' additional column, 'spectrum.blur.ratio', containing computed spectrum blur ratio values. spectra = TRUE output include power spectra sounds attributes ('attributes(X)$spectra').","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"Spectral blur ratio measures degradation sound function change sound power frequency domain, analogous blur ratio proposed Dabelsteen et al (1993) time domain (implemented blur_ratio). Low values indicate low degradation sounds. function measures blur ratio spectra sounds reference playback re-recorded different distances. Spectral blur ratio measured mismatch power spectra (expressed probability density functions) reference sound re-recorded sound. function compares sound type corresponding reference sound. 'sound.id' column must used tell function compare sounds belonging category (e.g. song-types). Two methods setting experimental design provided. wave objects extended selection table must sampling rate length spectra comparable. function uses spec internally compute power spectra. NA returned least one power spectra computed.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206.Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) # get spetrum blur ratio spectrum_blur_ratio(X = X) # using method 2 X <- set_reference_sounds(X = test_sounds_est, method = 2) spectrum_blur_ratio(X = X) # get power spectra sbr <- spectrum_blur_ratio(X = X, spectra = TRUE) spctr <- attributes(sbr)$spectra # make distance a factor for plotting spctr$distance <- as.factor(spctr$distance) # plot rlang::check_installed(\"ggplot2\") library(ggplot2) ggplot(spctr[spctr$freq > 0.3, ], aes(y = amp, x = freq, col = distance)) + geom_line() + facet_wrap(~sound.id) + scale_color_viridis_d(alpha = 0.7) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (PMF)\") + coord_flip() + theme_classic() }"},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure frequency spectrum correlation — spectrum_correlation","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"spectrum_correlation measures frequency spectrum correlation sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"","code":"spectrum_correlation( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), cor.method = c(\"pearson\", \"spearman\", \"kendall\"), spec.smooth = getOption(\"spec.smooth\", 5), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), path = getOption(\"sound.files.path\", \".\"), n.bins = 100 )"},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. cor.method Character string indicating correlation coefficient applied (\"pearson\", \"spearman\", \"kendall\", see cor). spec.smooth Numeric vector length 1 determining length sliding window used sum smooth power spectrum calculation (kHz). Default 5. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 70. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. n.bins Numeric vector length 1 specifying number frequency bins use representing power spectra. Default 100. null raw power spectrum used (note can result high RAM memory usage large data sets). Power spectrum values interpolated using approx.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"Object 'X' additional column, 'spectrum.correlation', containing computed frequency spectrum correlation coefficients.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"spectral correlation measures similarity two sounds frequency domain. function measures spectral correlation coefficients sounds reference playback re-recorded increasing distances. Values range 1 (identical frequency spectrum, .e. degradation) 0. 'sound.id' column must used indicate function compare sounds belonging category (e.g. song-types). function compare sound corresponding reference sound. Two methods computing spectral correlation provided (see 'method' argument). function uses meanspec internally compute power spectra. Use spectrum_blur_ratio extract raw spectra values. NA returned least one power spectra computed.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Apol, C.., Sturdy, C.B. & Proppe, D.S. (2017). Seasonal variability habitat structure may shaped acoustic signals repertoires black-capped boreal chickadees. Evol Ecol. 32:57-74.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"","code":"{ # load example data data(\"test_sounds_est\") # method 1 # add reference column Y <- set_reference_sounds(X = test_sounds_est) # run spectrum correlation spectrum_correlation(X = Y) # method 2 Y <- set_reference_sounds(X = test_sounds_est, method = 2) # spectrum_correlation(X = Y) }"},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":null,"dir":"Reference","previous_headings":"","what":"Create synthetic sounds — synth_sounds","title":"Create synthetic sounds — synth_sounds","text":"synth_sounds create synthetic sounds","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create synthetic sounds — synth_sounds","text":"","code":"synth_sounds( replicates = 1, frequencies, durations, nharmonics = 1, fm = FALSE, am = FALSE, am.amps = rep(c(1:4, 3:2), length.out = 11), mar = 0.05, seed = NULL, sig2 = 0.3, shuffle = FALSE, hrm.freqs = c(1/2, 1/3, 2/3, 1/4, 3/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10), sampling.rate = 44.1, pb = TRUE )"},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create synthetic sounds — synth_sounds","text":"replicates Numeric vector length 1 indicating number replicates treatment combination. Default 1. Useful measuring variation transmission parameters. frequencies Numeric vector different frequencies (seconds) synthesize. Brownian bridge motion stochastic process (diff.fun == \"BB\") used simulate frequency modulation (see simulate_songs). durations Numeric vector different durations (seconds) synthesize. nharmonics Numeric vector length 1 specifying number harmonics simulate. 1 indicates fundamental frequency harmonic simulated. fm Logical control frequency modulated sounds pure tones (.e. non-modulated sounds) synthesize. FALSE (default) pure tones synthesized. Logical control amplitude modulated sounds non-modulated sounds synthesize. FALSE (default) non-modulated sounds synthesized. .amps Numeric vector relative amplitude time step simulate amplitude modulation (applied fundamental frequency). default value (rep(c(1:4, 3:2), length.= 11)) 2 amplitude peaks (although applied '= TRUE') mar Numeric vector duration margins silence around sounds seconds. Default 0.05. seed Numeric vector length 1. allows users get results different runs (using se.seed internally). Default NULL. sig2 Numeric vector length 1 defining sigma value brownian motion model (used simulating frequency modulation). Default 0.3. shuffle Logical control position sounds randomized. sounds treatment sequence can problematic environmental noise masks . Hence 'shuffle' useful avoid sounds treatment next . Default FALSE. hrm.freqs Numeric vector frequencies harmonics relative fundamental frequency. default values c(1/2, 1/3, 2/3, 1/4, 3/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10). sampling.rate Numeric vector length 1. Sets sampling frequency wave object (kHz). Default 44.1. pb Logical argument control progress bar shown. Default TRUE.","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create synthetic sounds — synth_sounds","text":"extended selection table, can input master_sound_file create .wav file. table contains columns varying features 'treatment' column (useful tell acoustic features sound) 'replicate' column indicating replicates 'treatment'.","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create synthetic sounds — synth_sounds","text":"function creates synthetic sounds can used playback experiments understand link signal structure transmission properties. function can add variation signal structure 5 features: frequency: continuous, argument 'frequencies'. duration: continuous, argument 'durations'. harmonic structure: binary (harmonics vs -harmonics), arguments 'nharmonics' 'hrm.freqs'. frequency modulation: variation fundamental frequency across time. Binary (modulated vs non-modulated), arguments 'fm' 'sig2'. amplitude modulation: variation amplitude across time. Binary (modulated vs non-modulated), arguments '' '.amps'. Sound possible combinations selected structure dimensions synthesized. output extended selection table, can input master_sound_file create .wav file. functions uses simulate_songs internally synthesizing individual sounds. Brownian bridge motion stochastic process (diff.fun == \"BB\") used simulate frequency modulation. output table contains columns varying features 'treatment' column (useful tell sound combination features using replicates).","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Create synthetic sounds — synth_sounds","text":"Araya-Salas, M., & Smith-Vidaurre, G. (2017). warbleR: R package streamline analysis animal acoustic signals. Methods Ecology Evolution, 8(2), 184-191.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Create synthetic sounds — synth_sounds","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create synthetic sounds — synth_sounds","text":"","code":"if (FALSE) { synthetic_est <- synth_sounds( mar = 0.01, frequencies = c(1, 2, 3, 5), durations = 0.1, fm = TRUE, am = TRUE, nharmonics = 4, shuffle = TRUE, replicates = 3 ) }"},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"tail_to_signal_ratio measures reverberations tail--signal ratio sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"","code":"tail_to_signal_ratio( X, mar, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), tsr.formula = 1, bp = \"freq.range\", hop.size = getOption(\"hop.size\", 1), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 0), path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass 6) \"top.freq\": high frequency bandpass. mar numeric vector length 1. Specifies margins adjacent end sound measure tail power. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. tsr.formula Integer vector length 1. Determine formula used calculate tail--signal ratio (S = signal, T = tail, N = background noise): 1: ratio T amplitude envelope quadratic mean S amplitude envelope quadratic mean (rms(env(T))/rms(env(S))) described Dabelsteen et al. (1993). 2: ratio T amplitude envelope quadratic mean N amplitude envelope quadratic mean (rms(env(T))/rms(env(N))). N measure margin right sound. tsr.formula 2 actually measures tail--noise ratio. bp Numeric vector length 2 giving lower upper limits frequency bandpass filter (kHz). Alternatively, set 'freq.range' (default), function use 'bottom.freq' 'top.freq' sound bandpass range. hop.size numeric vector length 1 specifying time window duration (ms). Default 1 ms, equivalent ~45 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. Ignored bp = NULL. supplied, 'hop.size' ignored. Note lower values increase time resolution, important amplitude calculations. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 0. used bandpass filtering. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"Object 'X' additional column, 'tail..signal.ratio', tail--signal ratio values (dB).","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"Tail--signal ratio (TSR) measures ratio power tail reverberations test sound. general margin reverberation tail measured must specified. function measure TSR within supplied frequency range (e.g. bandpass) reference sound ('bottom.freq' 'top.freq' columns 'X'). Two methods computing reverberations provided (see 'tsr.formula' argument). Note 'tsr.formula' 2 equivalent original description TSR Dabelsteen et al. (1993) better referred tail--noise ratio. Tail--signal ratio values typically negative signals tend higher power reverberating tail. TSR can ~0 tail signal low amplitude.","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Darden, SK, Pedersen SB, Larsen , & Dabelsteen T. (2008). Sound transmission ground level short-grass prairie habitat implications long-range communication swift fox *Vulpes velox*. Journal Acoustical Society America, 124(2), 758-766.Mathevon, N., Dabelsteen, T., & Blumenrath, S. H. (2005). high perches blackcap Sylvia atricapilla song listening posts? sound transmission study. Journal Acoustical Society America, 117(1), 442-449.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # set global options options(pb = FALSE) # using margin for noise of 0.01 tsr <- tail_to_signal_ratio(X = test_sounds_est, mar = 0.01) # use tsr.formula 2 which is equivalent to tail-to-noise ratio tsr <- tail_to_signal_ratio(X = test_sounds_est, mar = 0.01, tsr.formula = 2) }"},{"path":"https://marce10.github.io/baRulho/reference/test_sounds_est.html","id":null,"dir":"Reference","previous_headings":"","what":"Extended selection table with re-recorded playbacks — test_sounds_est","title":"Extended selection table with re-recorded playbacks — test_sounds_est","text":"Extended selection table (est) 7 re-recorded synthetic sounds. synthetic sounds 2 s long, frequency modulated, amplitude modulated, broadcast re-recorded 3 distances (1, 10 30m, column 'distance'). data created function selection_table warbleR package. master sound file data used create test sounds found example object master_est.","code":""},{"path":"https://marce10.github.io/baRulho/reference/test_sounds_est.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extended selection table with re-recorded playbacks — test_sounds_est","text":"","code":"data(test_sounds_est)"},{"path":"https://marce10.github.io/baRulho/reference/test_sounds_est.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Extended selection table with re-recorded playbacks — test_sounds_est","text":"Extended selection table object warbleR format, contains annotations acoustic data.","code":""},{"path":"https://marce10.github.io/baRulho/reference/test_sounds_est.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Extended selection table with re-recorded playbacks — test_sounds_est","text":"Marcelo Araya-Salas","code":""},{"path":[]},{"path":[]},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"new-features-2-1-0","dir":"Changelog","previous_headings":"","what":"NEW FEATURES","title":"baRulho 2.1.0","text":"new function add_noise() modifying signal--noise ratio adding synthetic noise new function manual_realign() generates interactive plot manual adjustment time alignments new function plot_blur_ratio() generates plots previously created blur_ratio() spectrum_blur_ratio() new function plot_degradation() visually compare sounds across distances new function plot_aligned_sounds() visually assess precision test sound alignment align_test_files() now can take several markers input select highest correlation score aligning test files New function attenuation() Data frames selection tables can used input data Added new methods blur_ratio() excess_atenuation() spectral_correlation() spectral_blur_ratio() renamed spectrum_correlation(), spectrum_blur_ratio() respectively","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"minor-improvements-2-1-0","dir":"Changelog","previous_headings":"NEW FEATURES","what":"MINOR IMPROVEMENTS","title":"baRulho 2.1.0","text":"optimize performance signal_to_noise_ratio() atmospheric_attenuation() longer available (use attenuation() instead) Improved documentation functions Fix bug spcc() excess_attenuation() ‘markers’ argument deprecated align_test_files() fix bug auto_realign() find_markers() compares time difference markers master sound file measure precision find_markers() can run several markers templates files ‘template.rows’ argument deprecated find_markers() spcc_align() renamed auto_realign() search_templates() renamed find_markers() ‘output’ argument deprecated ‘parallel’ argument deprecated replaced ‘cores’","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-106","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.6","title":"baRulho 1.0.6","text":"CRAN release: 2022-03-01 Update requested CRAN","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-105","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.5","title":"baRulho 1.0.5","text":"CRAN release: 2021-04-21 Update requested CRAN","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-104","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.4","title":"baRulho 1.0.4","text":"CRAN release: 2021-03-09","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"minor-improvements-1-0-4","dir":"Changelog","previous_headings":"","what":"MINOR IMPROVEMENTS","title":"baRulho 1.0.4","text":"warbleR::freq_range_detec() now used internally detect frequency range markers master_sound_file()","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-103","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.3","title":"baRulho 1.0.3","text":"CRAN release: 2021-02-11 Update requested CRAN","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-103-1","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.3","title":"baRulho 1.0.3","text":"CRAN release: 2021-02-11","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"minor-improvements-1-0-3","dir":"Changelog","previous_headings":"","what":"MINOR IMPROVEMENTS","title":"baRulho 1.0.3","text":"New argument ‘marker’ align_test_files() control start end marker used aligning Fix bug detecting several templates per sound file search_templates()","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-102","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.2","title":"baRulho 1.0.2","text":"CRAN release: 2020-06-07","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"minor-improvements-1-0-2","dir":"Changelog","previous_headings":"","what":"MINOR IMPROVEMENTS","title":"baRulho 1.0.2","text":"Windows length converted even functions Fix sign error signal amplitude measurements (signal_to_noise_ratio() excess_attenuation()) New function noise_profile() rename snr() signal_to_noise_ratio() New function tail_to_signal_ratio() measure reverberations Fix bug excess_attenuation() method = 1 Added type argument excess_attenuation() run “Darden” version excess attenuation","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-101","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.1","title":"baRulho 1.0.1","text":"CRAN release: 2020-03-09","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"new-features-1-0-1","dir":"Changelog","previous_headings":"","what":"NEW FEATURES","title":"baRulho 1.0.1","text":"New function search_templates() find signals re-recorded sound files New function align_test_files() set time signals aligned re-recorded files Parallel available internal prep_X_bRlo_int() function Data frame also returned functions","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-100","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.0","title":"baRulho 1.0.0","text":"CRAN release: 2020-02-22 First release","code":""}] +[{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing","title":"Contributing","text":"First , thanks taking time contribute! types contributions encouraged valued. See Table Contents different ways help details project handles . Please make sure read relevant section making contribution. make lot easier us maintainers smooth experience involved. community looks forward contributions. like project, just don’t time contribute, ’s fine. easy ways support project show appreciation, also happy : - Star project - Tweet - Refer project project’s readme - Mention project local meetups tell friends/colleagues","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"table-of-contents","dir":"","previous_headings":"","what":"Table of Contents","title":"Contributing","text":"Code Conduct Question Want Contribute Reporting Bugs Suggesting Enhancements","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing","text":"Please note baRulho released Contributor Code Conduct. contributing project agree abide terms. See rOpenSci contributing guide details.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"i-have-a-question","dir":"","previous_headings":"","what":"I Have a Question","title":"Contributing","text":"want ask question, assume read available Documentation. ask question, best search existing Issues might help . case found suitable issue still need clarification, can write question issue. also advisable search internet answers first. still feel need ask question need clarification, recommend following: Open https://github.com/ropensci/baRulho/issues/. Provide much context can ’re running . Provide project platform versions (nodejs, npm, etc), depending seems relevant. take care issue soon possible.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"i-want-to-contribute","dir":"","previous_headings":"","what":"I Want To Contribute","title":"Contributing","text":"contributing project, must agree authored 100% content, necessary rights content content contribute may provided project license.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"before-submitting-a-bug-report","dir":"","previous_headings":"I Want To Contribute > Reporting Bugs","what":"Before Submitting a Bug Report","title":"Contributing","text":"good bug report shouldn’t leave others needing chase information. Therefore, ask investigate carefully, collect information describe issue detail report. Please complete following steps advance help us fix potential bug fast possible. Make sure using latest version. Determine bug really bug error side e.g. using incompatible environment components/versions (Make sure read documentation. looking support, might want check section). see users experienced (potentially already solved) issue , check already bug report existing bug erro. Also make sure search internet (including Stack Overflow) see users outside GitHub community discussed issue. Collect information bug: Stack trace (Traceback) OS, Platform Version (Windows, Linux, macOS, x86, ARM) Version interpreter, compiler, SDK, runtime environment, package manager, depending seems relevant. Possibly input output Can reliably reproduce issue? can also reproduce older versions?","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"how-do-i-submit-a-good-bug-report","dir":"","previous_headings":"I Want To Contribute > Reporting Bugs","what":"How Do I Submit a Good Bug Report?","title":"Contributing","text":"must never report security related issues, vulnerabilities bugs including sensitive information issue tracker, elsewhere public. Instead sensitive bugs must sent email marcelo.araya@ucr.ac.cr. use GitHub issues track bugs errors. run issue project: Open Issue. (Since can’t sure point whether bug , ask talk bug yet label issue.) Explain behavior expect actual behavior. Please provide much context possible describe reproduction steps someone else can follow recreate issue . usually includes code. good bug reports isolate problem create reduced test case. Provide information collected previous section. ’s filed: project team label issue accordingly. team member try reproduce issue provided steps. reproduction steps obvious way reproduce issue, team ask steps mark issue needs-repro. Bugs needs-repro tag addressed reproduced. team able reproduce issue, marked needs-fix, well possibly tags (critical), issue left implemented someone.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"suggesting-enhancements","dir":"","previous_headings":"I Want To Contribute","what":"Suggesting Enhancements","title":"Contributing","text":"section guides submitting enhancement suggestion, including completely new features minor improvements existing functionality. Following guidelines help maintainers community understand suggestion find related suggestions.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"before-submitting-an-enhancement","dir":"","previous_headings":"I Want To Contribute > Suggesting Enhancements","what":"Before Submitting an Enhancement","title":"Contributing","text":"Make sure using latest version. Read documentation carefully find functionality already covered, maybe individual configuration. Perform search see enhancement already suggested. , add comment existing issue instead opening new one. Find whether idea fits scope aims project. ’s make strong case convince project’s developers merits feature. Keep mind want features useful majority users just small subset. ’re just targeting minority users, consider writing add-/plugin library.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"how-do-i-submit-a-good-enhancement-suggestion","dir":"","previous_headings":"I Want To Contribute > Suggesting Enhancements","what":"How Do I Submit a Good Enhancement Suggestion?","title":"Contributing","text":"Enhancement suggestions tracked GitHub issues. Use clear descriptive title issue identify suggestion. Provide step--step description suggested enhancement many details possible. Describe current behavior explain behavior expected see instead . point can also tell alternatives work . may want include screenshots animated GIFs help demonstrate steps point part suggestion related . can use tool record GIFs macOS Windows, tool tool Linux. Explain enhancement useful users. may also want point projects solved better serve inspiration.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributing","text":"guide based contributing.md. Make !","code":""},{"path":"https://marce10.github.io/baRulho/articles/align_test_sounds.html","id":"synthesize-sounds","dir":"Articles","previous_headings":"","what":"Synthesize sounds","title":"Synthesize and align test sounds","text":"often want figure transmission properties vary across range frequencies. instance, Tobias et al (2010) studied whether acoustic adaptation (special case sensory drive; Morton 1975), explain song evolution Amazonian avian communities. test authors created synthetic pure tone sounds used playback re-recorded different habitats. actual procedure creating synthetic sounds described : “Tones synthesized six different frequencies (0.5, 1.0, 2.0, 3.0, 4.0, 5.0 kHz) encompass range maximum avian auditory sensitivity (Dooling 1982). frequency, generated two sequences two 100-msec tones. One sequence relatively short interval 150 msec, close mean internote interval sample (152± 4 msec). sequence longer interval 250 msec, close mean maximum internote interval sample (283± 74 msec). first sequence reflects fast-paced song second slower paced song (sensu Slabbekoorn et al. 2007). master file (44100 Hz/16 bit WAV) thereby consisted series 12 pairs artificial 100-ms constant-frequency tones six different frequencies (0.5, 1.0, 2.0, 3.0, 4.0, 5.0 kHz).” can synthesize pure tones using function synth_sounds(). function requires 1) frequencies tones synthesize (argument frequencies, kHz) 2) duration tones (durations, seconds). addition, logical arguments fm allow create frequency amplitude modulated sounds respectively. case need six tones 100 ms 0.5, 1, 2, 3, 4, 5 kHz separated intervals 150 ms (least first synthetic file described Tobias et al 2010). can also get selection table (sensu warbleR) information time frequency location every sound. required order make master sound file. get selection table need set argument selec.table = TRUE. can done follows:   function can add complexity additional acoustic dimensions. instance following code generates possible combinations frequencies (2, 3 4 kHz), durations (0.1, 0.2 s), frequency modulation (tonal modulated) amplitude modulation (flat modulated envelope): Note output extended selection table contains time-frequency annotations synthetic sounds:   extended selection table, ‘sound.files’ column refers Wave objects included attributes instead files directory:  ","code":"# load packages library(viridis) library(baRulho) library(Rraven) # synthesize synth_est <- baRulho::synth_sounds( mar = 0.1, frequencies = c(0.5, 1:5), durations = 0.1, fm = FALSE, am = FALSE, sampling.rate = 12 ) # convert into a single wave object synth_wav <- Rraven::exp_est(X = synth_est, single.file = TRUE, wave.object = TRUE) # plot spectro seewave::spectro( wave = synth_wav, scale = FALSE, palette = viridis, grid = FALSE, flim = c(0, 5.5), collevels = seq(-20, 0, 1), osc = TRUE, colwave = \"#482878FF\", heights = c(2, 1), wl = 100 ) # synthesize synth_est2 <- baRulho::synth_sounds( mar = 0.01, sig2 = 0.5, frequencies = 2:4, durations = c(0.1, 0.2), fm = TRUE, am = TRUE, shuffle = TRUE, seed = 123, sampling.rate = 12 ) # convert into a single wave object synth_wav2 <- Rraven::exp_est( X = synth_est2, single.file = TRUE, path = tempdir(), wave.object = TRUE ) # plot spectro seewave::spectro( synth_wav2, tlim = c(0, 3), scale = FALSE, palette = viridis, grid = FALSE, flim = c(0.5, 5.5), collevels = seq(-20, 0, 1), osc = TRUE, colwave = \"#482878FF\", heights = c(2, 1), wl = 140 ) # check first 6 rows head(as.data.frame(synth_est2)) # check name of wave objects names(attributes(synth_est2)$wave.objects) ## [1] \"synthetic_sound_1\" \"synthetic_sound_2\" \"synthetic_sound_3\" ## [4] \"synthetic_sound_4\" \"synthetic_sound_5\" \"synthetic_sound_6\" ## [7] \"synthetic_sound_7\" \"synthetic_sound_8\" \"synthetic_sound_9\" ## [10] \"synthetic_sound_10\" \"synthetic_sound_11\" \"synthetic_sound_12\" ## [13] \"synthetic_sound_13\" \"synthetic_sound_14\" \"synthetic_sound_15\" ## [16] \"synthetic_sound_16\" \"synthetic_sound_17\" \"synthetic_sound_18\" ## [19] \"synthetic_sound_19\" \"synthetic_sound_20\" \"synthetic_sound_21\" ## [22] \"synthetic_sound_22\" \"synthetic_sound_23\" \"synthetic_sound_24\""},{"path":"https://marce10.github.io/baRulho/articles/align_test_sounds.html","id":"create-master-sound-file-for-playback","dir":"Articles","previous_headings":"","what":"Create master sound file for playback","title":"Synthesize and align test sounds","text":"function master_sound_file() creates master sound file (probably guessed) playback experiments. function takes wave objects data frame (extended) selection table containing model sounds concatenates single sound file (silence sounds length can modified). master_sound_file() adds acoustic markers start end playback can used time-sync re-recorded sounds, streamlines quantification acoustic degradation. following example shows create master sound file using synthetic sounds generated . synthetic sounds need add little space top bottom frequency sim_songs() make values exactly pure tones:   function saves master sound file wave file returns selection table R environment time frequency ‘coordinates’ sounds file (careful playing master sound file can shocking audiences!). can look spectrogram output file using seewave function spectro() follows: function can also create master sound file sounds found sound files several sounds files, likely case recordings collected field. following example shows create master sound file using several sound files. code uses example data recordings package warbleR:   , can look spectrogram output file: Note output also exported Raven sound analysis software (Cornell Lab Ornithology) visualization manipulation using function exp_raven() Rraven package. exp_raven() exports selections R environment ‘.txt’ file can read Raven:   sound files annotations can visualized Raven ( acoustic analysis software):   Take look Rraven vignette details export import data R Raven. Note start end markers placed relatively low frequencies less affected degradation. frequency range markers can set argument flim. relative amplitude markers can also adjusted amp.marker argument. Amplitude markers multiplied value supplied markers louder sounds. two features increases chances detecting markers distances.","code":"# create master sound file synth_master_annotations <- baRulho::master_sound_file( X = synth_est, file.name = \"synthetic_master\", dest.path = tempdir(), gap.duration = 0.15 ) ## The file synthetic_master.wav has been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/Rtmp6YINB8' # read wave file wave <- tuneR::readWave(file.path(tempdir(), \"synthetic_master.wav\")) # plot spectrogram seewave::spectro( wave, scale = FALSE, palette = viridis, wl = 150, grid = FALSE, flim = c(0, 4.7) ) # load example data from warbleR data(list = c( \"Phae.long1\", \"Phae.long2\", \"Phae.long3\", \"Phae.long4\", \"lbh_selec_table\" )) # save sound files to temporary folder writeWave(Phae.long1, file.path(tempdir(), \"Phae.long1.wav\")) writeWave(Phae.long2, file.path(tempdir(), \"Phae.long2.wav\")) writeWave(Phae.long3, file.path(tempdir(), \"Phae.long3.wav\")) writeWave(Phae.long4, file.path(tempdir(), \"Phae.long4.wav\")) # make an extended selection table est <- warbleR::selection_table( X = lbh_selec_table, extended = TRUE, confirm.extended = FALSE, path = tempdir(), pb = FALSE ) # add sound_id column est$sound.id <- paste0(abbreviate(est$sound.files), est$selec) # create master sound file master_annotations <- baRulho::master_sound_file( X = est, file.name = \"example_master\", dest.path = tempdir(), gap.duration = 0.3 ) ## The file example_master.wav has been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/Rtmp6YINB8' # read wave file wave <- tuneR::readWave(file.path(tempdir(), \"example_master.wav\")) # plot spectrogram seewave::spectro( wave, scale = FALSE, palette = viridis, collevels = seq(-120, 0, 5), wl = 500, grid = FALSE, flim = c(0, 10) ) Rraven::exp_raven(master_annotations, path = tempdir(), file.name = \"example_master_selection_table\")"},{"path":"https://marce10.github.io/baRulho/articles/align_test_sounds.html","id":"align-re-recorded-sounds","dir":"Articles","previous_headings":"","what":"Align re-recorded sounds","title":"Synthesize and align test sounds","text":"went field (lab) re-recorded master sound files different distances, ready start data analysis. first step getting data ready analysis involves finding sounds within re-recorded sound files. need align start marker master playback re-recorded sound files, based fact time difference marker sounds cases:   use acoustic data included package example data. data subset sound transmission experiment. complete data set experiment hosted repository. two example objects used:   files contained data set:   names self-explanatory: master sound file (“master.wav”) annotations, reference sound file (“reference_1m.wav”) two test files (“test_10m.wav” “test_20m.wav”) re-recorded 10 20 m respectively. Now save files temporary working directory (objects extended selection tables R environment) resemble usual case acoustic data found sound files.   annotations needed aligning test sound must share following structure:   Note ‘sound.id’ column contains unique identifier sound. used label counterparts test sound files. Users can import annotations Raven using Rraven package (see vignette). find location start marker test sound files use functions find_markers() run cross-correlation one markers across test files order determine exact time marker found:   position markers determined highest spectrogram cross-correlation value marker using functions find_markers(). two markers used function computes additional column, ‘time.mismatch’, compares time difference two markers test files master sound file. perfect detection value must 0. number can used measure error. cases precision can improve increasing time resolution spectrogram, , lowering size time window. done argument ‘hop.size’. default 11.6 ms (equivalent 512 samples window length 44.1 kHz file). Let’s try 4 ms:   time location acoustic markers can infer position sounds new recordings. selection table re-recorded files can generated using function align_test_files():   function returns object class input object ‘X’. case ‘X’ data.frame: can check precision alignment looking spectrograms. function plot_aligned_sounds() can create spectrograms visually inspect alignment precision test sound files. spectrograms saved individual JPEG image files (‘dest.path’ supplied). One file created sound file: two files generated code :  ","code":"data(\"master_est\") data(\"test_sounds_est\") unique(master_est$sound.files) ## [1] \"master.wav\" unique(test_sounds_est$sound.files) ## [1] \"10m_closed.wav\" \"10m_open.wav\" \"1m_open.wav\" \"30m_closed.wav\" ## [5] \"30m_open.wav\" # first remove any other wave file in the temporary working directory (dont do it with your data!) unlink(list.files( path = tempdir(), full.names = TRUE, pattern = \".wav\" )) # save master sound file writeWave(object = attr(master_est, \"wave.objects\")[[1]], file.path(tempdir(), \"master.wav\")) # save test sound files for (i in unique(test_sounds_est$sound.files)) { writeWave(object = attr(test_sounds_est, \"wave.objects\")[[i]], file.path(tempdir(), i)) } # make annotations a data frame master_annotations <- as.data.frame(master_est) master_annotations markers_position <- baRulho::find_markers(X = master_annotations, path = tempdir()) ## running cross-correlation (step 1 out of 2): ## running peak detection (step 2 out of 2): markers_position # lower window length markers_position <- baRulho::find_markers(X = master_annotations, hop.size = 4, path = tempdir()) ## running cross-correlation (step 1 out of 2): ## running peak detection (step 2 out of 2): markers_position aligned_tests <- baRulho::align_test_files( X = master_annotations, Y = markers_position, by.song = TRUE, remove.markers = FALSE, path = tempdir() ) is.data.frame(aligned_tests) ## [1] TRUE aligned_tests aligned_imgs <- baRulho::plot_aligned_sounds( X = aligned_tests, path = tempdir(), dest.path = tempdir(), duration = 2.4, ovlp = 0 ) ## The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/Rtmp6YINB8' aligned_imgs ## [1] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmp6YINB8/plot_align_10m_closed.jpeg\" ## [2] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmp6YINB8/plot_align_10m_open.jpeg\" ## [3] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmp6YINB8/plot_align_1m_open.jpeg\" ## [4] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmp6YINB8/plot_align_30m_closed.jpeg\" ## [5] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmp6YINB8/plot_align_30m_open.jpeg\""},{"path":"https://marce10.github.io/baRulho/articles/align_test_sounds.html","id":"manually-fixing-alignment","dir":"Articles","previous_headings":"Align re-recorded sounds","what":"Manually fixing alignment","title":"Synthesize and align test sounds","text":"cases alignments might accurate, particularly markers considerably degraded test sound files. function manual_realign() allows users interactively adjust alignment test sound files produced align_test_files(). function generates multipanel graph spectrogram master sound file top test sound files, highlighting position correspondent test sounds order simplify assessing adjusting alignment: Spectrograms include first seconds sound files (controlled ‘duration’) usually enough tell precision alignment. lower spectrogram shows series ‘buttons’ users can click control test sound file spectrogram (low panel) needs moved left (“<”) right (“>”). Users can also reset spectrogram original position (‘reset’), move next sound file ‘X’ (test sound file annotations) stop process (stop button). function returns object similar input object ‘X’ start end sounds adjusted. default uses start marker reference can modified argument ‘marker’.","code":"baRulho::manual_realign( X = aligned_tests, Y = master_annotations, duration = 2.4, path = tempdir() )"},{"path":"https://marce10.github.io/baRulho/articles/align_test_sounds.html","id":"further-aligning","dir":"Articles","previous_headings":"Align re-recorded sounds","what":"Further aligning","title":"Synthesize and align test sounds","text":"alignments done manually (broadcasting devices add short delays case bluetooth transmitters) small misalignment inferred versus actual start time re-recorded sounds. problematic quantifying degradation baRulho (sound analysis software) precise alignment sound crucial accuracy downstream measures sound degradation. Misalignment can fixed function auto_realign(). function uses spectrogram cross-correlation sync position time sounds regard reference sound. manual_realign() takes sound recorded closest distance source reference sound. function calls warbleR’s cross_correlation() (just ) internally align sounds using cross-correlation. can simulate aligned data set test sound slightly position: Now can re-aligned test sounds: sounds look aligned:   case doesn’t work expected another option. function seltailor() warbleR allows user manually adjust start end sounds extended selection table. Alternatively, users can manually determined position markers using Raven import annotations ‘R’ using function ‘imp_raven()’ Rraven package.   Please report bugs . package baRulho cited follows: Araya-Salas, M. (2020), baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.0.","code":"data(\"test_sounds_est\") data(\"master_est\") # create \"unaligned_test_sounds_est\" by # adding error to \"test_sounds_est\" start and end unaligned_test_sounds_est <- test_sounds_est set.seed(123) noise_time <- sample(c(0.009, -0.01, 0.03, -0.03, 0, 0.07, -0.007), nrow(unaligned_test_sounds_est), replace = TRUE) attr(unaligned_test_sounds_est, \"check.res\")$start <- unaligned_test_sounds_est$start <- unaligned_test_sounds_est$start + noise_time attr(unaligned_test_sounds_est, \"check.res\")$end <- unaligned_test_sounds_est$end <- unaligned_test_sounds_est$end + noise_time #re align rts <- auto_realign(X = unaligned_test_sounds_est, Y = master_est) ## running cross-correlation (step 1 of 2): ## finding peaks and aligning (step 2 out of 2)"},{"path":"https://marce10.github.io/baRulho/articles/align_test_sounds.html","id":"references","dir":"Articles","previous_headings":"","what":"References","title":"Synthesize and align test sounds","text":"Araya-Salas, M. (2017). Rraven: connecting R Raven bioacoustic software. R package version 1.0.0. Araya-Salas, M. (2020), baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.0 Araya-Salas M, Smith-Vidaurre G. (2017) warbleR: R package streamline analysis animal acoustic signals. Methods Ecol Evol 8:184–191. Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206. Marten, K., & Marler, P. (1977). Sound transmission significance animal vocalization. Behavioral Ecology Sociobiology, 2(3), 271-290. Morton, E. S. (1975). Ecological sources selection avian sounds. American Naturalist, 109(965), 17-34. Tobias, J. ., Aben, J., Brumfield, R. T., Derryberry, E. P., Halfwerk, W., Slabbekoorn, H., & Seddon, N. (2010). Song divergence sensory drive Amazonian birds. Evolution, 64(10), 2820-2839. Session information","code":"## R version 4.3.3 (2024-02-29) ## Platform: x86_64-apple-darwin20 (64-bit) ## Running under: macOS Monterey 12.7.3 ## ## Matrix products: default ## BLAS: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRblas.0.dylib ## LAPACK: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRlapack.dylib; LAPACK version 3.11.0 ## ## locale: ## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 ## ## time zone: UTC ## tzcode source: internal ## ## attached base packages: ## [1] stats graphics grDevices utils datasets methods base ## ## other attached packages: ## [1] Rraven_1.0.13 baRulho_2.1.0 ohun_1.0.1 warbleR_1.1.30 ## [5] NatureSounds_1.0.4 seewave_2.2.3 tuneR_1.4.6 viridis_0.6.5 ## [9] viridisLite_0.4.2 knitr_1.45 ## ## loaded via a namespace (and not attached): ## [1] gtable_0.3.4 rjson_0.2.21 xfun_0.42 bslib_0.6.1 ## [5] ggplot2_3.5.0 vctrs_0.6.5 tools_4.3.3 bitops_1.0-7 ## [9] parallel_4.3.3 tibble_3.2.1 proxy_0.4-27 fansi_1.0.6 ## [13] highr_0.10 pkgconfig_2.0.3 KernSmooth_2.23-22 checkmate_2.3.1 ## [17] desc_1.4.3 lifecycle_1.0.4 compiler_4.3.3 stringr_1.5.1 ## [21] textshaping_0.3.7 brio_1.1.4 munsell_0.5.0 class_7.3-22 ## [25] htmltools_0.5.7 sass_0.4.8 RCurl_1.98-1.14 yaml_2.3.8 ## [29] pillar_1.9.0 pkgdown_2.0.7 jquerylib_0.1.4 MASS_7.3-60.0.1 ## [33] classInt_0.4-10 cachem_1.0.8 Deriv_4.1.3 digest_0.6.34 ## [37] stringi_1.8.3 sf_1.0-15 purrr_1.0.2 fastmap_1.1.1 ## [41] grid_4.3.3 colorspace_2.1-0 cli_3.6.2 magrittr_2.0.3 ## [45] utf8_1.2.4 e1071_1.7-14 scales_1.3.0 backports_1.4.1 ## [49] rmarkdown_2.25 Sim.DiffProc_4.8 signal_1.8-0 igraph_2.0.2 ## [53] gridExtra_2.3 png_0.1-8 ragg_1.2.7 kableExtra_1.4.0 ## [57] memoise_2.0.1 pbapply_1.7-2 evaluate_0.23 dtw_1.23-1 ## [61] fftw_1.0-8 testthat_3.2.1 rlang_1.1.3 Rcpp_1.0.12 ## [65] glue_1.7.0 DBI_1.2.2 xml2_1.3.6 svglite_2.1.3 ## [69] rstudioapi_0.15.0 jsonlite_1.8.8 R6_2.5.1 units_0.8-5 ## [73] systemfonts_1.0.5 fs_1.6.3"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"required-data-structure","dir":"Articles","previous_headings":"","what":"Required data structure","title":"Quantify degradation","text":"input data contain additional information. baRulho comes example annotation data set can used understand required data structure:   Transmission experiments tend follow common experimental design model sounds re-recorded increasing distance within transect. structure data must indicate transect distance within transect sound. Hence, besides basic acoustic annotation information (e.g. sound file, time, frequency) table also includes following columns: sound.files: character factor column name sound files including file extension (e.g. “rec_1.wav”) selec: numeric, character factor column unique identifier (least within sound file) annotation (e.g. 1, 2, 3 “”, “b”, “c”) start: numeric column start position time annotated sound (seconds) end: numeric column end position time annotated sound (seconds) ‘bottom.freq’: numeric column bottom frequency frequency range annotation (kHz, used bandpass filtering) top.freq: numeric column top frequency frequency range annotation (kHz, used bandpass filtering) channel: numeric column number channel annotation found multi-channel sound file (optional, default 1 supplied) sound.id: numeric, character factor column ID sounds used identify sounds different distances transects. transect: numeric, character factor column transect ID. distance: numeric column distance (m) source sound recorded. package assumes distance replicated within transect. Importantly, sound ID can one sample distance/transect combination. combined information columns used identify reference sounds test sound. function set_reference_sounds() exactly . two possible experimental designs defining reference sounds (controlled argument ‘method’ set_reference_sounds()): 1: compare sounds (‘sound.id’) counterpart recorded closest distance source (e.g. compare sound recorded 5m, 10m 15m counterpart recorded 1m). default method. design users can single example shortest distance used reference (instance 1m case studies) function try use references transect. However, another test sound ‘sound.id’ shorter distance transects, used reference instead. behavior aims account fact type experiments reference sounds typically recorded 1 m single transect. 2: compare sounds counterpart recorded distance immediately within transect (e.g. sound recorded 10m compared sound recorded 5m, sound recorded 15m compared sound recorded 10m ). Also note selections labeled “ambient” ‘sound.id’. selections refer ambient (background) noise. Ambient noise can used functions correct amplitude differences due non-target sounds. example data 4 recordings increasing distances: 1m, 5m, 10m 15m: data contains selections 5 sounds well 1 ambient noise selections distance/recording:   baRulho can take sound file annotations represented following R objects: Data frames Selection tables Extended selection tables last 2 annotation specific R classes included warbleR. Take look annotation format vignette warbleR details formats.","code":"# load packages library(baRulho) library(viridis) library(ggplot2) # load example data data(\"test_sounds_est\") test_sounds_est # count selection per recordings unique(test_sounds_est$sound.files) ## [1] \"10m_closed.wav\" \"10m_open.wav\" \"1m_open.wav\" \"30m_closed.wav\" ## [5] \"30m_open.wav\" table(test_sounds_est$sound.id, test_sounds_est$distance)"},{"path":[]},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"data-format","dir":"Articles","previous_headings":"Measuring degradation","what":"Data format","title":"Quantify degradation","text":"functions set_reference_sounds() can used determined, row input data, sounds used references. function can using two methods described :   function adds column ‘reference’ used downstream functions plotting measuring degradation. References indicated combination ‘sound.files’ ‘selec’ column. instance, ‘10m.wav-1’ indicates row ‘selec’ column ‘1’ sound file ‘10m.wav’ used reference. function also checks information ‘X’ (input annotation data) right format wont produce errors downstream analysis (see ‘X’ argument description details format). function ignore rows ‘sound.id’ ‘ambient’, ‘start_marker’ ‘end_marker’.","code":"# add reference column test_sounds_est <- set_reference_sounds(test_sounds_est, method = 1) # print test_sounds_est"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"visual-inspection","dir":"Articles","previous_headings":"Measuring degradation","what":"Visual inspection","title":"Quantify degradation","text":"function plot_degradation() aims simplify visual inspection sound degradation producing multipanel figures (saved JPEG files ‘dest.path’) containing visualizations test sound reference. Sounds sorted distance (columns) transect. Visualizations include spectrograms, amplitude envelopes power spectra (last 2 optional): paths image files:   row includes copies sound id given transect (row label includes sound id first line transect second line), also including reference comes another transect. Ambient noise annotations (sound.id ‘ambient’) excluded.","code":"# sort to order panels test_sounds_est <- test_sounds_est[order(test_sounds_est$sound.id, test_sounds_est$transect, decreasing = FALSE),] # create plots degrad_imgs <- plot_degradation(test_sounds_est, dest.path = tempdir()) degrad_imgs ## [1] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmpn5xAcE/plot_degradation_p1.jpeg\" ## [2] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmpn5xAcE/plot_degradation_p2.jpeg\""},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"blur-ratio","dir":"Articles","previous_headings":"Measuring degradation","what":"Blur ratio","title":"Quantify degradation","text":"Blur ratio quantifies degradation sound function distortion amplitude envelope (time domain) excluding changes due energy attenuation. measure first described Dabelsteen et al. (1993). Blur ratio measured mismatch amplitude envelopes (expressed probability density functions) reference sound re-recorded sound. Low values indicate low degradation sounds. function blur_ratio() measures blur ratio sounds reference playback re-recorded different distances. function compares sound corresponding reference sound within supplied frequency range (e.g. bandpass) reference sound (‘bottom.freq’ ‘top.freq’ columns ‘X’). ‘sound.id’ column must used tell function compare sounds belonging category (e.g. song-types). sound files (wave objects extended selection table) must sampling rate length envelopes comparable. Blur ratio can calculated follows:   output data frame simply input data additional column (‘blur.ratio’) blur ratio values. Note NAs returned sounds used reference ‘ambient’ noise selections. function plot_blur_ratio() can used generate image files (‘jpeg’ format) comparison showing spectrograms sounds overlaid amplitude envelopes (probability mass functions (PMF)). paths image files: Output image files (working directory) look like ones:   image shows spectrogram reference re-recorded sound, well envelopes sounds overlaid single graph. Colors indicate sound spectrograms envelopes belong . blur ratio value also displayed. function can also return amplitude spectrum contours argument envelopes = TRUE. contours can directly input ggplot visualize amplitude envelopes, vary distance across sound types (ambient noise included): env.smooth argument change envelope shapes related measurements, higher values tend smooth envelopes. following code sets env.smooth = 800 produces smoother envelopes:  ","code":"# run blur ratio br <- blur_ratio(X = test_sounds_est) ## Computing amplitude envelopes (step 1 out of 2): ## Computing blur ratio (step 2 out of 2): # see output br # plot blur ratio blur_imgs <- plot_blur_ratio(X = test_sounds_est, dest.path = tempdir()) ## Computing amplitude envelopes (step 1 out of 2): ## Producing images (step 2 out of 2): head(blur_imgs) ## [1] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmpn5xAcE/blur_ratio_freq:1-1m_open.wav-4-10m_closed.wav-4.jpeg\" ## [2] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmpn5xAcE/blur_ratio_freq:1-1m_open.wav-4-30m_closed.wav-4.jpeg\" ## [3] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmpn5xAcE/blur_ratio_freq:1-1m_open.wav-4-10m_open.wav-4.jpeg\" ## [4] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmpn5xAcE/blur_ratio_freq:1-1m_open.wav-4-30m_open.wav-4.jpeg\" ## [5] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmpn5xAcE/blur_ratio_freq:4-1m_open.wav-3-10m_closed.wav-3.jpeg\" ## [6] \"/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T//Rtmpn5xAcE/blur_ratio_freq:4-1m_open.wav-3-30m_closed.wav-3.jpeg\" # get envelopes br <- blur_ratio(X = test_sounds_est, envelopes = TRUE) ## Computing amplitude envelopes (step 1 out of 3): ## Computing blur ratio (step 2 out of 3): ## Saving envelopes (step 3 out of 3): envs <- attributes(br)$envelopes # make distance a factor for plotting envs$distance <- as.factor(envs$distance) # plot ggplot(envs, aes(x = time, y = amp, col = distance)) + geom_line() + facet_wrap( ~ sound.id) + scale_color_viridis_d(alpha = 0.7) + labs(x = \"Time (s)\", y = \"Amplitude (PMF)\") + theme_classic() # get envelopes br <- blur_ratio(X = test_sounds_est, envelopes = TRUE, env.smooth = 800) ## Computing amplitude envelopes (step 1 out of 3): ## Computing blur ratio (step 2 out of 3): ## Saving envelopes (step 3 out of 3): envs <- attributes(br)$envelopes envs$distance <- as.factor(envs$distance) ggplot(envs, aes(x = time, y = amp, col = distance)) + geom_line() + facet_wrap( ~ sound.id) + scale_color_viridis_d(alpha = 0.7) + labs(x = \"Time (s)\", y = \"Amplitude (PMF)\") + theme_classic()"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"spectrum-blur-ratio","dir":"Articles","previous_headings":"Measuring degradation","what":"Spectrum blur ratio","title":"Quantify degradation","text":"Spectrum blur ratio (measured spectrum_blur_ratio()) quantifies degradation sound function change sound energy across frequency domain, analogous blur ratio described time domain (implemented blur_ratio()). Low values also indicate low degradation sounds. Spectrum blur ratio measured mismatch power spectra (expressed probability density functions) reference sound re-recorded sound. works way blur_ratio(), comparing sound corresponding reference sound, output images alike well. Spectrum blur ratio can calculated follows:   blur_ratio(), spectrum_blur_ratio() can also return amplitude spectrum contours argument spectra = TRUE:  ","code":"# run Spectrum blur ratio sbr <- spectrum_blur_ratio(test_sounds_est) ## Computing power spectra (step 1 out of 2): ## Computing spectrum blur ratio (step 2 out of 2): # see output sbr sbr <- spectrum_blur_ratio(X = test_sounds_est, spectra = TRUE) ## Computing power spectra (step 1 out of 3): ## Computing spectrum blur ratio (step 2 out of 3): ## Saving spectra (step 3 out of 3): spctr <- attributes(sbr)$spectra spctr$distance <- as.factor(spctr$distance) ggplot(spctr[spctr$freq > 0.3,], aes(y = amp, x = freq, col = distance)) + geom_line() + facet_wrap( ~ sound.id) + scale_color_viridis_d(alpha = 0.7) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (PMF)\") + coord_flip() + theme_classic()"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"excess-attenuation","dir":"Articles","previous_headings":"Measuring degradation","what":"Excess attenuation","title":"Quantify degradation","text":"every doubling distance, sounds attenuate 6 dB loss amplitude (Morton, 1975; Marten & Marler, 1977). additional loss amplitude results excess attenuation, energy loss excess expected occur distance via spherical spreading, due atmospheric conditions habitat (Wiley & Richards, 1978). degradation metric can measured using excess_attenuation() function. Low values indicate little sound attenuation. function compare sound corresponding reference sound within frequency range (e.g. bandpass) reference sound (‘bottom.freq’ ‘top.freq’ columns ‘X’). excess_attenuation() can measured like : output, similar functions, extended selection table input data, also including two new columns (‘reference’ ‘excess.attenuation’) reference sound excess attenuation:  ","code":"# run envelope correlation ea <- excess_attenuation(test_sounds_est) ## Computing amplitude envelopes (step 1 out of 2): ## Computing excess attenuation (step 2 out of 2): # print output ea"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"envelope-correlation","dir":"Articles","previous_headings":"Measuring degradation","what":"Envelope correlation","title":"Quantify degradation","text":"Amplitude envelope correlation measures similarity two sounds time domain. envelope_correlation() function measures envelope correlation coefficients reference playback re-recorded sounds. Values close 1 means similar amplitude envelopes (.e. little degradation occurred). envelopes different lengths (sounds different lengths) cross-correlation applied maximum correlation coefficient returned. Cross-correlation achieved sliding shortest sound along largest one calculating correlation step. functions detailed , ‘sound.id’ column must used instruct function compare sounds belong category. envelope_correlation() can run follows: output also similar functions; extended selection table similar input data, also includes two new columns (‘reference’ ‘envelope.correlation’) reference sound amplitude envelope correlation coefficients:   Note function doesn’t provide graphical output. However, graphs generated blur_ratio() can used inspect envelope shapes alignment sounds.","code":"# run envelope correlation ec <- envelope_correlation(test_sounds_est) ## Computing amplitude envelopes (step 1 out of 2): ## Computing envelope correlations (step 2 out of 2): # print output ec"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"spectrum-correlation","dir":"Articles","previous_headings":"Measuring degradation","what":"Spectrum correlation","title":"Quantify degradation","text":"Spectrum correlation measures similarity two sounds frequency domain. similar envelope_correlation(), frequency domain. sounds compared within frequency range reference sound (spectra length). , values near 1 indicate identical frequency spectrum (.e. degradation). output also similar envelope_correlation():   envelope_correlation(), spectrum_correlation() doesn’t provide graphical output. However, graphs generated spectrum_blur_ratio() can also used inspect spectrum shapes sound alignment.","code":"# run spectrum correlation sc <- spectrum_correlation(test_sounds_est) ## Computing power spectra (step 1 out of 2): ## Computing spectrum correlations (step 2 out of 2): # print output sc"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"signal-to-noise-ratio","dir":"Articles","previous_headings":"Measuring degradation","what":"Signal-to-noise ratio","title":"Quantify degradation","text":"Signal--noise ratio (SNR) quantifies sound amplitude level relation ambient noise metric overall sound attenuation. Therefore, attenuation refers loss energy described Dabelsteen et al (1993). method implemented function signal_to_noise_ratio(), uses envelopes quantify sound power signals background noise. function requires measurement ambient noise, either noise right sound (noise.ref = \"adjacent\") one ambient noise measurements per recording (noise.ref = \"custom\"). latter, selections sound parameters ambient noise measured must specified. Alternatively, one selections ambient noise can used reference (see ‘noise.ref’ argument). can potentially provide accurate representation ambient noise. margins overlap another acoustic signal nearby, SNR inaccurate, margin length carefully considered. SNR less equal one suggests background noise equal overpowering acoustic signal. SNR can measured follows: output also similar functions:   Negative values can occur background noise measured higher power signal. Note function compare sounds references, reference column added.","code":"# run signal to noise ratio snr <- signal_to_noise_ratio(test_sounds_est, pb = FALSE, noise.ref = \"custom\", mar = 0.1) # print output snr"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"tail-to-signal-ratio","dir":"Articles","previous_headings":"Measuring degradation","what":"Tail-to-signal ratio","title":"Quantify degradation","text":"Tail--signal ratio (TSR) used quantify reverberations. Specifically TSR measures ratio energy reverberation tail (time segment right sound) energy sound. general margin reverberation tail measured must specified. function measure TSR within supplied frequency range (e.g. bandpass) reference sound (‘bottom.freq’ ‘top.freq’ columns ‘X’). Two methods calculating reverberations provided (see ‘type’ argument). Type 1 based original description TSR Dabelsteen et al. (1993) type 2 better referred “tail--noise ratio”, given compares amplitude tails ambient noise. types higher values represent reverberations. TSR can measured follows: , output similar functions: Tail--signal ratio values typically negative signals tend higher power reverberating tail.  ","code":"# run tail to signal ratio tsr <- tail_to_signal_ratio(test_sounds_est, tsr.formula = 1, mar = 0.05) # print output tsr"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"spectrogram-correlation","dir":"Articles","previous_headings":"Measuring degradation","what":"Spectrogram correlation","title":"Quantify degradation","text":"Finally, function spcc() measures spectrogram cross-correlation metric sound distortion sounds. Values close 1 means similar spectrograms (.e. little sound distortion). function wrapper warbleR’s cross_correlation(). can run follows: , output similar functions:  ","code":"# run spcc sc <- spcc(X = test_sounds_est, wl = 512) # print output sc"},{"path":[]},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"noise-profiles","dir":"Articles","previous_headings":"Other measurements","what":"Noise profiles","title":"Quantify degradation","text":"function noise_profile() allows estimate frequency spectrum ambient noise. can done extended selection tables (using segments containing sound) entire sound files working directory (path supplied). function uses seewave function meanspec() internally calculate frequency spectra. following code measures ambient noise profile recordings distance >= 5m example extended selection table: output data frame amplitude values frequency bins wave object extended selection table: can graphically represented follows: output data actually average several frequency spectra sound file. can obtain original spectra setting argument averaged = FALSE: Note can limit frequency range using bandpass filter (‘bp’ argument). addition, argument ‘hop.size’, control size time windows, affects precision frequency domain. can get better precision increasing ‘hop.size’ (‘wl’): function can estimate noise profiles entire sound files, supplying list files (argument ‘files’, supplying ‘X’) simply running without supplying ‘X’ ‘files’. case run sound files working directory (‘path’ supplied). Please report bugs . package baRulho cited follows: Araya-Salas, M. (2020), baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.0.","code":"# run noise profile np <- noise_profile(X = test_sounds_est[test_sounds_est$distance > 5,], mar = 0.05) # print output head(np, 20) ggplot(np, aes(y = amp, x = freq, col = sound.files)) + geom_line(linewidth = 1.4) + scale_color_viridis_d(begin = 0.2, end = 0.8, alpha = 0.5) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (dBA)\") + coord_flip() + theme_classic() np <- noise_profile(X = test_sounds_est[test_sounds_est$distance > 5, ], mar = 0.1, averaged = FALSE) # make a column containing sound file and selection np$sf.sl <- paste(np$sound.files, np$selec) ggplot(np, aes( y = amp, x = freq, col = sound.files, group = sf.sl )) + geom_line(linewidth = 1.4) + scale_color_viridis_d(begin = 0.2, end = 0.8, alpha = 0.5) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (dBA)\") + coord_flip() + theme_classic() np <- noise_profile( X = test_sounds_est[test_sounds_est$distance > 5,], mar = 0.05, bp = c(0, 10), averaged = FALSE, hop.size = 3 ) # make a column containing sound file and selection np$sf.sl <- paste(np$sound.files, np$selec) ggplot(np, aes( y = amp, x = freq, col = sound.files, group = sf.sl )) + geom_line(linewidth = 1.4) + scale_color_viridis_d(begin = 0.2, end = 0.8, alpha = 0.5) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (dBA)\") + coord_flip() + theme_classic()"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"references","dir":"Articles","previous_headings":"","what":"References","title":"Quantify degradation","text":"Araya-Salas, M. (2017). Rraven: connecting R Raven bioacoustic software. R package version 1.0.0. Araya-Salas, M. (2020), baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.0 Araya-Salas M, Smith-Vidaurre G. (2017) warbleR: R package streamline analysis animal acoustic signals. Methods Ecol Evol 8:184–191. Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206. Marten, K., & Marler, P. (1977). Sound transmission significance animal vocalization. Behavioral Ecology Sociobiology, 2(3), 271-290. Morton, E. S. (1975). Ecological sources selection avian sounds. American Naturalist, 109(965), 17-34. Tobias, J. ., Aben, J., Brumfield, R. T., Derryberry, E. P., Halfwerk, W., Slabbekoorn, H., & Seddon, N. (2010). Song divergence sensory drive Amazonian birds. Evolution, 64(10), 2820-2839. Session information","code":"## R version 4.3.3 (2024-02-29) ## Platform: x86_64-apple-darwin20 (64-bit) ## Running under: macOS Monterey 12.7.3 ## ## Matrix products: default ## BLAS: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRblas.0.dylib ## LAPACK: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRlapack.dylib; LAPACK version 3.11.0 ## ## locale: ## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 ## ## time zone: UTC ## tzcode source: internal ## ## attached base packages: ## [1] stats graphics grDevices utils datasets methods base ## ## other attached packages: ## [1] ggplot2_3.5.0 viridis_0.6.5 viridisLite_0.4.2 baRulho_2.1.0 ## [5] ohun_1.0.1 warbleR_1.1.30 NatureSounds_1.0.4 seewave_2.2.3 ## [9] tuneR_1.4.6 knitr_1.45 ## ## loaded via a namespace (and not attached): ## [1] gtable_0.3.4 rjson_0.2.21 xfun_0.42 bslib_0.6.1 ## [5] vctrs_0.6.5 tools_4.3.3 bitops_1.0-7 parallel_4.3.3 ## [9] tibble_3.2.1 proxy_0.4-27 fansi_1.0.6 highr_0.10 ## [13] pkgconfig_2.0.3 KernSmooth_2.23-22 checkmate_2.3.1 desc_1.4.3 ## [17] lifecycle_1.0.4 farver_2.1.1 compiler_4.3.3 stringr_1.5.1 ## [21] textshaping_0.3.7 brio_1.1.4 munsell_0.5.0 htmltools_0.5.7 ## [25] class_7.3-22 sass_0.4.8 RCurl_1.98-1.14 yaml_2.3.8 ## [29] pkgdown_2.0.7 pillar_1.9.0 jquerylib_0.1.4 MASS_7.3-60.0.1 ## [33] classInt_0.4-10 cachem_1.0.8 Deriv_4.1.3 digest_0.6.34 ## [37] stringi_1.8.3 sf_1.0-15 purrr_1.0.2 labeling_0.4.3 ## [41] fastmap_1.1.1 grid_4.3.3 colorspace_2.1-0 cli_3.6.2 ## [45] magrittr_2.0.3 utf8_1.2.4 e1071_1.7-14 withr_3.0.0 ## [49] scales_1.3.0 backports_1.4.1 rmarkdown_2.25 Sim.DiffProc_4.8 ## [53] signal_1.8-0 igraph_2.0.2 gridExtra_2.3 png_0.1-8 ## [57] ragg_1.2.7 kableExtra_1.4.0 memoise_2.0.1 pbapply_1.7-2 ## [61] evaluate_0.23 dtw_1.23-1 fftw_1.0-8 testthat_3.2.1 ## [65] rlang_1.1.3 Rcpp_1.0.12 glue_1.7.0 DBI_1.2.2 ## [69] xml2_1.3.6 svglite_2.1.3 rstudioapi_0.15.0 jsonlite_1.8.8 ## [73] R6_2.5.1 units_0.8-5 systemfonts_1.0.5 fs_1.6.3"},{"path":"https://marce10.github.io/baRulho/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Marcelo Araya-Salas. Author, maintainer.","code":""},{"path":"https://marce10.github.io/baRulho/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Araya-Salas, M. (2020), baRulho: quantifying habitat-induced degradation (animal) acoustic signals R. R package version 1.0.0","code":"@Misc{, title = {baRulho: quantifying habitat-induced degradation of (animal) acoustic signals in R}, author = {M. Araya-Salas}, year = {2020}, }"},{"path":"https://marce10.github.io/baRulho/index.html","id":"barulho-quantifying-degradation-of-animal-sounds","dir":"","previous_headings":"","what":"Quantifying (Animal) Sound Degradation ","title":"Quantifying (Animal) Sound Degradation ","text":"baRulho intended facilitate implementation (animal) sound transmission experiments, typically aim quantify changes signal structure transmitted given habitat broadcasting re-recording animal sounds increasing distances. experiments aim answer research questions : habitat structure shaped transmission properties animal acoustic signals? acoustic features shaped selection improving transmission? features degraded different habitats? far acoustic signals can detected? common sequence steps experimentally test hypotheses related sound transmission depicted following diagram: Diagram depicting typical workflow experiment working signal transmission degradation. Nodes black font indicate steps can conducted using baRulho functions. Blue nodes denote functions can used steps.   baRulho offers functions critical steps workflow (black, including ‘checks’) required acoustic data manipulation analysis. main features package : use loops apply tasks sounds referenced selection table (sensu warbleR) production image files graphic representations sound time /frequency let users verify acoustic analyses use annotation tables object format input acoustic data annotations output results use parallelization distribute tasks among several cores improve computational efficiency baRulho builds upon functions data formats warbleR seewave packages, experience packages advised. Take look vignettes overview main features packages: Align test sounds Quantify degradation","code":""},{"path":"https://marce10.github.io/baRulho/index.html","id":"installing-barulho","dir":"","previous_headings":"","what":"Installing baRulho","title":"Quantifying (Animal) Sound Degradation ","text":"Install/load package CRAN follows: install latest developmental version github need R package remotes: system requirements due dependency seewave may needed. Take look link instruction install/troubleshoot external dependencies.","code":"# From CRAN would be # install.packages(\"baRulho\") # load package library(baRulho) # From github remotes::install_github(\"maRce10/baRulho\") # load package library(baRulho)"},{"path":"https://marce10.github.io/baRulho/index.html","id":"other-packages","dir":"","previous_headings":"","what":"Other packages","title":"Quantifying (Animal) Sound Degradation ","text":"packages seewave tuneR provide huge variety functions acoustic analysis manipulation. mostly work wave objects already imported R environment. package warbleR provides functions visualize measure sounds already referenced annotation tables, similar baRulho. package Rraven facilitates exchange data R Raven sound analysis software (Cornell Lab Ornithology) can helpful incorporating Raven annotating tool acoustic analysis workflow R. package ohun works automated detection sound events, providing functions diagnose optimize detection routines.","code":""},{"path":"https://marce10.github.io/baRulho/index.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Quantifying (Animal) Sound Degradation ","text":"Please cite baRulho follows: Araya-Salas, M. (2020), baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.0.","code":""},{"path":"https://marce10.github.io/baRulho/index.html","id":"references","dir":"","previous_headings":"","what":"References","title":"Quantifying (Animal) Sound Degradation ","text":"Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206. Marten, K., & Marler, P. (1977). Sound transmission significance animal vocalization. Behavioral Ecology Sociobiology, 2(3), 271-290. Morton, E. S. (1975). Ecological sources selection avian sounds. American Naturalist, 109(965), 17-34.","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":null,"dir":"Reference","previous_headings":"","what":"Add synthetic noise — add_noise","title":"Add synthetic noise — add_noise","text":"add_noise adds synthetic noise annotations extended selection tables","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add synthetic noise — add_noise","text":"","code":"add_noise( X, mar = NULL, target.snr = 2, precision = 0.1, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), max.iterations = 1000, ... )"},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add synthetic noise — add_noise","text":"X Object class 'extended_selection_table' (created function selection_table warbleR package), generated 'element', reference test sounds (typically output align_test_files). Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass 7) \"sound.id\": ID sounds (needed calculate signal noise ratio internally using signal_to_noise_ratio). mar numeric vector length 1. Specifies margins adjacent start point annotation measure ambient noise. target.snr numeric vector length 1. Specifies desired signal--noise ratio. Must lower current signal--noise ratio. Annotations showing signal--noise ratio higher 'target.snr' remain unchanged. Must supplied. precision numeric vector length 1. Specifies precision adjusted signal--noise ratio (dB). cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. max.iterations Numeric vector length 1. Specifies maximum number iterations internal signal--noise adjusting routine run stopping. Note cases default maximum number iterations (1000) reached. ... Additional arguments passed internally signal_to_noise_ratio.","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add synthetic noise — add_noise","text":"Object 'X' wave objects modified match target signal--noise ratio. also includes additional column, 'adjusted.snr', new signal--noise ratio values.","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Add synthetic noise — add_noise","text":"function adds synthetic noise sounds referenced extended selection table (class created function selection_table warbleR package) decrease signal--noise ratio. can useful, instance, evaluating effect background noise signal structure. Note implementation slow.","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Add synthetic noise — add_noise","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Add synthetic noise — add_noise","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add synthetic noise — add_noise","text":"","code":"if (FALSE) { # load example data data(\"test_sounds_est\") # make it a 'by element' extended selection table X <- warbleR::by_element_est(X = test_sounds_est) # add noise to the first five rows X_noise <- add_noise(X = X[1:5, ], mar = 0.2, target.snr = 3) }"},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":null,"dir":"Reference","previous_headings":"","what":"Align test sound files — align_test_files","title":"Align test sound files — align_test_files","text":"align_test_files aligns test (re-recorded) sound files.","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Align test sound files — align_test_files","text":"","code":"align_test_files( X, Y, path = getOption(\"sound.files.path\", \".\"), by.song = TRUE, marker = NULL, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), ... )"},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Align test sound files — align_test_files","text":"X object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package). data used finding position markers find_markers. also contain 'sound.id' column used label re-recorded sounds according counterpart master sound file. Y object class 'data.frame' output find_markers. object contains position markers re-recorded sound files. one marker supplied sound file one highest correlation score ('scores' column 'X') used. path Character string containing directory path test (re-recorded) sound files found. .song Logical argument indicate extended selection table created song (see '.song' selection_table argument). Default TRUE. marker Character string define whether \"start\" \"end\" marker used aligning re-recorded sound files. Default NULL. DEPRECATED. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. ... Additional arguments passed selection_table customizing extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Align test sound files — align_test_files","text":"object class 'X' aligned sounds test (re-recorded) sound files.","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Align test sound files — align_test_files","text":"function aligns sounds found re-recorded sound files (referenced 'Y') according master sound file (referenced 'X'). one marker supplied sound file one highest correlation score ('scores' column 'X') used. function outputs 'extended selection table' default.","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Align test sound files — align_test_files","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Align test sound files — align_test_files","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Align test sound files — align_test_files","text":"","code":"{ # load example data data(\"master_est\") # save example files in working director to recreate a case in which working # with sound files instead of extended selection tables. # This doesn't have to be done with your own data as you will # have them as sound files already. for (i in unique(test_sounds_est$sound.files)[1:2]) { writeWave(object = attr(test_sounds_est, \"wave.objects\")[[i]], file.path(tempdir(), i)) } # save master file writeWave(object = attr(master_est, \"wave.objects\")[[1]], file.path(tempdir(), \"master.wav\")) # get marker position for the first test file markers <- find_markers(X = master_est, test.files = unique(test_sounds_est$sound.files)[1], path = tempdir()) # align all test sounds alg.tests <- align_test_files(X = master_est, Y = markers, path = tempdir()) } #> running cross-correlation (step 1 out of 2): #> running peak detection (step 2 out of 2): #> Aligning test sound files (step 1 out of 2): #> Creating extended selection table (step 2 out of 2): #> checking selections (step 1 of 2): #> saving wave objects into extended selection table (step 2 of 2):"},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate attenuation of sound pressure level — attenuation","title":"Estimate attenuation of sound pressure level — attenuation","text":"attenuation estimates atmospheric attenuation atmospheric absorption.","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate attenuation of sound pressure level — attenuation","text":"","code":"attenuation( frequency, dist0, dist, temp = 20, rh = 60, pa = 101325, hab.att.coef = 0.02 )"},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate attenuation of sound pressure level — attenuation","text":"frequency Numeric vector length 1 frequency (Hertz). dist0 Numeric vector length 1 distance (m) reference SPL. dist Numeric vector length 1 distance (m) sound propagates. temp Numeric vector length 1 frequency (Celsius). Default 20. rh Numeric vector length 1 relative humidity (percentage). Default 60. pa Numeric vector length 1 atmospheric (barometric) pressure Pa (standard: 101325, default). Used atmospheric attenuation. hab.att.coef Attenuation coefficient habitat (dB/kHz/m).","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate attenuation of sound pressure level — attenuation","text":"Returns geometric, atmospheric habitat attenuation (dB) well combined attenuation.","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Estimate attenuation of sound pressure level — attenuation","text":"Calculate geometric, atmospheric habitat attenuation overall expected attenuation (sum three) based temperature, relative humidity, atmospheric pressure sound frequency. Attenuation values given dB. function modified http://www.sengpielaudio.com","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Estimate attenuation of sound pressure level — attenuation","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Estimate attenuation of sound pressure level — attenuation","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Estimate attenuation of sound pressure level — attenuation","text":"","code":"{ # measure attenuation attenuation(frequency = 2000, dist = 50, dist0 = 1) } #> frequency dist geometric.attenuation atmopheric.attenuation #> 1 2000 50 33.9794 0.4547757 #> habitat.attenuation combined.attenuation #> 1 1.96 36.39418"},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":null,"dir":"Reference","previous_headings":"","what":"Fix small misalignments in the time position test sounds — auto_realign","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"auto_realign fixes small misalignments time position test sounds extended selection table using spectrographic cross-correlation","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"","code":"auto_realign( X, Y, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 90), wn = c(\"hanning\", \"hamming\", \"bartlett\", \"blackman\", \"flattop\", \"rectangle\") )"},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"X object class 'extended_selection_table' created function selection_table warbleR package. object must include following additional columns: 'sound.id', 'bottom.freq' 'top.freq'. Y object class 'extended_selection_table' (class created function selection_table warbleR package) master sound file annotations. data used finding position markers find_markers. also contain 'sound.id' column. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 90. High values slow function produce accurate results. wn character vector length 1 specifying window name ftwindow.","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"Object 'X' time parameters (columns 'start' 'end') tailored closely match start end reference sound.","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"Precise alignment crucial downstream measures sound degradation. function uses spectrographic cross-correlation align position time test sounds. master sound file used reference. function calls warbleR's cross_correlation internally align sounds using cross-correlation. output extended selection table contains new start end values alignment. Note function works improve alignments estimated position test sound already close actual position. Note 'X' 'Y' must extended selection tables sensu selection_table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Clark, C.W., Marler, P. & Beeman K. (1987). Quantitative analysis animal vocal phonology: application Swamp Sparrow song. Ethology. 76:101-115.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"","code":"{ # load example data data(\"test_sounds_est\") data(\"master_est\") # create \"unaligned_test_sounds_est\" by # adding error to \"test_sounds_est\" start and end unaligned_test_sounds_est <- test_sounds_est set.seed(123) noise_time <- sample(c(0.009, -0.01, 0.03, -0.03, 0, 0.07, -0.007), nrow(unaligned_test_sounds_est), replace = TRUE) attr(unaligned_test_sounds_est, \"check.res\")$start <- unaligned_test_sounds_est$start <- unaligned_test_sounds_est$start + noise_time attr(unaligned_test_sounds_est, \"check.res\")$end <- unaligned_test_sounds_est$end <- unaligned_test_sounds_est$end + noise_time # re align realigned_est <- auto_realign(X = unaligned_test_sounds_est, Y = master_est) } #> running cross-correlation (step 1 of 2): #> finding peaks and aligning (step 2 out of 2)"},{"path":"https://marce10.github.io/baRulho/reference/baRulho-package.html","id":null,"dir":"Reference","previous_headings":"","what":"baRulho: quantifying acoustic signal degradation — baRulho-package","title":"baRulho: quantifying acoustic signal degradation — baRulho-package","text":"`baRulho` package intended quantify habitat-induced degradation (animal) acoustic signals.","code":""},{"path":"https://marce10.github.io/baRulho/reference/baRulho-package.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"baRulho: quantifying acoustic signal degradation — baRulho-package","text":"main features package : Loops apply tasks sounds referenced extended selection table comparison playback sounds re-recorded different distances functions allow parallelization tasks, distributes tasks among several processors improve computational efficiency. License: GPL (>= 2)","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/baRulho-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"baRulho: quantifying acoustic signal degradation — baRulho-package","text":"Marcelo Araya-Salas Maintainer: Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure blur ratio in the time domain — blur_ratio","title":"Measure blur ratio in the time domain — blur_ratio","text":"blur_ratio measures blur ratio sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure blur ratio in the time domain — blur_ratio","text":"","code":"blur_ratio( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), env.smooth = getOption(\"env.smooth\", 200), envelopes = FALSE, hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), n.samples = 100, path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure blur ratio in the time domain — blur_ratio","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. env.smooth Numeric vector length 1 determining length sliding window (amplitude samples) used sum smooth amplitude envelope calculation (used internally env). Default 200. envelopes Logical control envelopes returned (attributes, 'attributes(X)$envelopes'). Default FALSE. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 70. Used applying bandpass filtering. n.samples Numeric vector length 1 specifying number amplitude samples use representing amplitude envelopes. Default 100. null raw amplitude envelope used (note can result high RAM memory usage large data sets). Amplitude envelope values interpolated using approx. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure blur ratio in the time domain — blur_ratio","text":"Object 'X' additional column, 'blur.ratio', containing computed blur ratio values. envelopes = TRUE output include amplitude envelopes sounds attributes ('attributes(X)$envelopes').","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure blur ratio in the time domain — blur_ratio","text":"Blur ratio measures degradation sound change sound power time domain described Dabelsteen et al (1993). Low values indicate low degradation sounds. function measures blur ratio sounds reference playback re-recorded different distances. Blur ratio measured mismatch amplitude envelopes (expressed probability mass functions) reference sound re-recorded sound. converting envelopes probability mass functions effect energy attenuation removed, focusing analysis modification envelope shape. function compares sound corresponding reference sound within supplied frequency range (e.g. bandpass) reference sound ('bottom.freq' 'top.freq' columns 'X'). 'sound.id' column must used tell function compare sounds belonging category (e.g. song-types). Two methods setting experimental design provided. wave objects extended selection table must sampling rate length envelopes comparable.","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure blur ratio in the time domain — blur_ratio","text":"Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206.Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure blur ratio in the time domain — blur_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure blur ratio in the time domain — blur_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) blur_ratio(X = X) # using method 2 X <- set_reference_sounds(X = test_sounds_est, method = 2) blur_ratio(X = X) # get envelopes br <- blur_ratio(X = X, envelopes = TRUE) envs <- attributes(br)$envelopes # make distance a factor for plotting envs$distance <- as.factor(envs$distance) # plot rlang::check_installed(\"ggplot2\") library(ggplot2) ggplot(envs, aes(x= time, y = amp, col = distance)) + geom_line() + facet_wrap(~ sound.id) + scale_color_viridis_d() + labs(x = \"Time (s)\", y = \"Amplitude (PMF)\") + theme_classic() } #> Computing amplitude envelopes (step 1 out of 2): #> Computing blur ratio (step 2 out of 2): #> Computing amplitude envelopes (step 1 out of 2): #> Computing blur ratio (step 2 out of 2): #> Computing amplitude envelopes (step 1 out of 3): #> Computing blur ratio (step 2 out of 3): #> Saving envelopes (step 3 out of 3):"},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure detection distance of sound — detection_distance","title":"Measure detection distance of sound — detection_distance","text":"detection_distance detection distance sounds.","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure detection distance of sound — detection_distance","text":"","code":"detection_distance( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), path = getOption(\"sound.files.path\", \".\"), spl = NULL, spl.cutoff = NULL, temp = 20, rh = 60, pa = 101325, hab.att.coef = 0.02, max.distance = 1000, resolution = 0.1, subtract.bgn = TRUE, envelope = c(\"abs\", \"hil\"), mar = NULL )"},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure detection distance of sound — detection_distance","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. spl numeric vector length 1 specifying sound pressure level sounds. supplied measured sounds . spl.cutoff numeric vector length 1 specifying sound pressure level cutoff define sound longer detected. Ideally estimated based sound detection threshold species. temp Numeric vector length 1 frequency (Celsius). Default 20. rh Numeric vector length 1 relative humidity (percentage). Default 60. pa Numeric vector length 1 ambient pressure Pa (standard: 101325, default). Used Atmospheric attenuation. hab.att.coef Attenuation coefficient habitat (dB/kHz/m). max.distance Numeric vector length 1 maximum distance (m) detection evaluated. Note function calculates expected sound pressure level values along vector distances find distance expected sound pressure level equates 'spl.cutoff'. Default 1000 m. resolution Numeric vector length 1 distance resolution (m) estimated detection distance. Higher resolutions take longer estimate. Default 0.1 m. subtract.bgn Logical argument control SPL background noise excluded measured signal SPL. Default FALSE. envelope Character string vector method calculate amplitude envelopes (SPL measured, used required 'spl' supplied), env. Must either 'abs' (absolute envelope, default) 'hil' (Hilbert transformation). mar numeric vector length 1. Specifies margins adjacent start end points selection measure background noise. required subtract background noise sound pressure level (needed 'subtract.bgn = TRUE').","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure detection distance of sound — detection_distance","text":"Object 'X' additional column, 'detection.distance', containing computed detection distances (m).","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure detection distance of sound — detection_distance","text":"function computes maximum distance sound detected, calculated distance sound pressure level (SPL) goes specified SPL cutoff ('spl.cutoff')). function uses internally attenuation estimate SPL increasing values reaches defined cutoff. peak frequency (calculated power spectrum reference sound) reference sound sound ID used carrier frequency distance estimation. sound recorded lowest distance used reference. function assumes recordings made recording volume.","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure detection distance of sound — detection_distance","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Clark, C.W., Marler, P. & Beeman K. (1987). Quantitative analysis animal vocal phonology: application Swamp Sparrow song. Ethology. 76:101-115.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure detection distance of sound — detection_distance","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure detection distance of sound — detection_distance","text":"","code":"if (FALSE) { # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) detection_distance(X = X[X$distance %in% c(1, 10), ], spl.cutoff = 5, mar = 0.05) }"},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure amplitude envelope correlation — envelope_correlation","title":"Measure amplitude envelope correlation — envelope_correlation","text":"envelope_correlation measures amplitude envelope correlation sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure amplitude envelope correlation — envelope_correlation","text":"","code":"envelope_correlation( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), cor.method = c(\"pearson\", \"spearman\", \"kendall\"), env.smooth = getOption(\"env.smooth\", 200), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure amplitude envelope correlation — envelope_correlation","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. cor.method Character string indicating correlation coefficient applied (\"pearson\", \"spearman\", \"kendall\", see cor). env.smooth Numeric vector length 1 determine length sliding window used sum smooth amplitude envelope calculation (used internally env). hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 70. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure amplitude envelope correlation — envelope_correlation","text":"Object 'X' additional column, 'envelope.correlation', containing computed envelope correlation coefficients.","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure amplitude envelope correlation — envelope_correlation","text":"Amplitude envelope correlation measures similarity two sounds time domain. function measures envelope correlation coefficients sounds reference playback re-recorded increasing distances. Values close 1 means similar amplitude envelopes (.e. little degradation occurred). envelopes different lengths (means sounds different lengths) cross-correlation used maximum correlation coefficient returned. Cross-correlation achieved sliding shortest sound along largest one computing correlation step. 'sound.id' column must used indicate function compare sounds belonging category (e.g. song-types). function compares sound corresponding reference sound within supplied frequency range (e.g. bandpass) reference sound ('bottom.freq' 'top.freq' columns 'X'). Two methods computing envelope correlation provided (see 'method' argument). Use blur_ratio create envelopes graphs.","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure amplitude envelope correlation — envelope_correlation","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Apol, C.., Sturdy, C.B. & Proppe, D.S. (2017). Seasonal variability habitat structure may shaped acoustic signals repertoires black-capped boreal chickadees. Evol Ecol. 32:57-74.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure amplitude envelope correlation — envelope_correlation","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure amplitude envelope correlation — envelope_correlation","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) envelope_correlation(X = X) # method 2 # add reference to X X <- set_reference_sounds(X = test_sounds_est, method = 2) envelope_correlation(X = X) } #> Computing amplitude envelopes (step 1 out of 2): #> Computing envelope correlations (step 2 out of 2): #> Computing amplitude envelopes (step 1 out of 2): #> Computing envelope correlations (step 2 out of 2): #> Object of class 'extended_selection_table' #> * The output of the following call: #> selection_table(X = alg, path = \"./testing/example_data/tailored_files_tlalpan/\", extended = TRUE, confirm.extended = FALSE, mar = 10, by.song = \"sound.files\") #> #> Contains: #> * A selection table data frame with 25 row(s) and 11 columns: #> | |sound.files | selec| start| end| bottom.freq| top.freq| #> |:--|:--------------|-----:|------:|------:|-----------:|--------:| #> |8 |10m_closed.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> |9 |10m_closed.wav | 2| 1.3000| 1.5000| 7.8750| 8.8050| #> |10 |10m_closed.wav | 3| 1.5500| 1.7500| 3.2080| 4.0690| #> |11 |10m_closed.wav | 4| 1.8000| 2.0001| 0.4220| 1.2230| #> |12 |10m_closed.wav | 5| 2.0501| 2.2501| 6.9050| 7.9170| #> |13 |10m_open.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> ... 5 more column(s) (sound.id, transect, distance, reference, envelope.correlation) #> and 19 more row(s) #> #> * 5 wave object(s) (as attributes): #> 10m_closed.wav, 10m_open.wav, 1m_open.wav, 30m_closed.wav, 30m_open.wav #> #> * A data frame (check.results) with 25 rows generated by check_sels() (as attribute) #> #> Additional information: #> * The selection table was created by song (see 'class_extended_selection_table') #> * 1 sampling rate(s) (in kHz): 22.05 #> * 1 bit depth(s): 16 #> * Created by warbleR 1.1.29"},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure excess attenuation — excess_attenuation","title":"Measure excess attenuation — excess_attenuation","text":"excess_attenuation measures excess attenuation sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure excess attenuation — excess_attenuation","text":"","code":"excess_attenuation( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), hop.size = getOption(\"hop.size\", 1), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 50), bp = \"freq.range\", path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure excess attenuation — excess_attenuation","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. hop.size numeric vector length 1 specifying time window duration (ms). Default 1 ms, equivalent ~45 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Note lower values increase time resolution, important amplitude calculations. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 50. used bandpass filtering. bp Numeric vector length 2 giving lower upper limits frequency bandpass filter (kHz). Alternatively, set 'freq.range' (default), function use 'bottom.freq' 'top.freq' sound bandpass range. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure excess attenuation — excess_attenuation","text":"Object 'X' additional column, 'excess.attenuation', containing computed excess attenuation values (dB).","code":""},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure excess attenuation — excess_attenuation","text":"Excess attenuation amplitude loss sound excess due spherical spreading (observed attenuation - expected attenuation). every doubling distance, sounds attenuate 6 dB loss amplitude (Morton, 1975; Marten & Marler, 1977). additional loss amplitude results energy loss excess expected occur distance via spherical spreading. represents power loss due additional factors like vegetation atmospheric conditions (Wiley & Richards, 1978). Excess attenuation computed -20 * log10(rms(\"test signal\") / rms(\"reference signal\"))) - (20 * log10(1 / \"distance\") 'rms(..)' represents root mean squared amplitude envelope. Low values indicate little additional attenuation. goal function measure excess attenuation sounds reference playback re-recorded increasing distances. 'sound.id' column must used indicate sounds belonging category (e.g. song-types). function compare sound type corresponding reference sound. Two approaches computing excess attenuation provided (see 'type' argument). NAs returned one envelopes completely flat (e.g. variation amplitude).","code":""},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure excess attenuation — excess_attenuation","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206.Dabelsteen, T., & Mathevon, N. (2002). songbirds sing intensively dawn?. Acta ethologica, 4(2), 65-72.Darden, SK, Pedersen SB, Larsen , & Dabelsteen T. (2008). Sound transmission ground level short-grass prairie habitat implications long-range communication swift fox *Vulpes velox*. Journal Acoustical Society America, 124(2), 758-766.Marten K, & Marler P. (1977). Sound transmission significance animal vocalization. Behavioral Ecology Sociobiology, 2(3), 271-290.Morton ES. (1975). Ecological sources selection avian sounds. American Naturalist, 109(965), 17-34.Wiley, R., & Richards, D. G. (1978). Physical constraints acoustic communication atmosphere: implications evolution animal vocalizations. Behavioral Ecology Sociobiology, 3(1), 69-94.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure excess attenuation — excess_attenuation","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure excess attenuation — excess_attenuation","text":"","code":"{ # load example data data(\"test_sounds_est\") # using method 1 # add reference to X X <- set_reference_sounds(X = test_sounds_est) excess_attenuation(X = X) # using method 2 X <- set_reference_sounds(X = test_sounds_est, method = 2) # excess_attenuation(X = X) } #> Computing amplitude envelopes (step 1 out of 2): #> Computing excess attenuation (step 2 out of 2):"},{"path":"https://marce10.github.io/baRulho/reference/find_markers.html","id":null,"dir":"Reference","previous_headings":"","what":"Find acoustic markers on test sound files — find_markers","title":"Find acoustic markers on test sound files — find_markers","text":"find_markers find acoustic markers test (re-recorded) sound files using spectrographic cross-correlation.","code":""},{"path":"https://marce10.github.io/baRulho/reference/find_markers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Find acoustic markers on test sound files — find_markers","text":"","code":"find_markers( X, markers = c(\"start_marker\", \"end_marker\"), test.files = NULL, path = getOption(\"sound.files.path\", \".\"), pb = getOption(\"pb\", TRUE), cores = getOption(\"mc.cores\", 1), ... )"},{"path":"https://marce10.github.io/baRulho/reference/find_markers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Find acoustic markers on test sound files — find_markers","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference sounds master sound file. Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time, 4) \"end\": end time selections 5) \"sound.id\": unique identifier annotated sounds 'X'. Columns 'top.freq', 'bottom.freq' 'channel' optional. acoustic start end markers (added master_sound_file) labeled \"start_marker\" \"end_marker\" respectively. Required. markers Character vector name annotations (column 'sound.id') used templates cross-correlation. Default c(\"start_marker\", \"end_marker\"). Using one marker recommended time difference position can used evaluate precision detection (see 'Value' section). test.files Character vector length 1 name(s) test (re-recorded) file(s) search marker(s). supplied sound files 'path' used instead. path Character string containing directory path test (re-recorded) sound files found. pb Logical argument control progress bar shown. Default TRUE. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). ... Additional arguments passed template_correlator setting cross-correlation parameters (e.g. 'wl', 'ovlp', etc).","code":""},{"path":"https://marce10.github.io/baRulho/reference/find_markers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Find acoustic markers on test sound files — find_markers","text":"data frame test file names, marker id, maximum cross-correlation score marker start end detected. two markers used function computes additional column, 'time.mismatch', compares time difference two markers test-files master sound file. perfect detection value must 0.","code":""},{"path":"https://marce10.github.io/baRulho/reference/find_markers.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Find acoustic markers on test sound files — find_markers","text":"function takes master sound file's reference data ('X') finds position acoustics markers ('markers' argument, included selections 'X') re-recorded sound files. used align signals found re-recorded sound files according master sound file referenced 'X'. position markers determined highest spectrogram cross-correlation value marker using functions template_correlator template_detector. Make sure master sound file (referred 'X') found folder re-recorded sound files. Take look package vignette information incorporate function sound degradation analysis workflow. cases markers correctly detected editing test sound files remove audio segments target sounds (start marker end marker) can improve performance. Using low 'hop.size' window length 'wl' (used internally template_correlator) can help improve precision spectrogram types (argument 'type' template_correlator) can sometimes show better performance markers highly degraded.","code":""},{"path":"https://marce10.github.io/baRulho/reference/find_markers.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Find acoustic markers on test sound files — find_markers","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/find_markers.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Find acoustic markers on test sound files — find_markers","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/find_markers.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Find acoustic markers on test sound files — find_markers","text":"","code":"{ # set temporary directory td <- tempdir() # load example data data(\"master_est\") # save example files in working director to recreate a case in which working # with sound files instead of extended selection tables. # This doesn't have to be done with your own data as you will # have them as sound files already. for (i in unique(test_sounds_est$sound.files)[1:2]) { writeWave(object = attr(test_sounds_est, \"wave.objects\")[[i]], file.path(td, i)) } # save master file writeWave(object = attr(master_est, \"wave.objects\")[[1]], file.path(td, \"master.wav\")) # set path and no progress bar in global options options(sound.files.path = td, pb = FALSE) # get marker position markers <- find_markers(X = master_est, test.files = unique(test_sounds_est$sound.files)[2]) }"},{"path":"https://marce10.github.io/baRulho/reference/manual_realign.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot spectrograms to check test sound files alignment — manual_realign","title":"Plot spectrograms to check test sound files alignment — manual_realign","text":"manual_realign plots spectrograms visually inspect alignment precision test sound files.","code":""},{"path":"https://marce10.github.io/baRulho/reference/manual_realign.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot spectrograms to check test sound files alignment — manual_realign","text":"","code":"manual_realign( X, Y, hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 0), path = getOption(\"sound.files.path\", \".\"), collevels = seq(-120, 0, 5), palette = viridis::viridis, duration = 2, mar = 0.2, step.lengths = c(5, 30), flim = NULL, label.col = \"white\", ext.window = TRUE, width = 10, height = 5, srt = 0, cex = 1, fast.spec = TRUE, marker = \"start_marker\", grid = 0.2, ... )"},{"path":"https://marce10.github.io/baRulho/reference/manual_realign.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot spectrograms to check test sound files alignment — manual_realign","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds (typically output align_test_files). Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass 7) \"sound.id\": ID sounds used identify counterparts across distances. sound must unique ID within distance. Y object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) master sound file annotations. data used finding position markers find_markers. also contain 'sound.id' column. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 0. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. collevels numeric vector length 3. Specifies levels partition amplitude range spectrogram (dB). levels higher resolution spectrogram. Default seq(-120, 0, 1). palette Color palette function spectrogram. Default viridis. See spectro palettes. Palettes gray.2 may work better fast.spec = TRUE (argument can passed internal spectrogram function using \"...\"). duration numeric vector length 1. Specifies overall duration clip plotted. Notice initial part test files plotted enough tell precision alignment. mar numeric vector length 1. Specifies minimum margins adjacent () start marker used checking alignments (see 'marker' argument). Default 0.2. step.lengths Numeric vector length 2 indicating time length (ms) short (min(step.lengths)) long steps (max(step.lengths)) manually aligning spectrograms. Default c(5, 30). flim numeric vector length 2 indicating highest lowest frequency limits (kHz) spectrogram, spectro. Default NULL plot spectrograms full frequency range (0 - nyquist frequency). label.col Character string controlling color lines sound ID labels. ext.window Logical. TRUE external graphic window used.Dimensions can set using 'width' 'height' arguments. Default TRUE. width Numeric vector length 1. Single value (inches) indicating width output image files. Default 10. height Numeric vector length 1. Single value (inches) indicating height output image files. Default 5. srt Numeric argument length 1. rotation (degrees) sound id labels. Default 0. cex Numeric argument length 1controlling size sound id text labels. Default 1. fast.spec Logical. TRUE image function used internally create spectrograms, substantially increases performance (much faster), although options become unavailable, collevels (amplitude scale). Default FALSE. marker Character string name marker used main reference checking/adjusting time alignments. Default 'start_marker'. Note can take sound IDs 'Y$sound.id'. grid Numeric vector length 1 controlling spacing vertical lines spectrogram. Default 0.2 s. Use 0 remove grid. ... Additional arguments passed internal spectrogram creating function customizing graphical output. function modified version spectro, takes arguments.","code":""},{"path":"https://marce10.github.io/baRulho/reference/manual_realign.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot spectrograms to check test sound files alignment — manual_realign","text":"Creates multipanel graph spectrograms master test sound files users can interactively adjust alignment time. Return object similar input object 'X' start end sounds adjusted.","code":""},{"path":"https://marce10.github.io/baRulho/reference/manual_realign.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot spectrograms to check test sound files alignment — manual_realign","text":"function allows interactive adjustment alignment test sound files produced align_test_files. function generates multipanel graph spectrogram master sound file top test sound files, highlighting position correspondent test sounds order simplify assessing adjusting alignment. Spectrograms include first seconds sound files (controlled 'duration') usually enough tell precision alignment. lower spectrogram shows series 'buttons' users can click control test sound file spectrogram (low panel) needs moved left (\"<\") right (\">\"). Users can also reset spectrogram original position ('reset'), move next sound file 'X' (test sound file annotations) stop process (stop button). function returns object similar input object 'X' start end sounds adjusted.","code":""},{"path":"https://marce10.github.io/baRulho/reference/manual_realign.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plot spectrograms to check test sound files alignment — manual_realign","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/manual_realign.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot spectrograms to check test sound files alignment — manual_realign","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/manual_realign.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot spectrograms to check test sound files alignment — manual_realign","text":"","code":"{ # load example data data(\"master_est\") # save example files in working director to recreate a case in which working # with sound files instead of extended selection tables. # This doesn't have to be done with your own data as you will # have them as sound files already. for (i in unique(test_sounds_est$sound.files)[1:2]) { writeWave(object = attr(test_sounds_est, \"wave.objects\")[[i]], file.path(tempdir(), i)) } # save master file writeWave(object = attr(master_est, \"wave.objects\")[[1]], file.path(tempdir(), \"master.wav\")) # get marker position markers <- find_markers(X = master_est, test.files = unique(test_sounds_est$sound.files)[2], path = tempdir()) # align all test sounds alg.tests <- align_test_files(X = master_est, Y = markers) # add error to alignment lag <- (as.numeric(as.factor(alg.tests$sound.files)) - 2) / 30 alg.tests$start <- alg.tests$start + lag alg.tests$end <- alg.tests$end + lag if(interactive()){ realigned_est <- manual_realign(X = alg.tests, Y = master_est, duration = 2, ovlp = 50, hop.size = 14, collevels = seq(-140, 0, 5), palette = viridis::mako, ext.window = FALSE) } }"},{"path":"https://marce10.github.io/baRulho/reference/master_est.html","id":null,"dir":"Reference","previous_headings":"","what":"Extended selection table of master acoustic data — master_est","title":"Extended selection table of master acoustic data — master_est","text":"Extended selection table (est) acoustic data annotations master sound file synthetic sounds. synthetic sounds 2 s long, frequency modulated amplitude modulated. data created function selection_table warbleR package. re-recorded data generated sounds found example object test_sounds_est.","code":""},{"path":"https://marce10.github.io/baRulho/reference/master_est.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extended selection table of master acoustic data — master_est","text":"","code":"data(master_est)"},{"path":"https://marce10.github.io/baRulho/reference/master_est.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Extended selection table of master acoustic data — master_est","text":"Extended selection table object warbleR format, contains annotations acoustic data.","code":""},{"path":"https://marce10.github.io/baRulho/reference/master_est.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Extended selection table of master acoustic data — master_est","text":"Marcelo Araya-Salas","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/master_sound_file.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a master sound file — master_sound_file","title":"Create a master sound file — master_sound_file","text":"master_sound_file creates master sound file used playback experiments related sound degradation.","code":""},{"path":"https://marce10.github.io/baRulho/reference/master_sound_file.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a master sound file — master_sound_file","text":"","code":"master_sound_file( X, file.name, dest.path = getOption(\"dest.path\", \".\"), overwrite = FALSE, delay = 1, gap.duration = 1, amp.marker = 2, flim = c(0, 4), cex = 14, path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/master_sound_file.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a master sound file — master_sound_file","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference model sounds. Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass 6) \"top.freq\": high frequency bandpass. optional 'sound.id' column can included use custom label sound output. column must contain unique id sound (labels repeated). supplied function make combining sound file selection columns. file.name Character string indicating name sound file. dest.path Character string containing directory path sound file saved. NULL (default) current working directory used instead. overwrite Logical argument determine function overwrite existing sound file file name. Default current working directory. delay Numeric vector length 1 control duration (s) silence gap beginning (end) sound file. can useful allow time start playback experiment. Default 1. gap.duration Numeric vector length 1 control duration (s) silence gaps placed sounds. Default 1 s. amp.marker Numeric vector length 1 use constant amplify markers amplitude. useful increase amplitude markers relation sounds, picked distances. Default 2. flim Numeric vector length 2 control frequency range markers found. NULL markers display across whole frequency range. Default c(0, 4). cex Numeric vector length 1 indicating font size start end markers. Default 14. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/master_sound_file.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a master sound file — master_sound_file","text":".wav file 'path' well data frame R environment annotations (.e. time position) sounds master sound file additional column 'sound.id' provides unique id sound sound file. useful identifying/labeling sounds test (re-recorded) sound files downstream analyses.","code":""},{"path":"https://marce10.github.io/baRulho/reference/master_sound_file.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create a master sound file — master_sound_file","text":"function intended simplify creation master sound files playback experiments sound degradation studies. function clips sounds sound files (wave objects extended selection tables) concatenates single sound file. function also adds acoustic markers start end playback can used time-sync test (re-recorded) sounds facilitate streamlining degradation quantification.","code":""},{"path":"https://marce10.github.io/baRulho/reference/master_sound_file.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Create a master sound file — master_sound_file","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/master_sound_file.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Create a master sound file — master_sound_file","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/master_sound_file.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a master sound file — master_sound_file","text":"","code":"{ # load example data from warbleR data(list = c( \"Phae.long1\", \"Phae.long2\", \"Phae.long3\", \"Phae.long4\", \"lbh_selec_table\" )) # save sound files to temporary folder writeWave(Phae.long1, file.path(tempdir(), \"Phae.long1.wav\")) writeWave(Phae.long2, file.path(tempdir(), \"Phae.long2.wav\")) writeWave(Phae.long3, file.path(tempdir(), \"Phae.long3.wav\")) writeWave(Phae.long4, file.path(tempdir(), \"Phae.long4.wav\")) # make an extended selection table est <- selection_table( X = lbh_selec_table, extended = TRUE, confirm.extended = FALSE, path = tempdir() ) # create master sound file master.sel.tab <- master_sound_file( X = est, file.name = \"example_master\", dest.path = tempdir(), gap.duration = 0.3 ) if (FALSE) { # the following code exports the selection table to Raven # using the Rraven package Rraven::exp_raven(master.sel.tab, path = tempdir(), file.name = \"example_master_selection_table\") } } #> checking selections (step 1 of 2): #> saving wave objects into extended selection table (step 2 of 2): #> The file example_master.wav has been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpMy3SyV'"},{"path":"https://marce10.github.io/baRulho/reference/noise_profile.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure full spectrum sound noise profiles — noise_profile","title":"Measure full spectrum sound noise profiles — noise_profile","text":"noise_profile Measure full spectrum sound pressure levels (.e. noise profiles) sound files extended selection tables.","code":""},{"path":"https://marce10.github.io/baRulho/reference/noise_profile.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure full spectrum sound noise profiles — noise_profile","text":"","code":"noise_profile( X = NULL, files = NULL, mar = NULL, noise.ref = c(\"adjacent\", \"custom\"), cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), path = getOption(\"sound.files.path\", \".\"), bp = NULL, hop.size = getOption(\"hop.size\", 1), wl = getOption(\"wl\", NULL), PSD = FALSE, norm = TRUE, dB = c(\"A\", \"B\", \"C\", \"D\", \"ITU\", \"max0\"), averaged = TRUE )"},{"path":"https://marce10.github.io/baRulho/reference/noise_profile.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure full spectrum sound noise profiles — noise_profile","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass 7) \"sound.id\": ID sounds used identify counterparts across distances (needed \"custom\" noise reference, see \"noise.ref\" argument). Default NULL. files Character vector names wave files analyzed. Files must found 'path' supplied (working directory 'path' supplied). Default NULL. mar numeric vector length 1. Specifies margins adjacent start end points selection measure ambient noise. Required 'X' supplied ignored supplied. Default NULL. noise.ref Character vector length 1 determined noise segment must used measuring ambient noise. Ignored 'X' supplied. Two options available: adjacent: measure ambient noise right sound (using argument 'mar' define duration ambient noise segments). custom: measure ambient noise segments referenced selection table (labeled 'ambient' 'sound.id' column). cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. bp Numeric vector length 2 giving lower upper limits frequency bandpass filter (kHz). Default NULL. hop.size numeric vector length 1 specifying time window duration (ms). Default 1 ms, equivalent ~45 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. Ignored bp = NULL. supplied, 'hop.size' ignored. Note lower values increase time resolution, important amplitude ratio calculations. PSD Logical control whether Probability Mass Function (probability distribution frequencies). See meanspec. Default FALSE. norm Logical control whether amplitude values normalized (divided maximum) highest value 1. See meanspec. Default TRUE. dB character string length 1 specifying type dB return: \"max0\" maximum dB value 0, \"\", \"B\", \"C\", \"D\", \"ITU\" common dB weights. See meanspec. Default \"\". averaged Logical control frequency spectra averaged within sound file. Default TRUE.","code":""},{"path":"https://marce10.github.io/baRulho/reference/noise_profile.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure full spectrum sound noise profiles — noise_profile","text":"data frame containing frequency spectra sound file wave object ('X' supplied class 'extended.selection.table').","code":""},{"path":"https://marce10.github.io/baRulho/reference/noise_profile.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure full spectrum sound noise profiles — noise_profile","text":"function estimates full spectrum sound pressure levels (.e. noise profiles) ambient noise. can done data frames/(extended) selection tables (using segments containing target sound 'ambient' sound id) complete sound files working directory (path supplied). function uses meanspec internally calculate frequency spectra.","code":""},{"path":"https://marce10.github.io/baRulho/reference/noise_profile.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure full spectrum sound noise profiles — noise_profile","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/noise_profile.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure full spectrum sound noise profiles — noise_profile","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/noise_profile.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure full spectrum sound noise profiles — noise_profile","text":"","code":"{ # load example data data(\"test_sounds_est\") # measure on custom noise reference noise_profile(X = test_sounds_est, mar = 0.01, pb = FALSE, noise.ref = \"custom\") # remove noise selections so noise is measured right before the signals pe <- test_sounds_est[test_sounds_est$sound.id != \"ambient\", ] noise_profile(X = pe, mar = 0.01, pb = FALSE, noise.ref = \"adjacent\") } #> sound.files freq amp #> 1 10m_closed.wav 1.002273 -1.478756370 #> 2 10m_closed.wav 2.004545 -8.554912560 #> 3 10m_closed.wav 3.006818 -15.653879395 #> 4 10m_closed.wav 4.009091 -20.594564397 #> 5 10m_closed.wav 5.011364 -24.596826317 #> 6 10m_closed.wav 6.013636 -27.741536121 #> 7 10m_closed.wav 7.015909 -28.631141207 #> 8 10m_closed.wav 8.018182 -29.343274598 #> 9 10m_closed.wav 9.020455 -31.581649783 #> 10 10m_closed.wav 10.022727 -37.142756979 #> 11 10m_open.wav 1.002273 -1.470944432 #> 12 10m_open.wav 2.004545 -5.716210091 #> 13 10m_open.wav 3.006818 -14.060376878 #> 14 10m_open.wav 4.009091 -21.637019767 #> 15 10m_open.wav 5.011364 -28.007595476 #> 16 10m_open.wav 6.013636 -31.998254047 #> 17 10m_open.wav 7.015909 -33.040067144 #> 18 10m_open.wav 8.018182 -33.446761775 #> 19 10m_open.wav 9.020455 -36.054384166 #> 20 10m_open.wav 10.022727 -40.262096085 #> 21 1m_open.wav 1.002273 0.001384514 #> 22 1m_open.wav 2.004545 -4.328099010 #> 23 1m_open.wav 3.006818 -12.731830547 #> 24 1m_open.wav 4.009091 -20.519891620 #> 25 1m_open.wav 5.011364 -24.786032150 #> 26 1m_open.wav 6.013636 -27.331145913 #> 27 1m_open.wav 7.015909 -27.522403062 #> 28 1m_open.wav 8.018182 -27.601169568 #> 29 1m_open.wav 9.020455 -30.958903505 #> 30 1m_open.wav 10.022727 -36.213758740 #> 31 30m_closed.wav 1.002273 -5.018620398 #> 32 30m_closed.wav 2.004545 -19.660800804 #> 33 30m_closed.wav 3.006818 -26.467263845 #> 34 30m_closed.wav 4.009091 -29.190019017 #> 35 30m_closed.wav 5.011364 -33.368022266 #> 36 30m_closed.wav 6.013636 -37.485873353 #> 37 30m_closed.wav 7.015909 -39.725404754 #> 38 30m_closed.wav 8.018182 -42.088478865 #> 39 30m_closed.wav 9.020455 -44.455196777 #> 40 30m_closed.wav 10.022727 -47.253627732 #> 41 30m_open.wav 1.002273 -0.794205765 #> 42 30m_open.wav 2.004545 -5.394132145 #> 43 30m_open.wav 3.006818 -16.362837354 #> 44 30m_open.wav 4.009091 -21.711879855 #> 45 30m_open.wav 5.011364 -26.204882614 #> 46 30m_open.wav 6.013636 -26.312227870 #> 47 30m_open.wav 7.015909 -28.104324225 #> 48 30m_open.wav 8.018182 -28.673914281 #> 49 30m_open.wav 9.020455 -32.218532962 #> 50 30m_open.wav 10.022727 -34.076725570"},{"path":"https://marce10.github.io/baRulho/reference/plot_aligned_sounds.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","title":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","text":"plot_aligned_sounds plots spectrograms visually inspect alignment precision test sound files.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_aligned_sounds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","text":"","code":"plot_aligned_sounds( X, hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 50), path = getOption(\"sound.files.path\", \".\"), cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), collevels = seq(-120, 0, 5), palette = viridis::viridis, duration = 2, mar = 0.2, dest.path = getOption(\"dest.path\", \".\"), flim = NULL, col = \"white\", width = 7, height = 4, res = 100, label = TRUE, fast.spec = FALSE, srt = 0, cex = 1, ... )"},{"path":"https://marce10.github.io/baRulho/reference/plot_aligned_sounds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass 7) \"sound.id\": ID sounds used identify counterparts across distances. sound must unique ID within distance. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. Ignored bp = NULL. supplied, 'hop.size' ignored. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 0. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. collevels numeric vector length 3. Specifies levels partition amplitude range spectrogram (dB). levels higher resolution spectrogram. Default seq(-40, 0, 1). seq(-115, 0, 1) produces spectrograms similar acoustic analysis software packages. palette Color palette function spectrogram. Default viridis. See spectro palettes. Palettes gray.2 may work better fast.spec = TRUE. duration numeric vector length 1. Specifies overall duration clip plotted. Notice initial part test files plotted enough tell precision alignment. mar numeric vector length 1. Specifies margins adjacent start first annotation included plot. dest.path Character string containing directory path image files saved. supplied current working directory used instead. flim numeric vector length 2 indicating highest lowest frequency limits (kHz) spectrogram, spectro. Default NULL plot spectrograms full frequency range (0 - nyquist frequency). col Character string controlling color lines sound ID labels. width Numeric vector length 1. Single value (inches) indicating width output image files. Default 7. height Numeric vector length 1. Single value (inches) indicating height output image files. Default 4. res Numeric argument length 1. Controls image resolution. Default 100 (faster) although 300 - 400 recommended publication/presentation quality. label Logical control labels ('sound.id' column 'X') plotted. Default TRUE. fast.spec Logical. TRUE image function used internally create spectrograms, substantially increases performance (much faster), although options become unavailable, collevels (amplitude scale). Default FALSE. srt Numeric argument length 1. rotation (degrees) sound id labels. Default 0. cex Numeric argument length 1controlling size sound id text labels. Default 1. ... Additional arguments passed internal spectrogram creating function customizing graphical output. function modified version spectro, takes arguments.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_aligned_sounds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","text":"Image files jpeg format spectrograms working directory, one sound file 'X'. also returns file path images invisibly.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_aligned_sounds.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","text":"functions aims simplify evaluation alignment test sound files align_test_files. function creates single spectrogram sound file (saved 'dest.path'). Spectrograms include first seconds sound files (controlled 'duration') usually enough tell precision alignment. plots include vertical lines denoting start end sound well sound ID ('sound.id' column 'X'). Note plot created R graphic device.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_aligned_sounds.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/plot_aligned_sounds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_aligned_sounds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot spectrograms to check test sound files alignment — plot_aligned_sounds","text":"","code":"{ # load example data data(\"test_sounds_est\") # plot (look into temporary working directory `tempdir()`) plot_aligned_sounds(X = test_sounds_est, dest.path = tempdir(), duration = 3, ovlp = 0) } #> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpMy3SyV'"},{"path":"https://marce10.github.io/baRulho/reference/plot_blur_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot blur ratio — plot_blur_ratio","title":"Plot blur ratio — plot_blur_ratio","text":"plot_blur_ratio plots time frequency blur ratio sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_blur_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot blur ratio — plot_blur_ratio","text":"","code":"plot_blur_ratio( X, type = c(\"envelope\", \"spectrum\"), cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), env.smooth = getOption(\"env.smooth\", 200), spec.smooth = getOption(\"spec.smooth\", 5), res = 150, flim = c(\"-1\", \"+1\"), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), palette = viridis::viridis, collevels = seq(-120, 0, 5), dest.path = getOption(\"dest.path\", \".\"), path = getOption(\"sound.files.path\", \".\"), colors = viridis::viridis(3), n.samples = 100 )"},{"path":"https://marce10.github.io/baRulho/reference/plot_blur_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot blur ratio — plot_blur_ratio","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. type Character vector length 1 indicating type blur ratio plot. two options 'envelope' (regular blur ratio blur_ratio, default) 'spectrum' (spectrum blur ratio spectrum_blur_ratio). cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. env.smooth Numeric vector length 1 determining length sliding window (amplitude samples) used sum smooth amplitude envelope calculation (used internally env). Default 200. spec.smooth Numeric vector length 1 determining length sliding window used sum smooth power spectrum calculation (kHz). Default 5. res Numeric argument length 1. Controls image resolution. Default 150 (faster) although 300 - 400 recommended publication/presentation quality. flim numeric vector length 2 indicating highest lowest frequency limits (kHz) spectrograms, spectro. Default NULL. Alternatively, character vector similar c(\"-1\", \"1\") first number value added minimum bottom frequency 'X' second value added maximum top frequency 'X'. computed independently sound id frequency limit better fits frequency range annotated signals. useful test sounds show marked differences frequency ranges. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. used plotting. Default 70. Applied spectra spectrograms image files. palette color palette function used assign colors plot, spectro. Default viridis. collevels Numeric vector indicating set levels used partition amplitude range spectrogram (dB) spectro. Default seq(-120, 0, 5). dest.path Character string containing directory path image files saved. supplied current working directory used instead. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. colors Character vector length 4 containing colors used color identify reference sound (element 1), color identify test sound (element 2) color blurred region (element 3). n.samples Numeric vector length 1 specifying number amplitude samples (frequency bins spectrum = TRUE) use representing power distributions. Default 100. null raw power distribution used (note can result high RAM memory usage large data sets).","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_blur_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot blur ratio — plot_blur_ratio","text":"returns 1 image file ('jpeg' format) blur ratio estimation, showing spectrograms sounds overlaid amplitude envelopes (power spectra spectrum = TRUE) probability mass functions (PMF). Spectrograms shown within frequency range reference sound. also returns file path images invisibly.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_blur_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot blur ratio — plot_blur_ratio","text":"function generates image files ('jpeg' format) possible blur ratio estimation 'X'. image files show spectrograms sounds overlaid power distribution (either amplitude envelopes power spectrum, see argument 'type') probability mass functions (PMF). output graphs highlight mismatch compared distribution represent estimated blur ratio returned either blur_ratio spectrum_blur_ratio. Spectrograms shown within frequency range reference sound also show dotted lines time (type = \"envelope\") frequency range (type = \"spectrum\") energy distributions computed.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_blur_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plot blur ratio — plot_blur_ratio","text":"Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206.Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/plot_blur_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot blur ratio — plot_blur_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_blur_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot blur ratio — plot_blur_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) # create plots plot_blur_ratio(X = X, dest.path = tempdir()) } #> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpMy3SyV'"},{"path":"https://marce10.github.io/baRulho/reference/plot_degradation.html","id":null,"dir":"Reference","previous_headings":"","what":"Save multipanel plots with reference and test sounds — plot_degradation","title":"Save multipanel plots with reference and test sounds — plot_degradation","text":"plot_degradation creates multipanel plots (image files) reference test sounds distance transect.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_degradation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Save multipanel plots with reference and test sounds — plot_degradation","text":"","code":"plot_degradation( X, nrow = 4, env.smooth = getOption(\"env.smooth\", 200), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), path = getOption(\"sound.files.path\", \".\"), dest.path = getOption(\"dest.path\", \".\"), cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), collevels = seq(-120, 0, 5), palette = viridis::viridis, flim = c(\"-1\", \"+1\"), envelope = TRUE, spectrum = TRUE, heights = c(4, 1), widths = c(5, 1), margins = c(2, 1), row.height = 2, col.width = 2, cols = viridis::mako(4, alpha = 0.3), res = 120, ... )"},{"path":"https://marce10.github.io/baRulho/reference/plot_degradation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Save multipanel plots with reference and test sounds — plot_degradation","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. nrow Numeric vector length 1 number rows per image file. Default 4. dynamically adjusted rows needed set. env.smooth Numeric vector length 1 determining length sliding window (amplitude samples) used sum smooth amplitude envelope power spectrum calculations (used internally env). Default 200. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. used plotting. Default 70. Applied spectra spectrograms image files. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. dest.path Character string containing directory path image files saved. supplied current working directory used instead. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. collevels Numeric vector indicating set levels used partition amplitude range spectrogram (dB) spectro. Default seq(-120, 0, 5). palette color palette function used assign colors plot, spectro. Default viridis. flim numeric vector length 2 indicating highest lowest frequency limits (kHz) spectrogram, spectro. Default NULL. Alternatively, character vector similar c(\"-1\", \"1\") first number value added minimum bottom frequency 'X' second value added maximum top frequency 'X'. computed independently sound id frequency limit better fits frequency range annotated signals. useful test sounds show marked differences frequency ranges. envelope Logical control envelopes plotted. Default TRUE. spectrum Logical control power spectra plotted. Default TRUE. heights Numeric vector length 2 control relative heights spectrogram (first number) amplitude envelope (second number) envelope = TRUE. Default c(4, 1). widths Numeric vector length 2 control relative widths spectrogram (first number) power spectrum (second number) spectrum = TRUE. Default c(5, 1). margins Numeric vector length 2 control relative time test sound (first number) adjacent margins (.e. adjacent background noise, second number) included spectrogram spectrum = TRUE. Default c(2, 1) means margin next sound half duration sound. Note spectrograms time length margins calculated ensure spectrograms match duration spectrogram longest sound. , argument controls margin longest sound. row.height Numeric vector length 1 controlling height (inches) sound panels output image file. Default 2. col.width Numeric vector length 1 controlling width (inches) sound panels output image file. Default 2. cols Character vector length 4 containing colors used background column row title panels (element 1), color amplitude envelopes (element 2), color power spectra (element 3), background color envelopes spectra (element 4). res Numeric argument length 1. Controls image resolution. Default 120 (faster) although 300 - 400 recommended publication/presentation quality. ... Additional arguments passed internal spectrogram creating function customizing graphical output. function modified version spectro, takes arguments.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_degradation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Save multipanel plots with reference and test sounds — plot_degradation","text":"One ore image files multipanel figure spectrograms test sound distance, sound id transect. also returns file path images invisibly.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_degradation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Save multipanel plots with reference and test sounds — plot_degradation","text":"function aims simplify visual inspection sound degradation producing multipanel figures (saved 'dest.path') containing visualizations test sound reference. Sounds sorted distance (columns) transect (1). Visualizations include spectrograms, amplitude envelopes power spectra (last 2 optional). row includes copies sound id given transect (row label includes sound id first line transect second line), also including reference comes another transect. Ambient noise annotations (sound.id 'ambient') excluded. Amplitude envelopes power spectra computed using functions envelope (warbleR package) spec (seewave package) respectively. two visualizations show power distribution time frequency minimum maximum power values sound. Therefore scales necessarily comparable across panels.","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_degradation.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Save multipanel plots with reference and test sounds — plot_degradation","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/plot_degradation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Save multipanel plots with reference and test sounds — plot_degradation","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/plot_degradation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Save multipanel plots with reference and test sounds — plot_degradation","text":"","code":"{ # load example data data(\"test_sounds_est\") # order so spectrograms from same sound id as close in the graph test_sounds_est <- test_sounds_est[order(test_sounds_est$sound.id), ] # set directory to save image files options(dest.path = tempdir()) # method 1 Y <- set_reference_sounds(X = test_sounds_est) # plot degradation spectrograms plot_degradation( X = Y, nrow = 3, ovlp = 95 ) # using other color palettes plot_degradation( X = Y, nrow = 3, ovlp = 95, cols = viridis::magma(4, alpha = 0.3), palette = viridis::magma ) # missing some data, 2 rows plot_degradation( X = Y[-3, ], nrow = 2, ovlp = 95, cols = viridis::mako(4, alpha = 0.4), palette = viridis::mako, wl = 200 ) # changing marging and high overlap plot_degradation(X = Y, margins = c(5, 1), nrow = 6, ovlp = 95) # more rows than needed (will adjust it automatically) plot_degradation(X = Y, nrow = 10, ovlp = 90) } #> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpMy3SyV' #> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpMy3SyV' #> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpMy3SyV' #> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpMy3SyV' #> The image files have been saved in the directory path '/private/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/RtmpMy3SyV'"},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":null,"dir":"Reference","previous_headings":"","what":"Set reference for test sounds — set_reference_sounds","title":"Set reference for test sounds — set_reference_sounds","text":"set_reference_sounds set rows used reference test sound.","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set reference for test sounds — set_reference_sounds","text":"","code":"set_reference_sounds( X, method = getOption(\"method\", 1), cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set reference for test sounds — set_reference_sounds","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances (transects 1) 8) \"distance\": distance (numeric) test sound re-recorded. 'transect' column labeling sounds recorded transect required 'method = 2'. 'X' can 1 copy given sound id distance transect-distance combination (column 'transect' supplied). addition, 'selec' column values 'X' duplicated within sound file ('sound.files' column) combination used refer specific rows output 'reference' column. method Integer vector length 1 indicate 'experimental design' measuring degradation. Two methods available: 1: compare sounds ('sound.id') counterpart recorded closest distance source (e.g. compare sound recorded 5m, 10m 15m counterpart recorded 1m). default method. function try use references transect. However, another test sound 'sound.id' shorter distance transects, used reference instead. 2: compare sounds counterpart recorded distance immediately within transect (e.g. sound recorded 10m compared sound recorded 5m, sound recorded 15m compared sound recorded 10m ). 'transect' column 'X' required. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set reference for test sounds — set_reference_sounds","text":"object similar 'X' one additional column, 'reference', ID sounds used reference degradation-quantifying functions downstream analyses. ID created paste(X$sound.files, X$selec, sep = \"-\").","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Set reference for test sounds — set_reference_sounds","text":"function adds 'reference' column defining sounds used functions reference. Two methods available (see 'methods' argument description). Note users want define reference sound can set manually. NAs must used indicate rows ignored. References must indicated combination 'sound.files' 'selec' column. instance, '10m.wav-1' indicates row 'selec' column '1' sound file '10m.wav' used reference. function also checks information 'X' right format wont produce errors downstream analysis (see 'X' argument description details format). function ignore rows 'sound.id' 'ambient', 'start_marker' 'end_marker'","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Set reference for test sounds — set_reference_sounds","text":"Araya-Salas, M., & Smith-Vidaurre, G. (2017). warbleR: R package streamline analysis animal acoustic signals. Methods Ecology Evolution, 8(2), 184-191.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set reference for test sounds — set_reference_sounds","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set reference for test sounds — set_reference_sounds","text":"","code":"{ # load example data data(\"test_sounds_est\") # save wav file examples X <- test_sounds_est[test_sounds_est$sound.files != \"master.wav\", ] # method 1 Y <- set_reference_sounds(X = X) # method 2 Y <- set_reference_sounds(X = X, method = 2) }"},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"signal_to_noise_ratio measures attenuation signal--noise ratio sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"","code":"signal_to_noise_ratio( X, mar = NULL, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), eq.dur = FALSE, noise.ref = c(\"adjacent\", \"custom\"), snr.formula = 1, bp = \"freq.range\", hop.size = getOption(\"hop.size\", 1), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 0), path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds (typically output align_test_files). Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass 7) \"sound.id\": ID sounds used identify counterparts across distances (needed \"custom\" noise reference, see \"noise.ref\" argument). mar numeric vector length 1. Specifies margins adjacent start point annotation measure ambient noise. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. eq.dur Logical. Controls whether ambient noise segment measured duration sound (TRUE. Default FALSE). TRUE 'mar' 'noise.ref' arguments ignored. noise.ref Character vector length 1 determined noise segment must used measuring ambient noise. Two options available: adjacent: measure ambient noise right test sounds (using argument 'mar' define duration ambient noise segments). custom: measure ambient noise segments referenced selection table (labeled 'ambient' 'sound.id' column). segments used apply ambient noise reference sounds sound file. Therefore, least one 'ambient' selection sound file must provided. several 'ambient' selections sound file supplied, root mean square amplitude envelope averaged across selections. snr.formula Integer vector length 1. Selects formula used calculate signal--noise ratio (S = signal , N = background noise): 1: ratio S amplitude envelope root mean square N amplitude envelope root mean square (20 * log10(rms(env(S))/rms(env(N)))) described Darden (2008). 2: ratio difference S amplitude envelope root mean square N amplitude envelope root mean square N amplitude envelope root mean square (20 * log10((rms(env(S)) - rms(env(N)))/rms(env(N))), described Dabelsteen et al (1993). bp Numeric vector length 2 giving lower upper limits frequency bandpass filter (kHz). Alternatively, set 'freq.range' (default), function use 'bottom.freq' 'top.freq' sound bandpass range. hop.size numeric vector length 1 specifying time window duration (ms). Default 1 ms, equivalent ~45 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. Ignored bp = NULL. supplied, 'hop.size' ignored. Note lower values increase time resolution, important amplitude ratios calculations. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 0. used bandpass filtering. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"Object 'X' additional column, 'signal..noise.ratio', signal--noise ratio values (dB).","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"Signal--noise ratio (SNR) measures sound amplitude level relation ambient noise. Noise measured background noise immediately test sound. general margin ambient noise measured must specified. Alternatively, selection ambient noise can used reference (see 'noise.ref' argument). margins overlap another sound nearby, SNR inaccurate, margin length carefully considered. SNR less equal one suggests background noise equal overpowering sound. function measure signal--noise ratio within supplied frequency range (e.g. bandpass) reference signal ('bottom.freq' 'top.freq' columns 'X') default (, bp = 'freq.range'. SNR can ~0 tail signal low amplitude.","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206.Darden, SK, Pedersen SB, Larsen , & Dabelsteen T. (2008). Sound transmission ground level short-grass prairie habitat implications long-range communication swift fox *Vulpes velox*. Journal Acoustical Society America, 124(2), 758-766.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # using measure ambient noise reference selections signal_to_noise_ratio(X = test_sounds_est, mar = 0.05, noise.ref = \"custom\") # using margin for ambient noise of 0.05 and adjacent measure ambient noise reference signal_to_noise_ratio(X = test_sounds_est, mar = 0.05, noise.ref = \"adjacent\") } #> Object of class 'extended_selection_table' #> * The output of the following call: #> selection_table(X = alg, path = \"./testing/example_data/tailored_files_tlalpan/\", extended = TRUE, confirm.extended = FALSE, mar = 10, by.song = \"sound.files\") #> #> Contains: #> * A selection table data frame with 25 row(s) and 10 columns: #> | |sound.files | selec| start| end| bottom.freq| top.freq| #> |:--|:--------------|-----:|------:|------:|-----------:|--------:| #> |8 |10m_closed.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> |9 |10m_closed.wav | 2| 1.3000| 1.5000| 7.8750| 8.8050| #> |10 |10m_closed.wav | 3| 1.5500| 1.7500| 3.2080| 4.0690| #> |11 |10m_closed.wav | 4| 1.8000| 2.0001| 0.4220| 1.2230| #> |12 |10m_closed.wav | 5| 2.0501| 2.2501| 6.9050| 7.9170| #> |13 |10m_open.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> ... 4 more column(s) (sound.id, transect, distance, signal.to.noise.ratio) #> and 19 more row(s) #> #> * 5 wave object(s) (as attributes): #> 10m_closed.wav, 10m_open.wav, 1m_open.wav, 30m_closed.wav, 30m_open.wav #> #> * A data frame (check.results) with 25 rows generated by check_sels() (as attribute) #> #> Additional information: #> * The selection table was created by song (see 'class_extended_selection_table') #> * 1 sampling rate(s) (in kHz): 22.05 #> * 1 bit depth(s): 16 #> * Created by warbleR 1.1.29"},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"spcc measures spectrographic cross-correlation measure sound distortion sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"","code":"spcc( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), cor.method = c(\"pearson\", \"spearman\", \"kendall\"), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 90), wn = \"hanning\", path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. cor.method Character string indicating correlation coefficient applied (\"pearson\", \"spearman\", \"kendall\", see cor). hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying % overlap two consecutive windows, spectro. Default 90. High values ovlp slow function produce accurate results. wn character vector length 1 specifying window name ftwindow. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"Object 'X' additional column, 'cross.correlation', containing computed spectrogram cross-correlation coefficients.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"Spectrographic cross-correlation measures frequency distortion sounds similarity metric. Values close 1 means similar spectrograms (.e. little sound distortion occurred). Cross-correlation measured sounds reference playback re-recorded increasing distances. 'sound.id' column must used indicate function compare sounds belonging category (e.g. song-types). function compares sound corresponding reference sound within supplied frequency range (e.g. bandpass) reference sound ('bottom.freq' 'top.freq' columns 'X'). Two methods computing cross-correlation provided (see 'method' argument). function wrapper warbleR's cross_correlation function.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Clark, C.W., Marler, P. & Beeman K. (1987). Quantitative analysis animal vocal phonology: application Swamp Sparrow song. Ethology. 76:101-115.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) # get spcc spcc(X = X) } #> Object of class 'extended_selection_table' #> * The output of the following call: #> selection_table(X = alg, path = \"./testing/example_data/tailored_files_tlalpan/\", extended = TRUE, confirm.extended = FALSE, mar = 10, by.song = \"sound.files\") #> #> Contains: #> * A selection table data frame with 25 row(s) and 11 columns: #> | |sound.files | selec| start| end| bottom.freq| top.freq| #> |:--|:--------------|-----:|------:|------:|-----------:|--------:| #> |8 |10m_closed.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> |9 |10m_closed.wav | 2| 1.3000| 1.5000| 7.8750| 8.8050| #> |10 |10m_closed.wav | 3| 1.5500| 1.7500| 3.2080| 4.0690| #> |11 |10m_closed.wav | 4| 1.8000| 2.0001| 0.4220| 1.2230| #> |12 |10m_closed.wav | 5| 2.0501| 2.2501| 6.9050| 7.9170| #> |13 |10m_open.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> ... 5 more column(s) (sound.id, transect, distance, reference, cross.correlation) #> and 19 more row(s) #> #> * 5 wave object(s) (as attributes): #> 10m_closed.wav, 10m_open.wav, 1m_open.wav, 30m_closed.wav, 30m_open.wav #> #> * A data frame (check.results) with 25 rows generated by check_sels() (as attribute) #> #> Additional information: #> * The selection table was created by song (see 'class_extended_selection_table') #> * 1 sampling rate(s) (in kHz): 22.05 #> * 1 bit depth(s): 16 #> * Created by warbleR 1.1.29"},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"spectrum_blur_ratio measures blur ratio frequency spectra sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"","code":"spectrum_blur_ratio( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), spec.smooth = getOption(\"spec.smooth\", 5), spectra = FALSE, res = 150, hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), path = getOption(\"sound.files.path\", \".\"), n.bins = 100 )"},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. spec.smooth Numeric vector length 1 determining length sliding window used sum smooth power spectrum calculation (kHz). Default 5. spectra Logical control power spectra returned (attributes). Default FALSE. res Numeric argument length 1. Controls image resolution. Default 150 (faster) although 300 - 400 recommended publication/presentation quality. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Applied spectra spectrograms image files. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 70. Applied spectra spectrograms image files. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. n.bins Numeric vector length 1 specifying number frequency bins use representing power spectra. Default 100. null raw power spectrum used (note can result high RAM memory usage large data sets). Power spectrum values interpolated using approx.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"Object 'X' additional column, 'spectrum.blur.ratio', containing computed spectrum blur ratio values. spectra = TRUE output include power spectra sounds attributes ('attributes(X)$spectra').","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"Spectral blur ratio measures degradation sound function change sound power frequency domain, analogous blur ratio proposed Dabelsteen et al (1993) time domain (implemented blur_ratio). Low values indicate low degradation sounds. function measures blur ratio spectra sounds reference playback re-recorded different distances. Spectral blur ratio measured mismatch power spectra (expressed probability density functions) reference sound re-recorded sound. function compares sound type corresponding reference sound. 'sound.id' column must used tell function compare sounds belonging category (e.g. song-types). Two methods setting experimental design provided. wave objects extended selection table must sampling rate length spectra comparable. function uses spec internally compute power spectra. NA returned least one power spectra computed.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206.Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) # get spetrum blur ratio spectrum_blur_ratio(X = X) # using method 2 X <- set_reference_sounds(X = test_sounds_est, method = 2) spectrum_blur_ratio(X = X) # get power spectra sbr <- spectrum_blur_ratio(X = X, spectra = TRUE) spctr <- attributes(sbr)$spectra # make distance a factor for plotting spctr$distance <- as.factor(spctr$distance) # plot rlang::check_installed(\"ggplot2\") library(ggplot2) ggplot(spctr[spctr$freq > 0.3, ], aes(y = amp, x = freq, col = distance)) + geom_line() + facet_wrap(~sound.id) + scale_color_viridis_d(alpha = 0.7) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (PMF)\") + coord_flip() + theme_classic() }"},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure frequency spectrum correlation — spectrum_correlation","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"spectrum_correlation measures frequency spectrum correlation sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"","code":"spectrum_correlation( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), cor.method = c(\"pearson\", \"spearman\", \"kendall\"), spec.smooth = getOption(\"spec.smooth\", 5), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), path = getOption(\"sound.files.path\", \".\"), n.bins = 100 )"},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. cor.method Character string indicating correlation coefficient applied (\"pearson\", \"spearman\", \"kendall\", see cor). spec.smooth Numeric vector length 1 determining length sliding window used sum smooth power spectrum calculation (kHz). Default 5. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 70. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. n.bins Numeric vector length 1 specifying number frequency bins use representing power spectra. Default 100. null raw power spectrum used (note can result high RAM memory usage large data sets). Power spectrum values interpolated using approx.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"Object 'X' additional column, 'spectrum.correlation', containing computed frequency spectrum correlation coefficients.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"spectral correlation measures similarity two sounds frequency domain. function measures spectral correlation coefficients sounds reference playback re-recorded increasing distances. Values range 1 (identical frequency spectrum, .e. degradation) 0. 'sound.id' column must used indicate function compare sounds belonging category (e.g. song-types). function compare sound corresponding reference sound. Two methods computing spectral correlation provided (see 'method' argument). function uses meanspec internally compute power spectra. Use spectrum_blur_ratio extract raw spectra values. NA returned least one power spectra computed.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Apol, C.., Sturdy, C.B. & Proppe, D.S. (2017). Seasonal variability habitat structure may shaped acoustic signals repertoires black-capped boreal chickadees. Evol Ecol. 32:57-74.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"","code":"{ # load example data data(\"test_sounds_est\") # method 1 # add reference column Y <- set_reference_sounds(X = test_sounds_est) # run spectrum correlation spectrum_correlation(X = Y) # method 2 Y <- set_reference_sounds(X = test_sounds_est, method = 2) # spectrum_correlation(X = Y) }"},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":null,"dir":"Reference","previous_headings":"","what":"Create synthetic sounds — synth_sounds","title":"Create synthetic sounds — synth_sounds","text":"synth_sounds create synthetic sounds","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create synthetic sounds — synth_sounds","text":"","code":"synth_sounds( replicates = 1, frequencies, durations, nharmonics = 1, fm = FALSE, am = FALSE, am.amps = rep(c(1:4, 3:2), length.out = 11), mar = 0.05, seed = NULL, sig2 = 0.3, shuffle = FALSE, hrm.freqs = c(1/2, 1/3, 2/3, 1/4, 3/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10), sampling.rate = 44.1, pb = TRUE )"},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create synthetic sounds — synth_sounds","text":"replicates Numeric vector length 1 indicating number replicates treatment combination. Default 1. Useful measuring variation transmission parameters. frequencies Numeric vector different frequencies (seconds) synthesize. Brownian bridge motion stochastic process (diff.fun == \"BB\") used simulate frequency modulation (see simulate_songs). durations Numeric vector different durations (seconds) synthesize. nharmonics Numeric vector length 1 specifying number harmonics simulate. 1 indicates fundamental frequency harmonic simulated. fm Logical control frequency modulated sounds pure tones (.e. non-modulated sounds) synthesize. FALSE (default) pure tones synthesized. Logical control amplitude modulated sounds non-modulated sounds synthesize. FALSE (default) non-modulated sounds synthesized. .amps Numeric vector relative amplitude time step simulate amplitude modulation (applied fundamental frequency). default value (rep(c(1:4, 3:2), length.= 11)) 2 amplitude peaks (although applied '= TRUE') mar Numeric vector duration margins silence around sounds seconds. Default 0.05. seed Numeric vector length 1. allows users get results different runs (using se.seed internally). Default NULL. sig2 Numeric vector length 1 defining sigma value brownian motion model (used simulating frequency modulation). Default 0.3. shuffle Logical control position sounds randomized. sounds treatment sequence can problematic environmental noise masks . Hence 'shuffle' useful avoid sounds treatment next . Default FALSE. hrm.freqs Numeric vector frequencies harmonics relative fundamental frequency. default values c(1/2, 1/3, 2/3, 1/4, 3/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10). sampling.rate Numeric vector length 1. Sets sampling frequency wave object (kHz). Default 44.1. pb Logical argument control progress bar shown. Default TRUE.","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create synthetic sounds — synth_sounds","text":"extended selection table, can input master_sound_file create .wav file. table contains columns varying features 'treatment' column (useful tell acoustic features sound) 'replicate' column indicating replicates 'treatment'.","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create synthetic sounds — synth_sounds","text":"function creates synthetic sounds can used playback experiments understand link signal structure transmission properties. function can add variation signal structure 5 features: frequency: continuous, argument 'frequencies'. duration: continuous, argument 'durations'. harmonic structure: binary (harmonics vs -harmonics), arguments 'nharmonics' 'hrm.freqs'. frequency modulation: variation fundamental frequency across time. Binary (modulated vs non-modulated), arguments 'fm' 'sig2'. amplitude modulation: variation amplitude across time. Binary (modulated vs non-modulated), arguments '' '.amps'. Sound possible combinations selected structure dimensions synthesized. output extended selection table, can input master_sound_file create .wav file. functions uses simulate_songs internally synthesizing individual sounds. Brownian bridge motion stochastic process (diff.fun == \"BB\") used simulate frequency modulation. output table contains columns varying features 'treatment' column (useful tell sound combination features using replicates).","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Create synthetic sounds — synth_sounds","text":"Araya-Salas, M., & Smith-Vidaurre, G. (2017). warbleR: R package streamline analysis animal acoustic signals. Methods Ecology Evolution, 8(2), 184-191.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Create synthetic sounds — synth_sounds","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create synthetic sounds — synth_sounds","text":"","code":"if (FALSE) { synthetic_est <- synth_sounds( mar = 0.01, frequencies = c(1, 2, 3, 5), durations = 0.1, fm = TRUE, am = TRUE, nharmonics = 4, shuffle = TRUE, replicates = 3 ) }"},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"tail_to_signal_ratio measures reverberations tail--signal ratio sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"","code":"tail_to_signal_ratio( X, mar, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), tsr.formula = 1, bp = \"freq.range\", hop.size = getOption(\"hop.size\", 1), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 0), path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass 6) \"top.freq\": high frequency bandpass. mar numeric vector length 1. Specifies margins adjacent end sound measure tail power. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. tsr.formula Integer vector length 1. Determine formula used calculate tail--signal ratio (S = signal, T = tail, N = background noise): 1: ratio T amplitude envelope quadratic mean S amplitude envelope quadratic mean (rms(env(T))/rms(env(S))) described Dabelsteen et al. (1993). 2: ratio T amplitude envelope quadratic mean N amplitude envelope quadratic mean (rms(env(T))/rms(env(N))). N measure margin right sound. tsr.formula 2 actually measures tail--noise ratio. bp Numeric vector length 2 giving lower upper limits frequency bandpass filter (kHz). Alternatively, set 'freq.range' (default), function use 'bottom.freq' 'top.freq' sound bandpass range. hop.size numeric vector length 1 specifying time window duration (ms). Default 1 ms, equivalent ~45 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. Ignored bp = NULL. supplied, 'hop.size' ignored. Note lower values increase time resolution, important amplitude calculations. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 0. used bandpass filtering. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"Object 'X' additional column, 'tail..signal.ratio', tail--signal ratio values (dB).","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"Tail--signal ratio (TSR) measures ratio power tail reverberations test sound. general margin reverberation tail measured must specified. function measure TSR within supplied frequency range (e.g. bandpass) reference sound ('bottom.freq' 'top.freq' columns 'X'). Two methods computing reverberations provided (see 'tsr.formula' argument). Note 'tsr.formula' 2 equivalent original description TSR Dabelsteen et al. (1993) better referred tail--noise ratio. Tail--signal ratio values typically negative signals tend higher power reverberating tail. TSR can ~0 tail signal low amplitude.","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Darden, SK, Pedersen SB, Larsen , & Dabelsteen T. (2008). Sound transmission ground level short-grass prairie habitat implications long-range communication swift fox *Vulpes velox*. Journal Acoustical Society America, 124(2), 758-766.Mathevon, N., Dabelsteen, T., & Blumenrath, S. H. (2005). high perches blackcap Sylvia atricapilla song listening posts? sound transmission study. Journal Acoustical Society America, 117(1), 442-449.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # set global options options(pb = FALSE) # using margin for noise of 0.01 tsr <- tail_to_signal_ratio(X = test_sounds_est, mar = 0.01) # use tsr.formula 2 which is equivalent to tail-to-noise ratio tsr <- tail_to_signal_ratio(X = test_sounds_est, mar = 0.01, tsr.formula = 2) }"},{"path":"https://marce10.github.io/baRulho/reference/test_sounds_est.html","id":null,"dir":"Reference","previous_headings":"","what":"Extended selection table with re-recorded playbacks — test_sounds_est","title":"Extended selection table with re-recorded playbacks — test_sounds_est","text":"Extended selection table (est) 7 re-recorded synthetic sounds. synthetic sounds 2 s long, frequency modulated, amplitude modulated, broadcast re-recorded 3 distances (1, 10 30m, column 'distance'). data created function selection_table warbleR package. master sound file data used create test sounds found example object master_est.","code":""},{"path":"https://marce10.github.io/baRulho/reference/test_sounds_est.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extended selection table with re-recorded playbacks — test_sounds_est","text":"","code":"data(test_sounds_est)"},{"path":"https://marce10.github.io/baRulho/reference/test_sounds_est.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Extended selection table with re-recorded playbacks — test_sounds_est","text":"Extended selection table object warbleR format, contains annotations acoustic data.","code":""},{"path":"https://marce10.github.io/baRulho/reference/test_sounds_est.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Extended selection table with re-recorded playbacks — test_sounds_est","text":"Marcelo Araya-Salas","code":""},{"path":[]},{"path":[]},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"new-features-2-1-0","dir":"Changelog","previous_headings":"","what":"NEW FEATURES","title":"baRulho 2.1.0","text":"new function add_noise() modifying signal--noise ratio adding synthetic noise new function manual_realign() generates interactive plot manual adjustment time alignments new function plot_blur_ratio() generates plots previously created blur_ratio() spectrum_blur_ratio() new function plot_degradation() visually compare sounds across distances new function plot_aligned_sounds() visually assess precision test sound alignment align_test_files() now can take several markers input select highest correlation score aligning test files New function attenuation() Data frames selection tables can used input data Added new methods blur_ratio() excess_atenuation() spectral_correlation() spectral_blur_ratio() renamed spectrum_correlation(), spectrum_blur_ratio() respectively","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"minor-improvements-2-1-0","dir":"Changelog","previous_headings":"NEW FEATURES","what":"MINOR IMPROVEMENTS","title":"baRulho 2.1.0","text":"optimize performance signal_to_noise_ratio() atmospheric_attenuation() longer available (use attenuation() instead) Improved documentation functions Fix bug spcc() excess_attenuation() ‘markers’ argument deprecated align_test_files() fix bug auto_realign() find_markers() compares time difference markers master sound file measure precision find_markers() can run several markers templates files ‘template.rows’ argument deprecated find_markers() spcc_align() renamed auto_realign() search_templates() renamed find_markers() ‘output’ argument deprecated ‘parallel’ argument deprecated replaced ‘cores’","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-106","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.6","title":"baRulho 1.0.6","text":"CRAN release: 2022-03-01 Update requested CRAN","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-105","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.5","title":"baRulho 1.0.5","text":"CRAN release: 2021-04-21 Update requested CRAN","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-104","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.4","title":"baRulho 1.0.4","text":"CRAN release: 2021-03-09","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"minor-improvements-1-0-4","dir":"Changelog","previous_headings":"","what":"MINOR IMPROVEMENTS","title":"baRulho 1.0.4","text":"warbleR::freq_range_detec() now used internally detect frequency range markers master_sound_file()","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-103","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.3","title":"baRulho 1.0.3","text":"CRAN release: 2021-02-11 Update requested CRAN","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-103-1","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.3","title":"baRulho 1.0.3","text":"CRAN release: 2021-02-11","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"minor-improvements-1-0-3","dir":"Changelog","previous_headings":"","what":"MINOR IMPROVEMENTS","title":"baRulho 1.0.3","text":"New argument ‘marker’ align_test_files() control start end marker used aligning Fix bug detecting several templates per sound file search_templates()","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-102","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.2","title":"baRulho 1.0.2","text":"CRAN release: 2020-06-07","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"minor-improvements-1-0-2","dir":"Changelog","previous_headings":"","what":"MINOR IMPROVEMENTS","title":"baRulho 1.0.2","text":"Windows length converted even functions Fix sign error signal amplitude measurements (signal_to_noise_ratio() excess_attenuation()) New function noise_profile() rename snr() signal_to_noise_ratio() New function tail_to_signal_ratio() measure reverberations Fix bug excess_attenuation() method = 1 Added type argument excess_attenuation() run “Darden” version excess attenuation","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-101","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.1","title":"baRulho 1.0.1","text":"CRAN release: 2020-03-09","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"new-features-1-0-1","dir":"Changelog","previous_headings":"","what":"NEW FEATURES","title":"baRulho 1.0.1","text":"New function search_templates() find signals re-recorded sound files New function align_test_files() set time signals aligned re-recorded files Parallel available internal prep_X_bRlo_int() function Data frame also returned functions","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-100","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.0","title":"baRulho 1.0.0","text":"CRAN release: 2020-02-22 First release","code":""}]