From 85feaf5ed00c5581b4a9c93d57048b6d03d2afbb Mon Sep 17 00:00:00 2001 From: maRce10 Date: Thu, 28 Mar 2024 22:16:43 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20maRce10/?= =?UTF-8?q?baRulho@e6b07b137ae3c56913357b71ed31181e6878f9e9=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- articles/align_test_sounds.html | 16 ++++++++-------- .../figure-html/spectro master 1-1.png | Bin 76990 -> 76951 bytes .../figure-html/unnamed-chunk-1-1.png | Bin 85413 -> 85428 bytes articles/quantify_degradation.html | 16 ++++++++-------- 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, 26 insertions(+), 26 deletions(-) diff --git a/articles/align_test_sounds.html b/articles/align_test_sounds.html index b98e36cd..13c29a93 100644 --- a/articles/align_test_sounds.html +++ b/articles/align_test_sounds.html @@ -572,7 +572,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 '/tmp/RtmpfQN8sE'
+
## The file synthetic_master.wav has been saved in the directory path '/tmp/RtmpIG2LWn'

 

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 @@ -635,7 +635,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 '/tmp/RtmpfQN8sE'
+
## The file example_master.wav has been saved in the directory path '/tmp/RtmpIG2LWn'

 

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

@@ -1550,14 +1550,14 @@ 

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

-
## The image files have been saved in the directory path '/tmp/RtmpfQN8sE'
+
## The image files have been saved in the directory path '/tmp/RtmpIG2LWn'
 aligned_imgs
-
## [1] "/tmp/RtmpfQN8sE/plot_align_10m_closed.jpeg"
-## [2] "/tmp/RtmpfQN8sE/plot_align_10m_open.jpeg"  
-## [3] "/tmp/RtmpfQN8sE/plot_align_1m_open.jpeg"   
-## [4] "/tmp/RtmpfQN8sE/plot_align_30m_closed.jpeg"
-## [5] "/tmp/RtmpfQN8sE/plot_align_30m_open.jpeg"
+
## [1] "/tmp/RtmpIG2LWn/plot_align_10m_closed.jpeg"
+## [2] "/tmp/RtmpIG2LWn/plot_align_10m_open.jpeg"  
+## [3] "/tmp/RtmpIG2LWn/plot_align_1m_open.jpeg"   
+## [4] "/tmp/RtmpIG2LWn/plot_align_30m_closed.jpeg"
+## [5] "/tmp/RtmpIG2LWn/plot_align_30m_open.jpeg"

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

 

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 b82450fee690f9addbdf8f43d5556141df8c5b9d..2c263efb7f4c83e86135da9be74db37b9574a0f1 100644 GIT binary patch literal 76951 zcmeGDRajh2(*_EoL4!NN2MMmhAvl9ukU(&k;O+$1VesId1PE@yCAbqjxVyXki#+fC zPxjG1|K?&bbM>sQ)m>e6*Im^;5h_YDuTe=*VPIfhgJmVvU|C=RkZ&M+|eVJ{bK74gw87#K>#p!|Vhmm!3Z{arF4^KmkZF0@vs>CeKak*lZi9u%>vKWYZ`$;ZV5Q)S+x!rSgY z<@YAr?lZPg2CA6jL0~8dtTq$OMfM)}00r%OSisV}v_b!v5wQPj0)I09zo!4w#Q)g@ zpn?B$h5tV&5RAIOD8_}L5pr^JiWjP-?K1rH5i)2L>#uNo|N8|lvh@$xiDo(@F34n! z?C3fbhOo!J$KDnKk^evk$#v$Fd!_j>iQDm#@T96fery1LEc2&diK0*IqFK8{|4IAP zEBfR(U8=)1$)V3P@_#t=Pb>d3Lzf`k=bNImSW57O<0zao0Nx1ocfI=!+f8vpF6dxr ztj(zc5(EUE7@8lqJ->+Kb(l|!N^LW}602`}uA6!|X;L0jkMUSvFc{^x_ZlvNs6h)% z(h;M99w?vPGb-)F`Y)NoWnaI%?vQ%U64|S@E}Mt^K7keFn#?|kv4bVY%CpH zb49wdIbRzH+zW?B1cnyiYJ2B(X)E{NIP}DR>$!gSnU;<+AAyoGrvUU8ej*1{8XBFg zN-rm#*B~vTlDWzS0qxEjzAUZ_oVQ~aMiBp7cxRcut)iM<`8;+yHcps4N@_OeDt2ln zCn!4=x*(pJ0==vyZyvD-JTT4I1ne?~`_p9^K4<-jX8mJhSPOM_>ASLkuGFjSZ8LIn zqXS!GGn zp^gjk{$upGF;?C?vdI69j#a`pwe_mD-0^zR-FeYRhGimRKeEK?#`WVkf+JMb0|}T+SU21j`@vjw*mcXX@59mY z6RVbi@1;U75X1$1%)r9^skrq-vC=w;8ro2em;bm+n$L!b|6DaeKB=dV4+A5)Ck&kx&k4UX&oNwc-mQBf8^4}04p2FAgJfo-lq#Sw!u zf-`y@1Umu4xKZ$%D2C7XR+APCy%=CNEZPxVzQw5j>x5Rn=u8Wgy@bW)B;L@hus&3(;;@=(xGzYrE8K z`%Rmo*D1Jk8k-jTVies$%q9loMy07a%ssMs!T!Q7{RsYKSZfkW>5M zt0ur6v|s@|0(SKi@3w32=(srN^%&lff9kfvh8<=$*CL-prw^~bYHNj!p!}wq%+g7j z$I#o?#dv=fuxR!rLdd+T6woG;39NJYQOmXd)6?;DR@+Tfo8d?X|0ltb4_cpoAJ#96 zY|bQ^^)Iz}H$h(JIoipdm!>(JHna1V=4?&s>5@g31BIC7$2iPkvlQ)-k;O+&@k~v@ zD{H{NBsSuPB*s41Hy%_C@@;20dpzGSFHf1Y9NO8NI5;>Al;1yWiz=6C?u%0c6Bmlg z3sBNGvY5^h#UPgNMMh!JCxKUwAaOZ^dX49#U2|exRMTKuj!Pu}4#o(G|EI(^LCQXB zxVFo!nchc@VeAJ-lFnNCp0vQVnP}kN^_o|^T^3sKwnU4uCQ5*XAl`ySz)S%vIFW7m zaDw%RsabmILH?&JHG*m)mb)E1;Y3gIjj4hc6l!Qz6ko4AK3T z>d7d!x4=I5e7>Jz(EX5r(K^5WeIca1N{GEwN}%an6r0a)8z=fJFiebY$M&sq=4U(5idIY(@bn z1=w3Kz}uyD1a32c@7)w@eSrJa2}fLD{&Dew^~@Jo2Iiucq5~}7%SYF=|98`zQCU!p z#VGkv<2Jcw*~j0$*NeS-QzgWtr1|yrDKjlcu6iD;A$krSh|Q-l_NE>l9>2Kc|4AcL z$7l?AI|yw$`W5wJKYxL)_lreS)|F11a+*K&ZqG~z^*yNkZ^Hch${z;Gu|hE#fFS~X z>9f8Nu$$>P?U&V`OE*2dRbH2SG)pP}39H=5p)oA-?vA7Z&=lw~5n(!MF4tq+@Q&I@++r@v-eVm~#x zDO#}pr?T}PBSLmDtP11bs4o`q%XOdc@nTY^+I-l>JmKG%1X$m=!Jgw1>N&vL%=|3W zFL$2Su{d2k_H!3-`rl)CV;cfswW~}~Y^Fxkn4A*HLJ;&epGI)T~0k`dXuy4X`$s62FP}yBm zJazf6oDH&NJ5l~`vcoli8`~p_jSVmU&yI16%<%t>5b)VqF`0G%pC-74^S&gSc}kZ5 zZ(PazFMbM$_&x}%u=(OISEM%`PG|k}3ETXn?`$d251sxKakZU;IFu(9g>j=t6uRL# zGEpdB%mZK?(0Sst+lc9(kpJ&V0n(??JBsI1ino!*ZKH)&sO>3j4`!Vw?Vm>Qwe%cQ zPyc&(tS=Ia;nI25b+ca0o4zD1{oBY<-T$1w0Cx^>j6t@x4CX=o80PO;`0gS z^NIBa0E$4Pz-O|W7r>c_*SWqyv;EW*Ly7wKyua}>h#_Z4J`V&^M)L|IVSZ{v9Qw%4 z-DO1!R^xSPd4T~+;?ZaOocYxQGqx#jNhbZ=5E#YQdLzpv z2MpL*;1GlD72;tdl@!q!mJ-gh^9HosTXtp&x!8&Uv_c>ng~+IEg}MDSP$$X&WJ_?`XsZUH`d^lSeHi0`8zg!+A%?o0f3Mu02C z;(P1=m8oVkGsu@>2?w7CG4ufebGwV7pbrgNLCJ!8##b;oB0G`lM4h7^V}6AIJf-IA z8H+4^rVCDqW|=X7dKvytx6!e&tq*!S$vzu26s!IZanBvM+u5VnZO^_xruJ%HB?I
8f6*!Hr2X=?tWm$K>W7EXXCe1x-)qMYtp!#CE!RtfyluCN zM-A&3S-w{~j7g~5neOC(RU8v>MU(?t_Ce2yMquRsab6RWs~U zJIo6-*)IM{+W*-UD|pEz61P+v1-)v3&s+cfU0pNt^k-g9Pn6q11!tPcQ~v$|>oz-d8drrW&L zy>Bz~;P*m-o{Ni%3c%d6Jl0UIjur(c9RUkf&Cww+wUQ=@Q-Q`4-UmRNiC}Y(857OI z*mtPdu2iAwi7b&hpkcYlo10cYU_g@2V{qpEP+C)+D{E7J^V$WwEYB@sm=U4#A!4Qf zLSyVZ01&ePR;xwR%kiB7b-LVO6u=jWuSI(PkC#9YA97*-7Z+R-`SZXY%923nXV}j6 z7m-qhY$qh_u;|uBFMMu_sR!7$O!ITO@1c#*NjrSl<-A*yZ+Gv1!C`U~NU|Ol_#I!Q zznC-I(;6H3>Dj_dYQv=UGvjQ3psHZbmVCUD7CdpWTN3O-l+)&h!XgfxUwAth4!Y^* z{DYmykH7&=8)x-KUZ*-!q7X}iAdGY}y#x(7^T-#fd{)qD^|i|F@T16CeB6lv0BW22 z2G0T|TIB$+buB%|@Gg01m!ow-IyySKM1BJHr%y|jKb&eoTK!!HTWp*TSz;g$h7uhv zvI_KqOvO1PmKaS7)u}{^3=;IKNkHIq8jI6>F~+l<{5Yk-4szcMRlnU7KdX;duH3TF zV6IW21l`Y#A!w`(0RRd@%l#ksxyXPhN`}Zdh3c*AIvt03`ghhgD=l?!KBB*TRAFc{ z?Ueud?6F%fD?7F8SLNIRkxjd$>}=XDkidf{cY#=m#@5{4xScgPXOTTT%)6{mGWB%= zmX3}NpiZqFRc3>H*MFVoDvY{}!h}DD81(_G2j5=bdRg{wiDO^IWT75LgtO$s+maqy zocB?tU!hlennH$YzSxpwKKSh`KQ))f9n!RL%lrtYp;g^O24Yk!JyHwe?)T!XH70{w zREnpQu$SB_pkI~a*k@ai|9pr`2Vj?7U0vOd3dv>%^R-a`kqxBJ@(4<|Z%qUEE?Pit zF4fbO{c|!?d2>|>J-50aCsjEJjPqWZCHGB?B_fX;&b*WyZS)Ra!VJ0*mRcg>6hl#_ z#f9XDDkUXll7t#3@$Kmp&~Ag%7#v+B^-IWppz1}+d_$cwK;~_qu`#&iMtnU#p0jPL$7wRQTXT0Ya!-o_Zz>fSq85@R*3K0>E zB}NRD#IDKth@e3){zHeOnjYXkMN?F~)T(%nyM-xEz*XgWZr=L*cD~ak#x%%bs34Qw-Jjx{KgA-h?RKw_kN`vR z-r3*x#!q-*8grcm9a)Nk$V}L(AF&W&J#Qx%WmUoPDUz@tGcg>C?%~9b+IJnqQ+D`5&q>pArE59zSCcexAojFizJfMwHKx#8&0-$n*~ z!-2Y^dU@HPkEC_&``^}HVDOmpH3G6e1NBq$ZWjMW=r+YdpN>6WW_`=`Fc+B&^w(CR zbF$L_zr2M&XaVuXL;gOW>+M@EGKmRvGz)=%0^G@b%+mEE!D%3ex>1k;Xx-k|56fQR z_K%mJUhYzD$7YA>yJl+2eGE;ULLJr=c)?+){#DxbGe6tUg%N&xkp!96X9W2amNg0g zr@*dxt$4!HhrPI+g15N&ie7hnlNp*5mEHfu2);WC{urWe;ErRq14;n&wxhCvsGGgq zvnNPlv8bLt*X%}0I%8{OT;QpFuj{#vIooO%O!@t67Beers|Fg&1I$z3wW;nPzm&Gr z`!ju6(MysvF}~U;Go4V(U;aEbgFC%f6A8I{&xYxMf3mq?Cu+p<+R^{-OV5?0&G>%@&oMn30+NcK$U=UxGMP=%z&m!^VHT zEF-tjnIRuS$a|3bZyZlsFEVWIiFDpTH6^ZM-t|}e6an$10QWC2mF*?_$J7e_V*KC( zQY((Eq~KbTg?ERmX-L`W6Hh%?N@Ec?6Ck=MV`-TMTYn>qlnHr&Lp268Zhf`!0P=;m zgH@!SpiCIIV{$Y5YN=<3FWk`{N8_)#$bdMMx$^mWK8|6}^-L~=p280{U^{DGPWAiy z+8+0(r=M>Rk5BKX)uwSK@(PgQziDE4gJKHSyAsh-+5AqUGJLP*GW_m#9~PG%$@25_ z7yD>;`RXhRr2d4@H8>+!V~+~gSrySJ&h`CNt!t}Dpk~weW40?6^1D{&O5NM3J~}1z zSj#G&JNdJfLctUT6<)X+F=PZo{WMF$`|=R-c8ba4NIwL5yf;N+4Qj_% z1X8V$;U+6w$RFb^=DlKgTRs1SMO@!rUd_|70eY~ptS;FdlJ{JTFNK-TnSYx()fZEC})u3@ZCZXRqWwWogd&D4bU9Tio@N{51vh6s4?d*U(YxSf1!4uR0TlFzB z#zsG5*Fz>`OFN4DI}W-+tMZ|BCQFkp-la&7?p%jEP#`KX9gXsS>&=7!?|SCdnO9AK zjlk|RVEc_8L6~O%#J}+G zw&)31_4-~mMt-(Ec^x$!i-?@3jh-k!Unu*We4*I*Lh(TP68mmvdqsMF6B;NG3Cxtc zMokvh z2b`WS(aggU2@=oTs?dVZbG5#ho;;u*QV8%L*4T60E5h9Hu(*vadxDc53E6eNp6)WW zwFjwhR~)=9u6!7_INOMuQNPe+Ac3Vq5f&5AN|N*(*;4dwxF;>~I9TF2SQ75gUG{|~ zY*}yCx{anC4yO4m-O0W|=(kGvk7WR5+1vfLCmSV!T~O=ou>DyPZ%f2nwZ(a{|6Q>y zurnZVCMO{6yZ3|bOy>B}IZLN4>dH{ETAx#O(DI#}z#~4nwfx^RRO|{LC;rzdT=UqNmqK_=2rOV(FQN!~-hJ^t-Pk%|l0Om*{d3ZmEeQW){ zbJRP>nQO-B>kuxszzB{^I*EGaxJaVxogWqP>t+ zzet@grjI;ViDY}e_-EGdn^du`dsIpwnm9x|z&*74_G9098+N1W+XgI{t>_fwVF4zE zDRct!l46#Z$6@-czyrmaNPMP-rWzYWDP`~yL*Jc~!0WzO)-|t~3La4oJA$v?OO_Cvk6n{z0 z;Bkx?*$NYwo7@C2jZj;CZ{xT-o0$69Ijiv_CaY`3Rv8_N0$FRKy_ocGL+I%AJcVF+HUTZURw)}kWkMzQ1c4~rCTn;Q>E5>43@uEh) zk`zXCw3i<5+qrnfjRYqEPgT|mar1v~<4~38xyGRP({bhqr3wN1lv>4BKon3~obez4 zW92_|S6n~jGDKXvwfee-6u+u9pr#FEhi3{8t79+5p#sI&vZb(l{KL5f1q~-w#uKOt zQ`;cm#bhWM$Q768a6#gEQ0IN$`#zs17g~u;6Ds;qaxvuz6LE~g8_}9J??5ho;{ke- zL6{0R)yy1uFJ3HKFo{;ynp#?XwU<>og`6sY@km+v&UMluJ1ZROsPOhM0M z@8v@kpCS$lbT2!T`-L(X@ zUSebF6W=A~DB`CBmax32EkSsyu0{FJiPUUB(E{Nze85m)UY#9UllIM>2rLjy#}d>U zZnvO(;A!agd0ugrV(bV^{QaHPjI%V9ATui{zCdaoS7lmU|F6RVix?|d;HhSwKdCji zg1(@1Ga5;8;$zsUVNkO^)>Zc(uWL~hd%RFQUu-e^Az5g`HR6U5*k3usQ=$dri!Id> zAT7(SXOj17Jt@NtaefM#Lk}t^yP9W!#!{(2rHcp&4fXXQ!@QJ*vTwTSU#PF5fx&VI zCV?{fPlktXb%AlA3P&!huUtZHDK&kw<9~Y{c#1w0;YlgjP_K6s^E!>6B@i7JxC{iz zVU06>NsE0_4`Qb*F2E&-4kI=hes_I5-v{>nVoS6rPxG^i&#J=yIHIN0RP+7UuA)<4 zp;`;1?cq<|arO3FowxE0{=IZdoc9{@QV;5baq>`Zb-IaYC6(L{TL*SLo(|jQtQk$g zNbaAvV$K;g22;5g{9z{#YKZMzbAq?s4z@1lx-WXpzXe?ZLoGmf6&I@{$r4#b=#Z6+129Ai3o;K zxd9kt&)ek~3cKZ@g)O#q`nI5LDY1Fh*(!I6^Q|k@L}5G`U07TM1S47O4$En(*G{Zo z>k~hwR^%)x0~=2?>`MnjE`NyeKZp-hLPKg{@3yCQlz-@P+rNcZ&5YV&DGWnJNIr!Y zq|IbmCLlq=AjcLskNp%{vLz?hF_4FlW0#Sa4D-ntX|8D_Ef zrxVvwI#BZj!gsI`}6|T!f*X7HdN8|5GrtQs_yEkSc+`Mx3wSmOpL%w$p z3N=GeP*t%1{rYzha%P17wv+2OeRp9`v_WXm=)t=7%y6a!>1rsD6k;rRN)m3E#Gng>dHNc)0 zrLSYvd$6UjR8&-+h8R+za1680qh;*KeNi~bJNADV-tM}nUB&Rwi`p`v2IUl}Z)Z*Z1#m0K)X+5uiM|>yKfTj$D zZq+_SG{Q-PvN2f#^*EC)9xrew+xNKUgZf)QRd+sK6iy!(;8_SVCEYQbY}VOB>pMk5cS_P{-HY5 zs+3SbpIfg+HE8&>=C`G>r-F$B4gXdzW^kV*+5mC!Np*rfzgdq13~>9TGR`+z^fp11 zf5naWuLFGc!v?+QPHq_Aar1dBLqUPb@_bp-Zu*DfaixB1V%&}m;ju&N{IsGAJZv)! zPJ!u--&cI}!`V_?gS!ew$O<;i!!64`0j|oQ&0UTWrsNcgGsgx0NR;UtEv*^39nSXN z962U`@*rtD8R30%)~ed?$h z`OA`=cx~3nPCn`C=;!sS<#aEUYR6#$KaX?xgZb9Dk5I@a@u8;Nn_i85d`4ju@A|k2 z-r275QV$v+8~!@+Bv^*wf0g|l&+mK>Bp5;;O%&JU#0v?WN79oW_ZsPsuU$uN(4ltd_J4?mmRuIJ)Vsj{+7EOtL!8IDrkdSXd$a9G7TTCR%l=Y2Nydi6u7)(d{0 z++cM2Qc&mgRKC~+16rV^x$#@xIR!ELfW&NjYth!r91R$a!|KAQ$x^>M+bX81aRE5l z{0|8aV{LY3soU_QP2=%Gi52=E9ftwEuQa$Cd-(e2p_2w9<5sTU{xD7^qfpuv+AcRF zRJPzoACuDCSx7p{E|=;PWLH9Z3^8rU=M;*uPYy;FxhEJO!6A8M?~}0#h&|CgnTi+Z zpZfrRPj_v)I=Pr-&6AVmP_3}-c;iKaPrlR=@;YfTUgltDUWznMRrwrU zG!5NXGN|!0?t`2_E07G|4z@kW!~AT$+td1c^rPhGT0-^%$lzg((7-RI0CxsljnvPW za4k*f*}fy$f$Lp&n(WzPYZdG4B+qoEu2YrzD6GTML|xBfcDyd+lc&m z{G;1vib6yUFVdRG@Q>J&LufrcPF0yS%@t;eN~(}GGd>m*>@e3DFG5J25|oY%W@x7j0fyRQq+2hazoZV_uxjuCqBE z?Gf@_y2@kj`g%QN6??9D$5lJ7e-6qLkRryabFQiirlgaV7|=}jV5XIqkiIT_ILuxe z_+C70cDj3h+jy>&%OJPc!V^k}L3YA-XfDk!)HmYRu~b}_K*;Zi6JLjx<>$p@|6CTu zw>@mp+Uz^s-|)zEeKO`ds(N)f_FY=#aSm=v`Ki1uuMahHa*IQRH~7s+b{nMOX4h^o zr$C3vd1z(*>IYwMHE^9Z^J7nbickm_wYAL=(LGW&TFF>H z>Ken=X&CQGvU}#}@8_oz5e8piPG^U0ZRuXhNmr8TaD7qG9EQdfE&V~krDp=ev+dqt z|EEt`9xk}x{4keukt|O)!9&e3>%xJ|dZEr0!ZRRcBpT2^Qn`ySt@jMN?+yymwj{v{Sz8It+5`#p?~%-;Sz;r$UXKekhDDqv4(rM^7&@T*mVB=k z5xziW#1fzhRv|ak{{@$|SQ}M^)X7O%(mwV+(_EvXg$o0WkqJ@C;>xOhyZ%ZC#!7qQ zTj-y8l$cJlZ-uxWiO)s;`?||;FZD{#--pS}I&kfF^^0yql^`;EYa@lIj64R0b0}Xd z-*@+L9PN5{UQu3mf|w4HGV1l;TSSBA!?YA^U<0FpCKelmjjguU1Yula9U^Ru*AUwG zE#mZw$V?noOjJKKc3cD!{FR&|847kZ=9ckGw*2cG&;StdMCv3n~emTgW81 zbOw}`hq-97l}UrK2{VLj!n62R6I-e3-pRnGS{5CoTXJ$Fs*}nwkYcC5JM#JsSHvu* z>1)9g_pqZ=cWi}wsquCTQ}vI@8BQlV<*0Myn>B_UhMZ{e31)g(>H)8in5G3G|81_) zU*~V>u41b%YHsx&W!gO3P3q=}Gj({V;pE`Xn8Wy}2hq+bH*^hjf5*mnf4lzBe+~uq z($O=m6}*pNj9NM+A=vbyzEty8ZkAWq63D+Dx;>_Ivp~%a-qEY85Q~#3($=n4B`}9Kq%nV@?El-3?Oho*X?~ zi=udzVZA+!dU3kUiTjGJz}knMrnpM8Mb;o|N&4uBu&}oS=r5-ek=Fx+m{0;4n279) zG)PeFI0d9eB6YlVmq@!4@}4tudLRcR6^ zCTwM~MAB4JDma?dc?{HX@K6x75{qHMKLfO%t1>$aIb~|&_Sz-yA5Q0`kY)z=rYn6N ze~XqUL^q5&@7e$B6Ag3OFdY+Wq{rE0UR7|%5(!P_JLff$O;|twr8-9>-lsV-g$s?h zgqM(HT2-Dr;;ru5aLwXiP*J8hQCQ7cFsGa);oL@u27N(++}sar0$SB3!)@6p|EGyh zJ}U{wMbqD&{+v!&%W`O&8N0=}{iRak+`7DmxQO?p+X2;(gE{A2TBDjNBOB*vM0jCS zoxZI_8YCZsfxHd-rv(<v-=O$7>Q=(M~~qCdB(6|4z0>BNCDP#*{5sY*66hj*s3zgY?VFq-fR7VICh z<$#IaqkxB~iZj+9=+8yG+U*fG5=0`UJ+aGTNysm3)(PYf8)ZRDpj-qciVUf*1T}++ zTMkK@8IX%NbHUBJS-$c9Pw7pwEzXGy=sN|7F;9#$zDGZ3=F3535fSlp{#TW3lapG- z<66ZGa*Vc}SZR?=@m@N{I$)ajMECWI``wR>is?~s^pm*X7fkl2h2-JY4q>xn~awy#t`9EZ#_ z7~&Ju^vv*m@<+GhUgQn-!njk6bB5xAtPzY}hf0lE&>>&*}@jXC-EGdW?@dd)n7Cr!> z&Ugcdn?lv0Emw^V4MEi5xUF_JwU5gECO5(O-4qK)t&S@Q{x8`FJX#Qz3ni)qrNvb# zxh29-oVRv88*Lw*|H$x<83qB`%qq%n2zb~U>*1C@sLzwMWYtA_?ZA#tutm0S^7y#w z-96?5rgQZif?-DxVpz7)griBtM-%Fyh`eyh;8i(HQC{wJYdq(k6LvE_=pWoYPsuMC zPak6%aIvNDpDnC66)`y~O#^CBb$BRQI2pl`1c-@K0j2OdZy-fjbX1u&0VFOTReGpA zKPvomgY+OsiSd+S%}~=xt3Tb2w)JjO++K^iHs|nC#d`OdC$T9`XiXTDLkm#OZF~`G z1DHpR-Y8{qMJZ(gsc)iL-;w!!!116R@6zxHLr!A>(kmRgszi3={&i>`j#6v@ig+Y* z9<%%!C8!t_4L>omv6Grdj+0E~X&;hJ*yo*6m2Wg=U?PcAfpV z1zL`qVjI78xQ)8h3v&g`t>1yOKeBvit8M+U=U(PDU7Z!?2ikR&){LYgs0kzjB^bYL zq}=dQ)nT|;h%7~&L;h$-EIV8JE#wsyR$a~{Q3*bnZtFv?tW=_X+s#Uf$Z7q9!SlUE zgdlEEEiy}AZUv5m&tqz4*t_2JckkY{3V+t;&*8!!q~zm2Ps~t_3giRTi9DYPVzfUf zKR>o@d3@+=V(G&8Ha&sMQCpx)VuK)|7CsY~ib{Jbh7FU(!!IvMuw%*~Mol^xBefFu z92R%J{4n3P5@A8!a_pQUz2?q6E^C}z_X2RTpFP>*`(kC$Hv(M4kBb=iqOYS zqPy!f#5dBxk`<@LlFKC>EJ0#=7%)jknhCkBe;zb&DvP@bD-M?)FO05)>eEWno>pST zo4(J>LFNq6!y6EzObCo{=AL&L;b|z$`PeB*8p(!S=y0}V1Fdrts%-0W*s{vZ|1%cN z%pG{Vyg>gt2+d3GkVV%uh8a#>Y#fd;1PzDj-6sg34BX~Tn4y;n`FSTA+lht$mBm9R z+e4=>#kIRkoZlI}|Jh;OXA_h4Pc&b}YanDEWEIjCG4N?tz0ftzD6=>$j8e+k;5e-A z^ikdI#74K84MS8hF)bXK68yNMV+SnFgPlknlG*PddMm>PWTjoJ!cEC51=ru-kH1yD zLaF}HTj-@Qg{(0y^t=Wu!>e@kBX=UD`!8K&umvG6QGeF{dEoPe53g^mENs*P@dB!_ zTIsL$n3|l#&fh-IhL>7TR|FO*)=IYTce`~kqBA!wcg8G#vMD)!%nva&CX;5wxTn?q zB~AinLi0t9E;JLlIQa0InxIJE(dYc46_G&s9?{?v*;--|XCxKK?L$|t!P(6;#)N5e zP~ks^SvzXGlG zjAC*qILn+fGA}cRmY#euS1v|~dF{)>n@pNVhQf)G_%Vc=%)2k2q91>4ZdrGPSPxAd zMWZEPp9`_O;!8wBI*`G~!V5h{OqSIJ`v}<&^#)#sFk7bDj+BBVb~<#*W!w^x-P+%( zLCo;AJf-4AWI8`t2!#GBrEa%(Ghp1&-n$OQY(~pp2J@3O6|L1=N7w$=2r1Ic$Q+up zKU(&zP3+Wa_4#t!i0us5i5DA+e{VNf>X8U_pMuz+kdCO(!@vGg}QLVHcP*I~M>9c9E|z7yOZEjxy7s$BT0^}Z8hi1`y? z-!F)U^uB9d$sa^J9`N(z&Rs)g5PG26bZ+S%GR>jslJsrM;OaLwrR_k4`kap^lCmw* z>42+(Ogl;x93Xn3zpxaHScS(;#go7o=EgZ(5lL6*tobsLvz;qA=C&twSh}(?;x+j0 zpEH&&GgOhQz8s+PK42G1fc9x;28c6>+X)0V`xQIwh@0hyg0~x7ZoCoVVF-%lHNQhL zKqO*+RP;I)qTk5BTA!PD{DUh|%EiS~p%Q4wHHWXXi(Q+;n|46S1J&+Op>-N(iY$1ylu=CS=L2TY9a@+r4xa zc-{0?=pp{S#m)>&>l-rd(T!NL(GGEU^Z(_1iEPBJVJ(dGu`kJ#cE-6=P13ZC$WAag zA-V{^5E}f0{ZCp4LAQ356E=rhf!rFC*c)QG{RUqELXXs42xP0U6mt_Ia9<_Ut=Z+) z!1286)1+dGASDfgRYg-nTryWn8aF}2A46^iCu(y33CbO~pu^r1x8!-`ZHzPUexlQ7 zJlnSkGJYS&Bk^HJQCb7q0fI7(q5i1Mou3GohB9BgYTj9(CMnANZpsU%;iE< zMF~!{^nJD+=2``pTWqo>6{m_r13gn!wP5XWx#qA!oA(mWX(#`TNN10^57Xb|@ zcj=Au=UqrpHP|Ph+8IzCnhO7s$w_}DBi9TYTb>!*uWwqCdB$3PoR5YJ@*5lvfIBS%l3x&EV^IT8M6Td2U&F zUX1X#;~Z|UMW!!wC>eGbsl61j?e!slTOGx@BQ4hjn50a9$mKKbs8idpyNYRrsKVND zsTWp!==l+>5jZZpBB9Kce6u1J^d6TpRdaoP5pA6rRU=4n*M*Fd@oOUJCx(V=_q-$% z4hJTYnPrlxw0Ut^pZ+)-lC(W?`(KaE01X>xNP*Z+5L@7nDwj%=wlX3oJ;LciLl_ps zO4E#iXl9}$2raf*C#o1EBo$R6o_XY`&4x(6rz8-y;5LI8`qAH%;^hfhmYaO7$CQMO_S#Eu4*cPBVH2^HGW*O zW3FZLR~tV3{<_`xdkdUOoDJ-PAM7sn&%a24*YO|g@KS}Mr628#PRw}4J8&1x)%TO9 znOqKEH}E=4*@H~E{$R0i<4QP1R2%&+aAH0Ws14FNN)?bvCZ?GVImIQ8?;rrH!12gB zar#`IUt_jQ5?7jpI7UvBFjBoW`=raP3aO>+t@_z!jx+FHBYp{ULm<97OrTOhczs~v zcY8Pg9kfCY8@oVm3=`8Y^K-LX%}Au{el&rRAy&jM4q43cR|G%u>mm!*1R4@>Im}++ z2Dq}+*x6gg3TE-ODON)4I?}~iA!YALB7V*M#M-|t=M6NZmI4PecnC!`7|V1mj~J|a zOXISWO`8!=#ed4fge^fp1-o1y|BI4Gr*&}bYI6UMN&;K^`wzF-&-^dH7in=V$U*IS&N4}`$i;z(BJ@vyt4MI7zs(Rs?}+Go-y4Yd~BM(7H8@D!81J@`;55c^$CQE}_exQUxB}YTu69SK_mCn|omT*p+8HX2S#DB~S4rU-?;3iPR>o)c{oXWq)d@s&}WBIx^ zo`@=^l#5BepMi}^%z=25Q#i}&Fcnp56V-dbSg)r@K{MVO1m-MjdRr)t9U@|;`P3l; z*|LED4mDU9QmKP{$Zd$O4Wfh}mSz8r&+;lCk4i!|NaTvU$I0l=8N6e+yXY-ey=K^7 zVsD|e4V*sLWJV=1_v35kt;=IRLMH26jt^T5%nf9*bKl*N`PURiyL6L#iUaK_he;Zi_e>|J8kvS0g6~{*GWVGdd6Nyd4aXi!P#{n)@Byxa;D0* zCJ`A2J7kFR+{?%>KfRKdV?#}r_Iz^=|G+j(@93#T9HV)9m|u&B4;$M!vzA6mtc;g9 z9=QO^<$E!9vKfiTH>9(dwEUmFX_qyc0eYw$w!h?TZEbz-FQ`r$XFfyZ zSK}Yw!mv?X{uRh@zJ0*G5iu zzR)w2EW_6U)dcMi5^tBVR1G8|q$w~`%26?C54|#$-SI|5l%z_Q1dVUQ{8*9yI7$!a z6!?2!@=vIoj($2t;G?pK)OBa^#rH?CZLlk2j5t6d5jCspG{#w-!R+J^P&#~mgw zX?^dM!P;Rl%FGg2-ljwn5zFE}0*A}LHNwe(&^1B&%TUL&i;*PM@N}G$0@T6O>aY)4 zkm(ZMfArzvEq?>a+$gN3F^|f6zM0_JP=QEvyjs#2v@m&5XTtTq_r~omG9jL>HfwY* z9;|FC#d4eW-4{LIr&rY?4wv&BtCsDrBCf_vho`#uY0SW|PQ|kNT$(&7C3eP`xmp*Q z8>YmK8pjScb;0_SU*3BLUO?_-2SS(;-Sq{Vw~0)X`*Kcww;YzL^~@$H$2usz`nAf* z9WGB2oBP7W*yCx!zb;9f1o2s_6-Ts4ODYnfGBS^` zA?5D*az^Z!ozqGHE#iJ?U!vhNyV;1b(G%Q9{!)}3H|Cj=N+RO!LPmw4TT~Podu~2p z8~;`eM-#;}n}q9yO_2X1Y(1ipYqWz(oclcW1ZigW916Q%HVSomg*4DxBt69TXd8JG z#ZG!+{D_DF?XK}%-h#Qu^6^gH?XETAZ&!cEB!wl=k&IW3ApfGEMKGCz2IWYCuTYzHo)N$iX;3u($E1>3a=pr$JUXce zCKf8Is^~;}WDRg`W&cU|g4xNKd*qUh&zMK~PD{u2e%p2qu@|E1xv(H17Gk&X9$;%> z^`qeg`hw}}CTow|tU1j&qNii_aO{8@m-Qd_do8l&mkU`U!5n(rENWtP(CYPjLV14( z+vC(Z0@W$M<6#o~1&ldXDubs}bC=I%qieI|D=--gKk}aO+b`5!VxoAhUJgS{^z_l+ zIly^B-;gJ|*1k!A7{r%EVG=-2Di=%*jujiWB9yPB^ayr1342Y*$rX1}U}xm_Oiy!9 zrn+zmd?gVgb`aJza$7b$-Z}8?&rPztL(cNweMgmq^#5b(8-pY5x~?a-?WAMdwllG9 zOl(YScWj#z+qUhAt%)X?yXdaJ%aUDegUuG7~!XYaMvUJII1jtMfKMyN2P-&``v z$zyv+u8|TS8C#H%!d{ZCGBZ4?m(qSpAejb@_^@8rxiTmhGSW*NGo4cP9F=9MV<{EdFOHekTCETJ8A8v14C$&kE z2#s}sPq@BS4Sbupus3)a>FW_)g@+{E&AC6iU@JpU={0UP2M}@pBV3X#Q?JnkGEqp4 zpu3X6%g7I?2;aSa5>vsc2MPqrWu_Yn?l)LbQIPQn>TbIt($zOv$W2xlvP8BENpYBK z(%ubL!zkn&)?B_dJUiQ(onZr4bR^;_0QC@5{{()uXs`-jZ|vDrq>7>>?Wj!6Eb$(L zwb-0eBe(=%vQL(~7yebAC(eP<(Xgi7z-HvK_ORCe1EEU0%PrU^gnmgmiC{VUm|lHp zJYWeYE~*=Z1b)cAC~k4n*`9hiEspO z*I&jrk0gbQonnv|u8x?+><2q|TU!Oo!gInZA+I9La6|id65g?*iI>S;o+inX=IB}h zd1Rx(X(`umth!ryj!oIiO2tNkxg2|UvPSDJhjM(}sDGtOK+cC0ScffRNmo2CLa$j{v?>;uUlv3a?|;pg^6@a~|jq@UnWIAEfu z1XlDR7!tQ$Mb%{?HZ%7RXvJLJx_?`?iJ7lg*<}?i^cd@N)ChEJnD_rz#`zwl;Hm!Z zVlohM&*YO0?~rZ_8!J;wqn~rR-&dS|=jFeoDbAYE92z*taauJip@J4IMii3B!@sS& zjo4%<8TLzcmSP)r$39vrHjvVgytfc6MTj7seDi zC@yKuf$&hgBs13QwnI=IhTM!7AMicl**df|G&Y{J)4k!Zy$Wj!XCw2vh6x?RVJ^`! zM57pXd9^!ZW?~|Q3=$JPv0ZtFsB)(mC!4_b50miVM|4Jd^|YKiAG*>?@MTfF>mMJR5q&TK8m@7(|@g&Hv7oAaH9>*B|)@{~$!K&I=Oh9!p(?)yEvF?5;Ux~0N zW18O}`Rh+uo=gbU*t99^J?ZF7DH~f0C-f_iDU^V{!(r|# zF*wSNCL}3ZI%XXPpI$e=m<9hKjQ6dK3KdyEbO9rlu>ZL;2mk_;sJhY7e}?J3RgtQ- z;H$&~8T1U971O#epCv_6HWlN~b_Ox36?ThI%c4fhd&Jryl|O==WR7ifwWwo~+r$l1 z$ws~Gan&eJ4Xt3OZ=$K`VWi`cL)JDP=~v{G=E;p}gh`nm`;dLgu$L)iWukPb!FgIMw=w9#cVsfFkk~O%h}DL(x0hgpQRnEp{F-&M}|(z z+ohUzmLoMrX(!&!an)>2rvA6sqiti?^wP#0wNN;snn}QUnugx*)lmn3N__R!(pCY| z@#S-Z!{jkR_v4Lh@QmMR(eR_0GiaQAei{kg9(8gl&|Ptb(?4Q->~A=>&7(D=!_qsy zW9cQsmm+OKrSy0LjmtS}ITZ9p8egv37!A1R&4+F(4x%2r6bNE2Fg0OSgRZMASrOL( zK*=JuoN7IZ;4!MLP@x7&B2C!QP1PC+p#syv^8v)JmBd_tR`e)MQt)Fj8Z?|~E-gKT zx@to#P{o1AnnB_~XvPM{8c!#44;z>ow6jR1|Jr#T3Tts50h-aIC!!SBbo< z>cH1y&e^V|-(si&KD~Hkov{h+U@2yTq$%c-9~&o@&<-;g_%T} zGF||_qWwaB0?=`fI4T@@AoPe@!rP4@dn)KB`Y%_QIjyS za}po6!CYz+Mjn2y85smzI~I0qX<-#oX(L6tjJdi0&||m=HTkHFCYf`&kuv~dDg^J= zS*;l>R2wyL{#PvVDaDvSX%_sRZ*wK+_O2x1Nel9EoVHClb32lFhP^yOic-6N>4vZS=;_a#~i|~{Wa6&q%3>){B|)IJx6TtpBoE5 zf2@3%dVF;Z`*WLgO^KD`GFwIHe6$9}J(UZ-Pir-{8s&|f72@Y59#zb-h!uwGg6nTz zJNvBf6<)R1g?lX9Wy-y>j11;pp!B$uZ`F$SA`LB7@ zkq)_oJ?hF`gEQoFQ*(yLQ7?iYj7FaSbtbn%uKB)UCh{)Sa~rOljZCog)}u}o{8X(6 zsh23$kA5VSINh2haxAfA)+1HGoM^COBzZhmxrM23s|_hZxEOQ9y9b%)-bGB^er^#2 zkGz_)b+ada#_!;AqG_3$;xNmt%J?(NH$RPTT=&Oc82IMoBgS%SH1#uLJ6dxZxNXiP zhP6W&f=m&mUHYvjuDi{(n#~Q?(c=3$e3Gf>u3cKPogD;zb9e~UQ8BoikK=s>c3l09 z@jPooM9`RTF)xEDLElzFQ0S6m2_r>!YMqVP~ z8MaYVo-5OtoOdk+e2=H@yKV4|H`_qTnbG8sWbOFzHhhnkVDG4w&pyl_Bz#*xKg+qm z^PC-CgeWJM$KMqqmoG)P~@ZX&OH~-JmfX~~X|JB~NhF$JMrL|}y z6ekVjXCgqSP2ZG6QZf*J4cQ27DmonOCr+QA!!{w4A@i3HkQG}Y(wap7k5(4*FDfm( zpOW7#$aY5qwX7i27$^{O_v1U!GTZ`%xxpRR?`j1+S)W|k;~OX=rkX9gEHRcS5TAuv zl`1jUKRqxzzyOtgf!5M!jy29lN;mTB!O=&tDA=~#6c;YdJ+KPZfMWF*Dnu)~KrjD+ zFSFtP+cDT!WpR4Y+;)eY+0I`8Tr?BmFl8f-GT93Xawo@R6gGyZqF7qn8a(&A_?o2?r;p18g&$0c;#d4 zyU)~S!6B54q@_kx<91V5r|W)LQ_Etqa*5p z?+uDcCxsYFYHnaC1i`04`eb@tEE2ooz5R)+HtI^#$Rd-P#l35t-;nqL*}xd8o2aXZ z`tsR{>UwbT5j%>X$JZxq&uG-^9`P@ib&~dKJgG{-nyq(&VI|Nh>^x0eBTNa(h4Rd; z$QEgAD!!AGqn3<=Wi3h-ZV^KF?~af*>R7lx09Puk0~wQgB9&A(s1449eT34*;7-G| zlzf+>?pGhJjV+toop=INRj0?lcuPMv1XpOt z+Bfrmtgt+u=@{mHL1E4N zkLjrdI*+$1XJL72B81MSz~av=>74>aQjDwC9Oa1>(klF32APwAwN&v44G(T61+CHg zY)vEI`V&`m@Olshe7zz_ejcIa@wd->7x<*<+HK&rJzMNY72rg#Wfz5pF0a&8Bpl8L zXVH|+(j`{}WQXF}41@0q^Ck#RozWd6eM@baNKzcj^^()jNlGfYJJF>Wgk4SpC?O2^ z*g`0(6;S-$ZcyX4UV0ee=k_+Wir8wR{HcALMN8Q(kjIjZgb6o5VLE%IAmw-Pm+13x z!s4OllB&1v4kE#jqRBs3*!LeF2~Pl!fZ8>0ckl3L`b(mHk$MmV|rRCom`p6F`QJWg=ui}R|; z?}HxNTp7RPqriWy$M5;w!>(G6kLw-wWyM+M=o`Ix4Hy71oYA;Z?I5O129Vi;N00`I z*IqHmVTcb@Q6dZ9j~_CGSyflTqKpUfUTFR~CG25{ESvWPHiX%lMlvPqix4;!C8|*! ziNt1(T6<8X^-QuFA;s2Gokk`VM2j$!+hb=4nPH=0QJ@IA-X2PSlf-P@jE?E)ryY5J zo@FJ{aX@i3j4sDCP*!QQCusim9grmk1aCp-kX3nlLGDjceSP^lNyhBgOe18Ul=*uc z$N>+=Q5@~So9Ie~h^A&kp&V!XfqGvZB)$8Ndi&OYi1K$GL<@hAdrg65ETH*?LJ}FY2w{Fhy<>}CI&A@?X(qb!DrF7DV`DB zC(UneAV0kh7$c_VuSr!06f}xpC1}QH$B@rD>U8orIjFKPaE4rnVllOtO?I=4HL+K| z1vqpMSNw$3u?U{rCeOR)?7;l|JInd)`7-U+_XwO%KCh#DPFC01ro52o>FmlG-Q~hY z;UI?wccFceNERzZ6Yw8S1T% zoh6T03-zH!2c~cFOT=f z145|=AqS-dbEukk$i97kU$Na?h`n_D><5W$Li*lNnAtd@O+h_sDpIptq6=6m?tW$Wbz}@Oco!?bXEo!MUkXP=!uY5 z<*EHwL^VvG(z5ilum^3GHqVIg!Jx~x+sP#s6FeWC8^<+obBBB~*dyAST^2_bW#}jR zNf?^n%|7(^n;Y;;?_+lEI#>T{$rbnw%Xu)MD4i$))FzcK+^S^_4Qwiltcu;p*S|^n z?%NMuc&B~-tF$s}nYUfAjE#ky4shY%68Hhi6jgJrae&$dBGqp~3A}N*QFJlv6m;)q zVwLD4^E=EP3jW&u+cmF)DzF6Y$eU*_KNuNN)mBz9}YdseeJs!$mV%APsx zo>_A?O^o+Iwj@G!Ra%!xSg?Sn+um6Euz;rqqXEt5?0`saF0N0}{|ao!f2)r7|INwl z{oC0)M)}-F`6L@{{*UKgri*Hep2Wki+~C6a+<gmO_qmm61DXk}IN`QI$nj z+ZRY*8Ub4!$PQK~|BR7OKzA9X3;PbICwpPc!(COWH>cENN}SfrS5#cC znZy8I+iK2QWD>eylrI%sv+l^*L80HE9wL^@bQc4rBc1UyjyUMs$ni1mX;fwdZSMRd zqL!O;>s9!x?K{hI{5*c=abQyt1H~?lTvGe$w+{&&O(96dGVxR$Q6XiLV_aTUQA?F7 z!-Q8%l)eI6j9I0MxW)L`ZQ88Cn*VatY1(pyyOuWh`QCSIwTl{vhIu3*t~SoJ@7hn7 zp&c`MXWkQ+mIPp1#q_@`j8RaJ1ELoq2tOYcpV8oT!53p{%KM-tqKi#h!vN%?Coh?N zP1{dzt(y;x1m18p^@y|LS;Z2k{^A!mh;jzi0E8%Wg7?W&8!#&?V+*KNE@LP08&4vb zgh78cUILv|%L#*5jpp*rZqNfr(IwR!zf2(j;jUpOA$k#tRiIc_Nnw`$OKzY151(16 z1s-_^CT7@JIYv&>RR$W9EFC6S$P|kQZ=$`LH z59_|85>j(3*<@3!_RLfl)v}#A5CLM6Q&H%>e}l5)jq0{;f#3#o0`d99ytv_ z3cZTL3{TWS3bN?#5|->n-n-l zryQu|d*u;m#lzu!o;=nso=Q+XT%FVV-CtFQqOaLE?G?xiib{lU-@hf}0NFr4$ulgX zNqW^WpuAn(Px;wAgGUVEF}ri$Q9gV%y;wG+Sy<(sIx70|9Og!}vr3ywAp;>Y&8bF> z5fx32=uj){7aF(36v+?_l~=^8OQpmp(-Z#|Qg#|J1}&rSfTSS(1#}FPft$wBE}iyP zwt@t*|EC2gbB!b8PqKOcFr4jp$!U5v^v!Qt+x&X^ z`Nix?xz=bPRWv*XhNIIug=VDJH*9Ed_d>wTjwnv|wMv;$OYji4Bd=ZrfSt2sHRYef zZ3mZEyp~41j&%KpgSQDb_ndEK{@%^umFM3wFmm8tw?d$<@l!4P^zYn*`YoZ-3g)f} zoPO`Gft%+@E8@Q4QOkVl{NBmUO=K}xLdv;6hWpX$!#%W{=MP~>E{t!RG3jrssRa5r zPj3;fI66DmkE!KGCdw;*mxFYxJ}!1}ivag1RV>{#8UvMytZ9vpA$A;ZTlY9>roH{X zoUU;*=K4m>6G-07NdLaZO_GPxfQOcVhj+*B#sQqqHshq7#STjV!D(Koy%^jYGov zZnrzJ!D^lu54?$YVcSHpUAoSUZ#Rej82p@;gMNV)wx8J{T_&Tq+dp&yjr_Pyn9ci1 zr<`Ye>@qhj8bf$`YQ!_3a<`I@gl#|xVdZcgxlWfHlI`PvM=;GSHTqQB0?)@%}b9lhfNERq?V5}owKxsSk@xIRoNDf| zEn0gjKP;vy=J9x@+Fc6fd7Z#t`ic_=JkxCz2an}-Ox~~@-j~-mu8`cnHmzxI;XS-| zRO`2Q&X|2SI-bB;Td$#Gt2AM|Qp~u^dm!@eUw-l${P#8&kT)0b`FQ)9iAvS?2M)u3 z{T@Jyxm;IPs`i6uTrytS9v>ecXjXwlr&=JWD^CITuWWNz6tepP7f!3%K5dc7HR`1D znp0_*x>7>q%8ptLPH9dtc_T|2nUUR%*KLGRZ2>xv=0$?i{8gUX~B+e}>1kvf~C zC~gE%A6S$Gd{7!PIV7$qYP2!oi{CzGarf_YtGY$&QCKuo$MyykIYKWYL~vy=#)E@5 z@sz@`e@!u0X=w<>Q#n6~OnC*Tm%8jEWM`ggjLqet-6vphl+-Lab!lf&xZ6EVfbVH1 zk>qpsu8c|J`+JsYSYrJ?b87r+netgbu*j7>ExkMXW+s>6F77(Lmgcj{lnjNj#ayI4 z^9Xvfhf4R_Ine|}eO9?)5PQm-)=%OizO!7MdNH1Hs6v7@d{wUH$I&(>Z3icVgKM8w z?#vXeE9uOWU`6VZhW49z``ofwmB%|d+|p5J#V|}fw@=e3^K&Eb?41s_)H?I^hu+G! zx-05H^*-e1?L!EAVv~_VqW*r`+p3<+|N1gKaqRO$E=Qa*@&ZGn_5W=o_)7d@Jcz=! z%G;d+30GZA{B6lO7zj@b`Td8{Avpr0GWvBtux}nJ)(X)R(}|&Qpe4 z&S~Ir`~hA*HYs%P%B@0up7WZk{8kx3)6O zlzd7%&(^i2ZK|+&1O~Z&U#!0;tk5qrt{PA3eFZcv$db2@uGmoXM!m`~ro8Xu4 zTbABFzvo>WH&x6i)mmT~-c^phQ2#97KRE%l$*yRb-gWe*$86m_>0$7&{pS8#DLNNL z-JgMw_x66Ukdx+mUKJ24zHzTFPIiXm8veQJZ}~50)3*%8-Da9IBh!8<%YNQ=blX8Q zlAqO6*eS)5{rD!KXlY3?J}=K|nckY>opuj{O2KRHwG}FZ zTsq$Pn%^jtN+E;gAPy4CH~^h9pQD0&<`?(uRJ?l_(73ti4x4g>=ch!VPx7}A6i7-@ zuTH*FyzkC}TgMW<(c|Kkn5&{SoMOIthFt^SNrYyLw{Tu@q?Me!Q<~Ogye)nW^eoYP zS#B_}F(tI>*i4(4_v1QG4YNTi!>1t9oR6hur;N#YU7S}l)GL6+I)YP*>|gyME2&Vf zCJqq6iXat$O#r5yzT@yL2~E5mK;7Kz&P+kzZsa`u=CiWWH(g+t>x)*KM8g z;|P06Q)4HBb{K!`A^3P5gv$bo%13x*)BAZnI{$L%9dDZo(T+7CqKq)pj&66 z+duj9ixk|dQ_w1a;eY&LlLig!HFyqwCM~#%f&3pn4lpWXq4evFgD7m( zU?qy)4Zj3mmIIhvKFIFyg8kV{@AJYRh*~zkNXWqTvlTH!&+5(a{(ay&M5Xy2cTZK0GQtb5TCySx9 zBxtmX$MnO!ng7I_A~q`9SbX|T%`zpJ=i~OXw{X0iP7uZDLeUW2mF7;H0U@lx^^S%I zGF>6uFbIMgDrAY{|L7FCwBwaH`^DLTxL6tSs#(C&UrXj(X2tEZg(sLx3*fr8&C5Ku zuwHrB2Ihs{u*^`MSg!6pbAJx-TEns0S_p2vX4jsfYg&;S+Lot+>0-mGH+>1yj0q{R zc4z?g0!pF`kd1^1ZRuRk4mPfblh^~+;s40A9IpZ~yIs6vy5<-jx2Nm`y!M>)d`wc` zZ-u6l=Zp^X_>rC8Hj(3`rXQJi_FK&!5v6$N`WoX?g021G?@#>p;4r8@njY*CSa6v1 zy||wbf6o2=%Lj7dOn+NU?;Y0a`>Wxw-99il2u=d>k9_-6E<6Jx{5tUBgF~(0WpoHt z@e^!Rg}uU#&4=SRZETgS8)-ZuS<>>G*OTnG--;_J!MOD`vgg`SUEAaD{p)wF7M3ik zzir2&&S`^T1=`ycDCvm}1r!btLh%>l_?xS9E=REbdJuv=_Fp+0ZeOzQHIlB_QDzxQ zRtG`?;G#6O8OK(FnvZTG5`t2u>l7M1Y_bDIWCl_{z*Flxr1JrUM`ScmutD1iX)5o@ zMZlfI-gB(g2gJasV)t1kk^?&eoDRDa7C9MH;KTX}r@z}Xq>(}2@OQ@iqp@@p6Z4tl zPtG(w`-`?IHmtkxNw$t!7S#rH)lL<7m9WJF&i9Nun|+!}KgomeZ5mD9RUV}+Yd@by zIeMXAh7KyeQ$K#()0sF};N#ios?oj(xCHO)pbbLntBB*q2r@qz9hv*BDJt^f{L(#8 z-``Gk@0~Fr${q`d${KF$9xXMyZN{5RU2=Z~J-4YBOO zY%eL^k~zJ3&__LEXm{^sV|hgA^dqkS?6y~YcFK>ImodqB{9vy-$W9+GBdvqdp$QmD zi6*N~Zk`3UbVlQRV)RQGN)#>C;udLD`N9iFr$Q8+E|nh_Z?MbDEjK2mztsy0`FTaD z#}>P4#%PokbG3LPUXU>()w$d*%a#>UDI#Uwc@h0r4xIB?EIs2b2cy&xp2+pa{fvRl zC~Ag;(uF-)qT=$(+vu8|W7r*NTU~qYn1zd;w-OzhE=_v!+fL~58J6P3=Evt7J>*G= zjSGbeA_adU2(8(NuyA+6oF~{II=X5h%C(eG4w8XqLmBFnGIQdAW-7iG;0zAOmVp|v zCRFU~b+zlZ(DS=x?WWrmj|56nv&`t-CG!1<5Q4X*YnVCT%d+Fm#f3GM)5887venz_c{7 z1hA4-CMzqEy{$1Uy0DA}P$i7RbSAuOEig09fn_LTMVK%_*Klog$0g@%X)_}ekt5E~ z8{kvK!c&lO*mM8@Yz@$8W!3QHD#y_H8v3EErNX;wcsx!4Qn0qP9X;NJIE44gfa6+I znG$k9sf_vXPVN#zDJ%OzuDOGL*hD1NqcaX8r4XzTPe9fne~zmJ-`&75IW7eWuOECd zg|9|IDaPl>!!>OAf+PFHVpSNXS;%i~8+faz5>p|Y1rAnS-Yhw1=~EsgJf5B2xHMbm zPWP;h3UN!QUTgGB?yNg5-Yr2%2S(7W`da1ve7WlTa^IWtvu!W?1)iM|}A&zDhJO}?~q?oN7%A}WfC7ENPa1IMJ3qpslrE_F4i6aov zGBIK&k-O?bF0}jzm)=TAGJzQkf=?kv`8zDWC%o-IKFR zXT%c-u=s{Lq%`KV+DJwl3QE9@iLqO93Ch9-$>^n|5Ef0TV-{zlKVknCuhIKB8-&m0 zvEXtjC_U1)f{!c7rorEAm}fC(qEbP#&s~hm%DE;kx5MA&?vW{?%;lkS&EilU1|C`4 zMVD%ZTzAfGR8qRF@HxHjLd7l)Pda;eWG?q7%o0n=zD|@T#V_CCrXcUM`1*4c|Y@r7K-{!(-+0PF|4NmxZ zW#)IGmj8PIhQ!>&1gw_RJMZzoR0h9?9lQyuAVKO8GjY4U5@U zo!iEJIr7urZuOOXTo0TQAp1Ga`670$dH{=>CfWQ=wJ$mSDa? zBnTC>0(eNMpQko>1IfPG0s?Kp;!DV^$YHM7my|)Fs2oC&p-WdtcD6s8WKRn!Xy6A( zxvo-C<)nw`#BQRdM5+V|5%v38XC@oC+`%%HP`%t}SuR%b66zT>j&YZRMUkX%T}~5w zhx)P2-Qz~)3uBOe={z;;qD@3@4sdfB9bElk>#~?7s>QNh>jw>>rZjhZF(Mt31{0W6 zVSew2gEjn}Bg!uel&!(u$FLP(ipKjZGEduq1DpRK7Lcrbw0!gQSS&VB@dHCbQd7?S zWZrvZHdSz%jY5Qt#{2DlO5iTJjof8iZYVKDW?jp*?OO%icWm&mHUa-9zFFV2vaK3N zl-K@DGl8zwfy^OWljZ&nG+ z!0Y3^Agq6(FAy5X))IJ0^$qAmWT9xPR9;3bbXwx3UzimaM?g(@>o08 zMTk5S2jE*Yc^qvC_n*rwZQO1pYl%a*-knBE$0H{sS7YJQYMa-Lid7y^dI(vM1gTT1 zF|#^it#l06I4l7o6!a-XSPZSaj75kc6-x)8ftF0BIi`Ybp3DMMAoQyL`gDkp-c}zO zYu;Ka13x%{rh-*W6%bWwYHk)A>9k5(f*aF3xL6Mk8v?jfzXccG%o)=|@J33NTurM= zU*g^Neotlsr+PHE2)Dtz*i=hHdo+on_>QMeNr!zjOFkdVCSA@lUPwJFP;S{de6hOK zxKk^naVPLRNmu8#-77E_R;|Y{A6d?{LmG#qqv34n z9JKOe5E|HBVZ(I@;o(0R3ip-cHwF$e1^)mAv9SKzt@F&w`z+oU4l#)-z zMYk%#qP4^3v>hp_Rm18l2qg}u_NV0WAXNB=`6YuDitNjOSCN#-x=Kwen{S^a{fqCz zS@kS~r@T2Ii~cv$%y$mRNr8n{$fgZuE$;+=VAh?yJg_A42y!ofJGWzg1%!BeM9#`qmJ2eY9ivgz9(TRnkhA>5) z11ut_XkJn7w7Wr%l&MV|3enG5OL5}UlJ&KKyuIsF_wgv3M0Jm2$$B{QE`*K$ z`mZCr>3*Pc(|bhFrpnT2h#As0M|wYeSoCASjY}rEGE6;3Q2F{9t4qAT1$-D2c-D42%Uxl~Rmj3O}6bn|4b`qnlAK+Q9}HlPMwZ z`Wr0MfFF_8i0BF`>BVD-;S*-*mYM6aS5b_Xs#}PRH^^LCK(XzIm80>VOv4X`v_`W` zqDe|t*t!`wUkrb2@#`5xft!JRSVDx?Q=$Eztpc!dPmdfN z9h=(QUy<`cctr$?is%K$43g+dYP&jW4x|Z9bk?L~r~qkWU>&5bF`6%VcOUPIKKvb* za(Xnpc;EcAX{5c_GR8benJEQ{&S*VLfjP^@sQ1cNRz>#%Q>7|!IcpQjG#%CU7mrWt z@7bF{9@XDSAmFPhP=TYkyF^EN9ADy`RdPc5^F9B_F5m^+*B7c0K2lD#8j?Vu6P6+_ zTP^FG0+NiZ0bZzmG7hW7L6m&RGOH4QaF`qBL1{TwDWs7JyJU(~3Bb}$yODyw0w{q6 zj|ZuW7phuux0>!1BJ~0#6SW9Z4=>_t=_xSMb`MMj)`FKt(a0<`m}<*qu~{h1VD#B8 zKk8;f3&&P+gz6Tv$B>+qc%@YHx_Ct!{aqtDId?RKrmblFMjjT2AM4_q{0#!E97+i~ zo>9^D^MXp!hE;drYIxgoiwxg+SVWx%BN4C<4ac+?I$jVR$Oy6OT@voWZo-0pIy>iv zFVNO1dyV|enQ`|?4Jj&)GkqD0mwE7yPu2ad4n=IpAB&j`U5rLV+FH)VB^IuLYH%ym zGhu&d{cPJujMln6rDC3jq70it*ECdg6g{WhWE71m*CRyB;fJ$}_mwm{fjDfiildv_ z`yd2(-H&G;KK?jHqE7S-0IH3QZIB0eoCKV#DS2$9GG}uuxTqu|0V@(@LmZ8CJZ6+z zbbFdalvEaO2}P@Ax3<$aV6sH9vm3eLKE1M#aiTQ^zM?X|4t=Z^4c>v7tUcDOEscmT z+>nTRFj_$m=v~&31&}$jQaGXosbO(~iKZYZz>UJWA$5Z3+JFbk*|3pSUcjo+nZr$n zaD$gWtxHS8qL+36jgDp1lGO8*7|z$Qo=B~#Y+mo`KVCt*WL)M?!Ek5bY<7ie0#1-r z^lEtd4|!D6A3TT|`e-N+mTTx*P;bV8u?~W>8x_!G^Qx*oW4~(Jdsj}!_0!`%6QwwW zxON;SlbP#Xo`>03u%EtV)n*(Q6EWrO8JpB8f+jpscHuB~^?I-8Q+j#?iM@}|phLj& z|6N(>=;?`9>M`Sj(ir+6`$4HOVYmLwd#A75HEi7Yw^vC*CW9#CPvdO-sLc-M9MI_O z!6h7tLDQUM>7i&D@QY&TNc5A}LbbCq81<--JWg1M?6L;d61B47&`U2FK||(w6(lS_ zzZY|qs5Y6GMaqW}(=LmcHo|JzN?1fn;R`076`EVM?Z36etrb%~pI1aauC*56BETRO zE?`yE>_2y5zX88a422%_YP1B%S zfaeBHf?IxDU_niwaG^jW4Zy3!5OWqpY@Hv7lGMlm9zc1Xw z>&p1E3(Dj!bc>l{#v##zq?UBuL;5*CnZ|RURly3eB zjSlCG0Tl&&K^avGeezq&*eyZtDC0~kBkcWaC#DUkwfW)XN>PD8eB_UJ0W4RMnC z166h!1r5#~Yz@f=!~Z8kcd?SAb_#E%MTDNBIZ`$}iwEcR;MFGwJKBr%EELx^jFxhg zNFd`(*El@!54a^P-^&@;S>YI_3xn6u{3NG}5o#O-UGn(BE9)et?YDbF(hFbwOtAzC zTU_N#(n*R1YX(gs2?HGodlg=aj{ZLo_fFflC930c2jR*%_y(gC9ix8+5J$JtI>a#X z!_l(|Zm#nvAcJT?E&O@Dg+p%`fyKw4fcN?JM0`8uUtR3I-2C3A$Y`>&+r8tzCous)h3!)i_~!W5N^UIlzA>k&fdv}l=$mu= z7t)YCoR;reMe4H@OZ(8fo+9dGO#1l-~#p zXc@LEp$2P~+>4Rg1xcZ$=d~vdcSs{6pr6031ia95w=Bt-7Liuug4Zu_6%pY}{EYMz zEOcar2IZ=%OYCT_4>uKLOS~uNrKMpa$EwP}I8)tgh}cX_m}eaqGpf5aof}<4NOu`X zkU4iq%dlYU&P0L~Z1@PXY8uW@qR2W5l zxoHsqc?1V-oLKUYWiPZ02Wpv?KDIN+scSAVQ4ZBJ6;ej526*lINPrBAwxaJfPb=b# zf^i&v#IUbu6%<=K1s)G&1y-agPzF{PBe*~#K}*ICv%FkO=J#6Lf&*1aCM2TlHPCya z{@_ODo8-HIe^gM24}}ekqC6++!;@@b61oKi9sF4VZ!eEH zb+onHDD4knk5iQ_=UB(VMhEBfaC6DlCK8XF64U=jU4c;$01LY9CQ^BeB<|;PrLA#?GR`?MT7$nC2E$vz{B9H#g_KT&gK`xCe-#x< zRuwX15RCjkEr5D327D>j1S#rmD#Kh^j`tbnw{j95 zZ}~2F3!q#B+upJElrrxaL|c7<>BRZaV+Py2joW;bsY$D3*y){EdS<)mW}HgHpbYMh z_%kI=w93JliFR(2LEnis#{O>ng@-6m_^16|I)xe3Gblao3)$oHJwjma?TA_!uK&OE zM*p>Idj|)X``;tCow=aP%`wMl$9Tc*?AFrnu#{fmn5gqnu_*rFZHhp^$sCX01yN2u zix$7(Nb75;9@ss>;-HdVmz(a8Yr)Bl4llFCd(|kiyTqH5y8Yaj@LODSF7kx#GSml5QVZaN2!_C}HA9`CuLa#vQ)Y_-3vgdVd0b9eX3bJe zdT`M+g5PR_@S%Kq(3WWni|-7Ro~GIaNM;9}e#%e@WDlXG^>1LvU+v&7T1!T1Vr&KO z)QF5lU$dQFSSB3C+5C!M`7vy=GTbZb%S-BA)Xk-<}5>|BgY?l>zdF=qM1`)Ngu6Hq|fuS|&gGUE|11^-!Ahgk(^7K>*s1;rf*|rJL028T=bFO-N0>9d08KJc5ka?DJ ze|KncRi1G8+RN7)Iq7lC6k-sG0UG2)D9-De&r+g)X)fIE{Sf1y9y>JVj=I+%y-gk0 zzgy;Jc7AE_epqDl^a}^pMJXr*jd)2~U}jhQ9)Zc3G?bPz3HtUR=EF!R-C&noO!qX!kJ5_E&M<8j`-BeVp#lxcR!X(LcTe*C(o&?Dx@8rk`u7z9iJk zC~Hf-A9xdA?&5u__}y{Ywf!`J@mh1Tc|yDtvDw~=pB+pT=)SMs-`Q{7W_ZtP?PiHxQxnx46a zZJi(q1s*?F@1M@@^w(Xc5hy^hBjCG_3!Wp91!JZB)aJ2b??Woi*>21D!;b6rI-%3k zAeZo34*5-QuT%9*t(cb1Di55ibm!4xA%^6Mtv*Gj;A)`_7P&oKrG#vl3fdI4r8T^` zxXvVnv7+%`Wte&>a@HRgZuDsYWi?cx8P0KmwWL`tiX0#m4Qhz2D}4 z+4kBGBXnob_Vy_J^(b&ZjIp<11=1e&US5CCxN~s!{~1v%tyd%H8RxErew!vC#*Tr9 zT+WzO(7r$d9Hj;HS2jtX&F<;Ci$prhMMXh!HI~q(R7rTMnHSPje-l$%|7I__+xj}J z+8&J=f}tGNue{p*t4Fp9$%+7BnYacqbUYa*=J14o!^k%+%O1VZ`)C~AAXzy^q!ugx z{UuV&Xhz6bS2Q=77himH1$)G^l913VQI za!EVZ5h&aY@Jm6uwDs}F>hH;WvVkEgH4gxDN&EAGQfBcCji_p_fLI{|*+^_Y3i2gS7}QW<@3xGS?E&_KG2 z=0Pd+lJZ1s40+pQ=gKi^a&UA;Q%EN_hv;*P6Fr=IcHdXnL0Ab0I&f9r;J`(mZg?+} zQOj=_y|;;CiEojN<&_p;58$GtUZRQU2QPi!(eHxUQV@R*=GiB$L4Qy{1`KvdJGzQ& zXy$BfP<)f3scN+JOms#X0a+ez!fV$$I~Q2{PC|#8GhnK#6r|hG@ub%Gl_}iQ}4gO z@!RI+9_H_d^e>;*T`7HAOHy$scY+TpO19}~rlKop#MHqIypQxsqd@{t%*JB0uB1i} zNF;ydqR?-&?TdSd){CX3=)uT29rjU=TCE#!l&e9G2!4>7-nPQ=T=xyXx7Q4RGk<~X zKsnGqA4xt1N#40hevUm7Q-;s}@D*r{5}_27l)ne1ynbaq#9RFFk#fr}Seu)OJN~Vi zfBafYt^pRz6&hY-3u6m504aAW3;50`2vjy7z$lNFgZzP6q25nJBNnKxoC=2LT?3zU zd)@v2?X#(=DgACQU{zJ*VH=YL7a?+xv+gVkVAogZKI;43f3XXGS7s!KFaEbLz0}vB z)YH#n#g&rJ%8%)}4@3k6guUdSAQ)o@B&JzgTXh=BG9J|cDquyr48$rqaos(%Fk*iv z64xCAE;-s;GNwvMaBgB!L`h4<1JuXQGw4ucph|HfsZwmhq8Oa-PzjZIbJ7Leub~?j zYmomE+Iyl!^`8eSiSR_AaPMWj!$13w1C|aN5UK@S{;j640}PKhJq=A=W{zLdew5^zna6)7D%Y3Q;LZOh)jOX(bp`S(!fWqWXT z26;YUk>=~jAIiuO(nzI|)#%3$W+_m(qjSj~&>lliIAq9K*NO@k2}OpN{mtkS2^L-z z%eD9n12Oi8VgQRo51IYA?_Agp5$V2uzYUy<0^@*m_}AaI@2;of)LsW~oDZn5d}TYa zaC%NQ*OqFYWZY}U}C zOHH&b?6BNu##G(De|+(nG-W97gp@Tnfw)@Ioy{E~T*V+mGrczD07YGi1JvL|iA=n z^J83Hw07f(lZmZ~8{1AMw$a$O+Sq6&YTVdX<3^2bqp{7l$({Fp-#vf8`C*^E*IwsY z4<;8NsU|;UwP4xc$>ngFB|)Q(lVE#G&BhZXX_a{$7OgqKzPtzI3-yt1IB+21XPI>$K@+>Ot}D18Vy zDRnR3H$szV)E1m177`(l@DEWof?9xP?2lgS#pnraz07^%XNIJr3uXZ|((q~+Iix?d z{l4lZuYr61+H4mCQLbQBMg2p*zph~1McHiKY)rGNaxH{X_C|=$YQ%T2gyLq@P`MG! z=tE!BQFV;D^`$^s7I8T_b&|Mh=nmFFgcW6BNF7C)Ojxj$|Kdha%|VrxEDgY5Y|%1+ z_{%%J$>3qT0rNi^lFtj2hV);c?q8@|Ak2R;%9vt*mjoctRH-2JcpAYkGuK;p6{??O z#s1BU9S{WF5J3F}UsA60D=yN~@N{%^dgz^?e7`T$AHpgnhhcYz(tzfubWNUy9DY5Y zczJ_8^HOZSc3DYDhN%cc#!f(3XR)wfWzE}Yf%~$~iegdZB)(v-t znZJ)I0%H5H0wl z%rr*F5Ov@#0$(E)xQ(|u$pytFyig=l~!Q`1lC4 zvwyYM;kFDx%MPjH6tb%JV&Lsq_LN%c0g zpTBFQ0S!{_M0YnW*hkznLy<}`ZdUH9;E`l)B?0^}28!W6<(!ln5}Z{;oRV45Bm7GH z6%KJv`0Mf4x61Qg*lnW69@_<0;YcM2RKAEpG+FY4V~*ME)$AU~OYrtbH;^&_PuNK~ zI;W%M4SXoBFFF+p|H-IULJXcVZnXH%G1uFjR1p@5=WG8(@iYFR&9PJIe*ByMZ@85TLAaI@A;FxV-6au3oKP4Wi7V6G*pN9($Dw&{L}9U z%8DQGxR1NJsqCgfRby>sry19fOWwywK`IWfq^+R-wRDQ%!Hg6qB&yMt7+foZ7&n(S zVvt(f>l><7ZmN!L>jW8s{=Z`Z`Z>z{ofuBu1Z`PddpZF$PXfk z`o>cHsaT(pEF2RbS1b%EQCGNsO9-T#N#v=iI1IUfhn19av@cB#tylq`h05mOcq#mL zj>)QI=b}yUmL+{SmZs%O$Z_T>%eHPdpp`o`_dX9Mh&%%+$ABH?@Uf1#NfNJ1af|g7 zfS`tju0W?a30_t{eT8yE4(AT}O#8sX`gl!aqmxWkVl0fji~YIZB{G%%UH-K8N@)68 z4LT2C%}I7k+|ph;+DuY&YPkx9-z)iH@M0Ju1TA}s7N}|n(7UR1f@Mo8DBwB$sCa9v z?au;rS>nW;#9R!wEOU7JLIZumd(h(+_t4x~*WI7ohs{fkKXb<2Y>v*8hqb>NLF4Hc zM8gnLrC{}N(;-0oXsy!adyPtFuySqe?P}1=&|RB^ZvdWlwtwN z!~&m8syeGW9y`0o^>2518NGdYWDE*zWuB05op+ZEkGjUYk3_CK@{ZnJMsB0WcJh7+ zXjoy9^UChc&GnV{$nY=!308w$6$fBb&``CY71AHZGVwUR_TG*nfYGtbiN88hb`GS| zNuu!jOjrhdZ1$gM@t@ci5j;uCER>@s+U@rZB_dKS-4=%@e2L7EYpgb>yW&`0v#MRO zpxZ3U#>kkA((_s$yA7v6NyXA)HCy*--{q=ZjP!D8*CDB0bm=0lT|{2CAF$SR?N(WJ z0ETL&pk*LmG5#}?VSt^Fi+s_MsKo8LX-=g@0c(V@n9-Gz8l5M#$a${g)pQlkSK5}~ zT@)4{r*mue8gov4*Z+xVK$$vdJDGMz;%UfuABF4d7+wxH>syGNgixt6P-35LVvKFo zTLsP{DNL|rk)I$dVL=|7l}A64Bk}DH`cOKrkiiJN^$xvbsu^IB_)G<0#+2V$P#2O_J*M=}hYHn<=ZwJ3^alK#*uETjf zg^0>9CVJ~-{X)`V?Wkk4rHLfuV}*AYYm|#|%MD!1g?=@(+vQwK4^d_0gBsF+K*hO9 zUwuU5wn%1wC81GW7?|g|9vnFMIH_7j zHsYN$E3RE6>p1)+V!X{#=`6PW)*P4YZ8Gnq-5i^&5+GfrIm;^R85^roRcedL&u;@I zWqAXGGTC=O9~#^A=7TG5{{Hg4=%G_I0!lyx--dV$6SW9S_RER60&g@Z9+@P` z)!O?M`rs7r_T|SWj6c%DaHddJQ@5yrvNo;1n&GUJKk{pk?nP{BPkE-R_wUj+Ye~ma zWj`=Q5WP<)>|zz!=sW+2?v>pvx|d?oz1#ndvc1vSE0^-e`9v2HAoX=V5d%4sT@Rk4 zpP9g=zJA8~bGKZUz6uN83T1{oPGsk#o`WR?(=G%U4+O)+EE$nJGMHP6POo~xO-)QR zUGlA*KS4CqUJ(y86IH$RTAgl9N0?MMtJD-s)kux=s1}K>V3()2P5m1JLtq?Xd<;RsD_E;JT5{9!Am{?7JTKoBY_j_E^Y>6IO8c%I&H2_ zsI(yP$|`fF{;>v)@5vlunF?FJdl(jMgt;h-@9!CuRVP6KJM-w6U!_t8OV~v;5M%@X z>T2~usv#;Q1LQfyRPvz6JmJrTC7=sovyycQ5OEQljzD;IlKSsLQ(PvUKWBsdv%xQB z#p?=$OPZ;ZB7;mch;q>=jKaW&Qp6OjSV9pAy{w(`aWtNhhIyQu1LP|*uRRXL<{M$} zdrJRF4=@;s<@&0E-?{i}#7z!bx|iE+PT2{bSlud{`d|9+FpdK<1dn8;nocH9?fz)|ez{Tsg`7^FKYO1t@G7DtIL?pI8%W~Xpc;c(Dp z6^a{hV-5mjMU`cIbGp?DT|u9i_VnG)gWFfQ9UFIOQ&)bPK@0!)%MK=0 zBU}ln6)}@Oz|7^^^0l0}84G}?t`K_7V5O!pV`p_AN&CdcmgE-!rD0TnX@wQQ#Yy>i z%F#w`^?fIQFkD~8cylv_a?zeF>>J{Iz0hl@HNfG)m}1^pt9t>Y0XtZkv836V);)_6 z-k}}jgb9zIW)e91!(5PNg(ZGyPe_B56-F<)m zn|&4ZI{*F4-P88l#r7fJmp#57sNsg3Bp_t^%VSgEP28t_obS)@&>l311Gxu^wy@eN z$dyZ+0*a#XLpLvAGM#X`i;y7%({)@noFi9no5TyWA&6JPB&nYF+*J?JzbrE+-NAK4 zyM;#)xemgjKL`1K==cRX$Mle3!wGkKC9Ha)P>3jB2Rhs#VzRK+CmjlRf6jAptaY1S z;MDeWI0Vz-Ndf}n?`3Htk_IKDcx?FtZ4oJ`S>rV`0ZN|pN#UEvcXiGFD=*Iti=AmsJ9rNPx;jQ_%AyQ*<(>>e2>5hDC<+9iud`lYk9 zlC-Y7acY%9NW!IT5JjG7r^Us1cMEglq#w6%=XzH_60omxcmFdeLTdOh)8L%45=EUj zvc+6WMvDmGRcr?vRoV%UsVI}3`0YpZwT{<-Lshm?X2VY5bx4KtnCANp&!t#EbP-Z1 zWA*OU`z0;8-z|KBeUfcn&~U(LdO}@cb>}@p%9%PJ1WRSM(KB%i|GIK6Gp=-{ z&z-R(Kd|&rj1*dd>^~;IS|b-ES`gqm6)5!i#^_h6bEWjIhd*I3f>;GZkql8!Taq)m zt%kn||4E1oJnpl&f08YpM{Y<20~1?x>Z$i^9U`RhNu4ODX-neC{no*YbH#H_FG7fLWVE-RgPf4nRHBr&66#C>P$>c?lT!Rt=reSe%@g> z0fySl)DfNQXf>DzxPX6t;?jUA0`V#=lv|%Ykfi#B5-v{U==Hvcqs8uA{tkto;lJL= zrP0cBcac`0j1+gR*H7fn*yks>NjUn2>LA?K1waoxh=>z@8RX~+8$#%cA3VlZ;XKtv z^QYZHXmz>6dUU94Hrp4Gp}Uz%!Siv`i`@w? zLQZbCjAWdr(k2=<7@b_k17^B6w}j#$3>!p&twg_QBg+{gGJlM4E(*`rRea2v&3@{G za_PIo{)SNlBmtuDFVlC5&?$D{%lN0ms!#uzbn8s4{Qa|r$phm5^9V4rKI}x*{#Sp! zv@`yn1N|Em)dYHcTMUN2;|_;?86}?&ef69uiq7K zsYQqH`|l6EC?Cef7s(v~;N(hq+Lg-#q?YQom0j6x=X8hDp=sKJz| zQF9PCU(-}G&?0VaXO(e(McJxImZGy$=1(~CHnTcF5*O>E_lNd{zmxNIP5j%3kohQp z*Up3Pa)uBmf<(QcP*0;*gq+RS+lNVJVeZf2E{>lLJsl#_ew^4;*cOdNqvfYj$J-Cu zc7521C1oqHht<9)XOhXz!65pyu6HniI?S#D@eRR*J%D3#cDa83i@j7SlC?8x8AtZ2 zM0>JMeswv-$}D%(i=dM@asA4C7LA1^s?mXX0LoklcN>8(!c#!;{D6Zu7DBkFq$na^qqra$W`1$qFYD$^x za5Z;4=knvt?UonD{=5;Ha|+`C=4w5Wxc!V?+ z4%58}o5aA1HXHxMzWNT94>WD992n0d?D&S4`^eK@4uro3?Q>&_)Jvu()XB%sETDI2 zO`N2*c6h-ug;GibOzQRZBWppHp_@!Lsr%=tL?jh^T2R}<9d(%MRAF!X2;rs;A4`ai zGX&dc#xX&oHG*a^8drb`-%*#GfUbl=EFO0=eo9=;iT^D{HE-`(Dr(#N&&65i-;?*- zWydGQjYo_au^YIxd1SFz06aCJ^rq<#lE$8+H_dUQ?c*D$xb~*NW7t($9Nu|N%YoC& z!46#dF+wF8ngI*4oLU%8+P_@wepx=GEW0Qx5lKn+&zjb?`8!N%t2M zSjZhH#4%wNz@ED9+Y{99SEn+fU!EDN!i-S_FuI!OI;R6lk|(AK0{@M(vGXjO+Z3q= zbWjTRhG2)9)fGDN)EVg=jqWjLsDp4~ZA?rKq`s0$EsMK=T|Q?odG;0Hptf1(ywDVh zZz;EcWWy<*ieS|OyqA13GgYV(;Ru`TWEJhq;R<6?)1bB zP7UiD#KMf83WaEoHPn+DGn~lnDlUFvT*z!!PHF=0hmu48HGvd#T+=>KK253J^$_BHb7{o)&=UL8q`+W1mhiAQJ=wzn>qG#s&I;L%{rC^MN@uLjD zaeF$2-}!ksq-)^h63TVeEzN)lzsSx;(7l-6n5N9Ljho#grHkUahT}Of$IRlxdQrB4?Cn(h!LBpGNl3Ou1<6u$ld4-qLYt0Or^?h%ec5y zJ3UbtRA-R^Q=g9lR@TWWbL9lVg#`|pvfZ&B!x-#@3*1wh7$k`-)0CABB)=>EU^F&z zMgZ#{Z?!SV^JI`i@a=OD8Zq~jMx(D`4~9bT=gQsGWa5osYt+ybzoG!~5aMAy!P6N{r}F zBQF~jZ`b;2K|dz=9D_Osm2`07V5j)>W^&okg`^?l^vIQ_gl~kp0mGz7WH_A~P*Rg8 z4%1bIU32=GOOGDE$A7TZG))^qlsYN6O-`Q>m}jva&!ME2#TVxMoNSlfU>wjvw>P>P z5W`{iqf#JCRedS89PR5AX+MJMkF-K9OI-WN+5+q!wa-?Z$;*(%vw-TJj!|_;W7`bX zi9Pw-4svm7IF^8$Id-;wa~eEN1zxd#&}?U-o!k2awNO#4B)z9)|1bu{@V7*q3!N_iMf6EP0$(IG~XV1yU81L$keIXSS#cc%dF79>Ll3shcGne`eNI;D$~!*@Pe zw;kORb7P}~O1u7CGdh+chh;7Q>>jGr6lV9qrNynlZN`xz#@*~s21{x3G`k2@PuOGN zv%p?&@UfY(KKj}EAzGo=^t(^PAu$RvR$z@N72zPrLb;kS=}m@p?L6M+N!aN0w>0<0 zQUxp?-g&K~U>Q^j&AbeO2wOB>drowlM3y-xtG#9K#38Ki-M1;b$VvWx-A?H3yzsE* zjTkpl{Lt^(lT0}x?a4GC-@{!NTth8?rCCqs;R~BdZkECohjcCwlX+3{iCo}lI^eNk+#N; zUr-CbvF`VKiFBRP8ABe-&&}d?Az&7&MIV+uZFTdm{AwDuy4ss^R(`j4iMa_4{fP7= zp|#>pLy#`lBpX%OU-lv>Q|{Q$zZ zdrw;}xjPD3L+V4~fUM1qLfs{4o0F4~vm$g2tLN7tTG0kyL^ibLD4w%La-?(EFa;bA zZf)t*5Rz_~Z%^L(C(WzoBN}{rfi7|Ho;NEsf38F>=g^%~X*-8J?8@X?R|>I0A@P<5 zYP>LY2+H@S2x+%kob1<=J;RNf56?PR#LTO>%dejs6J_LLkV6x8KZN~$nLGs-yBf_+^qwCcKaJ#1= zEKA$HnFC=+3y`ApZ>*Dl6otF3QXH&GK={`eB=g&ieM zA;Y|^HA|%_Wh_WtZ)aLpAz!<6Ojjr}*f>Pp>laTZ7P{f<6!(_88~1+q&F{MCsX$Nw z4$00QAlul{syu(rmUVGP92x7d$jbKADp2APs#Ctfxe#Kux9Uy9bTXqujcas%<(|Jz z_1f#K$w7c82pGq=;I?N+?qWGODq3R0qRuZ zb&{L7pD%YxlV8V+#NIqGZw}t??3xKir0@3L&u8m+7!ZYWJHFF9Wi{-!eNXo$*CXcs;As7$$TNkG5+o@-I_$&E&EX>vZI6fB1BAihDhuz7_`bT|H;envH?KfC`2P4C`6;-jppMUt? zkw~(oe!C8i%6;v*KuM7JJIre3|D>%Jo^20h|sy`Lex**8zt zC$**b(RyO#wy&L2TMmMMX>1J*_u4MhJFfA6x{(DJ zR*T3o=3u7wagaXV^yX`tmV#Kp#JIKU3lW84<=|@5VmQ&|b7%C+{|0EAnv*cMvNcwl9Z2%6ZKSB9GQj4rj3T0rgJ)>JsmR9*iA>}WoTaX60O{# znwD`0#l*TYN`*0N^B_~fNP{ijzI4bjO#!x1jRGfRuV{D7WHM}?tE;VP$U+l!W5ojv zNA-|L9hLR+a_-V5@b2L(M=#St-IAZ)w|m)!)>z!P@7I^nkis~ZUeyWL{|edXA^Rll zL4@hN*my)9Hs{Ow<`rw_0vU6jY2lzudQo@aC&_Bikf9*c!TCLmAQSBZ$|{2;*)9e_ zJ{T>O4t}Zik$*K));f!jT8AVr;DYH%xL)`X7Kgp^jE~~hDk&$^*tCpz7M16sw(y8J zvShD?#E|qtrAegH*WC?)2R=d^|Bnp{uOt>UoLvKckrEi8iZ=*eWKbfLuRW(E{;D1d z^)@R>BYOQuRf}9*cbROwVfJJhrCt`{U^SxvFxb%?Fma5w8;tsgbb2gYm}+!`W_}v=u zn)Uyg=!AynUS7Si?y|xacqAU>1tf~S?THNqOdp9p38>^`05+j>TbQ?p_vcUNe|oS& zr~kfA-~IeI_5J30T4c0H?B$UbR)I;HhKivY?A!7~4x5I#hLtRZ!&531m^1M$8ZL$% z(GGs?XwbldDF!)~Kf0W_I(@>DXuSwqwa#R3&nD5ed{g#{YvS{>rs_#sdm6Ldt!}wNHrqnRKdX5b!dc z(b`3UOduC}=O^8Xb^K{ZlfB`NDA$%jKZ!kBW!4jP;toV6R94ON%Pq#ib?%T-!m@t3 zs%zHY8uBdgUWQZ-$0jEh6XY=fQen<OuA|BP*A3x0X5Wp4`UbsEXL@ zJ3N@m6d>d*Fla-m`qG<={L2njh59oVfV`Qleu}!pls405jZUcwc~*{u)- zs=$0l`_~G(QM5Z|O(T2yMTzyJds}t~Pcr62ATH<)8$YrKVWn$*eky z{!nIPZKu^61Kvd+1rTG}`@ipba;hDLF4&)d^j~U z-j7w(OZ+RLFNx8Dh(XQ*mgZ>2DS`_kO;UKHhX-MrJB}U)d9oDDETr|)XI1HXZ_PeT z8!(FfnHC%IfRe<>|5YGeKL05a^GlZtx;+=NXKstGM5xr5h=$#TXLE6KyPAO2+>bV3 zuQNPPAZER|bPMu{(PNTk$!KD!y?8j*rlr3XKsjIU;8cN<5s(I;oBuy!hd;IJ&>_sH zoiK{Ol>c#mem({Ke8OC7fPRL*$4Ni9-m2c;zW*$8O2f)Pw5LbzcW>05VTN-EpwVLW zGqVVz5bFvhw7UnJg_l&5SZk4J%O?{np__f^z>mhAnqGU_(>qA!;ao>eeftDCJBgZ7Ews-2ma1lE;Bp1|mlc8cK}7(~zuOY}yH} z@<+KahQb3SHUaT?+PCo`c{CpD=zFT+^ zTKh}`m45tNrZ`%Dd-_S2IbA^_m#6TEnCH!8YY#A>L~*stKXRCGq6I_1XxN|RN-YyT zW3gx}$YkC0 zzoMg9Wa18}LchbG1Ri32i3_;Sp1$8NL*u&qUXGA3X3hPIgUlng6x9-VxKxN=n&!8V zD(K643mV!wE2YXu@T9cmaXE<{k z`7rx|mR3r)i5$dNN!5sb|A&X|k@tBAGEhttaf#&l;p{2M$o9jshL+B5JUv~gb>M&$ z{BsNrlEBMI!{_%W^tS_-f3QKfkoUw}wWvy3j*4E?n5N{-nk!l!7%6$Nq8Ar0V=_`nomFB`=>ME3E}$>Z6{ikQf4Q zacD*KR*q;?MZ`qY{L*iC$KBvpQosyI@3Qg&0#1gGiE5xAVt221gQHBv^ zb7`0TfUj^*f!K$syADoC63v3U7AEKriq?uqMhh$>jY{=c)a{C0k!8&MgvF%O^-^bj zkvFpw2|tjJr!*m~TL~cd{^w8jCs6@+Nx#&9oKd23WYr^TRv|GA*}(lB+9{Vr3c_IX z7-tsXjM9J2p~g<8gq61f$ADg!fces8T3ab3legw^m5+cLH74`a-2n>02zA(8hMY)D z3K7Y4gFvEsFh;A;$2DH5Wz(+xw-SWY0*l&_mzjGrYwcJk@t2W$3c$eTKg34Q^D$++ztmWO9)`zi1XOF(guam$MC-`D5dx=QM(q zV`yT%u7!&#z^jlG-Vb6Z(pzBhqa$!SNTO6H6V@FAq_PN;LJo?YGzyTdC~tuBl1bMw zX?r_R&kJf^hGvx;YBft^OWIjU4U5Z40WN5(O@Vfm`EMW$GjSa7pQGw=_o?~+Zp-`1 zShGXq(WLJBN$-sUbsmw`;mkE=yMt;a@W?jH3QuCT9-rxoX9R=dF0 UJB{ z)UtT|^P1*oL})giFx!)h8tSx4_3`epdc#1{*(AA8s^c#z5p~XJS_y<#vylV$T!Tcy z6BHZL66DmmCMo$6IERPe3%&WOQ=txW9U2od$9c`f*F#ZV;@3tq=Z1m5V`u?}|9*7i zyVx95)f|o#==)a|*Ae?SSbxjX@I##Ah~M+zPUU$wJA)-T7-FgFDsd_AF1k&05;N6J zk5Ap}*fwj~D4|d!zHnXRKtqQkO}p>v`5{9~rVMnWinBF_vxV8SxDtTlZ8P35g>Q9<cI0RblG12U`8$2*1?76oLiwiChY7opQ5+io({&kI_ zB-70nvAa~g~bRFD2AcGy$wagApU1v!*!+qL3Ye- zep>i$B4F_sbh*F4+lA7!3Y%c)P4OrsfE_12G2~D6PC(7`;1d6~{wBPDW)1mmOt&GN zx#%CE8PN^03cwpd*PadOmFQLsw#S*@mpG}_U{@we_v&?1i? zUUfTB0|$Hl70RR}E+5Dx<`zYC9LK_mcDc8K1MO5((j}jLa}HEpRwzM%Fe>cb!~`qt zID$%dltCHM+-8A!lD$6sP5^_DQUm|3=(PU(bLX3bl zy@mkmK+!@J={?ud0xcdHI=yo}m8q7@6^Z|?lFEA`vw+4{t79_E?*bzbsir}ANjmlj zYYXmv2Z^P|Htye!`RR!~KNXu{TtrH4^8K3PkI_M}umBj2kS>P`Wy(_bKnf;Y(Ukaj z8rx~`H+X1lE1Wrg+vy{_L4)8%(L7JQ^Z+=(IUFYYAzA?;@b_>g%Wol%*L7q;PHyrt zxR#hU5T_c(cT`F03Z%uJcOM}IqR@yjcynqZ;;*W`R%+|u$u}6n3Xq<%v3MF{Adrdx zUg%AP4m;Dg*=c48M@g!)MjkanMPenmIYfsJtki28g}Wyp0WN5SnC8pFsi1~xJ34JK z+P~*f4e7IQ0c1ODD}3w13;3p|}>BN4m!95G$| zT`IT`_Wy2^>z>;@1XI>eJ!rjsVJQX!(1tVc-F23x39&@MK)&}BMmB*VIkumBf-YG} zu8@(+Bi<5|o_H?4p)&-*rFR|dL^Bmn50SH8&lrT1;Yp&a`C$Kp8{v}D3axf>rIQr= zvO-UWBpgbn`Wnh;=Sh(|sO^I&0o3G5<1Q{O$W=_mbLEOPAVfalr`*Gt z99rxw&iyGBuO5wySV>n38S^I=@{YOX1%51F;9AxJIRRWogCW4wBnG&C?$k!PBE@F6 zkF6g^fGO}8KAqegGsoiW*bs&O$(_U>*mWXf(xD$K9)dNVAeFnWKPb5a@bv`3vr$&-L&0Le@v~&bo z9lMh4@~L?Wa*3q52$ZwdKL zC$Wc+qBx~A_OQ&s&WMB-*iSoYA zDyhP=80jl$MnF3)MTPw%y(cI53ffpvj_CmtWn}md+)fTB&?&DkF;o2P;7(tBil8|# z$qS?)@mX_5XXL6l06I<5AB+OegfhU*!iQoGeh`fysmk7-Z<(uz9HeQCZe*_}F<1h^ z!sB5h>uuI=@G1p3GfKpM;57G?9>rc0Y=)ryO{&c(EFSJ+;pbSl;tm)2G}nlz4>p1| ziEnaL!-gsxp0G8j!Yy!VnTj2GKAQre@VZ(569ED27NR*&tzu^jDv#yi(YJnKiXuOQmq4_$7_EW|oz=G4dUXFBS0QyT-=w?ClA4bLP^%zH7V70(Y_w=`RRRPS zhBOVos>jYqn-e3;s(rou7_^C5Ln|T8bYy2kY2cpImyF7^cgfUWRYScWtLGb9g{<@Y z6cHj_jA^@en0T##4jpVakc?yjymGjt z>=+h9b1?}Jm*+{zD}xhR7l}qNvs9WotRR9i9mWE0NZP#e*g&q7R0m-}neY2QTOZAd z+TUuO3EHs?Ku4|W2_FvDYDx@PF#rrHrDSj$49yn+amcpgAm?A;fL|Oe zp^kYzS(RD7h0lg_duK^2qGl{OmRj4g;ZW$yK;~m=R2{fN?@2?OsWDpm2uW-4-=%=f zcdw}z`>W4OCTBm5*gqx(ntG(H(GJOSjgXT3f~PWNk)A?FudoWo4~}Idtat%3Daknjtcg2L z(tN>i;^F zm9^F@xbc#3O(~>`zIxG89F3?`lko04QO-lO-K&%0!_Cw{@yTe8;>-*!;;~kzIu~Y# zuqhL_ZDbq`>2iZ`gp8x9At8r zCFM$H-9nFrm~5w+FkcL(HnI_J!{otGgag;KeEJV@Eo%{Gar+5nTMg7Y+n3r)PDy ze=pI!4|$w&eIIr{Kin65WwCLap{CPqbWnHyvYxu+d! zj~@s3MR;tZ6MPFlr=8Qn-}NZ)-<+$K@Xet^0^83!{ej;j?xF$T%D4jK z1OE-lSQl8A>CdzcK4D_o!eXH_+G3oEABoc|(($y908DTMrRHgKzIrNCdO~X5&>a2t zy~d753aJsUS$73hm;ED0cPa;c18pouD3{?WZdiAWitR{c8dvgTa);ZCXzZjzc@b*) zxO&sMl*S{hOD$y z)H=mov2pNtPpwJ{Qf+hTH;&3jXZ*}VyE_iX3eDH}A1fmxFpX;L550c-YtKIqIxn(c zz7-C7ZsYaP{V< zHl#35*pn9A600ee2E^cox_xZZn&cNCy$K`f6c*W%M2f(S{m06#hERc%asGJO8Y|#s zRB%Jogjk%CkpwZ2(TL6Tj9(N)sy`JxPcj_Z*5#+KpRi!_8z?y1=(WJbYodLQd`y-nrOXxo0YSmsel-r0g(v}M<3|wGY1mr>H!|9@q^7D7ZViE&slx9 zP2u=Z%Qt{6g?1mm<&>!rg&ZhC(n8lzf9JByJl@~mZ*XMJmK%uE_abKz2B#9mv&qlp8>wL7pD9{Ss5w#d{YaFP3hjJBe>?E<&!?cXJ`&AJijUiYw2;>MX;WbN1$w>reU#i=MP~L>Jq?9YLQ_I2g8^#kAVkhKZ zfa=%`$cf{@D)|=|7d%t!$^t#(Nm+(MZ|4u z?yV4gdo5>tDa0|?xp=i2@g-yyO7G+;hQO4tQLJDe77ZpeBE|;`169>&Aw?a+!7slb zPN+EO!h;*e2xSwT;Zr0c+XcSoku9Jp4OL^rN6zrZNTf~>gv_CMeycxSx{;Dc#t6rO z<}mL83nIES6}wHC-8gS|Tjob}G?Td;sB@#tIE#sk)sBnXy7(<^xu%X`3b6-ej3S49 zU>89eDf}u`!m3#z%hE8^D9zy;ijA`DN};1e$BCEAW3L}xU^n=Ul9X{}w9uGjG$O~M ztQO0PE}POuGFIw@RMwE2W391AWMh9#q#(vdQxT8+imv5hpm#G#0(nB^_e9kC#pBmQ zyM;qMSXE$rJlJO)#hvb-FpEqvc#1c!g5xA-_yq zsY4?vfv;#@#J~VnQP)MzDZM5(l!?{f2}ui08xX%lKZ;Y<*$dXwU*nYv-y>s}1OQ`j z{P9|Xaat{1ewvqadeVHu_)zCsGvtNR)k~@_Q+SirF@951S_SM0*>JF==TI>Z{WXY2 z!YRoz+d}1n&a0eCjgljeCsV3lVX z8x4|$BD{fnIP~NlO^f4uBMG3dk=65-xt75tCZ0JgvRZM8rH|6|ZVBeJ)6Uq)>C{x8 zLsg(4;u4XxO$K`}{5XnK>!M(;F6cl&9plDn-&3H!nH>d@2T4<2t1KfLrje^$r->R7 zO|y^kaHfp%zdAl(nJMe<`!crGn96=#P~$XKPUxNNi2ZWBn(`s=s9)QYIbUIr7~{#{ zH#P7Gc@bng=tRs8NP-E6JCg7Lt^&$&D)G={hQzJ+IplPc-I(Na3!Q*|WgKbJI?3ux zBa)HMcwuWvKa$Ow#~HwENi5~8g^9Ch4U(Lm#0NM9F`#b@p{2GwIN6&w{|q*>lGb_` z&or|lET}#1snuIiE)WdJHdRS1utW>O`an{r`B?$UIBiVg^u2c0PJ;p6o+HbqLQ=aQ zWhNLkWLK>++NJs9uDGc|?gfOPuv&2*$_-A*VX}gwN9V#cX)l;f28}d8+{ms(TpdmY z>?Zg(HN^Rgk2HEA{`j_TjQ3?GnRl@Q7CwYT=&2#z8+zU#8#atrdC(`IsF_xf*ofdH zRi-1EfxDdzLO7Mh!dY-47~{lqW*2;eziFqGwBjxBLiQu%(~C>! zf*}>4e%zJw;~bw44tNMeg~*m^phDk3udsdU)<{dx6r;+TcJVR;LH!H%rW0ZETDU!K z1&{%qnNv=HU9v!J!g$=Ci7+z0E1dzR%1Y(_e`vZ2pf|z0YC~~a(5ZnChY3}U2>ls^KVv6lly zmy&q+2T?+xXgNiP34{uy1Fo<`ihc;s137Gl*dNe&BB=yVKOTFCQOPM3(i?+9b{{z^ z!kIyIHDYxK(10FFUh@k3b!ww?|HH#W4>Ja7{vXL2z-bw!6p5?6VGzI$FfYjyM)OTo z(vYhl#6`tOKz7|iolXM>uB9mrmk771q+{o6VMmvAzzObvtg}oXk0A$}5{@&a6>bTZ ziTRj}s!UV`b_vu^%6xbCYPnFrN@_Syjpoi!<^;hS%>nijI~F|+xByGWcu`-yNTJ#W zCGua_@?N&&?+>_zfvV=@^aH<+vT9})KT>9yv>Oed{IU4tVZj!Yr%qJhaG<10(b$}C zjGb!HphWm98AO4pq~?r7!Yzk1k!+QuszQn!O#quY;~sVe&YwM?P2f(5;F^+!CExj{ z+r|VG;E%%1Ywjj~PpgSGaAT$J5i(_s+gE9~Ym3Y@^dNc>uw5pw2?N9?-7oxYQqf z0hNm_1|OYLKb*)YsUG+hsZy`GySu(vch*kA`0ga^Jj6Vw4a6kd)psarRNpnWSITU_3q)KJkdl72M2^503uuE2!sz2 z1IW5#g(I0DKLAw#0SfL32dbc>-OB{fuAq^s{MHslp(~oIyv$|o%#U4);fmjf}s8Eq)1gAz`-};}E6Rv$ zak=5d!aC9?;ZBF`FmF}i=x<0=ust%SQE-0GPk1kpn*USR*Tk~LK^us))Q(o*&_=67+K?s|*iD&9A4Rk={Qc5Bn z4)V`bH1=2m-Hc(+3K*6m)vY0I42#6Z1=OFBMVaJCYwu zE1{}MQK5<>t75}qeRkB;6Doer46N^D-`5XF5^rZF{)#i zG|P)JArI9v=IoWSO;ur^xEL~zp{4`A3%r;%*RGeNs@Eg3)O=q-)wkT=5b;+kiah-J z`xppV1i~Ss8=$EoKf89X3E;}HIAJTH)Ku)Et_LppFXTv84lSUGXmnory^zh|5T!bg zH&{-jTlcY`xb|i(Q|P)tbs@yXB@nb7d%HVl%+nF?A_8Y+0Pt)xcnGIiiI2fW+?BUG zLD~|v`W5IF;KGy~b^i%&Dw-dgSp0b~wA}#r5*34bXq!b8lmXhp(Z7y>bZj}fz4YFd z?{FoC=nK7p3iL*iefGyi?BKlMAFia4`21rLN^EMeRH2R*!fS~oF-6jn3F~7vAMo6)&_L96iW=0A!5~I?dZj$m~(Wy=tDp#`8gJ| zS|oI_(W~OTC?qVLB?W(FPy(i0UXlL?jvHf@cj6i~G47kPB41e)mF*ViSE!5^6{U3S z&9@zD=&_X4LsCs1^6qIeumQ|R=mhE23*ANx+FIx{Mp%lvM09wBDChK+Z2j$~T3OlN z<=YelnX>C`Uw3ud9R$;{4j{4~hKK9aU^2U$RQE!O(V}~g{$T0)&_anEJ~*~yb!ZV5 zDCKz-0acN16-G*&(IztoF#=(W6gF)NVqziTwF*WoWS4}cgXLjOfBde6PSu?(-r{Gr zzwge`V^erMaH(xjhU8gj>+!WugngT+!6AqaBN7wT%hKJSHRuZp;x_V6WjS|%bl^$u z6>e;j^M;qQJi??$7R!iw&S`j><=pppo$Qok!9yO(_#k3f2P(r3!GlGZr}Iv%_RuKN zJOnvMtkM!ws8|rWWPqD1etdp1i!8*NE_Jmx7Tx+i+l{9a7fiBeN!*5 z%;SZsYXV5_u=h5}#)nN5{Re1eNc}ZID+kE6lU%AYNr|Mvp=YK@naATxg@obzA0@6oFOTy|~ZxUEB=WN#ba zgwjE}vaH@r(Nm%H0Ijtc) z8=o_N2y>`jRC34}_~`!yp7V3F5(N6IB()*G1pEc^!R3b-DaW58T*Lz@;pF6jOfIGn zQQ*05$b%4C(VjP*W1jDTu0j|ndw`11!InT2XKNcj-ZKp~Lu*7ZTqkM`_zJI7g;w)e zL2M+Bn52wI_nBOPAwGTQ<>hbQD(c61htTK#0v8SM+AS#FF-bA4AOKb*y z0&K&_i-{RbL|QDxK-B`rARg)8EY5)HAt61w5!ui$ks;S<;xnru^T*bHN<%n$Gz9@3 z3+%+^_^<+4hp`d-V-h#=bJ--4u5v5$KCA(?d9f0(qV5tM(ZAPvUm{HzehOca>-0~XJI zSu9wUA~z7nm{NYUc9>vVq!1vj8E_N962PSO>&hA(&nAs}N1(IKhv#D(FGx#hW2vpD z&TN7T)b|54MQ$Y|D_vwa+&~i&yNqC|LVfCQ0^RN2F2{FhkyuzgMI>z|ywT~Jo~tb^ zfqU6F`$xv4grrshtEdnUo(3S|ktDA$f3^m-olTeEZef>ty$_L{fa`F87||5Sde8lH zYIsukC;XU#1_*L-vaq8o6+Mbn?F?m=%JAi@?zXc=5uWL(JUkr(%TkO3+FGg;Q9(qPAOHN2NkA$~wW7Vp zp@KD2R$P4RMh8`=Q@O-4aR#^c?%;oOOPk)(j++o}J)26G;w3l6Z59Oww%7Ak)lu9- z_Nx5Za?Ep>-$R(t{i@T;5~Q?=%|t4%`_p0RqBE*nu#{sorMxyZ096FpOUKq8j!S5d__B!yv-~3Z>bR?Ab%gyAcO? zQ7Ha9TH%;V+V_vs68}th?KJJ{MHneq}uvDu_e?@|rIc7uz;6IoO zhwKt@WOTn$h4i8m1f6!)Q5ys$PAC3&p^WLp98ep)b3r(zY|Y*YfM#U^5BN$Z)vMJo zj}fLdT85Dj9_d+a=N0N?{iV*$e^n4fs^sy;x=JovSufreZjQ4b#;9N-^_39c*&VMu zu(y9mK1|SnOcN`upa0uGv;vzUcye9XEZedjC=_<;C4BgVG`NCTSTrhvBGO<8{GUHV z=8H)g=T35=DT+Z;d858JQOLA66KalA;R;I>maNNBK>vqHgf48Z0J&y1^_ zwJxeX%v-5%q^?m?Nfo*K;FjN_q$dzrU@RoZ*I{5~gqgk_gkf8&g^LJ#{9RVXQkDEN zNQM-oiY3z`O5!rOaI19L8J8`6qKxGgR@C9sHvwf~N73RXBajBT!!S6fT8+0J)?QHDfwOV znJH?+cYMLd6L^CCXV7Nh3SBz05M5n^u}wHoq1OAVF9=nx|9WOLE1o*qmGmhzf41I` zf|~1?zswxz@{VZo`I~Y)jUtb~laVMmc3~gVoVRv>Yj)@$y_Fv$hR44zc@KF%QjI>n zPHpa_-f05;Ys=ypqzLDPt&oADJn!oC|bNZ=MX1$9%`&dm>^nLc)jx~RGQY?Y#H+O^TfuG~#rIAQ)!#Hu(T65m# zZ%@P{^oS9J)EGjyAF4W9gZTcoK;Yb)RmS5L9P8~G4VG`5fPe{nQdcy(@wCxfD!LIY zO_cEl3BA`nd7+0LA{L=Hf&Co5ek)d;y%&TD4jrP^`NkSz9DwF$cj(D1q23(o10uwf@8Z`i>%;O;5eihFLLG)qGFubkJz%2n>$inqMKmS zThU(^W}~ZWgJtW79m;b!c!*@X+?5pOrfFXO*o znuIQPh$?@(2EAS7`o_N9=K7{rIFaahUvkiqFBeq^zLxque!808_~+01`b6Qd_YXt$ zSCyl-k|RVz^x3V1Q1kQJISa-M()Y!6di|%4bD#54wx91z)SP(VJe-fHrI~ND!7?n{ zc3^JLpGRN<%?aQ%|EpLrCw-&zI>%~UMA3e1o7`!^u|dS3O4q)EUvzY6_b8rmj!My< zv>uIxoI<1mEDDk)ffj*t&EQYexp-4xt(}>mk1=V=o-R(2zeQiKw+H=@$0YmW=*)g` z+wrZeWBbLuFCf>52A24)m56mhZ(A_z)264BXezXey@GCk@=^RqlijjUu|QG8)}C2h zQUorxtiX=;2(z1EcXH-J`wWX;PHP6_8BoYB26t9B(Aa54bg+ZXjz}uG)kaV|JMVom z4$@kQWI>hO&pNp*jNjVDzMB5Z)!7<2_Oi~|_}hcwmNu7@25U378Pm@%9S(I4NbvuP zZcO~^@SqQhWsZ*l5i9E&wP~I(cgaMg;?QVkpx7s{4JAMD9l;U=hRQ@^!j5*jvKyCb z+P7qIxS)N*=LBGai>$P5byo9j1m8c)Q*!s8Zxd|fX{h|=19&8}P|Fl*H<;5}AVG9V zWuyf7ZO%2@Tf^ZNd^?UEgFU=DHupq?{SCHZB&X3V{FSp|V?Ge4;(<{SS`G_b0Y=f8 zx%90N)5G!v#*%|trL)&bFvCW!{?@S|K{Lsx5Y$cchr4dcqgluNmhR&yvQEy9zNANv zlUqV@Tt1qEB1%~(>?}m@+YyXEQni|U3O?h#+w4^=m5^7usU^5==`&P(M7)qm^zDbl z@%uN`U-OMabiXP}?#hedyKYSrb- zZy&?QYzr+tuPto-$J{r#D!(_5)A4g97me$Gke_d(es8}o``@18njI`stNzvbg{|b? zNtStet{a~%LtS6=V!&Mdg;+tSzE$m4$RGA0{hk@dj^5!g5+E>{kDrNOkW>Pi0hWT~B@`HgP+xlb0@kL#=86P6d8XKEc zDcW1sWcbu79etZ$OFHc444~4aF*x#FdiuNODYsV;sxZ||47f;KyAl&^#F6d323$}9 z&g`GKCOCo(%7wgmIa#14*4kj;0ldrn+}y>}-sVo(0`t7eRL%1z;L*ZwvLU$M7pA*$ z1i4;h3m$vd#C04dwo+YQU?p=Dqm{lpp;wYwpJIL2;=a=sYV{-C05H|KTe z4GiC&1Zo^Lz`~*Bh#9JUbg&gNJhNh1@Uq6`-w<$rY<%`;SvM2Z|EeU{HM?-~m{H2Z z8(a1QOfceq-LRV$23h)^=K2LivFgF6D0QFz`?=32rTWfFL>!hg8A<;?7GR-c=)Kw` z%*E2AZ%R;55cPffxT*JDU2ezsxA)!S7Kn)>6M%`74}j_L4tQG}AUay?Y|-B(Icol3 zz|5P)@^xdiapUyj&n;Sxmac$|p6)8;!f3Pt1-0A(Z{b6%xJ-l+HY1*tC^oOa`R zo5Xw_m{uv3C(3!}MSz#M_(Q_OP6VgI+RL~NyN6@N&};=~@l#3KiMA#yYA&Bc|C`vU-8X0nvq}A6UY$P#gbX#&5`_sSV zHa_hG5Y$b1vIA@cggUetz$T&^-c56LrXFn4r;oQJy2Sz+IjLX8kfh20E^hYl6Z-1t zCO(H17E1TT9sX$F3ReOaY22klfA+t@B8qbz`kf7P(TBQxqHdZ^FSA736zpX2;4~GOMV%UO{ z2MLG{Ap7h7v7D6c+-u|6{j#56X>oD$y^7fbq}IDr=hIx(RdSVg$a~dtZ}!NrHXYmQhnZCT+}w)V-=} zOP7fJ348X7osqpOe;}K9r%k#P71d*~B-J`NwnY=QS?AOUPshgA-m^MXlvH!BRUSP| znqjgD!`FSZ(TBIcGf+^t-O<)*TZ$>c)57*28E6R7J>KiCLSrXu7*?~VuGy` zeKD+Zg$>qDG{r>K^~j4rm~HoUSk<}X?@seQx__z2 zC7-g-NrG{cG;C3DG*Sep^SdRJZO-PYp8tP10@^f*Rw=Kb9}Q61_Sa?2%u3Resqe%% zVt;PZydN&(HnfG)3BIvOp@#bFrJD1S~f3+S(2|eqzU~ghX?%`d|A4OUz%JzI`C9KzpR< zd{Iteu!g*yb0Rn99;=GoWBoUQcN72dy-nJ?Aw|td_HU%>1zG=TI(4Y_gp9o&vX2o& zN3(P+3X+7l`D3PYrhBwr=_PCy$KVMq+)Ynqku5aYiCR*G1nAl1u4@|T*g4Ebb42CD zGEsEoip(Ew?qIi>yBQl#E^)-Ot*%Vy6Dg%HBVq>GwXVAif~I8*@Tf_ZqjUPC`{QAy z)q@FtfNj=Pj)v%XDCpEO%y>~a3{@-@s9=<%$$Q%Zi&rGE3;R8~3wx0;(3Ikl#)rMd z4QW38zJv{_e?d5oWB&{{LhC%j#$a?>kx#3Iwlo%Iy+@NiU4&cHQ=47I-s+oK{%NgF zH4xiq?1DW%g{&r~&!nGFC?)M%#QrWYiJiX(}1zVbJc9Y3czN6DSo{ zDA@U}^)s&Ob$Mc3JY%mZ4{#y!dfO#<3YV0kMg^70lxjG+U@n1MH{J}aoGqZ74@{58 zbscgQk&+$yEY$XhsE9b~yk7J$dx!j0L&W9E(9z=IraX+HVRxpKJpXfwa;|q;!tk&u z_CN9@OpcZ<b)1w~H2$h7;~qWA^IR|GMBk5}fvGW=ul1YRt&t z82J7j$O04m9<1K{AzJPI+ABmnXt!7)pmrIsZ7RR+C_i*;JPW@<@c77g*0Z*zJ3l}F z-i_itRF-HWNBCK3Wf`*e5^_0gDDKSW?SOO;SH@RFt)GX1dFmM>Rs!iN(vsy&is~kE zDv&~Aa4fLk_~wI4Dx;~i2}&&_#iBK#PUIwufeI3F?f8F3<6Wo2W9wPUK(jL8O^tE)4xiqwGq-SzSxMrcnWP9H zf%WtX)rr0!H!HEi^L8x>4l-mk=)LpP zJ>=t4co5rXqf4-ku`xt^h=WCu1BSVHI1w2%HgZ<4UEbqm+LLiGY^ZdB^8u2PNm_uS z?$YqY$P(R>k^zrF)_?oCoBt+7T)&;>dbwxX=`HqS;Ic#OLCRCJmWO~m##aMoiCp9$ zwN(O(r&3B1ce4Qq-7D1Lm5Qp_w>_BKLSt=^b zGzxj7S6N(1sWi#<5EGgjHDI}{EM*a>GltcSg9uZ<6;ii}tNTdwL*YkW5=UqI2SLy{oIkO`V~jleI#K>PH9*!bvzQz2CoK301v zwNjZ`;&bX{B2_v}tpslXZ3K4YuY^UoGJN=z!K&t%`A~WU!?SMUqFG>@b9h-1lIrwc zpbQ8UktHqlvv*}#C0q0>bONq8VSySD0bl_R{!u;KogX6ZioIq5LJ%{rSDm6o4IH}C zqetzrOw!)F9M#GT5ueTZvs|&ytJ>{N#1DuOb4CggWem!K1n)Jicr~FqMU?@2EP^@v zk}jlhNMVaF8G1DpNkk`s%j+zNi5MKOb$(YA6ictapUnIQ8_wH9?YbwiE%Wj@>A4<) zr-%h{vX=CAo!-V-*RCPK2oTd6?RXo!Mr#-%-h`YD%Yj&*Y@$a^GqikpfpF&g=c)$d zQ~2Zlq~RWz5CAY|f+nHSvXnty^Oud3A`+*%U;!6NHA0_qsYtbBn*$ra3<*#f^#Em1 zrov*Sa~4JBLjlCKE#icq#S984^W#;jYaREMUbd>c=Ap@OOOio!DeSDWVD%ymL0=(} z$1dV4J0UqMYg!dYeq}Zhuyza%78Y(dUBNsoU4kq%m@<6#ul!eeYeppTeAI{LdTJ}2 z7WHP}AA$V60C#7@9}upPBe<7C`VOiJ-;)$_o2DRsGzt>^5ngWq7Uhwbj;trvWNpyN zN~CUWy+E|DeLa zq*)Be!wY0e?fYsJ(kBq1ioHwPe=#3UUdUxiiwPaAB@l!PX@4?6W9@qm@aY{hz`(6R zIk08W`Q;R03nvv6fo(wpYVdY_vcdI;+f2C6-PQNI{t_N&`P=k6m!47vwL2@DmO)8Q z*eB1koT}n?72B5I$FhfU#>XU(NgN+;J!n`of$d`rSaXCL0QAGwOlN06Lx^f7Wt8bl zo3dbVWJv^Cbvegt2825v!h%O@R0RXn!9`*;^p^40AOsTtzzj<8^kI=z*yk6TWRi&* zCcY6Y3J600IIpzU0^4ow6Kvg84_%I}iK3}>^!q_5VRYL{E7#qeq~l;J{4KRZ5Uuw3 ztyL<^`OhAdgf|w4d!we;PK-ZmzFuR#mR&( zUgy4d%T`;VEO2g5i|2!zaIB=-YMi>5E$ARjlX!mg2oxyveg+ARIul7sdzm`Y$uMyk z=uDgsofxjbZsLDOK!Egq_&wm(Gh5rPBU$jQ`9C$5Y4qW?%CF=6QXkSgmWvpTrS+hI zIzvYRv?B_=(O*v692=)t`t9C92!)4^NnqyNk4W^!94rk9>>z!ECuEcE?kMK1B8hbc z2V~aQ9y@x%uq#L)ZIc-IJ8W1689x1A)o9)J%V;*Xc!5Q(QbHot1+Zr7D&gv)s=!ci zrSp+>q{!*{e5Mx}M2*(nA=N23Jj?^b_SmU`7`Bj3 zBiO|9RBra|(Sd8f7wx0Nc)5K7Nd)k#4C#$zVI=zbdFaxT9mAVOv86)0LgEh@i!_}) zHD@Scnszq7!?UJ8IvBmy`XUb)unE-|Vx-}xBxWw)io!pvCzH)SW7F=vG45v&dcLA3Wb>1Su1VvGq z6C*cd{o0H-ERpUbtVW~fro45cCmPCUvvr`w(HX=Pz!&^ulGg;1)_)dj(jOy5{vx5r zRTM$f2OcEywJfVA^M%@eWa%HmF5-t<0Q2U>@44sDD3SIARRsO(v6APZ&M-GXChyGM z79jF9xojuhfJxMD@53aFN+f(ib%be7nc_?uWLj63`|2Pgm%`KlE7I&DPbDv#l|>mW z#XOK?>Y6VK+S!dgV0x|@B;PKGVkyw7Aiv>v+wkGdeZ495ILHs^<;x2nvilh< zV#8pf7!*e3@?jFQ6x|RRmPH9&>|~1$lcy_=xziYlEG*BKKGv)mX_1L8g0nqPBGVXA z>Znifo`Z)g;(o#jBbyrWuy61uaXXl57|mi0dloyAhQeE7lUM=u^scLI`EIpTCk!)h zGrux@@vO z6_0#-0YiW|=5Hk1ld_oC<9I)an zLnDF1GLzoHjHbZDi#-4kW;_5l_VB=WJYPW_Yi!$kNV|TWbI<1Y>Ro$MEZ_L=_54lb zoi-lN+l)Zm0!XuWh!fH5AE1zf9R#2JlnjP*}GWn zqu;O41K9w&$6*@J2}`y#T%#4@pF>B#h?8y2tB-f-5Y>nTwvOaK$Ezcv>1${5*#`e@&$7?yF};YB>fuihSbIv>4?fR)pYh` z9Y-Z!ZjW*q#jibF=*`+#8iOlCJlm<@Ck4h2WIVlYnXD;O7u6($%* zlKUR1-Q0gNwBA9A6KYIOE=AkqCsO`r#EG}j>x`#)6PljQN1@QtAu2#zV>rWh{Upei zFEKalZh37xp)V9y!$s?6_-`GnQln)jyz$SHX7CpAG4F}tZUMj0^DN7r2aV_R3K2<; zN&gj$GC2c)VUNR@7)Z^IuDNH-;r`G)K1P>kaW z*<@mv$UX#xHB7NT%bX{5d{!%TA#e4A`Kj+m++w^~>wo~6g8SV!?T6ktU4c4`#GU99 z!qPfSwpK52LIpKfT^4t01*JW@@X<~NiEpak^G`c=4gtxtXZP}A{<*$#+%jdF<~7OC z&;bh`?7w{d75mXV#EV__j~TlrF==7vz8UpRVNR^tV!btdA^wn#nL?+Ph8&~(&(q0V z14pyk)u;{O?X6?(WA}=@Yar6WRqyNZm&4pwhJXM5A+-0KA5Is4cv*n-E&5Z6i{&Av zf$lM`d2K)VGkA{B?_=@!wfoaBnYwrGmM%^+l2DT`uOXYy98)iNhrbPBkci@EqF{=u zTZ9znfB<}=rgfHDl&T}juG~=jE<&z5W}Yyr#%<4ZR-qRyTRBZX2Pt=XdQ$fhZd(}b zqA*{;KKTQFQEh;cEus(tU1KwYf&x!jDZ@Bd;d*%b%G^ZknlWnJLK-D?d9VgT79X`0 z2(}yLdh`K35eKb(=<0@g1)N&cBYG?ty|z}#%cDad+-O~H~mhVQ#`bEFx% z&-2{Y(UDatzq*wb>x7gO4X%#4w*}?}Xu%x2No6g%@qCIf>Jgpo6glCW-j= zw1VmnhcPu0SL0vB?x=gUSXlh3HUV+6OoEMZP&3c-reLswWOGEZm)?R($J@%=1IGyP zK?OQdQGv6+oDS6M@|TH@quT2nR>^j;*%$Gbp-H>cp2m^pz{J|N$#`&i1iU*755h_` z-#+*Y-&ww&qIn+@e~Qgb`EL-gdPd-j;JWJ*-i6Lr_vDhRtDM{*?MdwBo#Gdp*K2VYMi; z;Sc;oJY)^ZWq!G-AvOr^pT3FjU0@n1tJ)6i-{E}L0RUKex1smiHvX}EIQM&d#&~QO zH++gbuA3C`f~^68(9g0Lekb$lbt0?%+~zfYft?WWAy-Sp@--SFW{7HQ8%jKs{~|1m z_X|etHf=2k2jnr4IC-Ao%L&tw%%RC?Y~mi7r@r|s>TA1EXzlqF-UDpsXsk_P8h!sT zlPpwYw6cE)jZ>@U>_P99jYtSJMo(EIoVYPJy~cKFUdyn zC^{eTnzA*!9L$xt4;kPU&a#R$bJs)1>m+_ZK)Q<<4mx=q{K6foBW*w2{!=p8wEa{i zWUxWl>t)xT(dml8xwLswhYyufll{e-+4!-i(`S+_Bdtfk09#(irq*l{78Xj0(`Yx{ z=V3fp_cu8#Wn}56!KoB1>nsCP4W@|j_SI;VGy=M18!N$fs>Iu;8vXYsRoW-pCr0H#d(bnfy?4str}d7TW0MgLjNt8Pjae zBk?z)$`ighI9T+PwHRa%F3d8&R5tT@hiN*GzAGp=Npuk$w>T<1@#Z|h~ z92^jL-UbVYk=QG`pTO)TY_CP3m-R=D-rz5(F%|V7VVCF@-X1z8R=VOYcyMv*CM#mj zGH5V&SqyA?0@*)=4>Qkah0a@o`hzbax_m0pI5dmph)p>L9Biz($12nV9){Zefy#S} zhku1fB7R^M_Nwt!2Bm_se759z{xZgqqmGDZL@mf1oOmA!>A98&OIm7nHmBy>6n;=| zE!kkTD1qJDIvpfi*m`?du_|*6OZPZ&{ z&hX*uFZW%>VE{n-@6jh;&Y%@(!i?yHilj1b90ls)x~8CoEdErZO^5kNkJ;?3V%_Yd zXzAxbJ!H5z?tPY`zX%G^^JVTLO6D5XMX58bdv$v;RqY!B$A9Nm{q_?Lg!J4durp*Q zUK)9_a{Rl?q@*?Snp6RZ-S-&2G#7!R-`H=mr3uUXZ*G$`r{<(ueu|oTVd1ng<*rCf z1^4@8EA(N({G$PnZ^O<{36{pFwutIn5z)JdCC#WIMMM`*f8F68eL~`pH#>jbm7=oO z;HZjn=P)v~6GTIhJB1^b;1-D8Dr$h~khJtVawq%#{xov2qb>3Tma8eaL&Q)NdI znOAKN5ZTyB!tc3lORZ0&{Zx?NjOR7}n)PS0kqpZBAfSPBgo0Q? zH7cFAG{%&eK`8OY4z4ESOy*AuI|ESTcM`75`sAGZn zotqY_Lxbf0(LKyKCCAmwv8c7B$1k% zcnGgwxKkw~GV`|2!mARF`IYmT3!R4Yg4Fe&C#!5jcV8^h)iABDlfd1I zZL9Nj`A_cN{jpLkF9|{W3SE)MU z1zGBZTtL?+*Jrvxm*$&}-x4nNS%21Wa2-c2oCFS7QiiOM^w0&HVz3oKzx;eLl;E%1 zRxUV3?{2-yk|ds5BY*Lk{h>RHNz0Wq6z;I`~C^4L=7hz5-1hbO6 zuH^Kid#93J4lYh^6PwtyokG9W70ClPfd@eTwB&?pM?sTg9+YC)Bc=i=~Bjidb(p}L^r)0c}$}> z+#Pw0KFjWla9oA7m#~y@`RFU^))Ib9{vwx0@f2KX=;$6P)aV>SWt+ras&446oE&&b zNReS=J_(zdyA)(m(wE2$Squ3MCnz)hR$^jyF6?FKxThgpls%XDFUHG}LM+rteqeP%s&$#fIP^)hv3h zJG~cC`Q5zeJat0153Z4XOb3T~O&uVy#EVE76uc-Zr7RV)3?utdL=uV(F`H&7tr!eX zucHL5mNVy(Q#kKQa34b>`Su_`%|@Yso|*MNtnMy0-a?^&fT^5ukJs<8+I&n@>$Br=x`=3QzFCL7Jzb0J> zsvi;DJqC^%W}3QMBWUbOa7hUgchXD;_UK$y=slS97A3z;+Qs_p#$w0Re9VW^jw4(V z7C+z{(_VF}9*+noZ6rGXGheAYdb^-MnW!u>{I@^qanSE&&`19B8{`|o??&3MZ@O5% z{Oiy6z(*ppEQbMh3}(Pp0e{rf&~{oozixe2V?BoP)?rxV-_p-ro0?%X!r5GO09R{@ z!ZnQYn0brn1z9V0kEGhI{BdVD{6qa&pT!lC>-OS!;A~jw!2x}Z*(jot3BOZbYF+B2 znNiV1j!of1mHm|lqVUJ!ct?Jde`?YX~Y5NCUT?qrq zpZ&kImg90sGH?{L`Yh22u`J3}`6;UgQC~gdO@75@TZ5zLEKrrP+y`wtnbXMOX4bz9 zIO&oOUW`rh8i1pPNkR`T8QJ`7=^&QRfgPh^L3B)~Y-)D3R^@~6x zrkT+5wf@W(^re>*rFPWDf1cs(8Jk?H)4<|3QdM-}J=T};n%|$%*}JyiZef8~f)pF# zbzjZ;TW8F&B;GNoGS9ajg3hk@mVInoTzzP~tD-r|lV`87ZtX$u{cGVi-?IQ7U-m!w zoq!|5Nkz{CZAX%!Jvd8rE(lk-6ugSNG8#}EDvA$0ABavC+2Om6ivQtqjK-QF5Uul| zk4JydaJdtI;W8W^feY(6RrN}Um6K663usSZYi&YykXyPYBKk3X_B?iM+shrs!u4_2 zzt*l=cECdZd58q5B;n5&CJq6v{+)G(l-%{nzX3|Mmf6eZ$=r52Vl9QRU4h?yf+3x? zU7=!)=^OAU6)j>H?CW6SIxmG%JI|o2_|357Cr`|li2l_#;b}On8@+tfxN@Qu*msT} zL<%rIJk6SD+gj3nU>GaMMdG-aA>~b9@`n0tGaTsw%R`4MH2Xg$;}*95p$x48C+VShiDObPK?iTOifhfG%(Gt zem}o-c|xg2Js9CsMz=UDpq;y@q_0n+gnQ}b=e!i%`2E-JqkbjbkN%S-uA$H{-m9?= zWzJ?_1VazgYdbs?mfM7n)Y|v|{o7)kwx(?N{o+wqnoH#}3r^T%Je<2qx2JDi*3)zO zLe2cFB0&L!YD-@7^MI3|L()JEKbQZWrpoS|sctXuJD8`OQBy9}azOe~KU z>W>D|?5p;@XbMV7j?bq}|FtPTu563_^mhGe|J_YbO-=26q?X&`5PLc$2hkLqgj1h( zaB+gR7p3}$%miNLL9FK~BEdrH=TW1#UYUn5-;s_rO|Q|5=7`Un(CigV(^@h<^4 z_FbaR$te6Ptq&GG7mXdx_YEpHx_4)!-yeI(vrNVHY^uFR+2oaTC8YT`#}=6VhL1^b zzDPBm?#9>&#tpdReX_SW7HMoch#V>())1_-7&&j*C$DANRvN^8~`6g|C2Nj@2o;pM$U}3fOe+ozmDe zNm1lKC-p~m7xehHy~f>aNO#(J|D~0e(72GcPf-n0x#^NJ@yN9tWt%yzf44$^A~z1g zS-tyxZe(911}=JlcUp1JatdEX7+dAf12Lh z+taHVbCdsDsuQ|MEFBWc<*EzLmrgQ)?WC%dx^YQ%CN29C#cr+e`h^n%@BLq5-jFJ0}p{-rOe z_$ltC91`2%-h)r#YLfHZBX<=dv8ifq<}m*0(Fx|3YgH z4$OZRk`i#T7z9#M%3_;7aHN0#XaFkFv?5v+Q1B^`A}x+ai&e{wUTm|9Hl@yQtLm{@ zcZWY+v+0XTs|=Vhc2vFnN%3i5=KvQ)iGp&}(bbL^pvc*}SMM}W^Ajnm%KOvH%>5_j z)#!A;C!J8Ym|ClCN)OY+^p)-r7qicntmG~eUo%L{9VgvM-2T@fx1RcVbL9dD7VAcq{hx)Ewf|>||ysFmDmKp7h;+{RSE5feH&_&b@a_ zi)81I9srPo?iUdO8}GV1^@rTYF|$|?LM$vSi|l1kP`5b9CpLe6TlJis%aiO#IP?hR zE&Fxp#xHX%)U+yp>9}@5KlTbJD%e8B5c)l#pYcG^y7WI=%skAp1Xw1Fn0ND zTw?LepP^K2csN|GI-e?{%Ype31x6>@xVojESOV;y>eP0)$M$@kfRO)O+{~ z82Dk;V?X=-ta`}!)*IaM31UJtKOOzNfA;Xil`oA956_Y*vBVlTlG6*9A(N?v9UPX4 zB&ys_*qs>^8YFbIs@VZrC@ssBEARD94EwbcKqi;Y3?XEE79DrF6!gyXYltT#v#I0M zrhN;|Zu8xdmVNGR_R}~bJe-ts97sb?SD#88tf!PF_3(fzb3q!$m8%CgOjwPt<4w$< z@rg3~gSX-Y>-$r)L5AhAUF9R;S91TR=RpHGcRN4j{_w*90IrVa!kJDx&{|gp==tGP zwFjvwX$HEf_d`(F2B0z%R{#yOpKqawPbE1jPCmX5_8BtRJ8{f0)FKJ*eiRPD8mSD+ zk6;&>r`6CwWvz5HfszoH;dWX&g}1gvsmYP*f{;u&=@=tE+kUQ}h(*TLL1En4y+(r; zoE}-?31p$d<^84%Vt;3z<$-cy|7HNvZ47?JanCq)b+}`w?m2U&H-A1cQEnj!Bx0?k ze}9A#_kQTT%R!0_-ovxe4nC^$pN3#v2yLjXsbg=cnAJXh@HuPYD)d77_q}geN~kH5 zi^OLu9X%c=IMv7oCk%=Mz>!IIbSep%hLT0AIt^sZ_k&}U3t>)?McRKBh%%ufeR+8M6T?hVdw&IMbib-Lg`mF7PrmPWq@pVaz~Mz{JNNSIt<+-$$ zu>_FnIF@|l=NRZ-CbbsjzAl?v$v-lh#`pX1es7#bLjtx1J+D(NVR#5vg{&4l+=g-O zmRgf8Zo5BF{*pA8OZh@q9^7Fc_2=dTA*l{=M7I^L{SSEQpP!@tue&dghPr+KAE_wC zQ_8-SB|Rd0jP>b38bl%cnk{6TN%kczC`(56L9#s(l4WcmV(ddg*1=%1Wf{w0@VnpY zIp_QP<9E*I_s92q&-vcxIB&-Le$RDZ_qDvP>wVq#4FlC>jV2F-9HkgS+)}Dc1zSXEeE7t9c`X__r8&o?5QLK+* z^*W=7zJ0<%k!$VS?G=&i{>7r<_VJSryUH-lp@k0}7iP{HD zK61$9#FLOM9C8e*YW{k&l`5fo*#eoHXZYK$4b$cpidJjnvl zY1``L1xW?eVvQ8ei$kM_TB$ZbkiS~1$ggKZA4_%|5_tHJPRakr?POE#zkn?<@W6Wq zw+-Y~^hse~O6#or9hRLuNvG_DzQ@%n^-|(E&f7yA6FBG0f`J$J_d|OurVeiZN zka8v4Z?s*?Qnq6lKHuos#wAU0%ctcRP14cHm`(>aNlE1Uwzj2pdbUKcz*SE2dv(m|viq68 zdO?%YDw68#@S3Dn#(K#!EhLg&jOk_?TUZE&El$B$C?n|l>>a%Mlph^pjGuh>&`e_% ze^cndA%%5)(LH6U$%gD3HL8{Kna&QO$z8s#NuPg-rzz9MsF3qW-&gA4u-1Qf@iHsbUQ*#1@pUU%zAtS0TuA19`WPDFpk(O>{N=t{WJrcvdk@7$vO^Mi z(&5G11$}9mmK3J1v&C=H6*YRz{^B2dOgz^{J`O`MEPQ8<>Xl}1nPwY%eCUb4{_ZNm zf?v%~l4#dqU2487r$aY3F3hEWacjhLr40dNyXD?o9sLY4A~`^ z(5gGWKpS1M!2NLnRUVr7Wc) zx6Y;{YcyGfy9b_9Vrw^U`2L3$Y~YwA?5tugGUEo%tL*2BeQc01h>c5wv@h0#MP8X7 z@oaSAEx%Z-87p2i)C{Z zReeu<)VZI@_VUEJSI$kzx}<^s~0$BEB+p z_X|xLJ%;-{3qS7h{Bz1L^lURt|m_48hbOj$Jg7c&QBdaiFB1?CimI^yDa`Y5og z30yB_Sda|IPfc8tYBcRuJmpwqGCCh~0pg_w;!uS=#RpIPHS}?;NiHPdhwZ=Tc8BN3>FBCfTR2Ss;+{b!zr0!< zUL3ShknJ=)e;=Y4G-T+SDffik8ad+t1J;ti66x67TddptNrZlKQ{AS<{g-nLgv-St zV+A!#xb%@(@u=u%Bv=y@XV0ENofZNK+G*eJmMBh>nn$8cDpYY^>I9t`xBlHGzJ zZy#&j$}zOSBv@xDmaz+ViZl>rvo)@M_~+KRzgXQeYQz;=;%tj8nIa4-INI{B&B}Tb6S!y#3m~Tw6pMy_KY#j59w2FPs5H#)6Jx`R^H&%t7;OFC z5)4qGBIj21?`_j>pxcJa8A6URuuS;UrDJ`DKH9?+*IM~;qKUtT7mnd7JNeb-dyTgk ztRqoOerLYzIgxdwZ2mIV0Dx!x4NAQ zN1q?tY-ciUL+-6q#vP1v`AO|W84dXz$hAYwGR>fY>$xv^mga-&NJV1g!);fw1St{* z)$Q5wFW48N11z$!whs9_6V|Y^vA{&ZfJ#+bN*D6mFA)Z1A^`5QMM?xrF=xQ!Cb+Kj zJI9L!&S}BSQC%`Pnbd!0mIA&km(#712Iol`9;|C|RM|D*h&m1%!Mc+^c3cJ3ZbjAe z!XP9cp346HXyn^FG^nJVot;W>k~a+{wSJpZGv{mz8;hvv7gZ*uFDWuE(LTrce~IiF zUoU+cDcVGHl7*3iVHqMf7XRN~Il8e;{BqeY#b8t|-X-_+zZ*Z^$}u8+MmM zS1!aQ^L4k{)f)+-W;d$LXF(P0RDso=uv1Ef zdiO_0EU$iIwz{^-8JLZ(6J%x3}ER)Ctg{BC23-&-1#Md{cCxA;3kd~KkZ)Ua9POuMHi_6G1Eku*xoU(3qOT*=g)RiWPMGw5R z;p*FUcu>*h20}%aYp%mzT(M&V^EdfmY_>jwHRH`&^#_5E7QbKT!T~E|X=k z0mtpVf(_oq7Dfx_y-|P3vYI0n7y+^r={K^jr<2s~d?CiDbOSYGk~iZrs82h@>dpDBr=MTg9#e+`n z?m``s>4BRjhVPAg=WilUa&mIo0<+~({3(Icy*Bo4fuYmU$g*!Q!OjEJ88LEiOi)?B zry3)I-&#jNHan^1YJI+ydTo^s?As-PXtbg> zTlMtz_Rbq4U%cygt|cigPrkTPG~pe*bLMyMU@L^v#ue}aiv)luKzeOFn-97^*A^VQWDRkM00Xn83x73!{aO{1XD7Q@eAN%g?8Fd3U!?rAM+KWZ*bW5>}zt zkz+O9sJ)Frmz<+cRRRc0Bz63wJp+^CN<$qA7E4@uOvf_;84y`QfK*^$U|}@>+F5RH z?tqyqRyL&Wv}`BMbW&tglxK%1_V(p-m0GcTcW8PI0pL)y-h3;R{4WT2(!IQP502`Flen;;0#qoDwIdNSvF2X=cOmfA7k(XX1CMS3MFUI? zF+uBDkP>uRc#j=xcz3q|m`p*d0;A&N)(;*$AmGz|rXmbm&JW>%lrc2?9IG+Is6mqD z_zO;aa7VN!)&Pn_2qGGye0=q*BQqW6jm$qoRw#<)HFNsx!#G1Nv|W9%B7V!?d|Hi6 zA;!@55D0`R0gzDAk#AvBUX9R&ae2r*buMpDtXmg^fecp)G3A!pv|1tw4svp$1WJpn zPhaZz7p7o}YP=Y-v4e~e3y^ei+JM0rIuL5t4JH|2VBeBvNC{KGG(05Ks)-%=fi0eB zek?AIZk3k13|7dMw7NeSE^{I@JKg#yCUgYoW#)g3WrU&u7a_IQx?1&=_ke;EGm+8B zzWZo-ybD?`nhrKN3&cH4N~f+z2&GRz(4bd?H^=-cxo+!I@iTTCQ?FFhcEBl zC;u%ZF-msr3$t#mT`U@?)e@G_J>-~iy1{IGjYUUgZ{4u@+z`&##kD}SwQ~%GS2FjT z%b^Q+(3K(sbcEJGIG%{nwA%?8?C&pM#+xK8alWOF)Gv-BJ488h1abYK2M&nR<2fr1 zMj29vZH!V2nA&I~X?XL}_mU^i7+87M;Av@TqrnGzJKlc^y=L7iu&}U*jE=65kH&<8 zpog7}O>P>zADcK51boqL;rM8M;n*jA^ht5w1QX30qq!9-_jeXdK3LNfEqrtvJ0OgY zJu|+0Er4r(IT?pwR{5Guy&$E>)g@Ub{f|gV*_%c+1;pil1m*-JW!^n`)7fqi{?DSe zxE>$hmkZbbOc9YO6S-CLUZPA}P_#bv6X6LP;j61|T&Y1o5d%wO^a)K2`Z3<1#UQ!<_8DY9iCx+~D0RYMzQ4c-IK|gc{(aEG+d}@)Vp2*< z%KFbS1tKm6-}sDy+^4G&AqK+%&&%);=uGWOBZJ1l!TZ9(TZFnm6v&3pJYiD4sjB*f z(#YO)UK|G6G1ReB;PTh!qio<35_;m-r_9#iFWAXT4bbJBb_fl)Tuy?~g3E1jn&aT| z#`?(r){f_j%&+DZ75%hw4P)eP|IwSJZ)B9XG=k0eS^U)*Ov(Jhg4De);c+Q>dii$W zKiE{QwO`S{nrH@6tADuw&V}etwZ`%vIPa3H9OEEEZxy`f1wtK^9{IIqPG_2etjl0g zSIu(Wh-LvT%+xGjFW*3Ciw_oZaEp$Ss}V65VvYMJ5yVZ!yGw+(`Z8a zX7QPCDk?Ug;s9t7iPxNYA1;OfSPs4Ty@X%Np;K;-f~I<&?~G)Z`uhEQ5^$2`jVEbB z1}-(gV2-u*{>Qa}qne+e2X)!$0RS>3OFQZLZOq35O@YqZ+y?v4MDx^uKvZ#iI&N;T z*lHN-o^dDZhJEvk^TE4ARzchLmvqxHz`O_myw_o$XpxYY?k8O1y}Un2Ab~ePy691W z9q-~&Q&K*9Of~{KE?HDRMC@)Zp|)od9p}I04}Gvv?MMBrBt{FgF@w!KiwBRv&f!FF z!Wx`VKYB9DTt}`U)&K;{*3Z+q8?#$u_G)KyDYYwAmQ+4y*#U&!c;k9mfnlL0)@@AE zW1?Yk1iM_hDyWq(onYp+-2pN0PyJlG&BdX+g9c!-pFe+oid%l2H*nAa1c16RJW9x> z)3SD88gNmvGBWmG!p}I}zb`k*B~)#(@UEb!9VllhC|Z692B^Mp1omR)BpYnvy|~lY zZ0%%8!J0=)npNiAn3fh(mweySBj!zjwik%X3L?o@$o5Y3yGU4p&w0b1-~ z2;q!15b=TjSO1LHoa@O{o$XEo^N}Kb?OLvGhB7dR*Man<>*c?Gv@~qLvpzQmfDZUI z9>^3|+5(mk)Bz$`Op!&6!^V6+yK;cfaD{6sxE)Bz?EdaD9*Q~kcDG1Tvg7xA<$)vU z6KHFAOj{6LY+5diSeq{>&aJCcb{#H5?;KQbeEl;qt%Z5UR# zjhSu?UBk&AP|09n@nDf_Zwf4A3Ru_%lSzDWSy9D-8nM6V#WqlZIDr`?92~@!Ukwyk zu&p=vAb++8JTLVf5vW2Nh&~~~s6E)xf7IQls1h)K;+q2l}e%l&|~)R zj5bK5WR!fo-}@H$)B3SG(2b>Qj5?6VuMv$|NlI7pci5+H!#yVc8hCFK2hR9`gPFmD z^1{9>jhFyXV09Pol3uDB#wcpa47;re?EM6r>hn_ww1{PGWk0EI>ctf_byaxoAQxn2 z*cE*|ApMqc8JNyVwA9qs*G~`HnR|y@9<7o>NcyZy448?-dW3<439*Hiav{*$WD+UW zz0Rq>su%zw0jJe?DFlQYE+K$}Gw`AU)2M|$#d&R!Aj$~490}ZxM`U-Jf+Mh@i2cfY z_PuY_gMEwIKR=->wP||ZiGh=Um__a97ZlgYBY?}Uen$kDSDQt|_!VyuV3et(ee0PKp^{W$=+4M`s#pzbt@jg#~5HRIp$kw@-iw1RFow^Tccis7D9?{AZiy) z*#fy5T{H-$6_O?G+dYXOZtVm%$g`0w_G$g=JCa}<1dIi$z-sGX{4WAB^bg>?Jz(xo znUg+G;Ck;V4(ZF~<>ioKJ!j-j0it3LA}e+{((dK#5>WJ=t>p}0bbi?-;JWQsr<$uk z_7ezP#=p#~sUt{Esga`G7~^feI0 znmJz)T}Jr^P#QN6EWU_}iptOTjFp06oTy&M!TruIE>e!&mDi@VRZnBJ<>y zmKNaKi~?vvq+VaKhQV~6Kz?drP>j{m$A*K0V}C<2UQ-arQCp^J7?>t`i2b*JqX??n i5dbRwmtu>>1K57q2L}cTL#XSh75!};`hNgTzQe%) literal 76990 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 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 91b151a148ace06fd48df21c524a357da7f6dd56..c18158a3dffee1ac9965fad2cc3df6ad71d7e5cb 100644 GIT binary patch literal 85428 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 QP%n28sW0%wE0LW_Y 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

jRh06QaE0W$KA3okN5b(UZqdoLvFXYHDtxl^V` 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

=$}HMzW~_a0(ZZnEvKkvAveN%9J4qRF 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 inspection

 degrad_imgs
-
## [1] "/tmp/RtmpO6eRnm/plot_degradation_p1.jpeg"
-## [2] "/tmp/RtmpO6eRnm/plot_degradation_p2.jpeg"
+
## [1] "/tmp/RtmpXH1PXB/plot_degradation_p1.jpeg"
+## [2] "/tmp/RtmpXH1PXB/plot_degradation_p2.jpeg"

… and this is one of the images:

 

@@ -2956,12 +2956,12 @@

Blur ratio
 head(blur_imgs)
-
## [1] "/tmp/RtmpO6eRnm/blur_ratio_freq:1-1m_open.wav-4-10m_closed.wav-4.jpeg"
-## [2] "/tmp/RtmpO6eRnm/blur_ratio_freq:1-1m_open.wav-4-30m_closed.wav-4.jpeg"
-## [3] "/tmp/RtmpO6eRnm/blur_ratio_freq:1-1m_open.wav-4-10m_open.wav-4.jpeg"  
-## [4] "/tmp/RtmpO6eRnm/blur_ratio_freq:1-1m_open.wav-4-30m_open.wav-4.jpeg"  
-## [5] "/tmp/RtmpO6eRnm/blur_ratio_freq:4-1m_open.wav-3-10m_closed.wav-3.jpeg"
-## [6] "/tmp/RtmpO6eRnm/blur_ratio_freq:4-1m_open.wav-3-30m_closed.wav-3.jpeg"
+
## [1] "/tmp/RtmpXH1PXB/blur_ratio_freq:1-1m_open.wav-4-10m_closed.wav-4.jpeg"
+## [2] "/tmp/RtmpXH1PXB/blur_ratio_freq:1-1m_open.wav-4-30m_closed.wav-4.jpeg"
+## [3] "/tmp/RtmpXH1PXB/blur_ratio_freq:1-1m_open.wav-4-10m_open.wav-4.jpeg"  
+## [4] "/tmp/RtmpXH1PXB/blur_ratio_freq:1-1m_open.wav-4-30m_open.wav-4.jpeg"  
+## [5] "/tmp/RtmpXH1PXB/blur_ratio_freq:4-1m_open.wav-3-10m_closed.wav-3.jpeg"
+## [6] "/tmp/RtmpXH1PXB/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 fcd95512..fb0dd355 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-28T22:12Z +last_built: 2024-03-28T22:15Z 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 f44132ef..d23d49f7 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 '/tmp/Rtmp3atfaT' +#> The file example_master.wav has been saved in the directory path '/tmp/RtmpJTR8Tw' diff --git a/reference/plot_aligned_sounds.html b/reference/plot_aligned_sounds.html index 14eb01da..0bc2e950 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 '/tmp/Rtmp3atfaT' +#> The image files have been saved in the directory path '/tmp/RtmpJTR8Tw' diff --git a/reference/plot_blur_ratio.html b/reference/plot_blur_ratio.html index 43f7a424..74efe5b6 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 '/tmp/Rtmp3atfaT' +#> The image files have been saved in the directory path '/tmp/RtmpJTR8Tw' diff --git a/reference/plot_degradation.html b/reference/plot_degradation.html index ff2178c0..88ebe0ff 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 '/tmp/Rtmp3atfaT' -#> The image files have been saved in the directory path '/tmp/Rtmp3atfaT' -#> The image files have been saved in the directory path '/tmp/Rtmp3atfaT' -#> The image files have been saved in the directory path '/tmp/Rtmp3atfaT' -#> The image files have been saved in the directory path '/tmp/Rtmp3atfaT' +#> The image files have been saved in the directory path '/tmp/RtmpJTR8Tw' +#> The image files have been saved in the directory path '/tmp/RtmpJTR8Tw' +#> The image files have been saved in the directory path '/tmp/RtmpJTR8Tw' +#> The image files have been saved in the directory path '/tmp/RtmpJTR8Tw' +#> The image files have been saved in the directory path '/tmp/RtmpJTR8Tw' diff --git a/search.json b/search.json index 0a4d1ba0..1788f306 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":"glossary","dir":"Articles","previous_headings":"","what":"Glossary","title":"Synthesize and align test sounds","text":"-Model sound: sound transmission properties studied, usually found original field recordings synthetic sound files. -Reference sound: sound use pattern compare . Usually created re-recording model sound broadcast 1 m source (speaker). -Sound ID: ID sounds used identify counterparts across distances. sound must unique ID within distance. -Ambient noise: energy background sounds recording, excluding sounds interest. -Test sound: sounds re-recorded far source test transmission/degradation (also refer ‘re-recorded’ sounds). -Degradation: loose term used describe changes structure sound transmitted habitat.","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 '/tmp/RtmpfQN8sE' # 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 '/tmp/RtmpfQN8sE' # 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 '/tmp/RtmpfQN8sE' aligned_imgs ## [1] \"/tmp/RtmpfQN8sE/plot_align_10m_closed.jpeg\" ## [2] \"/tmp/RtmpfQN8sE/plot_align_10m_open.jpeg\" ## [3] \"/tmp/RtmpfQN8sE/plot_align_1m_open.jpeg\" ## [4] \"/tmp/RtmpfQN8sE/plot_align_30m_closed.jpeg\" ## [5] \"/tmp/RtmpfQN8sE/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-pc-linux-gnu (64-bit) ## Running under: Ubuntu 22.04.4 LTS ## ## Matrix products: default ## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 ## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so; LAPACK version 3.10.0 ## ## locale: ## [1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8 ## [4] LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8 ## [7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C ## [10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C ## ## time zone: UTC ## tzcode source: system (glibc) ## ## 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.43 bslib_0.6.2 ## [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 stringr_1.5.1 compiler_4.3.3 ## [21] textshaping_0.3.7 brio_1.1.4 munsell_0.5.0 htmltools_0.5.8 ## [25] class_7.3-22 sass_0.4.9 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.35 ## [37] stringi_1.8.3 sf_1.0-16 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.26 Sim.DiffProc_4.9 signal_1.8-0 igraph_2.0.3 ## [53] gridExtra_2.3 png_0.1-8 ragg_1.3.0 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.16.0 jsonlite_1.8.8 R6_2.5.1 systemfonts_1.0.6 ## [73] fs_1.6.3 units_0.8-5"},{"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":"Transmission experiments tend follow common experimental design model sounds re-recorded increasing distance within transect. Hence, data must indicate, besides basic acoustic annotation information (e.g. sound file, time, frequency), transect distance within transect sound. baRulho comes example annotation data set can used show required data structure: despcription required input data 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. sound ID can one sample distance/transect combination. sound id label “ambient” can used defined annotations ambient noise can measure. transect: numeric, character factor column transect ID. distance: numeric column distance (m) source sound recorded. package assumes distance replicated within transect.","code":"# load packages library(baRulho) library(viridis) library(ggplot2) # load example data data(\"test_sounds_est\") test_sounds_est"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"setting-reference-sounds","dir":"Articles","previous_headings":"","what":"Setting reference sounds","title":"Quantify degradation","text":"combined information columns used identify reference sounds test sound. function set_reference_sounds() exactly . Hence, unless define reference sound test sound manually, set_reference_sounds() must always run degradation measuring function. 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":"# 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":"Setting reference sounds > Measuring degradation","what":"Data format","title":"Quantify degradation","text":"mention , function set_reference_sounds() used determined, row input data, sounds used references. function can using two methods described :   function adds column ‘reference’ used downstream functions plotting measuring degradation. Hence used running degradation functions (including plotting functions). 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 won’t produce errors downstream analysis (see ‘X’ argument description details format). function ignore rows sound id column ‘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":"Setting reference sounds > 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: … one images:   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] \"/tmp/RtmpO6eRnm/plot_degradation_p1.jpeg\" ## [2] \"/tmp/RtmpO6eRnm/plot_degradation_p2.jpeg\""},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"blur-ratio","dir":"Articles","previous_headings":"Setting reference sounds > 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] \"/tmp/RtmpO6eRnm/blur_ratio_freq:1-1m_open.wav-4-10m_closed.wav-4.jpeg\" ## [2] \"/tmp/RtmpO6eRnm/blur_ratio_freq:1-1m_open.wav-4-30m_closed.wav-4.jpeg\" ## [3] \"/tmp/RtmpO6eRnm/blur_ratio_freq:1-1m_open.wav-4-10m_open.wav-4.jpeg\" ## [4] \"/tmp/RtmpO6eRnm/blur_ratio_freq:1-1m_open.wav-4-30m_open.wav-4.jpeg\" ## [5] \"/tmp/RtmpO6eRnm/blur_ratio_freq:4-1m_open.wav-3-10m_closed.wav-3.jpeg\" ## [6] \"/tmp/RtmpO6eRnm/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":"Setting reference sounds > 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":"Setting reference sounds > 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":"Setting reference sounds > 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":"Setting reference sounds > 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":"Setting reference sounds > 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":"Setting reference sounds > 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":"Setting reference sounds > 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":"Setting reference sounds > 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-pc-linux-gnu (64-bit) ## Running under: Ubuntu 22.04.4 LTS ## ## Matrix products: default ## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 ## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so; LAPACK version 3.10.0 ## ## locale: ## [1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8 ## [4] LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8 ## [7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C ## [10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C ## ## time zone: UTC ## tzcode source: system (glibc) ## ## 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.43 bslib_0.6.2 ## [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 stringr_1.5.1 compiler_4.3.3 ## [21] textshaping_0.3.7 brio_1.1.4 munsell_0.5.0 htmltools_0.5.8 ## [25] class_7.3-22 sass_0.4.9 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.35 ## [37] stringi_1.8.3 sf_1.0-16 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.26 Sim.DiffProc_4.9 ## [53] signal_1.8-0 igraph_2.0.3 gridExtra_2.3 png_0.1-8 ## [57] ragg_1.3.0 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.16.0 jsonlite_1.8.8 ## [73] R6_2.5.1 systemfonts_1.0.6 fs_1.6.3 units_0.8-5"},{"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, kind = c(\"pink\", \"white\", \"brown\", \"red\", \"power\"), alpha = 1, ... )"},{"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. kind Character vector length 1 indicating kind noise, “white”, “pink”, “power”, \"brown\", “red”. Noise synthesized modified version function noise. Default \"pink\" similar background noise natural environments. alpha Numeric vector length 1. power power law noise (defaults 1 pink 1.5 red noise). used kind = \"power\". ... 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 Timmer. J M. König (1995): generating power law noise. Astron. Astrophys. 300, 707-710.","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 square 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 '/tmp/Rtmp3atfaT'"},{"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 '/tmp/Rtmp3atfaT'"},{"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 '/tmp/Rtmp3atfaT'"},{"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 '/tmp/Rtmp3atfaT' #> The image files have been saved in the directory path '/tmp/Rtmp3atfaT' #> The image files have been saved in the directory path '/tmp/Rtmp3atfaT' #> The image files have been saved in the directory path '/tmp/Rtmp3atfaT' #> The image files have been saved in the directory path '/tmp/Rtmp3atfaT'"},{"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). attempt use re-recorded sounds shortest distance transect reference. However, another re-recorded sound 'sound.id' shorter distance transects, used reference instead. behavior aims account fact type experiments reference sounds typically recorded 1 m single transect. 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":"glossary","dir":"Articles","previous_headings":"","what":"Glossary","title":"Synthesize and align test sounds","text":"-Model sound: sound transmission properties studied, usually found original field recordings synthetic sound files. -Reference sound: sound use pattern compare . Usually created re-recording model sound broadcast 1 m source (speaker). -Sound ID: ID sounds used identify counterparts across distances. sound must unique ID within distance. -Ambient noise: energy background sounds recording, excluding sounds interest. -Test sound: sounds re-recorded far source test transmission/degradation (also refer ‘re-recorded’ sounds). -Degradation: loose term used describe changes structure sound transmitted habitat.","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 '/tmp/RtmpIG2LWn' # 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 '/tmp/RtmpIG2LWn' # 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 '/tmp/RtmpIG2LWn' aligned_imgs ## [1] \"/tmp/RtmpIG2LWn/plot_align_10m_closed.jpeg\" ## [2] \"/tmp/RtmpIG2LWn/plot_align_10m_open.jpeg\" ## [3] \"/tmp/RtmpIG2LWn/plot_align_1m_open.jpeg\" ## [4] \"/tmp/RtmpIG2LWn/plot_align_30m_closed.jpeg\" ## [5] \"/tmp/RtmpIG2LWn/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-pc-linux-gnu (64-bit) ## Running under: Ubuntu 22.04.4 LTS ## ## Matrix products: default ## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 ## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so; LAPACK version 3.10.0 ## ## locale: ## [1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8 ## [4] LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8 ## [7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C ## [10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C ## ## time zone: UTC ## tzcode source: system (glibc) ## ## 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.43 bslib_0.6.2 ## [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 stringr_1.5.1 compiler_4.3.3 ## [21] textshaping_0.3.7 brio_1.1.4 munsell_0.5.0 htmltools_0.5.8 ## [25] class_7.3-22 sass_0.4.9 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.35 ## [37] stringi_1.8.3 sf_1.0-16 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.26 Sim.DiffProc_4.9 signal_1.8-0 igraph_2.0.3 ## [53] gridExtra_2.3 png_0.1-8 ragg_1.3.0 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.16.0 jsonlite_1.8.8 R6_2.5.1 systemfonts_1.0.6 ## [73] fs_1.6.3 units_0.8-5"},{"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":"Transmission experiments tend follow common experimental design model sounds re-recorded increasing distance within transect. Hence, data must indicate, besides basic acoustic annotation information (e.g. sound file, time, frequency), transect distance within transect sound. baRulho comes example annotation data set can used show required data structure: despcription required input data 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. sound ID can one sample distance/transect combination. sound id label “ambient” can used defined annotations ambient noise can measure. transect: numeric, character factor column transect ID. distance: numeric column distance (m) source sound recorded. package assumes distance replicated within transect.","code":"# load packages library(baRulho) library(viridis) library(ggplot2) # load example data data(\"test_sounds_est\") test_sounds_est"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"setting-reference-sounds","dir":"Articles","previous_headings":"","what":"Setting reference sounds","title":"Quantify degradation","text":"combined information columns used identify reference sounds test sound. function set_reference_sounds() exactly . Hence, unless define reference sound test sound manually, set_reference_sounds() must always run degradation measuring function. 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":"# 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":"Setting reference sounds > Measuring degradation","what":"Data format","title":"Quantify degradation","text":"mention , function set_reference_sounds() used determined, row input data, sounds used references. function can using two methods described :   function adds column ‘reference’ used downstream functions plotting measuring degradation. Hence used running degradation functions (including plotting functions). 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 won’t produce errors downstream analysis (see ‘X’ argument description details format). function ignore rows sound id column ‘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":"Setting reference sounds > 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: … one images:   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] \"/tmp/RtmpXH1PXB/plot_degradation_p1.jpeg\" ## [2] \"/tmp/RtmpXH1PXB/plot_degradation_p2.jpeg\""},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"blur-ratio","dir":"Articles","previous_headings":"Setting reference sounds > 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] \"/tmp/RtmpXH1PXB/blur_ratio_freq:1-1m_open.wav-4-10m_closed.wav-4.jpeg\" ## [2] \"/tmp/RtmpXH1PXB/blur_ratio_freq:1-1m_open.wav-4-30m_closed.wav-4.jpeg\" ## [3] \"/tmp/RtmpXH1PXB/blur_ratio_freq:1-1m_open.wav-4-10m_open.wav-4.jpeg\" ## [4] \"/tmp/RtmpXH1PXB/blur_ratio_freq:1-1m_open.wav-4-30m_open.wav-4.jpeg\" ## [5] \"/tmp/RtmpXH1PXB/blur_ratio_freq:4-1m_open.wav-3-10m_closed.wav-3.jpeg\" ## [6] \"/tmp/RtmpXH1PXB/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":"Setting reference sounds > 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":"Setting reference sounds > 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":"Setting reference sounds > 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":"Setting reference sounds > 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":"Setting reference sounds > 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":"Setting reference sounds > 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":"Setting reference sounds > 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":"Setting reference sounds > 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-pc-linux-gnu (64-bit) ## Running under: Ubuntu 22.04.4 LTS ## ## Matrix products: default ## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 ## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so; LAPACK version 3.10.0 ## ## locale: ## [1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8 ## [4] LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8 ## [7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C ## [10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C ## ## time zone: UTC ## tzcode source: system (glibc) ## ## 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.43 bslib_0.6.2 ## [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 stringr_1.5.1 compiler_4.3.3 ## [21] textshaping_0.3.7 brio_1.1.4 munsell_0.5.0 htmltools_0.5.8 ## [25] class_7.3-22 sass_0.4.9 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.35 ## [37] stringi_1.8.3 sf_1.0-16 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.26 Sim.DiffProc_4.9 ## [53] signal_1.8-0 igraph_2.0.3 gridExtra_2.3 png_0.1-8 ## [57] ragg_1.3.0 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.16.0 jsonlite_1.8.8 ## [73] R6_2.5.1 systemfonts_1.0.6 fs_1.6.3 units_0.8-5"},{"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, kind = c(\"pink\", \"white\", \"brown\", \"red\", \"power\"), alpha = 1, ... )"},{"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. kind Character vector length 1 indicating kind noise, “white”, “pink”, “power”, \"brown\", “red”. Noise synthesized modified version function noise. Default \"pink\" similar background noise natural environments. alpha Numeric vector length 1. power power law noise (defaults 1 pink 1.5 red noise). used kind = \"power\". ... 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 Timmer. J M. König (1995): generating power law noise. Astron. Astrophys. 300, 707-710.","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 square 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 '/tmp/RtmpJTR8Tw'"},{"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 '/tmp/RtmpJTR8Tw'"},{"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 '/tmp/RtmpJTR8Tw'"},{"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 '/tmp/RtmpJTR8Tw' #> The image files have been saved in the directory path '/tmp/RtmpJTR8Tw' #> The image files have been saved in the directory path '/tmp/RtmpJTR8Tw' #> The image files have been saved in the directory path '/tmp/RtmpJTR8Tw' #> The image files have been saved in the directory path '/tmp/RtmpJTR8Tw'"},{"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). attempt use re-recorded sounds shortest distance transect reference. However, another re-recorded sound 'sound.id' shorter distance transects, used reference instead. behavior aims account fact type experiments reference sounds typically recorded 1 m single transect. 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":""}]