From 76371d11bd479c74604b4b69da15e78aba54c5ce Mon Sep 17 00:00:00 2001 From: maRce10 Date: Mon, 4 Mar 2024 23:48:30 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20maRce10/?= =?UTF-8?q?baRulho@be1d62f1f2fcecabf4a1496ec2c3bcaa3d5ea97f=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 | 18 +++++++++--------- .../figure-html/spectro master 1-1.png | Bin 76995 -> 78051 bytes .../figure-html/unnamed-chunk-1-1.png | Bin 85335 -> 84300 bytes articles/quantify_degradation.html | 18 +++++++++--------- pkgdown.yml | 2 +- reference/master_sound_file.html | 2 +- reference/plot_aligned_sounds.html | 2 +- reference/plot_blur_ratio.html | 2 +- reference/plot_degradation.html | 10 +++++----- search.json | 2 +- 10 files changed, 28 insertions(+), 28 deletions(-) diff --git a/articles/align_test_sounds.html b/articles/align_test_sounds.html index c11b3b29..ad8552a9 100644 --- a/articles/align_test_sounds.html +++ b/articles/align_test_sounds.html @@ -571,7 +571,7 @@

Create master sound file for play dest.path = tempdir(), gap.duration = 0.15 ) -
## The file synthetic_master.wav has been saved in the directory path '/tmp/RtmpxF6OlM'
+
## The file synthetic_master.wav has been saved in the directory path '/tmp/RtmpYEHGex'

 

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

Create master sound file for play dest.path = tempdir(), gap.duration = 0.3 ) -
## The file example_master.wav has been saved in the directory path '/tmp/RtmpxF6OlM'
+
## The file example_master.wav has been saved in the directory path '/tmp/RtmpYEHGex'

 

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

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

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

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

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

-

+

 

Manually fixing alignment diff --git a/articles/align_test_sounds_files/figure-html/spectro master 1-1.png b/articles/align_test_sounds_files/figure-html/spectro master 1-1.png index 3129b1df080debfda0bf6a167e6cc65a73c45b21..43a0f4183c6d20ec83edf8ff1fcb3e71b4bc51e5 100644 GIT binary patch literal 78051 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 Rbm%7veOpB~@0QWC{{T0-K>Gjy literal 76995 zcmeFYRa6{Z&^8JLcemgSPH=aJ0fHuYkl+#s5`sf;XBgaF5+Jw*m*B2Jg1fuR-{k%N zv(Cl2IrrbJZhF?9?%sRXu6pXJs!f=hiaZ7?DJl#M3e%uTlM zkA)9c54dN(yMK&EP>@81lY2Wa(;s#9Ug2QuU0(9am$H#693tk~5xueunaN$&L#_Gl zk(B|zV1x2+$R4sO_>$q0sAkNCsU^jYBMl*6fBBMuIJMNj{21AqI(aPpEmU;nbAA7` z^kHi5{^9CeOjRw>JPZVe0>>}<^h21JFCcKQFdFf{wtTi~zu13GdtCq9^uLmLQIG%C ziT^c){|gFLZgsD$ELaVjlgG!^nG*)=!4Ge^iE%p zNnfsPgxm7{690nwKU5Ja_B?6~skNQ0vK-Bvi#|*J3_s*(c6+w@Fi!b6Zr2NWxobCD z>@-ZZ!u4=|F8Vap5%Yhc>Hmeu`FM+W41A-m@L*`PCm{!5pbQPX;(EQ_%kFk{rV3CO zg9uAuKi~n2*%6C0OP`u=lOqP5o#xJ1za9hX%U6+>-JzK_-Dyjw=jrELvn_~BbYP)6 z-F5{iC}ZWSn}imP#q06eJK0$!O&&jZLl#zoEZ9s|5o7qvFae%0S0Rz=1YQgFj55aRN@0= z9HYFlg$6CDz!Q}naB{$U!(UAVXTYCpAa2D#hgGdr<7G^g4b5O=BxMY@%uHmoHb5p) z#IB43$tsXBdzor4L@0>-HLG!Sd)=o6f!mEZra@><4t1Twve?3lIu@FndHLt$M1E_1 z`_5|eAd8AsI^1{0ACH%B!!an>lz12!gSm;xg6Q_RFts0iaEjkD+#HZ6vR#?T_ z_;5D3>mme`Z!I+V;wcNu=U5d;*LnOg(0e#dGce#yBy?3i_`gHB-@!M%kU39bb>)Ca z=tWL`#Lnd-57!lY1xN&gP1-xz{?{)3QOmXA&!(eabI~+lsLP+K=4{;Bl-H^p#E0hU zTmuho@v{9>zUO&3gmigB5j{HbkzDvH-piD4aT!R0w5fnc6j+ThyOvr!-JkE5M~@#y zjz3>cYmd5;0l3_yoj4U2>FyY@Y86Qb4l)NP0DpnwH+Tq|-{}uB25Xq82z2=8_Zu(f zYW24Rvd))Yqf-c3{ZaBWSFh|Wh~4Yk+cdu6|K66Eh;W(T^*MRsbv)=42D^Q*gbD|Q zO^-c8MNEZ}Eu{iXF?3R!?LDA!c_2kEQF&$;0YY2_2h3< zIqU}oIMXPD^qK+rMO&^+0fE_(j9tvIg0=K61tIj0IP-NPUb2P~cW+&2-#d9zJM)8FuUvh8LR zkOY-Z7Vtz)gUpq8A*5v{EJRFK_Wx?5Wo@^liPOp95L{Na2jH

3?+(36>K%-TZ~@t`>k`ZHOrkcOk&2qj7&dpeHN!K}Q|HO@l4fVr7k7&uC@RT) zpS0<1O^XNZV&6jDk>?Njl0LYSY^OV8Qr@&9{qiWSZ+kpM$HY{*cQm@`Br2Y^`Je#k zTePJ*{#ZZD!2sz+FZKGa05$CIK~rO9^#Bz^4R%tVb3;UbAJ;9|Hy(Xe$z!kp0FdLN zB}GEHHtWIeh(xtH9R}7BBArnx@SEKbk^n zQ6~U|XgqGc*J<(K#S%Gzv7IS3@$yPvS~46FJ{Dp7wL` zOd$sC@#g)a*Na^Y;(VXYUy9}J4>F&=7WiE96yvCn-6qqPx>I>=quq@Dds#0uAlffw7l$SKe>f3Csx`Y({I;Nb z=IBk`|J+kzO~i5Oks%O$JCW4t(zl@auRWu$@I(7Ux9>yDbFA&p#^78=3$B=dOFiMZ zU4fRoU*4Aa+P>l2*XDKd8ojcVp?|*t9$oMNZY$<#C+22AyS4MMetE=wJEQmLZ<8fg z(*HcZ4m?hUtW#@4P@-LK@%Pu4bf3H3(hp6p^ws}n1tKTHZ1TGeLt}4-Y-jmqdbEt_ zT4wzI+IpUm()XV-xGV~+!66#YRha|NC7zFpXBpks8m$8h^q_p8^=|^Z4IHMnGS`=v zj?a(R&YKC^PKUL#XH%N0vD>%Ghlc;%lgw+1fGzED-T=6;{%lwar$uG>Zw*9}U186GRlkMQ-M=8Q^X+Dms_;K@ z2%b2#kYks;oAsyK**f|kJx1ZKdI5!(1M?u8)|fc~)jE}8TymgFB)1m;7~mK3L9+kH zhLFf%0fqhbD%w~OU=RK0=@_s1u!CI%|9izfpxPGwP&%Y$c68}85leuba+ChIg1c^O z6$Jmf`TrdhRRyp~KVm(fVByPFF5ge^Agr($-J+Vft*~u}v-}hoa{I6I-qrv@j$`j* zPa`Hh%oqIjn!bNy{NE~v9b_X6Z6+D1B$}7Y68<-g^$AI|FvzQ6uu2*3as z8~(3YB;doD|Kd8Y3mSlyCgCQH_hmgn0E zT@^NfYtGjsQNJOIb zGsNo@W^T~vJSbozVynvBC{5VmmqT5i5;UKL?+|Vas>HTh*-Ih3<7%#Zwu=^@~P^8(2^&uzy2X4 ztl191H<4fnVhrsYB=h4yXAFmmMD~S8a-oAgsYhrBYC?!+57**n+0!|2MZ2-AX12m1X~cvJu4z4T%;pG1}6G660% zY)Orc#bIk$f$Qn%F>EYnRT8@!k2w>6>V01EM`K&@T)wB6w)rCW>czRD(f7>9*QP5P zrCDW5izMS>ZL#~l4ZC0H4q)mZybgMN-WrerqpMB{RhdB}RQRYN z!00x?Xm!}ZhZ{@mhHBa-;RU2dy^ow9I@urKt^rVWeBYXHJ@9zFJPJq=Fyl|QV(e!LPlnCcPFudQ&jv&!{tQ7 z9676KC2wZ>e!%R7B!GsCy9|Tx${f5|j2`#2bpdp1d)jXsx!ukhwG_YC^?BO%&GbBO zNzyChixaf`JFRUr{6YdBr#|7~;Vl9n`Eq()tz*g)G_E-Ga|u-!cjyR30no@Ve-O~y3A7D5fN-M$ zm|(;GQIl??6W#USugi{txG&+W*J*^&#wQ2Q*MLte(kp`&GL4Fyqfhkp2qL6HD{S+{yUtY8lncM!&`rtyB}|$7f7t3qxm01l<}{iMC&kt z=2Gf~-5p+4ACVFUUQ;hiGT4k2kLF#R1A#^~3(^~7z?p+5FCeb2^VUU&*H=}nMM-c-gKO2*2dNX=y>WNvt^)!E%O?Fm&#ms1i8u7zZ&;#-t4+)u5X3 zZ^E-d!;0ZIH$Kk*+JtQZs8(e@*jIH>+vhZ7Q@Fm%$iz^!pCJ0Phf4b8{;V_L-_DiV zE|lb(AFe*t|Lr0Fy2yFhn_v#Eo)gJ61z;*=QXd062zzInG)4pZ-V#t1so0$yQl2Bx6OYFudj!k3kq(*f-ee-@#9+>yU62axTow%j|4 z*LDU1>Nh!l?s@GXQrZioPF7Y{OenPhD=38~k6Uy*N4ZbsL9(rI05v^5C`P*409 zA>&_gBz9$9kUe(S;17e7Vo7U@8s1CWr3uxvLOR{7jI$7M9ntiz*bU*k$ z`8dI{tBjcby)kf&<~J4rS^eYUy>Wogdd+XYvFJRy2@vtEM1A|5X`8qEFmZ8lUXS}m zmVol51BoBIKNYJLT@+=V92=>&KVetWmLIlQi(YglKu)x98huWPul=ghr!Eq+%KaEy zUk+)GOQ^4|^80c9_X3+IkzKx%>C-7U)6DlvLwro8QwZ#bwL z^!u*PdF(OUByc{&t=sA)*wxk5?Wmk+ez4S%7WJC{Y$Hz931Ew#M@6q;ICyxvjh-)! zUZ{-gWuV2ND*Xn4&2YuD%<-n2W!Z9IsV0T*fjAl3Y?7!<1O7JnlOx<7xy-r@MGR43 zJ;5C3eWe$AW(A8Ui}T{NUm&V}$%7^9rkmk~KV!P*{^1@G2pIL+;x_QuE$BWy72H%- z$A1`oz7>a!E>S84R%>;i{D3+ovbdLbjf@ellPX_N`DWGzSTM2jnnlVs?@^m6Lg*{#0d{R{2CUiK9Ss6X|nb1vgr^ZCenl!F)T zi{E)!{TCzqmGaD6`DuZ#_2xHwmCZD>ir^;x-lY&n?ZNqct!*O!Zf+Oj^42`029Cc8 zs?!15M~;EGb;Uh}O5z}i8ysjYi7)l!RDKpG3xN{nqW=I({PEB43w5pAanDG4Nmqyn zmQph*C9;}K|9D@jS8G#vPL^;cvOSsg#FO=OQH0en4ESLHI4Qloy~|CwfG2qL(=RG4 zCk0G+=@o&vk&3;DG?{~$=?u!~m(QxO7TJ)ZG5Csb_9NRgU3o;jV$Gl$4kqCH@?Y?S$QYrEH9(LbecW0fAG&gd8C|k=!FI zrj+-@l=pvnEri1X*DYt@)-O1u&(j`r>tmC-A;Sc1oknC&abXp%oc+Y=2HFf(Id0dO357mj6;QEMoWH#McYH2n%e#u{`^8ooRL(PUm$qD(0qh&wS=D z>~Ke&!DH@J3RX4p4xUsLO8oa4`|ZLHY9*id+!@q^Rk)Y{GsBcMtT_CASlW1xG9%g& z^k&q-a&o>*Ihqg4*7xh;jkl{EC7r^LhnxG+q0f5YUQ)m|%Nzgd%QM=d>>K`(E!jl| zjMc@(&1Bf)jAy%9X@s_T+M0m+@|z*W-Bn&lZCkA^AD7S!^^f;%_QQ867%aQVrm(cT zy!Bs~1!Pr++N&h}|4>Q;u6yTXXm5MRNI<5bJgZoJ`wLN9G#9%2O;Zf{%oDwyp!DFj zx*Rq8r$2&S)^y~y55w{kw)WT2j#UDnvf#)_-u`N@Iv|P$LiN<9td%DRQAM5dNmOY$ zIeld_I+L=V=wVOyt5u@H+O|{gIG5Z&p0NJh$=j$y5o_CR-G1b&WvScPt^IP`Qay6M#S_wO-JTh~3+%h(EdjVf0gQWo4!P2GoUY zL3p0VrrU0w7qvE&$fw!8j`r=s&Jm}p-J)zPQTbwGon~gk^{%e+mkZtNZn@0nV-h}* zmd%8Pfn2lWEAQ%LMQDE3G&4;V<2S~;?+fd43E74L`CMg>qR&H0W-Tabu90eiu)4%& zoq79~9F_T|!vLFa1=z*yMUnV0mhX-9((}{x`O|e<7E5{aKhpdX9#Val#RDVN*$z_7 z!-Hy*-IeZkVbW$OJ!fT>FE6J>oO(4uocU##j{z+QbDUDTi4V)=`a>%Z-{zv--rel^ zHYJD(Uyt*TQK7GHa3`HDuI~$89>m=oE8*O{lV*CEm|k?C!T@-=F!eAQb-A6Mjf| z`Bvqq?b)Z!Zm!c(?3@G<390e4=XE1MlXaTiIE^0Gh~}EUI`CI13SrtAHYH@^R@P7E zYi_~ULPVPw`h@0K7VM1L;^dDXPFV{@8j@UVjgMefS76+Y#N(z(J62$H%SH-o*@s=5 z^Q4@cWmDgwAQom8xz>)%h`tH;pu{UXSOMbJUEZqe0`K@10{?G9?xH6Bx=P4!#A4=b zQ+WQFq~=hvv!_h&8(BR^g(4h{6wSQ1U_^ZN?!Ugi%Pb3Tqg7m2?Lg#Zg`#j<420~4 zLkwc4C_metJSf~&V8!m|M$clNZ(_W5q$$^=DetgfeBaGYulUI8%9AoE!M>bEUJGrgS1j`@OLKL?EKfU3uC{-iObZM4{C+)+O!}phhM|l>CLu74 zidM;aZDUOQZ9M3^zU%QHB}0rb8=MY_1OfCN@`D_51o$Z8R8AA~X9VR$3$LvK_NtvJ z_foem>r$`56p_okOZ*ms0XYc;DOCu>l1@Fd+Wg$`=<&|R$Lm?|>L6v~({UptV%h!4 z)~g3<(S^fLYeIY$(RLH@k7O*jdOvI$J<%~_xZp0|^zgf#r!5aHHag$NiQnSA6bJC! z>B#fMyr+|Hx~?BdMt?59_2l?ig&9{HX_1#dX|x(f`N{0>op%j1@MCe7Q+5(kYl}sl z>G5oEQ9Tz)mzBYowG7X_sopEj;ctOg#!*Rig8YQ-5u?pAmJM>A_8Bh4Qnplu(?sKB z$~zYqCu?}GEroMIV3-4U>quAFb@LEcT4N`weC~IqUN%Sf-~R7j0IK}S*Rj27-S^Ma zOrI=kpvip+Oel?JmMU}R55-O!MJ()Wb0NLGty^TL;j?OY(rc%ziPYGwcn3;s4{|ED=d0oE_$`e@~!tbcJj|8`t=8S#Yi=_W4j?E z5(=J-+0)w4E6Hkpv%zzQtKzm9nTQV=gomwA*X1ea_$%(q!n*qWX`(9kkn^Ay_jxZz zUwok*7ECJ?1+8hz=Z3Ks&yVu|tdd}p_iMS=bt2uaLdvsP(Xv=hs6M1d+@e_lWz8>} z6mlgC?`)$M#`FVcP9kAMEy&eZMohT?{Ksco#$|J@y!g6^2RzmnucjAn(xQG;2>%u2GG5aN ziRv&$_jzb$E?Tf;M(o!&*F32iBFI$|Ft28Ds^big%!!V4a?`Rby&ipN{v4OsJpB)O zvnapZ*vVa`-3tO2M6Rl(?^t*Pcd%@difC1>R(r2f1jnZeW<;^Ir0Byj!A8pCNY=hG zYEcSXQ@iLOmpf^pma)Bv{=M4Sn@GChV89paCOY<#e?6(IZ;84+-**1{Wwz3GmJLWk zT~}HRlk(Xw_92O#z~0^8``$^I^vR2z;lKd=_Gb#1eK)z1!M?hdEF=@sfNDZV`?I$A z3LjpSE<-5(5yu*12P22UUrq|=@OiRuPGbWh?l3-^LY*WM?1?HD#}{{rnFkK3%$FS_ zs`Ty+6U7?(IqZpi|7u>8DQ}wo&|}1EB6m`gBeh1s6K+7SPw91Z3muSR?ak5>E}BTf zz6u0#F=5$Yy?qWGW#}wgXJ)eA@e{*pR3{{ton|MBStNHiH9#Us_Cgo8yyTn|FzPmt#6B!*1_jv-$aQadOx^CVUy|}z2 ze=t6sS`F`16)C_QmQJgK6bg2sd4eM%Glp@3OHkej;mgX{a;>jg@;ROk#1Zf3yA1d% zVvjQi%tb$G`g2ef<>L`52a>E0^I;t=b%VVF?1&fSX@6GnSaVbzcN=PPu}}@0oOdIu z9{=sXJx@BxBiC=RTIHfxY)q*i5lwK#d7e632iSUIzlt0~@ffr7Rc)$Bvn?9Yuu)G} zQ{71+0>KY+<I1GBr!Il6PvDazm?7t>;$1UFr+u zr4RO;Iwrm$H}gXUAN{DD2s55XP%fEX`|7j(wc%>s)*Xm6Rk4+ilkzfzA8Ry)a5i

$PYDU-G?9w60z&3 zyiwM9cg%ne7p|UcHjU z5>FB&M&9MSZ2g>F`OJQB_vFZJ$W=--?sW?%;@ z*Tp=;Z9VyVocLYSnaHRm+Px;(?zq&S^A%L45iBkv6%Gsd?&dqn2dFso~wSO`k{$I!>nGj+^fxk;(X^pjHXF=eIZ?xZy0qOq?x1< z^-)gfEi^N5Nim2uAV}#xMf=rD3Ahr;F(6)h37+H)Hj z&y!xqaoqZ0t!e3V-@V~^i>1zEnfz_RwLzbPuZ%F8+vhHek&HIKURS&A{BM$ckq4&s zssT%iQni^UH|uFDst(&#%Naf>)z*hvKA#7r50=EF%78*G$)T1aS?{}j0%lQ^d)LTu z{y$yiKRxgUwOLbUo`lOVeebfKzqy~^>p1Pf>8-zAQq7rBo`zShJY- z7Ji64PBQ~kq9z09H?_C3hptD@N74Y%Qg1u747qmarmHc9k_!fca90>zDTu`e=SEq& ztL-zb5yQf#nZu<)?)9cHX6oN&9pSR)JJ#>qTt@l$-nly42!^~B?h!2cDi#r8NDA&# zsD4WeV?{r47@L=%YXfSDWw*PT{5*^6tK6P5rY|i#%*Cj z-xvOjVmtGz?DuE5w%;y8^O&1YU%A+$dR=$0e()R3s++`9_$^_#X#8qPj2}}36shfz zQT5@(-Sv<-58<81>zeRTJ)FrQw4Pq)st zJ@dThE~f8J+jtny#0K~NsSq7FeLWTR*E z@mSzuw4OordC0rukxxZuPjyxpjREbp&ktk1Xk%UT2`;-xU07u$;c!3Zw4xNlVDUS= zd229PugK{R;?ms_n%jDtXfu`~<=xS`*S^DX!IEZy=v*PpSuTiCk?mo6_Iw1ZnIPHY zv0-zxwJR>hf!_K8Vo$Oq`zh=zF>6hEHvWTkdhC8v(kF>>2DD%Ti?ZuN^QtK{3w@eKq83^LNc zf-1@^Vxri>)+qYF@@9MoDCJkpD+wJ$GXi4L;>k!Sb~gU@*yOuEwm6QFEBCKION@oE8!HZgzw?VCvJSWSEcb3@!- z9EM9w_4o?=WeOkrCo<9iUOm|!rC~>{p%hgyb!h8A{8#-f-!T2BGy5wQi+mFW5lcT- z#61EbYbl*Dus(`b4xyXDUlDdNJZ z`FMzC-lF-=9@e~y;h^meLFtQbl%fla$}&O3b~A2sv#S0LHI+|{Id(F3OEvfJ(UPke zbsrCTMXtKG|1{RW{i8_-;ba{aha!PV(hVT}6(e23QOYkx

583zoF$MwKX@ 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�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 LYboX3HVybM&)GN> 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 8f5b8514ba00a9356737f99a77e86d75769a0de9..39c2e61e243accbe4b0935c5bb86423f00906cb4 100644 GIT binary patch literal 84300 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 literal 85335 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%0DilU^Cktq}mPUcd3wW`G~)S%uV(f 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 diff --git a/articles/quantify_degradation.html b/articles/quantify_degradation.html index fe4a17df..1ecda996 100644 --- a/articles/quantify_degradation.html +++ b/articles/quantify_degradation.html @@ -1969,9 +1969,9 @@

Visual inspection
 degrad_imgs

-
## [1] "/tmp/RtmpTaEPaJ/plot_degradation_p1.jpeg"
-## [2] "/tmp/RtmpTaEPaJ/plot_degradation_p2.jpeg"
-

+
## [1] "/tmp/Rtmp2InFYO/plot_degradation_p1.jpeg"
+## [2] "/tmp/Rtmp2InFYO/plot_degradation_p2.jpeg"
+

 

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

Blur ratio
 head(blur_imgs)
-
## [1] "/tmp/RtmpTaEPaJ/blur_ratio_freq:1-1m_open.wav-4-10m_closed.wav-4.jpeg"
-## [2] "/tmp/RtmpTaEPaJ/blur_ratio_freq:1-1m_open.wav-4-30m_closed.wav-4.jpeg"
-## [3] "/tmp/RtmpTaEPaJ/blur_ratio_freq:1-1m_open.wav-4-10m_open.wav-4.jpeg"  
-## [4] "/tmp/RtmpTaEPaJ/blur_ratio_freq:1-1m_open.wav-4-30m_open.wav-4.jpeg"  
-## [5] "/tmp/RtmpTaEPaJ/blur_ratio_freq:4-1m_open.wav-3-10m_closed.wav-3.jpeg"
-## [6] "/tmp/RtmpTaEPaJ/blur_ratio_freq:4-1m_open.wav-3-30m_closed.wav-3.jpeg"
+
## [1] "/tmp/Rtmp2InFYO/blur_ratio_freq:1-1m_open.wav-4-10m_closed.wav-4.jpeg"
+## [2] "/tmp/Rtmp2InFYO/blur_ratio_freq:1-1m_open.wav-4-30m_closed.wav-4.jpeg"
+## [3] "/tmp/Rtmp2InFYO/blur_ratio_freq:1-1m_open.wav-4-10m_open.wav-4.jpeg"  
+## [4] "/tmp/Rtmp2InFYO/blur_ratio_freq:1-1m_open.wav-4-30m_open.wav-4.jpeg"  
+## [5] "/tmp/Rtmp2InFYO/blur_ratio_freq:4-1m_open.wav-3-10m_closed.wav-3.jpeg"
+## [6] "/tmp/Rtmp2InFYO/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 70a2c771..60946724 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-04T23:44Z +last_built: 2024-03-04T23:47Z 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 8e27dd3d..0a8e5882 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/Rtmpao0FpH' +#> The file example_master.wav has been saved in the directory path '/tmp/Rtmp9xZu1o' diff --git a/reference/plot_aligned_sounds.html b/reference/plot_aligned_sounds.html index e5f736ca..bc5c1846 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/Rtmpao0FpH' +#> The image files have been saved in the directory path '/tmp/Rtmp9xZu1o' diff --git a/reference/plot_blur_ratio.html b/reference/plot_blur_ratio.html index 2b249ee7..68b735c4 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/Rtmpao0FpH' +#> The image files have been saved in the directory path '/tmp/Rtmp9xZu1o' diff --git a/reference/plot_degradation.html b/reference/plot_degradation.html index b535e3dc..9fa1ff53 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/Rtmpao0FpH' -#> The image files have been saved in the directory path '/tmp/Rtmpao0FpH' -#> The image files have been saved in the directory path '/tmp/Rtmpao0FpH' -#> The image files have been saved in the directory path '/tmp/Rtmpao0FpH' -#> The image files have been saved in the directory path '/tmp/Rtmpao0FpH' +#> The image files have been saved in the directory path '/tmp/Rtmp9xZu1o' +#> The image files have been saved in the directory path '/tmp/Rtmp9xZu1o' +#> The image files have been saved in the directory path '/tmp/Rtmp9xZu1o' +#> The image files have been saved in the directory path '/tmp/Rtmp9xZu1o' +#> The image files have been saved in the directory path '/tmp/Rtmp9xZu1o' diff --git a/search.json b/search.json index 05cb492e..fbb59db1 100644 --- a/search.json +++ b/search.json @@ -1 +1 @@ -[{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing","title":"Contributing","text":"First , thanks taking time contribute! types contributions encouraged valued. See Table Contents different ways help details project handles . Please make sure read relevant section making contribution. make lot easier us maintainers smooth experience involved. community looks forward contributions. like project, just don’t time contribute, ’s fine. easy ways support project show appreciation, also happy : - Star project - Tweet - Refer project project’s readme - Mention project local meetups tell friends/colleagues","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"table-of-contents","dir":"","previous_headings":"","what":"Table of Contents","title":"Contributing","text":"Code Conduct Question Want Contribute Reporting Bugs Suggesting Enhancements","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing","text":"Please note baRulho released Contributor Code Conduct. contributing project agree abide terms. See rOpenSci contributing guide details.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"i-have-a-question","dir":"","previous_headings":"","what":"I Have a Question","title":"Contributing","text":"want ask question, assume read available Documentation. ask question, best search existing Issues might help . case found suitable issue still need clarification, can write question issue. also advisable search internet answers first. still feel need ask question need clarification, recommend following: Open https://github.com/ropensci/baRulho/issues/. Provide much context can ’re running . Provide project platform versions (nodejs, npm, etc), depending seems relevant. take care issue soon possible.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"i-want-to-contribute","dir":"","previous_headings":"","what":"I Want To Contribute","title":"Contributing","text":"contributing project, must agree authored 100% content, necessary rights content content contribute may provided project license.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"before-submitting-a-bug-report","dir":"","previous_headings":"I Want To Contribute > Reporting Bugs","what":"Before Submitting a Bug Report","title":"Contributing","text":"good bug report shouldn’t leave others needing chase information. Therefore, ask investigate carefully, collect information describe issue detail report. Please complete following steps advance help us fix potential bug fast possible. Make sure using latest version. Determine bug really bug error side e.g. using incompatible environment components/versions (Make sure read documentation. looking support, might want check section). see users experienced (potentially already solved) issue , check already bug report existing bug erro. Also make sure search internet (including Stack Overflow) see users outside GitHub community discussed issue. Collect information bug: Stack trace (Traceback) OS, Platform Version (Windows, Linux, macOS, x86, ARM) Version interpreter, compiler, SDK, runtime environment, package manager, depending seems relevant. Possibly input output Can reliably reproduce issue? can also reproduce older versions?","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"how-do-i-submit-a-good-bug-report","dir":"","previous_headings":"I Want To Contribute > Reporting Bugs","what":"How Do I Submit a Good Bug Report?","title":"Contributing","text":"must never report security related issues, vulnerabilities bugs including sensitive information issue tracker, elsewhere public. Instead sensitive bugs must sent email marcelo.araya@ucr.ac.cr. use GitHub issues track bugs errors. run issue project: Open Issue. (Since can’t sure point whether bug , ask talk bug yet label issue.) Explain behavior expect actual behavior. Please provide much context possible describe reproduction steps someone else can follow recreate issue . usually includes code. good bug reports isolate problem create reduced test case. Provide information collected previous section. ’s filed: project team label issue accordingly. team member try reproduce issue provided steps. reproduction steps obvious way reproduce issue, team ask steps mark issue needs-repro. Bugs needs-repro tag addressed reproduced. team able reproduce issue, marked needs-fix, well possibly tags (critical), issue left implemented someone.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"suggesting-enhancements","dir":"","previous_headings":"I Want To Contribute","what":"Suggesting Enhancements","title":"Contributing","text":"section guides submitting enhancement suggestion, including completely new features minor improvements existing functionality. Following guidelines help maintainers community understand suggestion find related suggestions.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"before-submitting-an-enhancement","dir":"","previous_headings":"I Want To Contribute > Suggesting Enhancements","what":"Before Submitting an Enhancement","title":"Contributing","text":"Make sure using latest version. Read documentation carefully find functionality already covered, maybe individual configuration. Perform search see enhancement already suggested. , add comment existing issue instead opening new one. Find whether idea fits scope aims project. ’s make strong case convince project’s developers merits feature. Keep mind want features useful majority users just small subset. ’re just targeting minority users, consider writing add-/plugin library.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"how-do-i-submit-a-good-enhancement-suggestion","dir":"","previous_headings":"I Want To Contribute > Suggesting Enhancements","what":"How Do I Submit a Good Enhancement Suggestion?","title":"Contributing","text":"Enhancement suggestions tracked GitHub issues. Use clear descriptive title issue identify suggestion. Provide step--step description suggested enhancement many details possible. Describe current behavior explain behavior expected see instead . point can also tell alternatives work . may want include screenshots animated GIFs help demonstrate steps point part suggestion related . can use tool record GIFs macOS Windows, tool tool Linux. Explain enhancement useful users. may also want point projects solved better serve inspiration.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributing","text":"guide based contributing.md. Make !","code":""},{"path":"https://marce10.github.io/baRulho/articles/align_test_sounds.html","id":"synthesize-sounds","dir":"Articles","previous_headings":"","what":"Synthesize sounds","title":"Synthesize and align test sounds","text":"often want figure transmission properties vary across range frequencies. instance, Tobias et al (2010) studied whether acoustic adaptation (special case sensory drive; Morton 1975), explain song evolution Amazonian avian communities. test authors created synthetic pure tone sounds used playback re-recorded different habitats. actual procedure creating synthetic sounds described : “Tones synthesized six different frequencies (0.5, 1.0, 2.0, 3.0, 4.0, 5.0 kHz) encompass range maximum avian auditory sensitivity (Dooling 1982). frequency, generated two sequences two 100-msec tones. One sequence relatively short interval 150 msec, close mean internote interval sample (152± 4 msec). sequence longer interval 250 msec, close mean maximum internote interval sample (283± 74 msec). first sequence reflects fast-paced song second slower paced song (sensu Slabbekoorn et al. 2007). master file (44100 Hz/16 bit WAV) thereby consisted series 12 pairs artificial 100-ms constant-frequency tones six different frequencies (0.5, 1.0, 2.0, 3.0, 4.0, 5.0 kHz).” can synthesize pure tones using function synth_sounds(). function requires 1) frequencies tones synthesize (argument frequencies, kHz) 2) duration tones (durations, seconds). addition, logical arguments fm allow create frequency amplitude modulated sounds respectively. case need six tones 100 ms 0.5, 1, 2, 3, 4, 5 kHz separated intervals 150 ms (least first synthetic file described Tobias et al 2010). can also get selection table (sensu warbleR) information time frequency location every sound. required order make master sound file. get selection table need set argument selec.table = TRUE. can done follows:   function can add complexity additional acoustic dimensions. instance following code generates possible combinations frequencies (2, 3 4 kHz), durations (0.1, 0.2 s), frequency modulation (tonal modulated) amplitude modulation (flat modulated envelope): Note output extended selection table contains time-frequency annotations synthetic sounds:   extended selection table, ‘sound.files’ column refers Wave objects included attributes instead files directory:  ","code":"# load packages library(viridis) library(baRulho) library(Rraven) # synthesize synth_est <- baRulho::synth_sounds( mar = 0.1, frequencies = c(0.5, 1:5), durations = 0.1, fm = FALSE, am = FALSE, sampling.rate = 12 ) # convert into a single wave object synth_wav <- Rraven::exp_est(X = synth_est, single.file = TRUE, wave.object = TRUE) # plot spectro seewave::spectro( wave = synth_wav, scale = FALSE, palette = viridis, grid = FALSE, flim = c(0, 5.5), collevels = seq(-20, 0, 1), osc = TRUE, colwave = \"#482878FF\", heights = c(2, 1), wl = 100 ) # synthesize synth_est2 <- baRulho::synth_sounds( mar = 0.01, sig2 = 0.5, frequencies = 2:4, durations = c(0.1, 0.2), fm = TRUE, am = TRUE, shuffle = TRUE, seed = 123, sampling.rate = 12 ) # convert into a single wave object synth_wav2 <- Rraven::exp_est( X = synth_est2, single.file = TRUE, path = tempdir(), wave.object = TRUE ) # plot spectro seewave::spectro( synth_wav2, tlim = c(0, 3), scale = FALSE, palette = viridis, grid = FALSE, flim = c(0.5, 5.5), collevels = seq(-20, 0, 1), osc = TRUE, colwave = \"#482878FF\", heights = c(2, 1), wl = 140 ) # check first 6 rows head(as.data.frame(synth_est2)) # check name of wave objects names(attributes(synth_est2)$wave.objects) ## [1] \"synthetic_sound_1\" \"synthetic_sound_2\" \"synthetic_sound_3\" ## [4] \"synthetic_sound_4\" \"synthetic_sound_5\" \"synthetic_sound_6\" ## [7] \"synthetic_sound_7\" \"synthetic_sound_8\" \"synthetic_sound_9\" ## [10] \"synthetic_sound_10\" \"synthetic_sound_11\" \"synthetic_sound_12\" ## [13] \"synthetic_sound_13\" \"synthetic_sound_14\" \"synthetic_sound_15\" ## [16] \"synthetic_sound_16\" \"synthetic_sound_17\" \"synthetic_sound_18\" ## [19] \"synthetic_sound_19\" \"synthetic_sound_20\" \"synthetic_sound_21\" ## [22] \"synthetic_sound_22\" \"synthetic_sound_23\" \"synthetic_sound_24\""},{"path":"https://marce10.github.io/baRulho/articles/align_test_sounds.html","id":"create-master-sound-file-for-playback","dir":"Articles","previous_headings":"","what":"Create master sound file for playback","title":"Synthesize and align test sounds","text":"function master_sound_file() creates master sound file (probably guessed) playback experiments. function takes wave objects data frame (extended) selection table containing model sounds concatenates single sound file (silence sounds length can modified). master_sound_file() adds acoustic markers start end playback can used time-sync re-recorded sounds, streamlines quantification acoustic degradation. following example shows create master sound file using synthetic sounds generated . synthetic sounds need add little space top bottom frequency sim_songs() make values exactly pure tones:   function saves master sound file wave file returns selection table R environment time frequency ‘coordinates’ sounds file (careful playing master sound file can shocking audiences!). can look spectrogram output file using seewave function spectro() follows: function can also create master sound file sounds found sound files several sounds files, likely case recordings collected field. following example shows create master sound file using several sound files. code uses example data recordings package warbleR:   , can look spectrogram output file: Note output also exported Raven sound analysis software (Cornell Lab Ornithology) visualization manipulation using function exp_raven() Rraven package. exp_raven() exports selections R environment ‘.txt’ file can read Raven:   sound files annotations can visualized Raven ( acoustic analysis software):   Take look Rraven vignette details export import data R Raven. Note start end markers placed relatively low frequencies less affected degradation. frequency range markers can set argument flim. relative amplitude markers can also adjusted amp.marker argument. Amplitude markers multiplied value supplied markers louder sounds. two features increases chances detecting markers distances.","code":"# create master sound file synth_master_annotations <- baRulho::master_sound_file( X = synth_est, file.name = \"synthetic_master\", dest.path = tempdir(), gap.duration = 0.15 ) ## The file synthetic_master.wav has been saved in the directory path '/tmp/RtmpxF6OlM' # 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/RtmpxF6OlM' # 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/RtmpxF6OlM' aligned_imgs ## [1] \"/tmp/RtmpxF6OlM/plot_align_10m_closed.jpeg\" ## [2] \"/tmp/RtmpxF6OlM/plot_align_10m_open.jpeg\" ## [3] \"/tmp/RtmpxF6OlM/plot_align_1m_open.jpeg\" ## [4] \"/tmp/RtmpxF6OlM/plot_align_30m_closed.jpeg\" ## [5] \"/tmp/RtmpxF6OlM/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.42 bslib_0.6.1 ## [5] ggplot2_3.5.0 vctrs_0.6.5 tools_4.3.3 bitops_1.0-7 ## [9] parallel_4.3.3 tibble_3.2.1 proxy_0.4-27 fansi_1.0.6 ## [13] highr_0.10 pkgconfig_2.0.3 KernSmooth_2.23-22 checkmate_2.3.1 ## [17] desc_1.4.3 lifecycle_1.0.4 compiler_4.3.3 stringr_1.5.1 ## [21] textshaping_0.3.7 brio_1.1.4 munsell_0.5.0 class_7.3-22 ## [25] htmltools_0.5.7 sass_0.4.8 RCurl_1.98-1.14 yaml_2.3.8 ## [29] pillar_1.9.0 pkgdown_2.0.7 jquerylib_0.1.4 MASS_7.3-60.0.1 ## [33] classInt_0.4-10 cachem_1.0.8 Deriv_4.1.3 digest_0.6.34 ## [37] stringi_1.8.3 sf_1.0-15 purrr_1.0.2 fastmap_1.1.1 ## [41] grid_4.3.3 colorspace_2.1-0 cli_3.6.2 magrittr_2.0.3 ## [45] utf8_1.2.4 e1071_1.7-14 scales_1.3.0 backports_1.4.1 ## [49] rmarkdown_2.25 Sim.DiffProc_4.8 signal_1.8-0 igraph_2.0.2 ## [53] gridExtra_2.3 png_0.1-8 ragg_1.2.7 kableExtra_1.4.0 ## [57] memoise_2.0.1 pbapply_1.7-2 evaluate_0.23 dtw_1.23-1 ## [61] fftw_1.0-8 testthat_3.2.1 rlang_1.1.3 Rcpp_1.0.12 ## [65] glue_1.7.0 DBI_1.2.2 xml2_1.3.6 svglite_2.1.3 ## [69] rstudioapi_0.15.0 jsonlite_1.8.8 R6_2.5.1 units_0.8-5 ## [73] systemfonts_1.0.5 fs_1.6.3"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"required-data-structure","dir":"Articles","previous_headings":"","what":"Required data structure","title":"Quantify degradation","text":"input data contain additional information. baRulho comes example annotation data set can used understand required data structure:   Transmission experiments tend follow common experimental design model sounds re-recorded increasing distance within transect. structure data must indicate transect distance within transect sound. Hence, besides basic acoustic annotation information (e.g. sound file, time, frequency) table also includes following columns: sound.files: character factor column name sound files including file extension (e.g. “rec_1.wav”) selec: numeric, character factor column unique identifier (least within sound file) annotation (e.g. 1, 2, 3 “”, “b”, “c”) start: numeric column start position time annotated sound (seconds) end: numeric column end position time annotated sound (seconds) ‘bottom.freq’: numeric column bottom frequency frequency range annotation (kHz, used bandpass filtering) top.freq: numeric column top frequency frequency range annotation (kHz, used bandpass filtering) channel: numeric column number channel annotation found multi-channel sound file (optional, default 1 supplied) sound.id: numeric, character factor column ID sounds used identify sounds different distances transects. transect: numeric, character factor column transect ID. distance: numeric column distance (m) source sound recorded. package assumes distance replicated within transect. Importantly, sound ID can one sample distance/transect combination. combined information columns used identify reference sounds test sound. function set_reference_sounds() exactly . two possible experimental designs defining reference sounds (controlled argument ‘method’ set_reference_sounds()): 1: compare sounds (‘sound.id’) counterpart recorded closest distance source (e.g. compare sound recorded 5m, 10m 15m counterpart recorded 1m). default method. design users can single example shortest distance used reference (instance 1m case studies) function try use references transect. However, another test sound ‘sound.id’ shorter distance transects, used reference instead. behavior aims account fact type experiments reference sounds typically recorded 1 m single transect. 2: compare sounds counterpart recorded distance immediately within transect (e.g. sound recorded 10m compared sound recorded 5m, sound recorded 15m compared sound recorded 10m ). Also note selections labeled “ambient” ‘sound.id’. selections refer ambient (background) noise. Ambient noise can used functions correct amplitude differences due non-target sounds. example data 4 recordings increasing distances: 1m, 5m, 10m 15m: data contains selections 5 sounds well 1 ambient noise selections distance/recording:   baRulho can take sound file annotations represented following R objects: Data frames Selection tables Extended selection tables last 2 annotation specific R classes included warbleR. Take look annotation format vignette warbleR details formats.","code":"# load packages library(baRulho) library(viridis) library(ggplot2) # load example data data(\"test_sounds_est\") test_sounds_est # count selection per recordings unique(test_sounds_est$sound.files) ## [1] \"10m_closed.wav\" \"10m_open.wav\" \"1m_open.wav\" \"30m_closed.wav\" ## [5] \"30m_open.wav\" table(test_sounds_est$sound.id, test_sounds_est$distance)"},{"path":[]},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"data-format","dir":"Articles","previous_headings":"Measuring degradation","what":"Data format","title":"Quantify degradation","text":"functions set_reference_sounds() can used determined, row input data, sounds used references. function can using two methods described :   function adds column ‘reference’ used downstream functions plotting measuring degradation. References indicated combination ‘sound.files’ ‘selec’ column. instance, ‘10m.wav-1’ indicates row ‘selec’ column ‘1’ sound file ‘10m.wav’ used reference. function also checks information ‘X’ (input annotation data) right format wont produce errors downstream analysis (see ‘X’ argument description details format). function ignore rows ‘sound.id’ ‘ambient’, ‘start_marker’ ‘end_marker’.","code":"# add reference column test_sounds_est <- set_reference_sounds(test_sounds_est, method = 1) # print test_sounds_est"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"visual-inspection","dir":"Articles","previous_headings":"Measuring degradation","what":"Visual inspection","title":"Quantify degradation","text":"function plot_degradation() aims simplify visual inspection sound degradation producing multipanel figures (saved JPEG files ‘dest.path’) containing visualizations test sound reference. Sounds sorted distance (columns) transect. Visualizations include spectrograms, amplitude envelopes power spectra (last 2 optional): paths image files:   row includes copies sound id given transect (row label includes sound id first line transect second line), also including reference comes another transect. Ambient noise annotations (sound.id ‘ambient’) excluded.","code":"# sort to order panels test_sounds_est <- test_sounds_est[order(test_sounds_est$sound.id, test_sounds_est$transect, decreasing = FALSE),] # create plots degrad_imgs <- plot_degradation(test_sounds_est, dest.path = tempdir()) degrad_imgs ## [1] \"/tmp/RtmpTaEPaJ/plot_degradation_p1.jpeg\" ## [2] \"/tmp/RtmpTaEPaJ/plot_degradation_p2.jpeg\""},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"blur-ratio","dir":"Articles","previous_headings":"Measuring degradation","what":"Blur ratio","title":"Quantify degradation","text":"Blur ratio quantifies degradation sound function distortion amplitude envelope (time domain) excluding changes due energy attenuation. measure first described Dabelsteen et al. (1993). Blur ratio measured mismatch amplitude envelopes (expressed probability density functions) reference sound re-recorded sound. Low values indicate low degradation sounds. function blur_ratio() measures blur ratio sounds reference playback re-recorded different distances. function compares sound corresponding reference sound within supplied frequency range (e.g. bandpass) reference sound (‘bottom.freq’ ‘top.freq’ columns ‘X’). ‘sound.id’ column must used tell function compare sounds belonging category (e.g. song-types). sound files (wave objects extended selection table) must sampling rate length envelopes comparable. Blur ratio can calculated follows:   output data frame simply input data additional column (‘blur.ratio’) blur ratio values. Note NAs returned sounds used reference ‘ambient’ noise selections. function plot_blur_ratio() can used generate image files (‘jpeg’ format) comparison showing spectrograms sounds overlaid amplitude envelopes (probability mass functions (PMF)). paths image files: Output image files (working directory) look like ones:   image shows spectrogram reference re-recorded sound, well envelopes sounds overlaid single graph. Colors indicate sound spectrograms envelopes belong . blur ratio value also displayed. function can also return amplitude spectrum contours argument envelopes = TRUE. contours can directly input ggplot visualize amplitude envelopes, vary distance across sound types (ambient noise included): env.smooth argument change envelope shapes related measurements, higher values tend smooth envelopes. following code sets env.smooth = 800 produces smoother envelopes:  ","code":"# run blur ratio br <- blur_ratio(X = test_sounds_est) ## Computing amplitude envelopes (step 1 out of 2): ## Computing blur ratio (step 2 out of 2): # see output br # plot blur ratio blur_imgs <- plot_blur_ratio(X = test_sounds_est, dest.path = tempdir()) ## Computing amplitude envelopes (step 1 out of 2): ## Producing images (step 2 out of 2): head(blur_imgs) ## [1] \"/tmp/RtmpTaEPaJ/blur_ratio_freq:1-1m_open.wav-4-10m_closed.wav-4.jpeg\" ## [2] \"/tmp/RtmpTaEPaJ/blur_ratio_freq:1-1m_open.wav-4-30m_closed.wav-4.jpeg\" ## [3] \"/tmp/RtmpTaEPaJ/blur_ratio_freq:1-1m_open.wav-4-10m_open.wav-4.jpeg\" ## [4] \"/tmp/RtmpTaEPaJ/blur_ratio_freq:1-1m_open.wav-4-30m_open.wav-4.jpeg\" ## [5] \"/tmp/RtmpTaEPaJ/blur_ratio_freq:4-1m_open.wav-3-10m_closed.wav-3.jpeg\" ## [6] \"/tmp/RtmpTaEPaJ/blur_ratio_freq:4-1m_open.wav-3-30m_closed.wav-3.jpeg\" # get envelopes br <- blur_ratio(X = test_sounds_est, envelopes = TRUE) ## Computing amplitude envelopes (step 1 out of 3): ## Computing blur ratio (step 2 out of 3): ## Saving envelopes (step 3 out of 3): envs <- attributes(br)$envelopes # make distance a factor for plotting envs$distance <- as.factor(envs$distance) # plot ggplot(envs, aes(x = time, y = amp, col = distance)) + geom_line() + facet_wrap( ~ sound.id) + scale_color_viridis_d(alpha = 0.7) + labs(x = \"Time (s)\", y = \"Amplitude (PMF)\") + theme_classic() # get envelopes br <- blur_ratio(X = test_sounds_est, envelopes = TRUE, env.smooth = 800) ## Computing amplitude envelopes (step 1 out of 3): ## Computing blur ratio (step 2 out of 3): ## Saving envelopes (step 3 out of 3): envs <- attributes(br)$envelopes envs$distance <- as.factor(envs$distance) ggplot(envs, aes(x = time, y = amp, col = distance)) + geom_line() + facet_wrap( ~ sound.id) + scale_color_viridis_d(alpha = 0.7) + labs(x = \"Time (s)\", y = \"Amplitude (PMF)\") + theme_classic()"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"spectrum-blur-ratio","dir":"Articles","previous_headings":"Measuring degradation","what":"Spectrum blur ratio","title":"Quantify degradation","text":"Spectrum blur ratio (measured spectrum_blur_ratio()) quantifies degradation sound function change sound energy across frequency domain, analogous blur ratio described time domain (implemented blur_ratio()). Low values also indicate low degradation sounds. Spectrum blur ratio measured mismatch power spectra (expressed probability density functions) reference sound re-recorded sound. works way blur_ratio(), comparing sound corresponding reference sound, output images alike well. Spectrum blur ratio can calculated follows:   blur_ratio(), spectrum_blur_ratio() can also return amplitude spectrum contours argument spectra = TRUE:  ","code":"# run Spectrum blur ratio sbr <- spectrum_blur_ratio(test_sounds_est) ## Computing power spectra (step 1 out of 2): ## Computing spectrum blur ratio (step 2 out of 2): # see output sbr sbr <- spectrum_blur_ratio(X = test_sounds_est, spectra = TRUE) ## Computing power spectra (step 1 out of 3): ## Computing spectrum blur ratio (step 2 out of 3): ## Saving spectra (step 3 out of 3): spctr <- attributes(sbr)$spectra spctr$distance <- as.factor(spctr$distance) ggplot(spctr[spctr$freq > 0.3,], aes(y = amp, x = freq, col = distance)) + geom_line() + facet_wrap( ~ sound.id) + scale_color_viridis_d(alpha = 0.7) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (PMF)\") + coord_flip() + theme_classic()"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"excess-attenuation","dir":"Articles","previous_headings":"Measuring degradation","what":"Excess attenuation","title":"Quantify degradation","text":"every doubling distance, sounds attenuate 6 dB loss amplitude (Morton, 1975; Marten & Marler, 1977). additional loss amplitude results excess attenuation, energy loss excess expected occur distance via spherical spreading, due atmospheric conditions habitat (Wiley & Richards, 1978). degradation metric can measured using excess_attenuation() function. Low values indicate little sound attenuation. function compare sound corresponding reference sound within frequency range (e.g. bandpass) reference sound (‘bottom.freq’ ‘top.freq’ columns ‘X’). excess_attenuation() can measured like : output, similar functions, extended selection table input data, also including two new columns (‘reference’ ‘excess.attenuation’) reference sound excess attenuation:  ","code":"# run envelope correlation ea <- excess_attenuation(test_sounds_est) ## Computing amplitude envelopes (step 1 out of 2): ## Computing excess attenuation (step 2 out of 2): # print output ea"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"envelope-correlation","dir":"Articles","previous_headings":"Measuring degradation","what":"Envelope correlation","title":"Quantify degradation","text":"Amplitude envelope correlation measures similarity two sounds time domain. envelope_correlation() function measures envelope correlation coefficients reference playback re-recorded sounds. Values close 1 means similar amplitude envelopes (.e. little degradation occurred). envelopes different lengths (sounds different lengths) cross-correlation applied maximum correlation coefficient returned. Cross-correlation achieved sliding shortest sound along largest one calculating correlation step. functions detailed , ‘sound.id’ column must used instruct function compare sounds belong category. envelope_correlation() can run follows: output also similar functions; extended selection table similar input data, also includes two new columns (‘reference’ ‘envelope.correlation’) reference sound amplitude envelope correlation coefficients:   Note function doesn’t provide graphical output. However, graphs generated blur_ratio() can used inspect envelope shapes alignment sounds.","code":"# run envelope correlation ec <- envelope_correlation(test_sounds_est) ## Computing amplitude envelopes (step 1 out of 2): ## Computing envelope correlations (step 2 out of 2): # print output ec"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"spectrum-correlation","dir":"Articles","previous_headings":"Measuring degradation","what":"Spectrum correlation","title":"Quantify degradation","text":"Spectrum correlation measures similarity two sounds frequency domain. similar envelope_correlation(), frequency domain. sounds compared within frequency range reference sound (spectra length). , values near 1 indicate identical frequency spectrum (.e. degradation). output also similar envelope_correlation():   envelope_correlation(), spectrum_correlation() doesn’t provide graphical output. However, graphs generated spectrum_blur_ratio() can also used inspect spectrum shapes sound alignment.","code":"# run spectrum correlation sc <- spectrum_correlation(test_sounds_est) ## Computing power spectra (step 1 out of 2): ## Computing spectrum correlations (step 2 out of 2): # print output sc"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"signal-to-noise-ratio","dir":"Articles","previous_headings":"Measuring degradation","what":"Signal-to-noise ratio","title":"Quantify degradation","text":"Signal--noise ratio (SNR) quantifies sound amplitude level relation ambient noise metric overall sound attenuation. Therefore, attenuation refers loss energy described Dabelsteen et al (1993). method implemented function signal_to_noise_ratio(), uses envelopes quantify sound power signals background noise. function requires measurement ambient noise, either noise right sound (noise.ref = \"adjacent\") one ambient noise measurements per recording (noise.ref = \"custom\"). latter, selections sound parameters ambient noise measured must specified. Alternatively, one selections ambient noise can used reference (see ‘noise.ref’ argument). can potentially provide accurate representation ambient noise. margins overlap another acoustic signal nearby, SNR inaccurate, margin length carefully considered. SNR less equal one suggests background noise equal overpowering acoustic signal. SNR can measured follows: output also similar functions:   Negative values can occur background noise measured higher power signal. Note function compare sounds references, reference column added.","code":"# run signal to noise ratio snr <- signal_to_noise_ratio(test_sounds_est, pb = FALSE, noise.ref = \"custom\", mar = 0.1) # print output snr"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"tail-to-signal-ratio","dir":"Articles","previous_headings":"Measuring degradation","what":"Tail-to-signal ratio","title":"Quantify degradation","text":"Tail--signal ratio (TSR) used quantify reverberations. Specifically TSR measures ratio energy reverberation tail (time segment right sound) energy sound. general margin reverberation tail measured must specified. function measure TSR within supplied frequency range (e.g. bandpass) reference sound (‘bottom.freq’ ‘top.freq’ columns ‘X’). Two methods calculating reverberations provided (see ‘type’ argument). Type 1 based original description TSR Dabelsteen et al. (1993) type 2 better referred “tail--noise ratio”, given compares amplitude tails ambient noise. types higher values represent reverberations. TSR can measured follows: , output similar functions: Tail--signal ratio values typically negative signals tend higher power reverberating tail.  ","code":"# run tail to signal ratio tsr <- tail_to_signal_ratio(test_sounds_est, tsr.formula = 1, mar = 0.05) # print output tsr"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"spectrogram-correlation","dir":"Articles","previous_headings":"Measuring degradation","what":"Spectrogram correlation","title":"Quantify degradation","text":"Finally, function spcc() measures spectrogram cross-correlation metric sound distortion sounds. Values close 1 means similar spectrograms (.e. little sound distortion). function wrapper warbleR’s cross_correlation(). can run follows: , output similar functions:  ","code":"# run spcc sc <- spcc(X = test_sounds_est, wl = 512) # print output sc"},{"path":[]},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"noise-profiles","dir":"Articles","previous_headings":"Other measurements","what":"Noise profiles","title":"Quantify degradation","text":"function noise_profile() allows estimate frequency spectrum ambient noise. can done extended selection tables (using segments containing sound) entire sound files working directory (path supplied). function uses seewave function meanspec() internally calculate frequency spectra. following code measures ambient noise profile recordings distance >= 5m example extended selection table: output data frame amplitude values frequency bins wave object extended selection table: can graphically represented follows: output data actually average several frequency spectra sound file. can obtain original spectra setting argument averaged = FALSE: Note can limit frequency range using bandpass filter (‘bp’ argument). addition, argument ‘hop.size’, control size time windows, affects precision frequency domain. can get better precision increasing ‘hop.size’ (‘wl’): function can estimate noise profiles entire sound files, supplying list files (argument ‘files’, supplying ‘X’) simply running without supplying ‘X’ ‘files’. case run sound files working directory (‘path’ supplied). Please report bugs . package baRulho cited follows: Araya-Salas, M. (2020), baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.0.","code":"# run noise profile np <- noise_profile(X = test_sounds_est[test_sounds_est$distance > 5,], mar = 0.05) # print output head(np, 20) ggplot(np, aes(y = amp, x = freq, col = sound.files)) + geom_line(linewidth = 1.4) + scale_color_viridis_d(begin = 0.2, end = 0.8, alpha = 0.5) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (dBA)\") + coord_flip() + theme_classic() np <- noise_profile(X = test_sounds_est[test_sounds_est$distance > 5, ], mar = 0.1, averaged = FALSE) # make a column containing sound file and selection np$sf.sl <- paste(np$sound.files, np$selec) ggplot(np, aes( y = amp, x = freq, col = sound.files, group = sf.sl )) + geom_line(linewidth = 1.4) + scale_color_viridis_d(begin = 0.2, end = 0.8, alpha = 0.5) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (dBA)\") + coord_flip() + theme_classic() np <- noise_profile( X = test_sounds_est[test_sounds_est$distance > 5,], mar = 0.05, bp = c(0, 10), averaged = FALSE, hop.size = 3 ) # make a column containing sound file and selection np$sf.sl <- paste(np$sound.files, np$selec) ggplot(np, aes( y = amp, x = freq, col = sound.files, group = sf.sl )) + geom_line(linewidth = 1.4) + scale_color_viridis_d(begin = 0.2, end = 0.8, alpha = 0.5) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (dBA)\") + coord_flip() + theme_classic()"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"references","dir":"Articles","previous_headings":"","what":"References","title":"Quantify degradation","text":"Araya-Salas, M. (2017). Rraven: connecting R Raven bioacoustic software. R package version 1.0.0. Araya-Salas, M. (2020), baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.0 Araya-Salas M, Smith-Vidaurre G. (2017) warbleR: R package streamline analysis animal acoustic signals. Methods Ecol Evol 8:184–191. Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206. Marten, K., & Marler, P. (1977). Sound transmission significance animal vocalization. Behavioral Ecology Sociobiology, 2(3), 271-290. Morton, E. S. (1975). Ecological sources selection avian sounds. American Naturalist, 109(965), 17-34. Tobias, J. ., Aben, J., Brumfield, R. T., Derryberry, E. P., Halfwerk, W., Slabbekoorn, H., & Seddon, N. (2010). Song divergence sensory drive Amazonian birds. Evolution, 64(10), 2820-2839. Session information","code":"## R version 4.3.3 (2024-02-29) ## Platform: x86_64-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.42 bslib_0.6.1 ## [5] vctrs_0.6.5 tools_4.3.3 bitops_1.0-7 parallel_4.3.3 ## [9] tibble_3.2.1 proxy_0.4-27 fansi_1.0.6 highr_0.10 ## [13] pkgconfig_2.0.3 KernSmooth_2.23-22 checkmate_2.3.1 desc_1.4.3 ## [17] lifecycle_1.0.4 farver_2.1.1 compiler_4.3.3 stringr_1.5.1 ## [21] textshaping_0.3.7 brio_1.1.4 munsell_0.5.0 htmltools_0.5.7 ## [25] class_7.3-22 sass_0.4.8 RCurl_1.98-1.14 yaml_2.3.8 ## [29] pkgdown_2.0.7 pillar_1.9.0 jquerylib_0.1.4 MASS_7.3-60.0.1 ## [33] classInt_0.4-10 cachem_1.0.8 Deriv_4.1.3 digest_0.6.34 ## [37] stringi_1.8.3 sf_1.0-15 purrr_1.0.2 labeling_0.4.3 ## [41] fastmap_1.1.1 grid_4.3.3 colorspace_2.1-0 cli_3.6.2 ## [45] magrittr_2.0.3 utf8_1.2.4 e1071_1.7-14 withr_3.0.0 ## [49] scales_1.3.0 backports_1.4.1 rmarkdown_2.25 Sim.DiffProc_4.8 ## [53] signal_1.8-0 igraph_2.0.2 gridExtra_2.3 png_0.1-8 ## [57] ragg_1.2.7 kableExtra_1.4.0 memoise_2.0.1 pbapply_1.7-2 ## [61] evaluate_0.23 dtw_1.23-1 fftw_1.0-8 testthat_3.2.1 ## [65] rlang_1.1.3 Rcpp_1.0.12 glue_1.7.0 DBI_1.2.2 ## [69] xml2_1.3.6 svglite_2.1.3 rstudioapi_0.15.0 jsonlite_1.8.8 ## [73] R6_2.5.1 units_0.8-5 systemfonts_1.0.5 fs_1.6.3"},{"path":"https://marce10.github.io/baRulho/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Marcelo Araya-Salas. Author, maintainer.","code":""},{"path":"https://marce10.github.io/baRulho/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Araya-Salas, M. (2020), baRulho: quantifying habitat-induced degradation (animal) acoustic signals R. R package version 1.0.0","code":"@Misc{, title = {baRulho: quantifying habitat-induced degradation of (animal) acoustic signals in R}, author = {M. Araya-Salas}, year = {2020}, }"},{"path":"https://marce10.github.io/baRulho/index.html","id":"barulho-quantifying-degradation-of-animal-sounds","dir":"","previous_headings":"","what":"Quantifying (Animal) Sound Degradation ","title":"Quantifying (Animal) Sound Degradation ","text":"baRulho intended facilitate implementation (animal) sound transmission experiments, typically aim quantify changes signal structure transmitted given habitat broadcasting re-recording animal sounds increasing distances. experiments aim answer research questions : habitat structure shaped transmission properties animal acoustic signals? acoustic features shaped selection improving transmission? features degraded different habitats? far acoustic signals can detected? common sequence steps experimentally test hypotheses related sound transmission depicted following diagram: Diagram depicting typical workflow experiment working signal transmission degradation. Nodes black font indicate steps can conducted using baRulho functions. Blue nodes denote functions can used steps.   baRulho offers functions critical steps workflow (black, including ‘checks’) required acoustic data manipulation analysis. main features package : use loops apply tasks sounds referenced selection table (sensu warbleR) production image files graphic representations sound time /frequency let users verify acoustic analyses use annotation tables object format input acoustic data annotations output results use parallelization distribute tasks among several cores improve computational efficiency baRulho builds upon functions data formats warbleR seewave packages, experience packages advised. Take look vignettes overview main features packages: Align test sounds Quantify degradation","code":""},{"path":"https://marce10.github.io/baRulho/index.html","id":"installing-barulho","dir":"","previous_headings":"","what":"Installing baRulho","title":"Quantifying (Animal) Sound Degradation ","text":"Install/load package CRAN follows: install latest developmental version github need R package remotes: system requirements due dependency seewave may needed. Take look link instruction install/troubleshoot external dependencies.","code":"# From CRAN would be # install.packages(\"baRulho\") # load package library(baRulho) # From github remotes::install_github(\"maRce10/baRulho\") # load package library(baRulho)"},{"path":"https://marce10.github.io/baRulho/index.html","id":"other-packages","dir":"","previous_headings":"","what":"Other packages","title":"Quantifying (Animal) Sound Degradation ","text":"packages seewave tuneR provide huge variety functions acoustic analysis manipulation. mostly work wave objects already imported R environment. package warbleR provides functions visualize measure sounds already referenced annotation tables, similar baRulho. package Rraven facilitates exchange data R Raven sound analysis software (Cornell Lab Ornithology) can helpful incorporating Raven annotating tool acoustic analysis workflow R. package ohun works automated detection sound events, providing functions diagnose optimize detection routines.","code":""},{"path":"https://marce10.github.io/baRulho/index.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Quantifying (Animal) Sound Degradation ","text":"Please cite baRulho follows: Araya-Salas, M. (2020), baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.0.","code":""},{"path":"https://marce10.github.io/baRulho/index.html","id":"references","dir":"","previous_headings":"","what":"References","title":"Quantifying (Animal) Sound Degradation ","text":"Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206. Marten, K., & Marler, P. (1977). Sound transmission significance animal vocalization. Behavioral Ecology Sociobiology, 2(3), 271-290. Morton, E. S. (1975). Ecological sources selection avian sounds. American Naturalist, 109(965), 17-34.","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":null,"dir":"Reference","previous_headings":"","what":"Add synthetic noise — add_noise","title":"Add synthetic noise — add_noise","text":"add_noise adds synthetic noise annotations extended selection tables","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add synthetic noise — add_noise","text":"","code":"add_noise( X, mar = NULL, target.snr = 2, precision = 0.1, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), max.iterations = 1000, ... )"},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add synthetic noise — add_noise","text":"X Object class 'extended_selection_table' (created function selection_table warbleR package), generated 'element', reference test sounds (typically output align_test_files). Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass 7) \"sound.id\": ID sounds (needed calculate signal noise ratio internally using signal_to_noise_ratio). mar numeric vector length 1. Specifies margins adjacent start point annotation measure ambient noise. target.snr numeric vector length 1. Specifies desired signal--noise ratio. Must lower current signal--noise ratio. Annotations showing signal--noise ratio higher 'target.snr' remain unchanged. Must supplied. precision numeric vector length 1. Specifies precision adjusted signal--noise ratio (dB). cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. max.iterations Numeric vector length 1. Specifies maximum number iterations internal signal--noise adjusting routine run stopping. Note cases default maximum number iterations (1000) reached. ... Additional arguments passed internally signal_to_noise_ratio.","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add synthetic noise — add_noise","text":"Object 'X' wave objects modified match target signal--noise ratio. also includes additional column, 'adjusted.snr', new signal--noise ratio values.","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Add synthetic noise — add_noise","text":"function adds synthetic noise sounds referenced extended selection table (class created function selection_table warbleR package) decrease signal--noise ratio. can useful, instance, evaluating effect background noise signal structure. Note implementation slow.","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Add synthetic noise — add_noise","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Add synthetic noise — add_noise","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add synthetic noise — add_noise","text":"","code":"if (FALSE) { # load example data data(\"test_sounds_est\") # make it a 'by element' extended selection table X <- warbleR::by_element_est(X = test_sounds_est) # add noise to the first five rows X_noise <- add_noise(X = X[1:5, ], mar = 0.2, target.snr = 3) }"},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":null,"dir":"Reference","previous_headings":"","what":"Align test sound files — align_test_files","title":"Align test sound files — align_test_files","text":"align_test_files aligns test (re-recorded) sound files.","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Align test sound files — align_test_files","text":"","code":"align_test_files( X, Y, path = getOption(\"sound.files.path\", \".\"), by.song = TRUE, marker = NULL, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), ... )"},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Align test sound files — align_test_files","text":"X object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package). data used finding position markers find_markers. also contain 'sound.id' column used label re-recorded sounds according counterpart master sound file. Y object class 'data.frame' output find_markers. object contains position markers re-recorded sound files. one marker supplied sound file one highest correlation score ('scores' column 'X') used. path Character string containing directory path test (re-recorded) sound files found. .song Logical argument indicate extended selection table created song (see '.song' selection_table argument). Default TRUE. marker Character string define whether \"start\" \"end\" marker used aligning re-recorded sound files. Default NULL. DEPRECATED. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. ... Additional arguments passed selection_table customizing extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Align test sound files — align_test_files","text":"object class 'X' aligned sounds test (re-recorded) sound files.","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Align test sound files — align_test_files","text":"function aligns sounds found re-recorded sound files (referenced 'Y') according master sound file (referenced 'X'). one marker supplied sound file one highest correlation score ('scores' column 'X') used. function outputs 'extended selection table' default.","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Align test sound files — align_test_files","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Align test sound files — align_test_files","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Align test sound files — align_test_files","text":"","code":"{ # load example data data(\"master_est\") # save example files in working director to recreate a case in which working # with sound files instead of extended selection tables. # This doesn't have to be done with your own data as you will # have them as sound files already. for (i in unique(test_sounds_est$sound.files)[1:2]) { writeWave(object = attr(test_sounds_est, \"wave.objects\")[[i]], file.path(tempdir(), i)) } # save master file writeWave(object = attr(master_est, \"wave.objects\")[[1]], file.path(tempdir(), \"master.wav\")) # get marker position for the first test file markers <- find_markers(X = master_est, test.files = unique(test_sounds_est$sound.files)[1], path = tempdir()) # align all test sounds alg.tests <- align_test_files(X = master_est, Y = markers, path = tempdir()) } #> running cross-correlation (step 1 out of 2): #> running peak detection (step 2 out of 2): #> Aligning test sound files (step 1 out of 2): #> Creating extended selection table (step 2 out of 2): #> checking selections (step 1 of 2): #> saving wave objects into extended selection table (step 2 of 2):"},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate attenuation of sound pressure level — attenuation","title":"Estimate attenuation of sound pressure level — attenuation","text":"attenuation estimates atmospheric attenuation atmospheric absorption.","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate attenuation of sound pressure level — attenuation","text":"","code":"attenuation( frequency, dist0, dist, temp = 20, rh = 60, pa = 101325, hab.att.coef = 0.02 )"},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate attenuation of sound pressure level — attenuation","text":"frequency Numeric vector length 1 frequency (Hertz). dist0 Numeric vector length 1 distance (m) reference SPL. dist Numeric vector length 1 distance (m) sound propagates. temp Numeric vector length 1 frequency (Celsius). Default 20. rh Numeric vector length 1 relative humidity (percentage). Default 60. pa Numeric vector length 1 atmospheric (barometric) pressure Pa (standard: 101325, default). Used atmospheric attenuation. hab.att.coef Attenuation coefficient habitat (dB/kHz/m).","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate attenuation of sound pressure level — attenuation","text":"Returns geometric, atmospheric habitat attenuation (dB) well combined attenuation.","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Estimate attenuation of sound pressure level — attenuation","text":"Calculate geometric, atmospheric habitat attenuation overall expected attenuation (sum three) based temperature, relative humidity, atmospheric pressure sound frequency. Attenuation values given dB. function modified http://www.sengpielaudio.com","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Estimate attenuation of sound pressure level — attenuation","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Estimate attenuation of sound pressure level — attenuation","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Estimate attenuation of sound pressure level — attenuation","text":"","code":"{ # measure attenuation attenuation(frequency = 2000, dist = 50, dist0 = 1) } #> frequency dist geometric.attenuation atmopheric.attenuation #> 1 2000 50 33.9794 0.4547757 #> habitat.attenuation combined.attenuation #> 1 1.96 36.39418"},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":null,"dir":"Reference","previous_headings":"","what":"Fix small misalignments in the time position test sounds — auto_realign","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"auto_realign fixes small misalignments time position test sounds extended selection table using spectrographic cross-correlation","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"","code":"auto_realign( X, Y, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 90), wn = c(\"hanning\", \"hamming\", \"bartlett\", \"blackman\", \"flattop\", \"rectangle\") )"},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"X object class 'extended_selection_table' created function selection_table warbleR package. object must include following additional columns: 'sound.id', 'bottom.freq' 'top.freq'. Y object class 'extended_selection_table' (class created function selection_table warbleR package) master sound file annotations. data used finding position markers find_markers. also contain 'sound.id' column. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 90. High values slow function produce accurate results. wn character vector length 1 specifying window name ftwindow.","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"Object 'X' time parameters (columns 'start' 'end') tailored closely match start end reference sound.","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"Precise alignment crucial downstream measures sound degradation. function uses spectrographic cross-correlation align position time test sounds. master sound file used reference. function calls warbleR's cross_correlation internally align sounds using cross-correlation. output extended selection table contains new start end values alignment. Note function works improve alignments estimated position test sound already close actual position. Note 'X' 'Y' must extended selection tables sensu selection_table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Clark, C.W., Marler, P. & Beeman K. (1987). Quantitative analysis animal vocal phonology: application Swamp Sparrow song. Ethology. 76:101-115.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"","code":"{ # load example data data(\"test_sounds_est\") data(\"master_est\") # create \"unaligned_test_sounds_est\" by # adding error to \"test_sounds_est\" start and end unaligned_test_sounds_est <- test_sounds_est set.seed(123) noise_time <- sample(c(0.009, -0.01, 0.03, -0.03, 0, 0.07, -0.007), nrow(unaligned_test_sounds_est), replace = TRUE) attr(unaligned_test_sounds_est, \"check.res\")$start <- unaligned_test_sounds_est$start <- unaligned_test_sounds_est$start + noise_time attr(unaligned_test_sounds_est, \"check.res\")$end <- unaligned_test_sounds_est$end <- unaligned_test_sounds_est$end + noise_time # re align realigned_est <- auto_realign(X = unaligned_test_sounds_est, Y = master_est) } #> running cross-correlation (step 1 of 2): #> finding peaks and aligning (step 2 out of 2)"},{"path":"https://marce10.github.io/baRulho/reference/baRulho-package.html","id":null,"dir":"Reference","previous_headings":"","what":"baRulho: quantifying acoustic signal degradation — baRulho-package","title":"baRulho: quantifying acoustic signal degradation — baRulho-package","text":"`baRulho` package intended quantify habitat-induced degradation (animal) acoustic signals.","code":""},{"path":"https://marce10.github.io/baRulho/reference/baRulho-package.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"baRulho: quantifying acoustic signal degradation — baRulho-package","text":"main features package : Loops apply tasks sounds referenced extended selection table comparison playback sounds re-recorded different distances functions allow parallelization tasks, distributes tasks among several processors improve computational efficiency. License: GPL (>= 2)","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/baRulho-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"baRulho: quantifying acoustic signal degradation — baRulho-package","text":"Marcelo Araya-Salas Maintainer: Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure blur ratio in the time domain — blur_ratio","title":"Measure blur ratio in the time domain — blur_ratio","text":"blur_ratio measures blur ratio sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure blur ratio in the time domain — blur_ratio","text":"","code":"blur_ratio( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), env.smooth = getOption(\"env.smooth\", 200), envelopes = FALSE, hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), n.samples = 100, path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure blur ratio in the time domain — blur_ratio","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. env.smooth Numeric vector length 1 determining length sliding window (amplitude samples) used sum smooth amplitude envelope calculation (used internally env). Default 200. envelopes Logical control envelopes returned (attributes, 'attributes(X)$envelopes'). Default FALSE. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 70. Used applying bandpass filtering. n.samples Numeric vector length 1 specifying number amplitude samples use representing amplitude envelopes. Default 100. null raw amplitude envelope used (note can result high RAM memory usage large data sets). Amplitude envelope values interpolated using approx. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure blur ratio in the time domain — blur_ratio","text":"Object 'X' additional column, 'blur.ratio', containing computed blur ratio values. envelopes = TRUE output include amplitude envelopes sounds attributes ('attributes(X)$envelopes').","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure blur ratio in the time domain — blur_ratio","text":"Blur ratio measures degradation sound change sound power time domain described Dabelsteen et al (1993). Low values indicate low degradation sounds. function measures blur ratio sounds reference playback re-recorded different distances. Blur ratio measured mismatch amplitude envelopes (expressed probability mass functions) reference sound re-recorded sound. converting envelopes probability mass functions effect energy attenuation removed, focusing analysis modification envelope shape. function compares sound corresponding reference sound within supplied frequency range (e.g. bandpass) reference sound ('bottom.freq' 'top.freq' columns 'X'). 'sound.id' column must used tell function compare sounds belonging category (e.g. song-types). Two methods setting experimental design provided. wave objects extended selection table must sampling rate length envelopes comparable.","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure blur ratio in the time domain — blur_ratio","text":"Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206.Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure blur ratio in the time domain — blur_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure blur ratio in the time domain — blur_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) blur_ratio(X = X) # using method 2 X <- set_reference_sounds(X = test_sounds_est, method = 2) blur_ratio(X = X) # get envelopes br <- blur_ratio(X = X, envelopes = TRUE) envs <- attributes(br)$envelopes # make distance a factor for plotting envs$distance <- as.factor(envs$distance) # plot rlang::check_installed(\"ggplot2\") library(ggplot2) ggplot(envs, aes(x= time, y = amp, col = distance)) + geom_line() + facet_wrap(~ sound.id) + scale_color_viridis_d() + labs(x = \"Time (s)\", y = \"Amplitude (PMF)\") + theme_classic() } #> Computing amplitude envelopes (step 1 out of 2): #> Computing blur ratio (step 2 out of 2): #> Computing amplitude envelopes (step 1 out of 2): #> Computing blur ratio (step 2 out of 2): #> Computing amplitude envelopes (step 1 out of 3): #> Computing blur ratio (step 2 out of 3): #> Saving envelopes (step 3 out of 3):"},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure detection distance of sound — detection_distance","title":"Measure detection distance of sound — detection_distance","text":"detection_distance detection distance sounds.","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure detection distance of sound — detection_distance","text":"","code":"detection_distance( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), path = getOption(\"sound.files.path\", \".\"), spl = NULL, spl.cutoff = NULL, temp = 20, rh = 60, pa = 101325, hab.att.coef = 0.02, max.distance = 1000, resolution = 0.1, subtract.bgn = TRUE, envelope = c(\"abs\", \"hil\"), mar = NULL )"},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure detection distance of sound — detection_distance","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. spl numeric vector length 1 specifying sound pressure level sounds. supplied measured sounds . spl.cutoff numeric vector length 1 specifying sound pressure level cutoff define sound longer detected. Ideally estimated based sound detection threshold species. temp Numeric vector length 1 frequency (Celsius). Default 20. rh Numeric vector length 1 relative humidity (percentage). Default 60. pa Numeric vector length 1 ambient pressure Pa (standard: 101325, default). Used Atmospheric attenuation. hab.att.coef Attenuation coefficient habitat (dB/kHz/m). max.distance Numeric vector length 1 maximum distance (m) detection evaluated. Note function calculates expected sound pressure level values along vector distances find distance expected sound pressure level equates 'spl.cutoff'. Default 1000 m. resolution Numeric vector length 1 distance resolution (m) estimated detection distance. Higher resolutions take longer estimate. Default 0.1 m. subtract.bgn Logical argument control SPL background noise excluded measured signal SPL. Default FALSE. envelope Character string vector method calculate amplitude envelopes (SPL measured, used required 'spl' supplied), env. Must either 'abs' (absolute envelope, default) 'hil' (Hilbert transformation). mar numeric vector length 1. Specifies margins adjacent start end points selection measure background noise. required subtract background noise sound pressure level (needed 'subtract.bgn = TRUE').","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure detection distance of sound — detection_distance","text":"Object 'X' additional column, 'detection.distance', containing computed detection distances (m).","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure detection distance of sound — detection_distance","text":"function computes maximum distance sound detected, calculated distance sound pressure level (SPL) goes specified SPL cutoff ('spl.cutoff')). function uses internally attenuation estimate SPL increasing values reaches defined cutoff. peak frequency (calculated power spectrum reference sound) reference sound sound ID used carrier frequency distance estimation. sound recorded lowest distance used reference. function assumes recordings made recording volume.","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure detection distance of sound — detection_distance","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Clark, C.W., Marler, P. & Beeman K. (1987). Quantitative analysis animal vocal phonology: application Swamp Sparrow song. Ethology. 76:101-115.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure detection distance of sound — detection_distance","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure detection distance of sound — detection_distance","text":"","code":"if (FALSE) { # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) detection_distance(X = X[X$distance %in% c(1, 10), ], spl.cutoff = 5, mar = 0.05) }"},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure amplitude envelope correlation — envelope_correlation","title":"Measure amplitude envelope correlation — envelope_correlation","text":"envelope_correlation measures amplitude envelope correlation sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure amplitude envelope correlation — envelope_correlation","text":"","code":"envelope_correlation( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), cor.method = c(\"pearson\", \"spearman\", \"kendall\"), env.smooth = getOption(\"env.smooth\", 200), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure amplitude envelope correlation — envelope_correlation","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. cor.method Character string indicating correlation coefficient applied (\"pearson\", \"spearman\", \"kendall\", see cor). env.smooth Numeric vector length 1 determine length sliding window used sum smooth amplitude envelope calculation (used internally env). hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 70. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure amplitude envelope correlation — envelope_correlation","text":"Object 'X' additional column, 'envelope.correlation', containing computed envelope correlation coefficients.","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure amplitude envelope correlation — envelope_correlation","text":"Amplitude envelope correlation measures similarity two sounds time domain. function measures envelope correlation coefficients sounds reference playback re-recorded increasing distances. Values close 1 means similar amplitude envelopes (.e. little degradation occurred). envelopes different lengths (means sounds different lengths) cross-correlation used maximum correlation coefficient returned. Cross-correlation achieved sliding shortest sound along largest one computing correlation step. 'sound.id' column must used indicate function compare sounds belonging category (e.g. song-types). function compares sound corresponding reference sound within supplied frequency range (e.g. bandpass) reference sound ('bottom.freq' 'top.freq' columns 'X'). Two methods computing envelope correlation provided (see 'method' argument). Use blur_ratio create envelopes graphs.","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure amplitude envelope correlation — envelope_correlation","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Apol, C.., Sturdy, C.B. & Proppe, D.S. (2017). Seasonal variability habitat structure may shaped acoustic signals repertoires black-capped boreal chickadees. Evol Ecol. 32:57-74.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure amplitude envelope correlation — envelope_correlation","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure amplitude envelope correlation — envelope_correlation","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) envelope_correlation(X = X) # method 2 # add reference to X X <- set_reference_sounds(X = test_sounds_est, method = 2) envelope_correlation(X = X) } #> Computing amplitude envelopes (step 1 out of 2): #> Computing envelope correlations (step 2 out of 2): #> Computing amplitude envelopes (step 1 out of 2): #> Computing envelope correlations (step 2 out of 2): #> Object of class 'extended_selection_table' #> * The output of the following call: #> selection_table(X = alg, path = \"./testing/example_data/tailored_files_tlalpan/\", extended = TRUE, confirm.extended = FALSE, mar = 10, by.song = \"sound.files\") #> #> Contains: #> * A selection table data frame with 25 row(s) and 11 columns: #> | |sound.files | selec| start| end| bottom.freq| top.freq| #> |:--|:--------------|-----:|------:|------:|-----------:|--------:| #> |8 |10m_closed.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> |9 |10m_closed.wav | 2| 1.3000| 1.5000| 7.8750| 8.8050| #> |10 |10m_closed.wav | 3| 1.5500| 1.7500| 3.2080| 4.0690| #> |11 |10m_closed.wav | 4| 1.8000| 2.0001| 0.4220| 1.2230| #> |12 |10m_closed.wav | 5| 2.0501| 2.2501| 6.9050| 7.9170| #> |13 |10m_open.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> ... 5 more column(s) (sound.id, transect, distance, reference, envelope.correlation) #> and 19 more row(s) #> #> * 5 wave object(s) (as attributes): #> 10m_closed.wav, 10m_open.wav, 1m_open.wav, 30m_closed.wav, 30m_open.wav #> #> * A data frame (check.results) with 25 rows generated by check_sels() (as attribute) #> #> Additional information: #> * The selection table was created by song (see 'class_extended_selection_table') #> * 1 sampling rate(s) (in kHz): 22.05 #> * 1 bit depth(s): 16 #> * Created by warbleR 1.1.29"},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure excess attenuation — excess_attenuation","title":"Measure excess attenuation — excess_attenuation","text":"excess_attenuation measures excess attenuation sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure excess attenuation — excess_attenuation","text":"","code":"excess_attenuation( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), hop.size = getOption(\"hop.size\", 1), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 50), bp = \"freq.range\", path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure excess attenuation — excess_attenuation","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. hop.size numeric vector length 1 specifying time window duration (ms). Default 1 ms, equivalent ~45 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Note lower values increase time resolution, important amplitude calculations. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 50. used bandpass filtering. bp Numeric vector length 2 giving lower upper limits frequency bandpass filter (kHz). Alternatively, set 'freq.range' (default), function use 'bottom.freq' 'top.freq' sound bandpass range. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure excess attenuation — excess_attenuation","text":"Object 'X' additional column, 'excess.attenuation', containing computed excess attenuation values (dB).","code":""},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure excess attenuation — excess_attenuation","text":"Excess attenuation amplitude loss sound excess due spherical spreading (observed attenuation - expected attenuation). every doubling distance, sounds attenuate 6 dB loss amplitude (Morton, 1975; Marten & Marler, 1977). additional loss amplitude results energy loss excess expected occur distance via spherical spreading. represents power loss due additional factors like vegetation atmospheric conditions (Wiley & Richards, 1978). 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/Rtmpao0FpH'"},{"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/Rtmpao0FpH'"},{"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/Rtmpao0FpH'"},{"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/Rtmpao0FpH' #> The image files have been saved in the directory path '/tmp/Rtmpao0FpH' #> The image files have been saved in the directory path '/tmp/Rtmpao0FpH' #> The image files have been saved in the directory path '/tmp/Rtmpao0FpH' #> The image files have been saved in the directory path '/tmp/Rtmpao0FpH'"},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":null,"dir":"Reference","previous_headings":"","what":"Set reference for test sounds — set_reference_sounds","title":"Set reference for test sounds — set_reference_sounds","text":"set_reference_sounds set rows used reference test sound.","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set reference for test sounds — set_reference_sounds","text":"","code":"set_reference_sounds( X, method = getOption(\"method\", 1), cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set reference for test sounds — set_reference_sounds","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances (transects 1) 8) \"distance\": distance (numeric) test sound re-recorded. 'transect' column labeling sounds recorded transect required 'method = 2'. 'X' can 1 copy given sound id distance transect-distance combination (column 'transect' supplied). addition, 'selec' column values 'X' duplicated within sound file ('sound.files' column) combination used refer specific rows output 'reference' column. method Integer vector length 1 indicate 'experimental design' measuring degradation. Two methods available: 1: compare sounds ('sound.id') counterpart recorded closest distance source (e.g. compare sound recorded 5m, 10m 15m counterpart recorded 1m). default method. function try use references transect. However, another test sound 'sound.id' shorter distance transects, used reference instead. 2: compare sounds counterpart recorded distance immediately within transect (e.g. sound recorded 10m compared sound recorded 5m, sound recorded 15m compared sound recorded 10m ). 'transect' column 'X' required. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set reference for test sounds — set_reference_sounds","text":"object similar 'X' one additional column, 'reference', ID sounds used reference degradation-quantifying functions downstream analyses. ID created paste(X$sound.files, X$selec, sep = \"-\").","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Set reference for test sounds — set_reference_sounds","text":"function adds 'reference' column defining sounds used functions reference. Two methods available (see 'methods' argument description). Note users want define reference sound can set manually. NAs must used indicate rows ignored. References must indicated combination 'sound.files' 'selec' column. instance, '10m.wav-1' indicates row 'selec' column '1' sound file '10m.wav' used reference. function also checks information 'X' right format wont produce errors downstream analysis (see 'X' argument description details format). function ignore rows 'sound.id' 'ambient', 'start_marker' 'end_marker'","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Set reference for test sounds — set_reference_sounds","text":"Araya-Salas, M., & Smith-Vidaurre, G. (2017). warbleR: R package streamline analysis animal acoustic signals. Methods Ecology Evolution, 8(2), 184-191.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set reference for test sounds — set_reference_sounds","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set reference for test sounds — set_reference_sounds","text":"","code":"{ # load example data data(\"test_sounds_est\") # save wav file examples X <- test_sounds_est[test_sounds_est$sound.files != \"master.wav\", ] # method 1 Y <- set_reference_sounds(X = X) # method 2 Y <- set_reference_sounds(X = X, method = 2) }"},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"signal_to_noise_ratio measures attenuation signal--noise ratio sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"","code":"signal_to_noise_ratio( X, mar = NULL, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), eq.dur = FALSE, noise.ref = c(\"adjacent\", \"custom\"), snr.formula = 1, bp = \"freq.range\", hop.size = getOption(\"hop.size\", 1), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 0), path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds (typically output align_test_files). Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass 7) \"sound.id\": ID sounds used identify counterparts across distances (needed \"custom\" noise reference, see \"noise.ref\" argument). mar numeric vector length 1. Specifies margins adjacent start point annotation measure ambient noise. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. eq.dur Logical. Controls whether ambient noise segment measured duration sound (TRUE. Default FALSE). TRUE 'mar' 'noise.ref' arguments ignored. noise.ref Character vector length 1 determined noise segment must used measuring ambient noise. Two options available: adjacent: measure ambient noise right test sounds (using argument 'mar' define duration ambient noise segments). custom: measure ambient noise segments referenced selection table (labeled 'ambient' 'sound.id' column). segments used apply ambient noise reference sounds sound file. Therefore, least one 'ambient' selection sound file must provided. several 'ambient' selections sound file supplied, root mean square amplitude envelope averaged across selections. snr.formula Integer vector length 1. Selects formula used calculate signal--noise ratio (S = signal , N = background noise): 1: ratio S amplitude envelope root mean square N amplitude envelope root mean square (20 * log10(rms(env(S))/rms(env(N)))) described Darden (2008). 2: ratio difference S amplitude envelope root mean square N amplitude envelope root mean square N amplitude envelope root mean square (20 * log10((rms(env(S)) - rms(env(N)))/rms(env(N))), described Dabelsteen et al (1993). bp Numeric vector length 2 giving lower upper limits frequency bandpass filter (kHz). Alternatively, set 'freq.range' (default), function use 'bottom.freq' 'top.freq' sound bandpass range. hop.size numeric vector length 1 specifying time window duration (ms). Default 1 ms, equivalent ~45 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. Ignored bp = NULL. supplied, 'hop.size' ignored. Note lower values increase time resolution, important amplitude ratios calculations. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 0. used bandpass filtering. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"Object 'X' additional column, 'signal..noise.ratio', signal--noise ratio values (dB).","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"Signal--noise ratio (SNR) measures sound amplitude level relation ambient noise. Noise measured background noise immediately test sound. general margin ambient noise measured must specified. Alternatively, selection ambient noise can used reference (see 'noise.ref' argument). margins overlap another sound nearby, SNR inaccurate, margin length carefully considered. SNR less equal one suggests background noise equal overpowering sound. function measure signal--noise ratio within supplied frequency range (e.g. bandpass) reference signal ('bottom.freq' 'top.freq' columns 'X') default (, bp = 'freq.range'. SNR can ~0 tail signal low amplitude.","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206.Darden, SK, Pedersen SB, Larsen , & Dabelsteen T. (2008). Sound transmission ground level short-grass prairie habitat implications long-range communication swift fox *Vulpes velox*. Journal Acoustical Society America, 124(2), 758-766.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # using measure ambient noise reference selections signal_to_noise_ratio(X = test_sounds_est, mar = 0.05, noise.ref = \"custom\") # using margin for ambient noise of 0.05 and adjacent measure ambient noise reference signal_to_noise_ratio(X = test_sounds_est, mar = 0.05, noise.ref = \"adjacent\") } #> Object of class 'extended_selection_table' #> * The output of the following call: #> selection_table(X = alg, path = \"./testing/example_data/tailored_files_tlalpan/\", extended = TRUE, confirm.extended = FALSE, mar = 10, by.song = \"sound.files\") #> #> Contains: #> * A selection table data frame with 25 row(s) and 10 columns: #> | |sound.files | selec| start| end| bottom.freq| top.freq| #> |:--|:--------------|-----:|------:|------:|-----------:|--------:| #> |8 |10m_closed.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> |9 |10m_closed.wav | 2| 1.3000| 1.5000| 7.8750| 8.8050| #> |10 |10m_closed.wav | 3| 1.5500| 1.7500| 3.2080| 4.0690| #> |11 |10m_closed.wav | 4| 1.8000| 2.0001| 0.4220| 1.2230| #> |12 |10m_closed.wav | 5| 2.0501| 2.2501| 6.9050| 7.9170| #> |13 |10m_open.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> ... 4 more column(s) (sound.id, transect, distance, signal.to.noise.ratio) #> and 19 more row(s) #> #> * 5 wave object(s) (as attributes): #> 10m_closed.wav, 10m_open.wav, 1m_open.wav, 30m_closed.wav, 30m_open.wav #> #> * A data frame (check.results) with 25 rows generated by check_sels() (as attribute) #> #> Additional information: #> * The selection table was created by song (see 'class_extended_selection_table') #> * 1 sampling rate(s) (in kHz): 22.05 #> * 1 bit depth(s): 16 #> * Created by warbleR 1.1.29"},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"spcc measures spectrographic cross-correlation measure sound distortion sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"","code":"spcc( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), cor.method = c(\"pearson\", \"spearman\", \"kendall\"), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 90), wn = \"hanning\", path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. cor.method Character string indicating correlation coefficient applied (\"pearson\", \"spearman\", \"kendall\", see cor). hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying % overlap two consecutive windows, spectro. Default 90. High values ovlp slow function produce accurate results. wn character vector length 1 specifying window name ftwindow. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"Object 'X' additional column, 'cross.correlation', containing computed spectrogram cross-correlation coefficients.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"Spectrographic cross-correlation measures frequency distortion sounds similarity metric. Values close 1 means similar spectrograms (.e. little sound distortion occurred). Cross-correlation measured sounds reference playback re-recorded increasing distances. 'sound.id' column must used indicate function compare sounds belonging category (e.g. song-types). function compares sound corresponding reference sound within supplied frequency range (e.g. bandpass) reference sound ('bottom.freq' 'top.freq' columns 'X'). Two methods computing cross-correlation provided (see 'method' argument). function wrapper warbleR's cross_correlation function.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Clark, C.W., Marler, P. & Beeman K. (1987). Quantitative analysis animal vocal phonology: application Swamp Sparrow song. Ethology. 76:101-115.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) # get spcc spcc(X = X) } #> Object of class 'extended_selection_table' #> * The output of the following call: #> selection_table(X = alg, path = \"./testing/example_data/tailored_files_tlalpan/\", extended = TRUE, confirm.extended = FALSE, mar = 10, by.song = \"sound.files\") #> #> Contains: #> * A selection table data frame with 25 row(s) and 11 columns: #> | |sound.files | selec| start| end| bottom.freq| top.freq| #> |:--|:--------------|-----:|------:|------:|-----------:|--------:| #> |8 |10m_closed.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> |9 |10m_closed.wav | 2| 1.3000| 1.5000| 7.8750| 8.8050| #> |10 |10m_closed.wav | 3| 1.5500| 1.7500| 3.2080| 4.0690| #> |11 |10m_closed.wav | 4| 1.8000| 2.0001| 0.4220| 1.2230| #> |12 |10m_closed.wav | 5| 2.0501| 2.2501| 6.9050| 7.9170| #> |13 |10m_open.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> ... 5 more column(s) (sound.id, transect, distance, reference, cross.correlation) #> and 19 more row(s) #> #> * 5 wave object(s) (as attributes): #> 10m_closed.wav, 10m_open.wav, 1m_open.wav, 30m_closed.wav, 30m_open.wav #> #> * A data frame (check.results) with 25 rows generated by check_sels() (as attribute) #> #> Additional information: #> * The selection table was created by song (see 'class_extended_selection_table') #> * 1 sampling rate(s) (in kHz): 22.05 #> * 1 bit depth(s): 16 #> * Created by warbleR 1.1.29"},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"spectrum_blur_ratio measures blur ratio frequency spectra sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"","code":"spectrum_blur_ratio( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), spec.smooth = getOption(\"spec.smooth\", 5), spectra = FALSE, res = 150, hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), path = getOption(\"sound.files.path\", \".\"), n.bins = 100 )"},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. spec.smooth Numeric vector length 1 determining length sliding window used sum smooth power spectrum calculation (kHz). Default 5. spectra Logical control power spectra returned (attributes). Default FALSE. res Numeric argument length 1. Controls image resolution. Default 150 (faster) although 300 - 400 recommended publication/presentation quality. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Applied spectra spectrograms image files. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 70. Applied spectra spectrograms image files. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. n.bins Numeric vector length 1 specifying number frequency bins use representing power spectra. Default 100. null raw power spectrum used (note can result high RAM memory usage large data sets). Power spectrum values interpolated using approx.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"Object 'X' additional column, 'spectrum.blur.ratio', containing computed spectrum blur ratio values. spectra = TRUE output include power spectra sounds attributes ('attributes(X)$spectra').","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"Spectral blur ratio measures degradation sound function change sound power frequency domain, analogous blur ratio proposed Dabelsteen et al (1993) time domain (implemented blur_ratio). Low values indicate low degradation sounds. function measures blur ratio spectra sounds reference playback re-recorded different distances. Spectral blur ratio measured mismatch power spectra (expressed probability density functions) reference sound re-recorded sound. function compares sound type corresponding reference sound. 'sound.id' column must used tell function compare sounds belonging category (e.g. song-types). Two methods setting experimental design provided. wave objects extended selection table must sampling rate length spectra comparable. function uses spec internally compute power spectra. NA returned least one power spectra computed.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206.Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) # get spetrum blur ratio spectrum_blur_ratio(X = X) # using method 2 X <- set_reference_sounds(X = test_sounds_est, method = 2) spectrum_blur_ratio(X = X) # get power spectra sbr <- spectrum_blur_ratio(X = X, spectra = TRUE) spctr <- attributes(sbr)$spectra # make distance a factor for plotting spctr$distance <- as.factor(spctr$distance) # plot rlang::check_installed(\"ggplot2\") library(ggplot2) ggplot(spctr[spctr$freq > 0.3, ], aes(y = amp, x = freq, col = distance)) + geom_line() + facet_wrap(~sound.id) + scale_color_viridis_d(alpha = 0.7) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (PMF)\") + coord_flip() + theme_classic() }"},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure frequency spectrum correlation — spectrum_correlation","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"spectrum_correlation measures frequency spectrum correlation sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"","code":"spectrum_correlation( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), cor.method = c(\"pearson\", \"spearman\", \"kendall\"), spec.smooth = getOption(\"spec.smooth\", 5), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), path = getOption(\"sound.files.path\", \".\"), n.bins = 100 )"},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. cor.method Character string indicating correlation coefficient applied (\"pearson\", \"spearman\", \"kendall\", see cor). spec.smooth Numeric vector length 1 determining length sliding window used sum smooth power spectrum calculation (kHz). Default 5. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 70. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. n.bins Numeric vector length 1 specifying number frequency bins use representing power spectra. Default 100. null raw power spectrum used (note can result high RAM memory usage large data sets). Power spectrum values interpolated using approx.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"Object 'X' additional column, 'spectrum.correlation', containing computed frequency spectrum correlation coefficients.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"spectral correlation measures similarity two sounds frequency domain. function measures spectral correlation coefficients sounds reference playback re-recorded increasing distances. Values range 1 (identical frequency spectrum, .e. degradation) 0. 'sound.id' column must used indicate function compare sounds belonging category (e.g. song-types). function compare sound corresponding reference sound. Two methods computing spectral correlation provided (see 'method' argument). function uses meanspec internally compute power spectra. Use spectrum_blur_ratio extract raw spectra values. NA returned least one power spectra computed.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Apol, C.., Sturdy, C.B. & Proppe, D.S. (2017). Seasonal variability habitat structure may shaped acoustic signals repertoires black-capped boreal chickadees. Evol Ecol. 32:57-74.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"","code":"{ # load example data data(\"test_sounds_est\") # method 1 # add reference column Y <- set_reference_sounds(X = test_sounds_est) # run spectrum correlation spectrum_correlation(X = Y) # method 2 Y <- set_reference_sounds(X = test_sounds_est, method = 2) # spectrum_correlation(X = Y) }"},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":null,"dir":"Reference","previous_headings":"","what":"Create synthetic sounds — synth_sounds","title":"Create synthetic sounds — synth_sounds","text":"synth_sounds create synthetic sounds","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create synthetic sounds — synth_sounds","text":"","code":"synth_sounds( replicates = 1, frequencies, durations, nharmonics = 1, fm = FALSE, am = FALSE, am.amps = rep(c(1:4, 3:2), length.out = 11), mar = 0.05, seed = NULL, sig2 = 0.3, shuffle = FALSE, hrm.freqs = c(1/2, 1/3, 2/3, 1/4, 3/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10), sampling.rate = 44.1, pb = TRUE )"},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create synthetic sounds — synth_sounds","text":"replicates Numeric vector length 1 indicating number replicates treatment combination. Default 1. Useful measuring variation transmission parameters. frequencies Numeric vector different frequencies (seconds) synthesize. Brownian bridge motion stochastic process (diff.fun == \"BB\") used simulate frequency modulation (see simulate_songs). durations Numeric vector different durations (seconds) synthesize. nharmonics Numeric vector length 1 specifying number harmonics simulate. 1 indicates fundamental frequency harmonic simulated. fm Logical control frequency modulated sounds pure tones (.e. non-modulated sounds) synthesize. FALSE (default) pure tones synthesized. Logical control amplitude modulated sounds non-modulated sounds synthesize. FALSE (default) non-modulated sounds synthesized. .amps Numeric vector relative amplitude time step simulate amplitude modulation (applied fundamental frequency). default value (rep(c(1:4, 3:2), length.= 11)) 2 amplitude peaks (although applied '= TRUE') mar Numeric vector duration margins silence around sounds seconds. Default 0.05. seed Numeric vector length 1. allows users get results different runs (using se.seed internally). Default NULL. sig2 Numeric vector length 1 defining sigma value brownian motion model (used simulating frequency modulation). Default 0.3. shuffle Logical control position sounds randomized. sounds treatment sequence can problematic environmental noise masks . Hence 'shuffle' useful avoid sounds treatment next . Default FALSE. hrm.freqs Numeric vector frequencies harmonics relative fundamental frequency. default values c(1/2, 1/3, 2/3, 1/4, 3/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10). sampling.rate Numeric vector length 1. Sets sampling frequency wave object (kHz). Default 44.1. pb Logical argument control progress bar shown. Default TRUE.","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create synthetic sounds — synth_sounds","text":"extended selection table, can input master_sound_file create .wav file. table contains columns varying features 'treatment' column (useful tell acoustic features sound) 'replicate' column indicating replicates 'treatment'.","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create synthetic sounds — synth_sounds","text":"function creates synthetic sounds can used playback experiments understand link signal structure transmission properties. function can add variation signal structure 5 features: frequency: continuous, argument 'frequencies'. duration: continuous, argument 'durations'. harmonic structure: binary (harmonics vs -harmonics), arguments 'nharmonics' 'hrm.freqs'. frequency modulation: variation fundamental frequency across time. Binary (modulated vs non-modulated), arguments 'fm' 'sig2'. amplitude modulation: variation amplitude across time. Binary (modulated vs non-modulated), arguments '' '.amps'. Sound possible combinations selected structure dimensions synthesized. output extended selection table, can input master_sound_file create .wav file. functions uses simulate_songs internally synthesizing individual sounds. Brownian bridge motion stochastic process (diff.fun == \"BB\") used simulate frequency modulation. output table contains columns varying features 'treatment' column (useful tell sound combination features using replicates).","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Create synthetic sounds — synth_sounds","text":"Araya-Salas, M., & Smith-Vidaurre, G. (2017). warbleR: R package streamline analysis animal acoustic signals. Methods Ecology Evolution, 8(2), 184-191.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Create synthetic sounds — synth_sounds","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create synthetic sounds — synth_sounds","text":"","code":"if (FALSE) { synthetic_est <- synth_sounds( mar = 0.01, frequencies = c(1, 2, 3, 5), durations = 0.1, fm = TRUE, am = TRUE, nharmonics = 4, shuffle = TRUE, replicates = 3 ) }"},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"tail_to_signal_ratio measures reverberations tail--signal ratio sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"","code":"tail_to_signal_ratio( X, mar, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), tsr.formula = 1, bp = \"freq.range\", hop.size = getOption(\"hop.size\", 1), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 0), path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass 6) \"top.freq\": high frequency bandpass. mar numeric vector length 1. Specifies margins adjacent end sound measure tail power. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. tsr.formula Integer vector length 1. Determine formula used calculate tail--signal ratio (S = signal, T = tail, N = background noise): 1: ratio T amplitude envelope quadratic mean S amplitude envelope quadratic mean (rms(env(T))/rms(env(S))) described Dabelsteen et al. (1993). 2: ratio T amplitude envelope quadratic mean N amplitude envelope quadratic mean (rms(env(T))/rms(env(N))). N measure margin right sound. tsr.formula 2 actually measures tail--noise ratio. bp Numeric vector length 2 giving lower upper limits frequency bandpass filter (kHz). Alternatively, set 'freq.range' (default), function use 'bottom.freq' 'top.freq' sound bandpass range. hop.size numeric vector length 1 specifying time window duration (ms). Default 1 ms, equivalent ~45 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. Ignored bp = NULL. supplied, 'hop.size' ignored. Note lower values increase time resolution, important amplitude calculations. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 0. used bandpass filtering. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"Object 'X' additional column, 'tail..signal.ratio', tail--signal ratio values (dB).","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"Tail--signal ratio (TSR) measures ratio power tail reverberations test sound. general margin reverberation tail measured must specified. function measure TSR within supplied frequency range (e.g. bandpass) reference sound ('bottom.freq' 'top.freq' columns 'X'). Two methods computing reverberations provided (see 'tsr.formula' argument). Note 'tsr.formula' 2 equivalent original description TSR Dabelsteen et al. (1993) better referred tail--noise ratio. Tail--signal ratio values typically negative signals tend higher power reverberating tail. TSR can ~0 tail signal low amplitude.","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Darden, SK, Pedersen SB, Larsen , & Dabelsteen T. (2008). Sound transmission ground level short-grass prairie habitat implications long-range communication swift fox *Vulpes velox*. Journal Acoustical Society America, 124(2), 758-766.Mathevon, N., Dabelsteen, T., & Blumenrath, S. H. (2005). high perches blackcap Sylvia atricapilla song listening posts? sound transmission study. Journal Acoustical Society America, 117(1), 442-449.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # set global options options(pb = FALSE) # using margin for noise of 0.01 tsr <- tail_to_signal_ratio(X = test_sounds_est, mar = 0.01) # use tsr.formula 2 which is equivalent to tail-to-noise ratio tsr <- tail_to_signal_ratio(X = test_sounds_est, mar = 0.01, tsr.formula = 2) }"},{"path":"https://marce10.github.io/baRulho/reference/test_sounds_est.html","id":null,"dir":"Reference","previous_headings":"","what":"Extended selection table with re-recorded playbacks — test_sounds_est","title":"Extended selection table with re-recorded playbacks — test_sounds_est","text":"Extended selection table (est) 7 re-recorded synthetic sounds. synthetic sounds 2 s long, frequency modulated, amplitude modulated, broadcast re-recorded 3 distances (1, 10 30m, column 'distance'). data created function selection_table warbleR package. master sound file data used create test sounds found example object master_est.","code":""},{"path":"https://marce10.github.io/baRulho/reference/test_sounds_est.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extended selection table with re-recorded playbacks — test_sounds_est","text":"","code":"data(test_sounds_est)"},{"path":"https://marce10.github.io/baRulho/reference/test_sounds_est.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Extended selection table with re-recorded playbacks — test_sounds_est","text":"Extended selection table object warbleR format, contains annotations acoustic data.","code":""},{"path":"https://marce10.github.io/baRulho/reference/test_sounds_est.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Extended selection table with re-recorded playbacks — test_sounds_est","text":"Marcelo Araya-Salas","code":""},{"path":[]},{"path":[]},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"new-features-2-1-0","dir":"Changelog","previous_headings":"","what":"NEW FEATURES","title":"baRulho 2.1.0","text":"new function add_noise() modifying signal--noise ratio adding synthetic noise new function manual_realign() generates interactive plot manual adjustment time alignments new function plot_blur_ratio() generates plots previously created blur_ratio() spectrum_blur_ratio() new function plot_degradation() visually compare sounds across distances new function plot_aligned_sounds() visually assess precision test sound alignment align_test_files() now can take several markers input select highest correlation score aligning test files New function attenuation() Data frames selection tables can used input data Added new methods blur_ratio() excess_atenuation() spectral_correlation() spectral_blur_ratio() renamed spectrum_correlation(), spectrum_blur_ratio() respectively","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"minor-improvements-2-1-0","dir":"Changelog","previous_headings":"NEW FEATURES","what":"MINOR IMPROVEMENTS","title":"baRulho 2.1.0","text":"optimize performance signal_to_noise_ratio() atmospheric_attenuation() longer available (use attenuation() instead) Improved documentation functions Fix bug spcc() excess_attenuation() ‘markers’ argument deprecated align_test_files() fix bug auto_realign() find_markers() compares time difference markers master sound file measure precision find_markers() can run several markers templates files ‘template.rows’ argument deprecated find_markers() spcc_align() renamed auto_realign() search_templates() renamed find_markers() ‘output’ argument deprecated ‘parallel’ argument deprecated replaced ‘cores’","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-106","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.6","title":"baRulho 1.0.6","text":"CRAN release: 2022-03-01 Update requested CRAN","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-105","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.5","title":"baRulho 1.0.5","text":"CRAN release: 2021-04-21 Update requested CRAN","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-104","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.4","title":"baRulho 1.0.4","text":"CRAN release: 2021-03-09","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"minor-improvements-1-0-4","dir":"Changelog","previous_headings":"","what":"MINOR IMPROVEMENTS","title":"baRulho 1.0.4","text":"warbleR::freq_range_detec() now used internally detect frequency range markers master_sound_file()","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-103","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.3","title":"baRulho 1.0.3","text":"CRAN release: 2021-02-11 Update requested CRAN","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-103-1","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.3","title":"baRulho 1.0.3","text":"CRAN release: 2021-02-11","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"minor-improvements-1-0-3","dir":"Changelog","previous_headings":"","what":"MINOR IMPROVEMENTS","title":"baRulho 1.0.3","text":"New argument ‘marker’ align_test_files() control start end marker used aligning Fix bug detecting several templates per sound file search_templates()","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-102","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.2","title":"baRulho 1.0.2","text":"CRAN release: 2020-06-07","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"minor-improvements-1-0-2","dir":"Changelog","previous_headings":"","what":"MINOR IMPROVEMENTS","title":"baRulho 1.0.2","text":"Windows length converted even functions Fix sign error signal amplitude measurements (signal_to_noise_ratio() excess_attenuation()) New function noise_profile() rename snr() signal_to_noise_ratio() New function tail_to_signal_ratio() measure reverberations Fix bug excess_attenuation() method = 1 Added type argument excess_attenuation() run “Darden” version excess attenuation","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-101","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.1","title":"baRulho 1.0.1","text":"CRAN release: 2020-03-09","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"new-features-1-0-1","dir":"Changelog","previous_headings":"","what":"NEW FEATURES","title":"baRulho 1.0.1","text":"New function search_templates() find signals re-recorded sound files New function align_test_files() set time signals aligned re-recorded files Parallel available internal prep_X_bRlo_int() function Data frame also returned functions","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-100","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.0","title":"baRulho 1.0.0","text":"CRAN release: 2020-02-22 First release","code":""}] +[{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing","title":"Contributing","text":"First , thanks taking time contribute! types contributions encouraged valued. See Table Contents different ways help details project handles . Please make sure read relevant section making contribution. make lot easier us maintainers smooth experience involved. community looks forward contributions. like project, just don’t time contribute, ’s fine. easy ways support project show appreciation, also happy : - Star project - Tweet - Refer project project’s readme - Mention project local meetups tell friends/colleagues","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"table-of-contents","dir":"","previous_headings":"","what":"Table of Contents","title":"Contributing","text":"Code Conduct Question Want Contribute Reporting Bugs Suggesting Enhancements","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing","text":"Please note baRulho released Contributor Code Conduct. contributing project agree abide terms. See rOpenSci contributing guide details.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"i-have-a-question","dir":"","previous_headings":"","what":"I Have a Question","title":"Contributing","text":"want ask question, assume read available Documentation. ask question, best search existing Issues might help . case found suitable issue still need clarification, can write question issue. also advisable search internet answers first. still feel need ask question need clarification, recommend following: Open https://github.com/ropensci/baRulho/issues/. Provide much context can ’re running . Provide project platform versions (nodejs, npm, etc), depending seems relevant. take care issue soon possible.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"i-want-to-contribute","dir":"","previous_headings":"","what":"I Want To Contribute","title":"Contributing","text":"contributing project, must agree authored 100% content, necessary rights content content contribute may provided project license.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"before-submitting-a-bug-report","dir":"","previous_headings":"I Want To Contribute > Reporting Bugs","what":"Before Submitting a Bug Report","title":"Contributing","text":"good bug report shouldn’t leave others needing chase information. Therefore, ask investigate carefully, collect information describe issue detail report. Please complete following steps advance help us fix potential bug fast possible. Make sure using latest version. Determine bug really bug error side e.g. using incompatible environment components/versions (Make sure read documentation. looking support, might want check section). see users experienced (potentially already solved) issue , check already bug report existing bug erro. Also make sure search internet (including Stack Overflow) see users outside GitHub community discussed issue. Collect information bug: Stack trace (Traceback) OS, Platform Version (Windows, Linux, macOS, x86, ARM) Version interpreter, compiler, SDK, runtime environment, package manager, depending seems relevant. Possibly input output Can reliably reproduce issue? can also reproduce older versions?","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"how-do-i-submit-a-good-bug-report","dir":"","previous_headings":"I Want To Contribute > Reporting Bugs","what":"How Do I Submit a Good Bug Report?","title":"Contributing","text":"must never report security related issues, vulnerabilities bugs including sensitive information issue tracker, elsewhere public. Instead sensitive bugs must sent email marcelo.araya@ucr.ac.cr. use GitHub issues track bugs errors. run issue project: Open Issue. (Since can’t sure point whether bug , ask talk bug yet label issue.) Explain behavior expect actual behavior. Please provide much context possible describe reproduction steps someone else can follow recreate issue . usually includes code. good bug reports isolate problem create reduced test case. Provide information collected previous section. ’s filed: project team label issue accordingly. team member try reproduce issue provided steps. reproduction steps obvious way reproduce issue, team ask steps mark issue needs-repro. Bugs needs-repro tag addressed reproduced. team able reproduce issue, marked needs-fix, well possibly tags (critical), issue left implemented someone.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"suggesting-enhancements","dir":"","previous_headings":"I Want To Contribute","what":"Suggesting Enhancements","title":"Contributing","text":"section guides submitting enhancement suggestion, including completely new features minor improvements existing functionality. Following guidelines help maintainers community understand suggestion find related suggestions.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"before-submitting-an-enhancement","dir":"","previous_headings":"I Want To Contribute > Suggesting Enhancements","what":"Before Submitting an Enhancement","title":"Contributing","text":"Make sure using latest version. Read documentation carefully find functionality already covered, maybe individual configuration. Perform search see enhancement already suggested. , add comment existing issue instead opening new one. Find whether idea fits scope aims project. ’s make strong case convince project’s developers merits feature. Keep mind want features useful majority users just small subset. ’re just targeting minority users, consider writing add-/plugin library.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"how-do-i-submit-a-good-enhancement-suggestion","dir":"","previous_headings":"I Want To Contribute > Suggesting Enhancements","what":"How Do I Submit a Good Enhancement Suggestion?","title":"Contributing","text":"Enhancement suggestions tracked GitHub issues. Use clear descriptive title issue identify suggestion. Provide step--step description suggested enhancement many details possible. Describe current behavior explain behavior expected see instead . point can also tell alternatives work . may want include screenshots animated GIFs help demonstrate steps point part suggestion related . can use tool record GIFs macOS Windows, tool tool Linux. Explain enhancement useful users. may also want point projects solved better serve inspiration.","code":""},{"path":"https://marce10.github.io/baRulho/CONTRIBUTING.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributing","text":"guide based contributing.md. Make !","code":""},{"path":"https://marce10.github.io/baRulho/articles/align_test_sounds.html","id":"synthesize-sounds","dir":"Articles","previous_headings":"","what":"Synthesize sounds","title":"Synthesize and align test sounds","text":"often want figure transmission properties vary across range frequencies. instance, Tobias et al (2010) studied whether acoustic adaptation (special case sensory drive; Morton 1975), explain song evolution Amazonian avian communities. test authors created synthetic pure tone sounds used playback re-recorded different habitats. actual procedure creating synthetic sounds described : “Tones synthesized six different frequencies (0.5, 1.0, 2.0, 3.0, 4.0, 5.0 kHz) encompass range maximum avian auditory sensitivity (Dooling 1982). frequency, generated two sequences two 100-msec tones. One sequence relatively short interval 150 msec, close mean internote interval sample (152± 4 msec). sequence longer interval 250 msec, close mean maximum internote interval sample (283± 74 msec). first sequence reflects fast-paced song second slower paced song (sensu Slabbekoorn et al. 2007). master file (44100 Hz/16 bit WAV) thereby consisted series 12 pairs artificial 100-ms constant-frequency tones six different frequencies (0.5, 1.0, 2.0, 3.0, 4.0, 5.0 kHz).” can synthesize pure tones using function synth_sounds(). function requires 1) frequencies tones synthesize (argument frequencies, kHz) 2) duration tones (durations, seconds). addition, logical arguments fm allow create frequency amplitude modulated sounds respectively. case need six tones 100 ms 0.5, 1, 2, 3, 4, 5 kHz separated intervals 150 ms (least first synthetic file described Tobias et al 2010). can also get selection table (sensu warbleR) information time frequency location every sound. required order make master sound file. get selection table need set argument selec.table = TRUE. can done follows:   function can add complexity additional acoustic dimensions. instance following code generates possible combinations frequencies (2, 3 4 kHz), durations (0.1, 0.2 s), frequency modulation (tonal modulated) amplitude modulation (flat modulated envelope): Note output extended selection table contains time-frequency annotations synthetic sounds:   extended selection table, ‘sound.files’ column refers Wave objects included attributes instead files directory:  ","code":"# load packages library(viridis) library(baRulho) library(Rraven) # synthesize synth_est <- baRulho::synth_sounds( mar = 0.1, frequencies = c(0.5, 1:5), durations = 0.1, fm = FALSE, am = FALSE, sampling.rate = 12 ) # convert into a single wave object synth_wav <- Rraven::exp_est(X = synth_est, single.file = TRUE, wave.object = TRUE) # plot spectro seewave::spectro( wave = synth_wav, scale = FALSE, palette = viridis, grid = FALSE, flim = c(0, 5.5), collevels = seq(-20, 0, 1), osc = TRUE, colwave = \"#482878FF\", heights = c(2, 1), wl = 100 ) # synthesize synth_est2 <- baRulho::synth_sounds( mar = 0.01, sig2 = 0.5, frequencies = 2:4, durations = c(0.1, 0.2), fm = TRUE, am = TRUE, shuffle = TRUE, seed = 123, sampling.rate = 12 ) # convert into a single wave object synth_wav2 <- Rraven::exp_est( X = synth_est2, single.file = TRUE, path = tempdir(), wave.object = TRUE ) # plot spectro seewave::spectro( synth_wav2, tlim = c(0, 3), scale = FALSE, palette = viridis, grid = FALSE, flim = c(0.5, 5.5), collevels = seq(-20, 0, 1), osc = TRUE, colwave = \"#482878FF\", heights = c(2, 1), wl = 140 ) # check first 6 rows head(as.data.frame(synth_est2)) # check name of wave objects names(attributes(synth_est2)$wave.objects) ## [1] \"synthetic_sound_1\" \"synthetic_sound_2\" \"synthetic_sound_3\" ## [4] \"synthetic_sound_4\" \"synthetic_sound_5\" \"synthetic_sound_6\" ## [7] \"synthetic_sound_7\" \"synthetic_sound_8\" \"synthetic_sound_9\" ## [10] \"synthetic_sound_10\" \"synthetic_sound_11\" \"synthetic_sound_12\" ## [13] \"synthetic_sound_13\" \"synthetic_sound_14\" \"synthetic_sound_15\" ## [16] \"synthetic_sound_16\" \"synthetic_sound_17\" \"synthetic_sound_18\" ## [19] \"synthetic_sound_19\" \"synthetic_sound_20\" \"synthetic_sound_21\" ## [22] \"synthetic_sound_22\" \"synthetic_sound_23\" \"synthetic_sound_24\""},{"path":"https://marce10.github.io/baRulho/articles/align_test_sounds.html","id":"create-master-sound-file-for-playback","dir":"Articles","previous_headings":"","what":"Create master sound file for playback","title":"Synthesize and align test sounds","text":"function master_sound_file() creates master sound file (probably guessed) playback experiments. function takes wave objects data frame (extended) selection table containing model sounds concatenates single sound file (silence sounds length can modified). master_sound_file() adds acoustic markers start end playback can used time-sync re-recorded sounds, streamlines quantification acoustic degradation. following example shows create master sound file using synthetic sounds generated . synthetic sounds need add little space top bottom frequency sim_songs() make values exactly pure tones:   function saves master sound file wave file returns selection table R environment time frequency ‘coordinates’ sounds file (careful playing master sound file can shocking audiences!). can look spectrogram output file using seewave function spectro() follows: function can also create master sound file sounds found sound files several sounds files, likely case recordings collected field. following example shows create master sound file using several sound files. code uses example data recordings package warbleR:   , can look spectrogram output file: Note output also exported Raven sound analysis software (Cornell Lab Ornithology) visualization manipulation using function exp_raven() Rraven package. exp_raven() exports selections R environment ‘.txt’ file can read Raven:   sound files annotations can visualized Raven ( acoustic analysis software):   Take look Rraven vignette details export import data R Raven. Note start end markers placed relatively low frequencies less affected degradation. frequency range markers can set argument flim. relative amplitude markers can also adjusted amp.marker argument. Amplitude markers multiplied value supplied markers louder sounds. two features increases chances detecting markers distances.","code":"# create master sound file synth_master_annotations <- baRulho::master_sound_file( X = synth_est, file.name = \"synthetic_master\", dest.path = tempdir(), gap.duration = 0.15 ) ## The file synthetic_master.wav has been saved in the directory path '/tmp/RtmpYEHGex' # 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/RtmpYEHGex' # 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/RtmpYEHGex' aligned_imgs ## [1] \"/tmp/RtmpYEHGex/plot_align_10m_closed.jpeg\" ## [2] \"/tmp/RtmpYEHGex/plot_align_10m_open.jpeg\" ## [3] \"/tmp/RtmpYEHGex/plot_align_1m_open.jpeg\" ## [4] \"/tmp/RtmpYEHGex/plot_align_30m_closed.jpeg\" ## [5] \"/tmp/RtmpYEHGex/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.42 bslib_0.6.1 ## [5] ggplot2_3.5.0 vctrs_0.6.5 tools_4.3.3 bitops_1.0-7 ## [9] parallel_4.3.3 tibble_3.2.1 proxy_0.4-27 fansi_1.0.6 ## [13] highr_0.10 pkgconfig_2.0.3 KernSmooth_2.23-22 checkmate_2.3.1 ## [17] desc_1.4.3 lifecycle_1.0.4 compiler_4.3.3 stringr_1.5.1 ## [21] textshaping_0.3.7 brio_1.1.4 munsell_0.5.0 class_7.3-22 ## [25] htmltools_0.5.7 sass_0.4.8 RCurl_1.98-1.14 yaml_2.3.8 ## [29] pillar_1.9.0 pkgdown_2.0.7 jquerylib_0.1.4 MASS_7.3-60.0.1 ## [33] classInt_0.4-10 cachem_1.0.8 Deriv_4.1.3 digest_0.6.34 ## [37] stringi_1.8.3 sf_1.0-15 purrr_1.0.2 fastmap_1.1.1 ## [41] grid_4.3.3 colorspace_2.1-0 cli_3.6.2 magrittr_2.0.3 ## [45] utf8_1.2.4 e1071_1.7-14 scales_1.3.0 backports_1.4.1 ## [49] rmarkdown_2.25 Sim.DiffProc_4.8 signal_1.8-0 igraph_2.0.2 ## [53] gridExtra_2.3 png_0.1-8 ragg_1.2.7 kableExtra_1.4.0 ## [57] memoise_2.0.1 pbapply_1.7-2 evaluate_0.23 dtw_1.23-1 ## [61] fftw_1.0-8 testthat_3.2.1 rlang_1.1.3 Rcpp_1.0.12 ## [65] glue_1.7.0 DBI_1.2.2 xml2_1.3.6 svglite_2.1.3 ## [69] rstudioapi_0.15.0 jsonlite_1.8.8 R6_2.5.1 units_0.8-5 ## [73] systemfonts_1.0.5 fs_1.6.3"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"required-data-structure","dir":"Articles","previous_headings":"","what":"Required data structure","title":"Quantify degradation","text":"input data contain additional information. baRulho comes example annotation data set can used understand required data structure:   Transmission experiments tend follow common experimental design model sounds re-recorded increasing distance within transect. structure data must indicate transect distance within transect sound. Hence, besides basic acoustic annotation information (e.g. sound file, time, frequency) table also includes following columns: sound.files: character factor column name sound files including file extension (e.g. “rec_1.wav”) selec: numeric, character factor column unique identifier (least within sound file) annotation (e.g. 1, 2, 3 “”, “b”, “c”) start: numeric column start position time annotated sound (seconds) end: numeric column end position time annotated sound (seconds) ‘bottom.freq’: numeric column bottom frequency frequency range annotation (kHz, used bandpass filtering) top.freq: numeric column top frequency frequency range annotation (kHz, used bandpass filtering) channel: numeric column number channel annotation found multi-channel sound file (optional, default 1 supplied) sound.id: numeric, character factor column ID sounds used identify sounds different distances transects. transect: numeric, character factor column transect ID. distance: numeric column distance (m) source sound recorded. package assumes distance replicated within transect. Importantly, sound ID can one sample distance/transect combination. combined information columns used identify reference sounds test sound. function set_reference_sounds() exactly . two possible experimental designs defining reference sounds (controlled argument ‘method’ set_reference_sounds()): 1: compare sounds (‘sound.id’) counterpart recorded closest distance source (e.g. compare sound recorded 5m, 10m 15m counterpart recorded 1m). default method. design users can single example shortest distance used reference (instance 1m case studies) function try use references transect. However, another test sound ‘sound.id’ shorter distance transects, used reference instead. behavior aims account fact type experiments reference sounds typically recorded 1 m single transect. 2: compare sounds counterpart recorded distance immediately within transect (e.g. sound recorded 10m compared sound recorded 5m, sound recorded 15m compared sound recorded 10m ). Also note selections labeled “ambient” ‘sound.id’. selections refer ambient (background) noise. Ambient noise can used functions correct amplitude differences due non-target sounds. example data 4 recordings increasing distances: 1m, 5m, 10m 15m: data contains selections 5 sounds well 1 ambient noise selections distance/recording:   baRulho can take sound file annotations represented following R objects: Data frames Selection tables Extended selection tables last 2 annotation specific R classes included warbleR. Take look annotation format vignette warbleR details formats.","code":"# load packages library(baRulho) library(viridis) library(ggplot2) # load example data data(\"test_sounds_est\") test_sounds_est # count selection per recordings unique(test_sounds_est$sound.files) ## [1] \"10m_closed.wav\" \"10m_open.wav\" \"1m_open.wav\" \"30m_closed.wav\" ## [5] \"30m_open.wav\" table(test_sounds_est$sound.id, test_sounds_est$distance)"},{"path":[]},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"data-format","dir":"Articles","previous_headings":"Measuring degradation","what":"Data format","title":"Quantify degradation","text":"functions set_reference_sounds() can used determined, row input data, sounds used references. function can using two methods described :   function adds column ‘reference’ used downstream functions plotting measuring degradation. References indicated combination ‘sound.files’ ‘selec’ column. instance, ‘10m.wav-1’ indicates row ‘selec’ column ‘1’ sound file ‘10m.wav’ used reference. function also checks information ‘X’ (input annotation data) right format wont produce errors downstream analysis (see ‘X’ argument description details format). function ignore rows ‘sound.id’ ‘ambient’, ‘start_marker’ ‘end_marker’.","code":"# add reference column test_sounds_est <- set_reference_sounds(test_sounds_est, method = 1) # print test_sounds_est"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"visual-inspection","dir":"Articles","previous_headings":"Measuring degradation","what":"Visual inspection","title":"Quantify degradation","text":"function plot_degradation() aims simplify visual inspection sound degradation producing multipanel figures (saved JPEG files ‘dest.path’) containing visualizations test sound reference. Sounds sorted distance (columns) transect. Visualizations include spectrograms, amplitude envelopes power spectra (last 2 optional): paths image files:   row includes copies sound id given transect (row label includes sound id first line transect second line), also including reference comes another transect. Ambient noise annotations (sound.id ‘ambient’) excluded.","code":"# sort to order panels test_sounds_est <- test_sounds_est[order(test_sounds_est$sound.id, test_sounds_est$transect, decreasing = FALSE),] # create plots degrad_imgs <- plot_degradation(test_sounds_est, dest.path = tempdir()) degrad_imgs ## [1] \"/tmp/Rtmp2InFYO/plot_degradation_p1.jpeg\" ## [2] \"/tmp/Rtmp2InFYO/plot_degradation_p2.jpeg\""},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"blur-ratio","dir":"Articles","previous_headings":"Measuring degradation","what":"Blur ratio","title":"Quantify degradation","text":"Blur ratio quantifies degradation sound function distortion amplitude envelope (time domain) excluding changes due energy attenuation. measure first described Dabelsteen et al. (1993). Blur ratio measured mismatch amplitude envelopes (expressed probability density functions) reference sound re-recorded sound. Low values indicate low degradation sounds. function blur_ratio() measures blur ratio sounds reference playback re-recorded different distances. function compares sound corresponding reference sound within supplied frequency range (e.g. bandpass) reference sound (‘bottom.freq’ ‘top.freq’ columns ‘X’). ‘sound.id’ column must used tell function compare sounds belonging category (e.g. song-types). sound files (wave objects extended selection table) must sampling rate length envelopes comparable. Blur ratio can calculated follows:   output data frame simply input data additional column (‘blur.ratio’) blur ratio values. Note NAs returned sounds used reference ‘ambient’ noise selections. function plot_blur_ratio() can used generate image files (‘jpeg’ format) comparison showing spectrograms sounds overlaid amplitude envelopes (probability mass functions (PMF)). paths image files: Output image files (working directory) look like ones:   image shows spectrogram reference re-recorded sound, well envelopes sounds overlaid single graph. Colors indicate sound spectrograms envelopes belong . blur ratio value also displayed. function can also return amplitude spectrum contours argument envelopes = TRUE. contours can directly input ggplot visualize amplitude envelopes, vary distance across sound types (ambient noise included): env.smooth argument change envelope shapes related measurements, higher values tend smooth envelopes. following code sets env.smooth = 800 produces smoother envelopes:  ","code":"# run blur ratio br <- blur_ratio(X = test_sounds_est) ## Computing amplitude envelopes (step 1 out of 2): ## Computing blur ratio (step 2 out of 2): # see output br # plot blur ratio blur_imgs <- plot_blur_ratio(X = test_sounds_est, dest.path = tempdir()) ## Computing amplitude envelopes (step 1 out of 2): ## Producing images (step 2 out of 2): head(blur_imgs) ## [1] \"/tmp/Rtmp2InFYO/blur_ratio_freq:1-1m_open.wav-4-10m_closed.wav-4.jpeg\" ## [2] \"/tmp/Rtmp2InFYO/blur_ratio_freq:1-1m_open.wav-4-30m_closed.wav-4.jpeg\" ## [3] \"/tmp/Rtmp2InFYO/blur_ratio_freq:1-1m_open.wav-4-10m_open.wav-4.jpeg\" ## [4] \"/tmp/Rtmp2InFYO/blur_ratio_freq:1-1m_open.wav-4-30m_open.wav-4.jpeg\" ## [5] \"/tmp/Rtmp2InFYO/blur_ratio_freq:4-1m_open.wav-3-10m_closed.wav-3.jpeg\" ## [6] \"/tmp/Rtmp2InFYO/blur_ratio_freq:4-1m_open.wav-3-30m_closed.wav-3.jpeg\" # get envelopes br <- blur_ratio(X = test_sounds_est, envelopes = TRUE) ## Computing amplitude envelopes (step 1 out of 3): ## Computing blur ratio (step 2 out of 3): ## Saving envelopes (step 3 out of 3): envs <- attributes(br)$envelopes # make distance a factor for plotting envs$distance <- as.factor(envs$distance) # plot ggplot(envs, aes(x = time, y = amp, col = distance)) + geom_line() + facet_wrap( ~ sound.id) + scale_color_viridis_d(alpha = 0.7) + labs(x = \"Time (s)\", y = \"Amplitude (PMF)\") + theme_classic() # get envelopes br <- blur_ratio(X = test_sounds_est, envelopes = TRUE, env.smooth = 800) ## Computing amplitude envelopes (step 1 out of 3): ## Computing blur ratio (step 2 out of 3): ## Saving envelopes (step 3 out of 3): envs <- attributes(br)$envelopes envs$distance <- as.factor(envs$distance) ggplot(envs, aes(x = time, y = amp, col = distance)) + geom_line() + facet_wrap( ~ sound.id) + scale_color_viridis_d(alpha = 0.7) + labs(x = \"Time (s)\", y = \"Amplitude (PMF)\") + theme_classic()"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"spectrum-blur-ratio","dir":"Articles","previous_headings":"Measuring degradation","what":"Spectrum blur ratio","title":"Quantify degradation","text":"Spectrum blur ratio (measured spectrum_blur_ratio()) quantifies degradation sound function change sound energy across frequency domain, analogous blur ratio described time domain (implemented blur_ratio()). Low values also indicate low degradation sounds. Spectrum blur ratio measured mismatch power spectra (expressed probability density functions) reference sound re-recorded sound. works way blur_ratio(), comparing sound corresponding reference sound, output images alike well. Spectrum blur ratio can calculated follows:   blur_ratio(), spectrum_blur_ratio() can also return amplitude spectrum contours argument spectra = TRUE:  ","code":"# run Spectrum blur ratio sbr <- spectrum_blur_ratio(test_sounds_est) ## Computing power spectra (step 1 out of 2): ## Computing spectrum blur ratio (step 2 out of 2): # see output sbr sbr <- spectrum_blur_ratio(X = test_sounds_est, spectra = TRUE) ## Computing power spectra (step 1 out of 3): ## Computing spectrum blur ratio (step 2 out of 3): ## Saving spectra (step 3 out of 3): spctr <- attributes(sbr)$spectra spctr$distance <- as.factor(spctr$distance) ggplot(spctr[spctr$freq > 0.3,], aes(y = amp, x = freq, col = distance)) + geom_line() + facet_wrap( ~ sound.id) + scale_color_viridis_d(alpha = 0.7) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (PMF)\") + coord_flip() + theme_classic()"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"excess-attenuation","dir":"Articles","previous_headings":"Measuring degradation","what":"Excess attenuation","title":"Quantify degradation","text":"every doubling distance, sounds attenuate 6 dB loss amplitude (Morton, 1975; Marten & Marler, 1977). additional loss amplitude results excess attenuation, energy loss excess expected occur distance via spherical spreading, due atmospheric conditions habitat (Wiley & Richards, 1978). degradation metric can measured using excess_attenuation() function. Low values indicate little sound attenuation. function compare sound corresponding reference sound within frequency range (e.g. bandpass) reference sound (‘bottom.freq’ ‘top.freq’ columns ‘X’). excess_attenuation() can measured like : output, similar functions, extended selection table input data, also including two new columns (‘reference’ ‘excess.attenuation’) reference sound excess attenuation:  ","code":"# run envelope correlation ea <- excess_attenuation(test_sounds_est) ## Computing amplitude envelopes (step 1 out of 2): ## Computing excess attenuation (step 2 out of 2): # print output ea"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"envelope-correlation","dir":"Articles","previous_headings":"Measuring degradation","what":"Envelope correlation","title":"Quantify degradation","text":"Amplitude envelope correlation measures similarity two sounds time domain. envelope_correlation() function measures envelope correlation coefficients reference playback re-recorded sounds. Values close 1 means similar amplitude envelopes (.e. little degradation occurred). envelopes different lengths (sounds different lengths) cross-correlation applied maximum correlation coefficient returned. Cross-correlation achieved sliding shortest sound along largest one calculating correlation step. functions detailed , ‘sound.id’ column must used instruct function compare sounds belong category. envelope_correlation() can run follows: output also similar functions; extended selection table similar input data, also includes two new columns (‘reference’ ‘envelope.correlation’) reference sound amplitude envelope correlation coefficients:   Note function doesn’t provide graphical output. However, graphs generated blur_ratio() can used inspect envelope shapes alignment sounds.","code":"# run envelope correlation ec <- envelope_correlation(test_sounds_est) ## Computing amplitude envelopes (step 1 out of 2): ## Computing envelope correlations (step 2 out of 2): # print output ec"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"spectrum-correlation","dir":"Articles","previous_headings":"Measuring degradation","what":"Spectrum correlation","title":"Quantify degradation","text":"Spectrum correlation measures similarity two sounds frequency domain. similar envelope_correlation(), frequency domain. sounds compared within frequency range reference sound (spectra length). , values near 1 indicate identical frequency spectrum (.e. degradation). output also similar envelope_correlation():   envelope_correlation(), spectrum_correlation() doesn’t provide graphical output. However, graphs generated spectrum_blur_ratio() can also used inspect spectrum shapes sound alignment.","code":"# run spectrum correlation sc <- spectrum_correlation(test_sounds_est) ## Computing power spectra (step 1 out of 2): ## Computing spectrum correlations (step 2 out of 2): # print output sc"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"signal-to-noise-ratio","dir":"Articles","previous_headings":"Measuring degradation","what":"Signal-to-noise ratio","title":"Quantify degradation","text":"Signal--noise ratio (SNR) quantifies sound amplitude level relation ambient noise metric overall sound attenuation. Therefore, attenuation refers loss energy described Dabelsteen et al (1993). method implemented function signal_to_noise_ratio(), uses envelopes quantify sound power signals background noise. function requires measurement ambient noise, either noise right sound (noise.ref = \"adjacent\") one ambient noise measurements per recording (noise.ref = \"custom\"). latter, selections sound parameters ambient noise measured must specified. Alternatively, one selections ambient noise can used reference (see ‘noise.ref’ argument). can potentially provide accurate representation ambient noise. margins overlap another acoustic signal nearby, SNR inaccurate, margin length carefully considered. SNR less equal one suggests background noise equal overpowering acoustic signal. SNR can measured follows: output also similar functions:   Negative values can occur background noise measured higher power signal. Note function compare sounds references, reference column added.","code":"# run signal to noise ratio snr <- signal_to_noise_ratio(test_sounds_est, pb = FALSE, noise.ref = \"custom\", mar = 0.1) # print output snr"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"tail-to-signal-ratio","dir":"Articles","previous_headings":"Measuring degradation","what":"Tail-to-signal ratio","title":"Quantify degradation","text":"Tail--signal ratio (TSR) used quantify reverberations. Specifically TSR measures ratio energy reverberation tail (time segment right sound) energy sound. general margin reverberation tail measured must specified. function measure TSR within supplied frequency range (e.g. bandpass) reference sound (‘bottom.freq’ ‘top.freq’ columns ‘X’). Two methods calculating reverberations provided (see ‘type’ argument). Type 1 based original description TSR Dabelsteen et al. (1993) type 2 better referred “tail--noise ratio”, given compares amplitude tails ambient noise. types higher values represent reverberations. TSR can measured follows: , output similar functions: Tail--signal ratio values typically negative signals tend higher power reverberating tail.  ","code":"# run tail to signal ratio tsr <- tail_to_signal_ratio(test_sounds_est, tsr.formula = 1, mar = 0.05) # print output tsr"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"spectrogram-correlation","dir":"Articles","previous_headings":"Measuring degradation","what":"Spectrogram correlation","title":"Quantify degradation","text":"Finally, function spcc() measures spectrogram cross-correlation metric sound distortion sounds. Values close 1 means similar spectrograms (.e. little sound distortion). function wrapper warbleR’s cross_correlation(). can run follows: , output similar functions:  ","code":"# run spcc sc <- spcc(X = test_sounds_est, wl = 512) # print output sc"},{"path":[]},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"noise-profiles","dir":"Articles","previous_headings":"Other measurements","what":"Noise profiles","title":"Quantify degradation","text":"function noise_profile() allows estimate frequency spectrum ambient noise. can done extended selection tables (using segments containing sound) entire sound files working directory (path supplied). function uses seewave function meanspec() internally calculate frequency spectra. following code measures ambient noise profile recordings distance >= 5m example extended selection table: output data frame amplitude values frequency bins wave object extended selection table: can graphically represented follows: output data actually average several frequency spectra sound file. can obtain original spectra setting argument averaged = FALSE: Note can limit frequency range using bandpass filter (‘bp’ argument). addition, argument ‘hop.size’, control size time windows, affects precision frequency domain. can get better precision increasing ‘hop.size’ (‘wl’): function can estimate noise profiles entire sound files, supplying list files (argument ‘files’, supplying ‘X’) simply running without supplying ‘X’ ‘files’. case run sound files working directory (‘path’ supplied). Please report bugs . package baRulho cited follows: Araya-Salas, M. (2020), baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.0.","code":"# run noise profile np <- noise_profile(X = test_sounds_est[test_sounds_est$distance > 5,], mar = 0.05) # print output head(np, 20) ggplot(np, aes(y = amp, x = freq, col = sound.files)) + geom_line(linewidth = 1.4) + scale_color_viridis_d(begin = 0.2, end = 0.8, alpha = 0.5) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (dBA)\") + coord_flip() + theme_classic() np <- noise_profile(X = test_sounds_est[test_sounds_est$distance > 5, ], mar = 0.1, averaged = FALSE) # make a column containing sound file and selection np$sf.sl <- paste(np$sound.files, np$selec) ggplot(np, aes( y = amp, x = freq, col = sound.files, group = sf.sl )) + geom_line(linewidth = 1.4) + scale_color_viridis_d(begin = 0.2, end = 0.8, alpha = 0.5) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (dBA)\") + coord_flip() + theme_classic() np <- noise_profile( X = test_sounds_est[test_sounds_est$distance > 5,], mar = 0.05, bp = c(0, 10), averaged = FALSE, hop.size = 3 ) # make a column containing sound file and selection np$sf.sl <- paste(np$sound.files, np$selec) ggplot(np, aes( y = amp, x = freq, col = sound.files, group = sf.sl )) + geom_line(linewidth = 1.4) + scale_color_viridis_d(begin = 0.2, end = 0.8, alpha = 0.5) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (dBA)\") + coord_flip() + theme_classic()"},{"path":"https://marce10.github.io/baRulho/articles/quantify_degradation.html","id":"references","dir":"Articles","previous_headings":"","what":"References","title":"Quantify degradation","text":"Araya-Salas, M. (2017). Rraven: connecting R Raven bioacoustic software. R package version 1.0.0. Araya-Salas, M. (2020), baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.0 Araya-Salas M, Smith-Vidaurre G. (2017) warbleR: R package streamline analysis animal acoustic signals. Methods Ecol Evol 8:184–191. Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206. Marten, K., & Marler, P. (1977). Sound transmission significance animal vocalization. Behavioral Ecology Sociobiology, 2(3), 271-290. Morton, E. S. (1975). Ecological sources selection avian sounds. American Naturalist, 109(965), 17-34. Tobias, J. ., Aben, J., Brumfield, R. T., Derryberry, E. P., Halfwerk, W., Slabbekoorn, H., & Seddon, N. (2010). Song divergence sensory drive Amazonian birds. Evolution, 64(10), 2820-2839. Session information","code":"## R version 4.3.3 (2024-02-29) ## Platform: x86_64-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.42 bslib_0.6.1 ## [5] vctrs_0.6.5 tools_4.3.3 bitops_1.0-7 parallel_4.3.3 ## [9] tibble_3.2.1 proxy_0.4-27 fansi_1.0.6 highr_0.10 ## [13] pkgconfig_2.0.3 KernSmooth_2.23-22 checkmate_2.3.1 desc_1.4.3 ## [17] lifecycle_1.0.4 farver_2.1.1 compiler_4.3.3 stringr_1.5.1 ## [21] textshaping_0.3.7 brio_1.1.4 munsell_0.5.0 htmltools_0.5.7 ## [25] class_7.3-22 sass_0.4.8 RCurl_1.98-1.14 yaml_2.3.8 ## [29] pkgdown_2.0.7 pillar_1.9.0 jquerylib_0.1.4 MASS_7.3-60.0.1 ## [33] classInt_0.4-10 cachem_1.0.8 Deriv_4.1.3 digest_0.6.34 ## [37] stringi_1.8.3 sf_1.0-15 purrr_1.0.2 labeling_0.4.3 ## [41] fastmap_1.1.1 grid_4.3.3 colorspace_2.1-0 cli_3.6.2 ## [45] magrittr_2.0.3 utf8_1.2.4 e1071_1.7-14 withr_3.0.0 ## [49] scales_1.3.0 backports_1.4.1 rmarkdown_2.25 Sim.DiffProc_4.8 ## [53] signal_1.8-0 igraph_2.0.2 gridExtra_2.3 png_0.1-8 ## [57] ragg_1.2.7 kableExtra_1.4.0 memoise_2.0.1 pbapply_1.7-2 ## [61] evaluate_0.23 dtw_1.23-1 fftw_1.0-8 testthat_3.2.1 ## [65] rlang_1.1.3 Rcpp_1.0.12 glue_1.7.0 DBI_1.2.2 ## [69] xml2_1.3.6 svglite_2.1.3 rstudioapi_0.15.0 jsonlite_1.8.8 ## [73] R6_2.5.1 units_0.8-5 systemfonts_1.0.5 fs_1.6.3"},{"path":"https://marce10.github.io/baRulho/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Marcelo Araya-Salas. Author, maintainer.","code":""},{"path":"https://marce10.github.io/baRulho/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Araya-Salas, M. (2020), baRulho: quantifying habitat-induced degradation (animal) acoustic signals R. R package version 1.0.0","code":"@Misc{, title = {baRulho: quantifying habitat-induced degradation of (animal) acoustic signals in R}, author = {M. Araya-Salas}, year = {2020}, }"},{"path":"https://marce10.github.io/baRulho/index.html","id":"barulho-quantifying-degradation-of-animal-sounds","dir":"","previous_headings":"","what":"Quantifying (Animal) Sound Degradation ","title":"Quantifying (Animal) Sound Degradation ","text":"baRulho intended facilitate implementation (animal) sound transmission experiments, typically aim quantify changes signal structure transmitted given habitat broadcasting re-recording animal sounds increasing distances. experiments aim answer research questions : habitat structure shaped transmission properties animal acoustic signals? acoustic features shaped selection improving transmission? features degraded different habitats? far acoustic signals can detected? common sequence steps experimentally test hypotheses related sound transmission depicted following diagram: Diagram depicting typical workflow experiment working signal transmission degradation. Nodes black font indicate steps can conducted using baRulho functions. Blue nodes denote functions can used steps.   baRulho offers functions critical steps workflow (black, including ‘checks’) required acoustic data manipulation analysis. main features package : use loops apply tasks sounds referenced selection table (sensu warbleR) production image files graphic representations sound time /frequency let users verify acoustic analyses use annotation tables object format input acoustic data annotations output results use parallelization distribute tasks among several cores improve computational efficiency baRulho builds upon functions data formats warbleR seewave packages, experience packages advised. Take look vignettes overview main features packages: Align test sounds Quantify degradation","code":""},{"path":"https://marce10.github.io/baRulho/index.html","id":"installing-barulho","dir":"","previous_headings":"","what":"Installing baRulho","title":"Quantifying (Animal) Sound Degradation ","text":"Install/load package CRAN follows: install latest developmental version github need R package remotes: system requirements due dependency seewave may needed. Take look link instruction install/troubleshoot external dependencies.","code":"# From CRAN would be # install.packages(\"baRulho\") # load package library(baRulho) # From github remotes::install_github(\"maRce10/baRulho\") # load package library(baRulho)"},{"path":"https://marce10.github.io/baRulho/index.html","id":"other-packages","dir":"","previous_headings":"","what":"Other packages","title":"Quantifying (Animal) Sound Degradation ","text":"packages seewave tuneR provide huge variety functions acoustic analysis manipulation. mostly work wave objects already imported R environment. package warbleR provides functions visualize measure sounds already referenced annotation tables, similar baRulho. package Rraven facilitates exchange data R Raven sound analysis software (Cornell Lab Ornithology) can helpful incorporating Raven annotating tool acoustic analysis workflow R. package ohun works automated detection sound events, providing functions diagnose optimize detection routines.","code":""},{"path":"https://marce10.github.io/baRulho/index.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Quantifying (Animal) Sound Degradation ","text":"Please cite baRulho follows: Araya-Salas, M. (2020), baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.0.","code":""},{"path":"https://marce10.github.io/baRulho/index.html","id":"references","dir":"","previous_headings":"","what":"References","title":"Quantifying (Animal) Sound Degradation ","text":"Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206. Marten, K., & Marler, P. (1977). Sound transmission significance animal vocalization. Behavioral Ecology Sociobiology, 2(3), 271-290. Morton, E. S. (1975). Ecological sources selection avian sounds. American Naturalist, 109(965), 17-34.","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":null,"dir":"Reference","previous_headings":"","what":"Add synthetic noise — add_noise","title":"Add synthetic noise — add_noise","text":"add_noise adds synthetic noise annotations extended selection tables","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add synthetic noise — add_noise","text":"","code":"add_noise( X, mar = NULL, target.snr = 2, precision = 0.1, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), max.iterations = 1000, ... )"},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add synthetic noise — add_noise","text":"X Object class 'extended_selection_table' (created function selection_table warbleR package), generated 'element', reference test sounds (typically output align_test_files). Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass 7) \"sound.id\": ID sounds (needed calculate signal noise ratio internally using signal_to_noise_ratio). mar numeric vector length 1. Specifies margins adjacent start point annotation measure ambient noise. target.snr numeric vector length 1. Specifies desired signal--noise ratio. Must lower current signal--noise ratio. Annotations showing signal--noise ratio higher 'target.snr' remain unchanged. Must supplied. precision numeric vector length 1. Specifies precision adjusted signal--noise ratio (dB). cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. max.iterations Numeric vector length 1. Specifies maximum number iterations internal signal--noise adjusting routine run stopping. Note cases default maximum number iterations (1000) reached. ... Additional arguments passed internally signal_to_noise_ratio.","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add synthetic noise — add_noise","text":"Object 'X' wave objects modified match target signal--noise ratio. also includes additional column, 'adjusted.snr', new signal--noise ratio values.","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Add synthetic noise — add_noise","text":"function adds synthetic noise sounds referenced extended selection table (class created function selection_table warbleR package) decrease signal--noise ratio. can useful, instance, evaluating effect background noise signal structure. Note implementation slow.","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Add synthetic noise — add_noise","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Add synthetic noise — add_noise","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/add_noise.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add synthetic noise — add_noise","text":"","code":"if (FALSE) { # load example data data(\"test_sounds_est\") # make it a 'by element' extended selection table X <- warbleR::by_element_est(X = test_sounds_est) # add noise to the first five rows X_noise <- add_noise(X = X[1:5, ], mar = 0.2, target.snr = 3) }"},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":null,"dir":"Reference","previous_headings":"","what":"Align test sound files — align_test_files","title":"Align test sound files — align_test_files","text":"align_test_files aligns test (re-recorded) sound files.","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Align test sound files — align_test_files","text":"","code":"align_test_files( X, Y, path = getOption(\"sound.files.path\", \".\"), by.song = TRUE, marker = NULL, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), ... )"},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Align test sound files — align_test_files","text":"X object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package). data used finding position markers find_markers. also contain 'sound.id' column used label re-recorded sounds according counterpart master sound file. Y object class 'data.frame' output find_markers. object contains position markers re-recorded sound files. one marker supplied sound file one highest correlation score ('scores' column 'X') used. path Character string containing directory path test (re-recorded) sound files found. .song Logical argument indicate extended selection table created song (see '.song' selection_table argument). Default TRUE. marker Character string define whether \"start\" \"end\" marker used aligning re-recorded sound files. Default NULL. DEPRECATED. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. ... Additional arguments passed selection_table customizing extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Align test sound files — align_test_files","text":"object class 'X' aligned sounds test (re-recorded) sound files.","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Align test sound files — align_test_files","text":"function aligns sounds found re-recorded sound files (referenced 'Y') according master sound file (referenced 'X'). one marker supplied sound file one highest correlation score ('scores' column 'X') used. function outputs 'extended selection table' default.","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Align test sound files — align_test_files","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Align test sound files — align_test_files","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/align_test_files.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Align test sound files — align_test_files","text":"","code":"{ # load example data data(\"master_est\") # save example files in working director to recreate a case in which working # with sound files instead of extended selection tables. # This doesn't have to be done with your own data as you will # have them as sound files already. for (i in unique(test_sounds_est$sound.files)[1:2]) { writeWave(object = attr(test_sounds_est, \"wave.objects\")[[i]], file.path(tempdir(), i)) } # save master file writeWave(object = attr(master_est, \"wave.objects\")[[1]], file.path(tempdir(), \"master.wav\")) # get marker position for the first test file markers <- find_markers(X = master_est, test.files = unique(test_sounds_est$sound.files)[1], path = tempdir()) # align all test sounds alg.tests <- align_test_files(X = master_est, Y = markers, path = tempdir()) } #> running cross-correlation (step 1 out of 2): #> running peak detection (step 2 out of 2): #> Aligning test sound files (step 1 out of 2): #> Creating extended selection table (step 2 out of 2): #> checking selections (step 1 of 2): #> saving wave objects into extended selection table (step 2 of 2):"},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate attenuation of sound pressure level — attenuation","title":"Estimate attenuation of sound pressure level — attenuation","text":"attenuation estimates atmospheric attenuation atmospheric absorption.","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate attenuation of sound pressure level — attenuation","text":"","code":"attenuation( frequency, dist0, dist, temp = 20, rh = 60, pa = 101325, hab.att.coef = 0.02 )"},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate attenuation of sound pressure level — attenuation","text":"frequency Numeric vector length 1 frequency (Hertz). dist0 Numeric vector length 1 distance (m) reference SPL. dist Numeric vector length 1 distance (m) sound propagates. temp Numeric vector length 1 frequency (Celsius). Default 20. rh Numeric vector length 1 relative humidity (percentage). Default 60. pa Numeric vector length 1 atmospheric (barometric) pressure Pa (standard: 101325, default). Used atmospheric attenuation. hab.att.coef Attenuation coefficient habitat (dB/kHz/m).","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate attenuation of sound pressure level — attenuation","text":"Returns geometric, atmospheric habitat attenuation (dB) well combined attenuation.","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Estimate attenuation of sound pressure level — attenuation","text":"Calculate geometric, atmospheric habitat attenuation overall expected attenuation (sum three) based temperature, relative humidity, atmospheric pressure sound frequency. Attenuation values given dB. function modified http://www.sengpielaudio.com","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Estimate attenuation of sound pressure level — attenuation","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Estimate attenuation of sound pressure level — attenuation","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/attenuation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Estimate attenuation of sound pressure level — attenuation","text":"","code":"{ # measure attenuation attenuation(frequency = 2000, dist = 50, dist0 = 1) } #> frequency dist geometric.attenuation atmopheric.attenuation #> 1 2000 50 33.9794 0.4547757 #> habitat.attenuation combined.attenuation #> 1 1.96 36.39418"},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":null,"dir":"Reference","previous_headings":"","what":"Fix small misalignments in the time position test sounds — auto_realign","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"auto_realign fixes small misalignments time position test sounds extended selection table using spectrographic cross-correlation","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"","code":"auto_realign( X, Y, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 90), wn = c(\"hanning\", \"hamming\", \"bartlett\", \"blackman\", \"flattop\", \"rectangle\") )"},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"X object class 'extended_selection_table' created function selection_table warbleR package. object must include following additional columns: 'sound.id', 'bottom.freq' 'top.freq'. Y object class 'extended_selection_table' (class created function selection_table warbleR package) master sound file annotations. data used finding position markers find_markers. also contain 'sound.id' column. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 90. High values slow function produce accurate results. wn character vector length 1 specifying window name ftwindow.","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"Object 'X' time parameters (columns 'start' 'end') tailored closely match start end reference sound.","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"Precise alignment crucial downstream measures sound degradation. function uses spectrographic cross-correlation align position time test sounds. master sound file used reference. function calls warbleR's cross_correlation internally align sounds using cross-correlation. output extended selection table contains new start end values alignment. Note function works improve alignments estimated position test sound already close actual position. Note 'X' 'Y' must extended selection tables sensu selection_table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Clark, C.W., Marler, P. & Beeman K. (1987). Quantitative analysis animal vocal phonology: application Swamp Sparrow song. Ethology. 76:101-115.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/auto_realign.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fix small misalignments in the time position test sounds — auto_realign","text":"","code":"{ # load example data data(\"test_sounds_est\") data(\"master_est\") # create \"unaligned_test_sounds_est\" by # adding error to \"test_sounds_est\" start and end unaligned_test_sounds_est <- test_sounds_est set.seed(123) noise_time <- sample(c(0.009, -0.01, 0.03, -0.03, 0, 0.07, -0.007), nrow(unaligned_test_sounds_est), replace = TRUE) attr(unaligned_test_sounds_est, \"check.res\")$start <- unaligned_test_sounds_est$start <- unaligned_test_sounds_est$start + noise_time attr(unaligned_test_sounds_est, \"check.res\")$end <- unaligned_test_sounds_est$end <- unaligned_test_sounds_est$end + noise_time # re align realigned_est <- auto_realign(X = unaligned_test_sounds_est, Y = master_est) } #> running cross-correlation (step 1 of 2): #> finding peaks and aligning (step 2 out of 2)"},{"path":"https://marce10.github.io/baRulho/reference/baRulho-package.html","id":null,"dir":"Reference","previous_headings":"","what":"baRulho: quantifying acoustic signal degradation — baRulho-package","title":"baRulho: quantifying acoustic signal degradation — baRulho-package","text":"`baRulho` package intended quantify habitat-induced degradation (animal) acoustic signals.","code":""},{"path":"https://marce10.github.io/baRulho/reference/baRulho-package.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"baRulho: quantifying acoustic signal degradation — baRulho-package","text":"main features package : Loops apply tasks sounds referenced extended selection table comparison playback sounds re-recorded different distances functions allow parallelization tasks, distributes tasks among several processors improve computational efficiency. License: GPL (>= 2)","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/baRulho-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"baRulho: quantifying acoustic signal degradation — baRulho-package","text":"Marcelo Araya-Salas Maintainer: Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure blur ratio in the time domain — blur_ratio","title":"Measure blur ratio in the time domain — blur_ratio","text":"blur_ratio measures blur ratio sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure blur ratio in the time domain — blur_ratio","text":"","code":"blur_ratio( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), env.smooth = getOption(\"env.smooth\", 200), envelopes = FALSE, hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), n.samples = 100, path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure blur ratio in the time domain — blur_ratio","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. env.smooth Numeric vector length 1 determining length sliding window (amplitude samples) used sum smooth amplitude envelope calculation (used internally env). Default 200. envelopes Logical control envelopes returned (attributes, 'attributes(X)$envelopes'). Default FALSE. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 70. Used applying bandpass filtering. n.samples Numeric vector length 1 specifying number amplitude samples use representing amplitude envelopes. Default 100. null raw amplitude envelope used (note can result high RAM memory usage large data sets). Amplitude envelope values interpolated using approx. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure blur ratio in the time domain — blur_ratio","text":"Object 'X' additional column, 'blur.ratio', containing computed blur ratio values. envelopes = TRUE output include amplitude envelopes sounds attributes ('attributes(X)$envelopes').","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure blur ratio in the time domain — blur_ratio","text":"Blur ratio measures degradation sound change sound power time domain described Dabelsteen et al (1993). Low values indicate low degradation sounds. function measures blur ratio sounds reference playback re-recorded different distances. Blur ratio measured mismatch amplitude envelopes (expressed probability mass functions) reference sound re-recorded sound. converting envelopes probability mass functions effect energy attenuation removed, focusing analysis modification envelope shape. function compares sound corresponding reference sound within supplied frequency range (e.g. bandpass) reference sound ('bottom.freq' 'top.freq' columns 'X'). 'sound.id' column must used tell function compare sounds belonging category (e.g. song-types). Two methods setting experimental design provided. wave objects extended selection table must sampling rate length envelopes comparable.","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure blur ratio in the time domain — blur_ratio","text":"Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206.Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure blur ratio in the time domain — blur_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/blur_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure blur ratio in the time domain — blur_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) blur_ratio(X = X) # using method 2 X <- set_reference_sounds(X = test_sounds_est, method = 2) blur_ratio(X = X) # get envelopes br <- blur_ratio(X = X, envelopes = TRUE) envs <- attributes(br)$envelopes # make distance a factor for plotting envs$distance <- as.factor(envs$distance) # plot rlang::check_installed(\"ggplot2\") library(ggplot2) ggplot(envs, aes(x= time, y = amp, col = distance)) + geom_line() + facet_wrap(~ sound.id) + scale_color_viridis_d() + labs(x = \"Time (s)\", y = \"Amplitude (PMF)\") + theme_classic() } #> Computing amplitude envelopes (step 1 out of 2): #> Computing blur ratio (step 2 out of 2): #> Computing amplitude envelopes (step 1 out of 2): #> Computing blur ratio (step 2 out of 2): #> Computing amplitude envelopes (step 1 out of 3): #> Computing blur ratio (step 2 out of 3): #> Saving envelopes (step 3 out of 3):"},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure detection distance of sound — detection_distance","title":"Measure detection distance of sound — detection_distance","text":"detection_distance detection distance sounds.","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure detection distance of sound — detection_distance","text":"","code":"detection_distance( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), path = getOption(\"sound.files.path\", \".\"), spl = NULL, spl.cutoff = NULL, temp = 20, rh = 60, pa = 101325, hab.att.coef = 0.02, max.distance = 1000, resolution = 0.1, subtract.bgn = TRUE, envelope = c(\"abs\", \"hil\"), mar = NULL )"},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure detection distance of sound — detection_distance","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. spl numeric vector length 1 specifying sound pressure level sounds. supplied measured sounds . spl.cutoff numeric vector length 1 specifying sound pressure level cutoff define sound longer detected. Ideally estimated based sound detection threshold species. temp Numeric vector length 1 frequency (Celsius). Default 20. rh Numeric vector length 1 relative humidity (percentage). Default 60. pa Numeric vector length 1 ambient pressure Pa (standard: 101325, default). Used Atmospheric attenuation. hab.att.coef Attenuation coefficient habitat (dB/kHz/m). max.distance Numeric vector length 1 maximum distance (m) detection evaluated. Note function calculates expected sound pressure level values along vector distances find distance expected sound pressure level equates 'spl.cutoff'. Default 1000 m. resolution Numeric vector length 1 distance resolution (m) estimated detection distance. Higher resolutions take longer estimate. Default 0.1 m. subtract.bgn Logical argument control SPL background noise excluded measured signal SPL. Default FALSE. envelope Character string vector method calculate amplitude envelopes (SPL measured, used required 'spl' supplied), env. Must either 'abs' (absolute envelope, default) 'hil' (Hilbert transformation). mar numeric vector length 1. Specifies margins adjacent start end points selection measure background noise. required subtract background noise sound pressure level (needed 'subtract.bgn = TRUE').","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure detection distance of sound — detection_distance","text":"Object 'X' additional column, 'detection.distance', containing computed detection distances (m).","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure detection distance of sound — detection_distance","text":"function computes maximum distance sound detected, calculated distance sound pressure level (SPL) goes specified SPL cutoff ('spl.cutoff')). function uses internally attenuation estimate SPL increasing values reaches defined cutoff. peak frequency (calculated power spectrum reference sound) reference sound sound ID used carrier frequency distance estimation. sound recorded lowest distance used reference. function assumes recordings made recording volume.","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure detection distance of sound — detection_distance","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Clark, C.W., Marler, P. & Beeman K. (1987). Quantitative analysis animal vocal phonology: application Swamp Sparrow song. Ethology. 76:101-115.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure detection distance of sound — detection_distance","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/detection_distance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure detection distance of sound — detection_distance","text":"","code":"if (FALSE) { # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) detection_distance(X = X[X$distance %in% c(1, 10), ], spl.cutoff = 5, mar = 0.05) }"},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure amplitude envelope correlation — envelope_correlation","title":"Measure amplitude envelope correlation — envelope_correlation","text":"envelope_correlation measures amplitude envelope correlation sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure amplitude envelope correlation — envelope_correlation","text":"","code":"envelope_correlation( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), cor.method = c(\"pearson\", \"spearman\", \"kendall\"), env.smooth = getOption(\"env.smooth\", 200), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure amplitude envelope correlation — envelope_correlation","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. cor.method Character string indicating correlation coefficient applied (\"pearson\", \"spearman\", \"kendall\", see cor). env.smooth Numeric vector length 1 determine length sliding window used sum smooth amplitude envelope calculation (used internally env). hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 70. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure amplitude envelope correlation — envelope_correlation","text":"Object 'X' additional column, 'envelope.correlation', containing computed envelope correlation coefficients.","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure amplitude envelope correlation — envelope_correlation","text":"Amplitude envelope correlation measures similarity two sounds time domain. function measures envelope correlation coefficients sounds reference playback re-recorded increasing distances. Values close 1 means similar amplitude envelopes (.e. little degradation occurred). envelopes different lengths (means sounds different lengths) cross-correlation used maximum correlation coefficient returned. Cross-correlation achieved sliding shortest sound along largest one computing correlation step. 'sound.id' column must used indicate function compare sounds belonging category (e.g. song-types). function compares sound corresponding reference sound within supplied frequency range (e.g. bandpass) reference sound ('bottom.freq' 'top.freq' columns 'X'). Two methods computing envelope correlation provided (see 'method' argument). Use blur_ratio create envelopes graphs.","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure amplitude envelope correlation — envelope_correlation","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Apol, C.., Sturdy, C.B. & Proppe, D.S. (2017). Seasonal variability habitat structure may shaped acoustic signals repertoires black-capped boreal chickadees. Evol Ecol. 32:57-74.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure amplitude envelope correlation — envelope_correlation","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/envelope_correlation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure amplitude envelope correlation — envelope_correlation","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) envelope_correlation(X = X) # method 2 # add reference to X X <- set_reference_sounds(X = test_sounds_est, method = 2) envelope_correlation(X = X) } #> Computing amplitude envelopes (step 1 out of 2): #> Computing envelope correlations (step 2 out of 2): #> Computing amplitude envelopes (step 1 out of 2): #> Computing envelope correlations (step 2 out of 2): #> Object of class 'extended_selection_table' #> * The output of the following call: #> selection_table(X = alg, path = \"./testing/example_data/tailored_files_tlalpan/\", extended = TRUE, confirm.extended = FALSE, mar = 10, by.song = \"sound.files\") #> #> Contains: #> * A selection table data frame with 25 row(s) and 11 columns: #> | |sound.files | selec| start| end| bottom.freq| top.freq| #> |:--|:--------------|-----:|------:|------:|-----------:|--------:| #> |8 |10m_closed.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> |9 |10m_closed.wav | 2| 1.3000| 1.5000| 7.8750| 8.8050| #> |10 |10m_closed.wav | 3| 1.5500| 1.7500| 3.2080| 4.0690| #> |11 |10m_closed.wav | 4| 1.8000| 2.0001| 0.4220| 1.2230| #> |12 |10m_closed.wav | 5| 2.0501| 2.2501| 6.9050| 7.9170| #> |13 |10m_open.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> ... 5 more column(s) (sound.id, transect, distance, reference, envelope.correlation) #> and 19 more row(s) #> #> * 5 wave object(s) (as attributes): #> 10m_closed.wav, 10m_open.wav, 1m_open.wav, 30m_closed.wav, 30m_open.wav #> #> * A data frame (check.results) with 25 rows generated by check_sels() (as attribute) #> #> Additional information: #> * The selection table was created by song (see 'class_extended_selection_table') #> * 1 sampling rate(s) (in kHz): 22.05 #> * 1 bit depth(s): 16 #> * Created by warbleR 1.1.29"},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure excess attenuation — excess_attenuation","title":"Measure excess attenuation — excess_attenuation","text":"excess_attenuation measures excess attenuation sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure excess attenuation — excess_attenuation","text":"","code":"excess_attenuation( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), hop.size = getOption(\"hop.size\", 1), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 50), bp = \"freq.range\", path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure excess attenuation — excess_attenuation","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. hop.size numeric vector length 1 specifying time window duration (ms). Default 1 ms, equivalent ~45 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Note lower values increase time resolution, important amplitude calculations. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 50. used bandpass filtering. bp Numeric vector length 2 giving lower upper limits frequency bandpass filter (kHz). Alternatively, set 'freq.range' (default), function use 'bottom.freq' 'top.freq' sound bandpass range. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure excess attenuation — excess_attenuation","text":"Object 'X' additional column, 'excess.attenuation', containing computed excess attenuation values (dB).","code":""},{"path":"https://marce10.github.io/baRulho/reference/excess_attenuation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure excess attenuation — excess_attenuation","text":"Excess attenuation amplitude loss sound excess due spherical spreading (observed attenuation - expected attenuation). every doubling distance, sounds attenuate 6 dB loss amplitude (Morton, 1975; Marten & Marler, 1977). additional loss amplitude results energy loss excess expected occur distance via spherical spreading. represents power loss due additional factors like vegetation atmospheric conditions (Wiley & Richards, 1978). 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/Rtmp9xZu1o'"},{"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/Rtmp9xZu1o'"},{"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/Rtmp9xZu1o'"},{"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/Rtmp9xZu1o' #> The image files have been saved in the directory path '/tmp/Rtmp9xZu1o' #> The image files have been saved in the directory path '/tmp/Rtmp9xZu1o' #> The image files have been saved in the directory path '/tmp/Rtmp9xZu1o' #> The image files have been saved in the directory path '/tmp/Rtmp9xZu1o'"},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":null,"dir":"Reference","previous_headings":"","what":"Set reference for test sounds — set_reference_sounds","title":"Set reference for test sounds — set_reference_sounds","text":"set_reference_sounds set rows used reference test sound.","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set reference for test sounds — set_reference_sounds","text":"","code":"set_reference_sounds( X, method = getOption(\"method\", 1), cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set reference for test sounds — set_reference_sounds","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances (transects 1) 8) \"distance\": distance (numeric) test sound re-recorded. 'transect' column labeling sounds recorded transect required 'method = 2'. 'X' can 1 copy given sound id distance transect-distance combination (column 'transect' supplied). addition, 'selec' column values 'X' duplicated within sound file ('sound.files' column) combination used refer specific rows output 'reference' column. method Integer vector length 1 indicate 'experimental design' measuring degradation. Two methods available: 1: compare sounds ('sound.id') counterpart recorded closest distance source (e.g. compare sound recorded 5m, 10m 15m counterpart recorded 1m). default method. function try use references transect. However, another test sound 'sound.id' shorter distance transects, used reference instead. 2: compare sounds counterpart recorded distance immediately within transect (e.g. sound recorded 10m compared sound recorded 5m, sound recorded 15m compared sound recorded 10m ). 'transect' column 'X' required. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set reference for test sounds — set_reference_sounds","text":"object similar 'X' one additional column, 'reference', ID sounds used reference degradation-quantifying functions downstream analyses. ID created paste(X$sound.files, X$selec, sep = \"-\").","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Set reference for test sounds — set_reference_sounds","text":"function adds 'reference' column defining sounds used functions reference. Two methods available (see 'methods' argument description). Note users want define reference sound can set manually. NAs must used indicate rows ignored. References must indicated combination 'sound.files' 'selec' column. instance, '10m.wav-1' indicates row 'selec' column '1' sound file '10m.wav' used reference. function also checks information 'X' right format wont produce errors downstream analysis (see 'X' argument description details format). function ignore rows 'sound.id' 'ambient', 'start_marker' 'end_marker'","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Set reference for test sounds — set_reference_sounds","text":"Araya-Salas, M., & Smith-Vidaurre, G. (2017). warbleR: R package streamline analysis animal acoustic signals. Methods Ecology Evolution, 8(2), 184-191.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set reference for test sounds — set_reference_sounds","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/set_reference_sounds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set reference for test sounds — set_reference_sounds","text":"","code":"{ # load example data data(\"test_sounds_est\") # save wav file examples X <- test_sounds_est[test_sounds_est$sound.files != \"master.wav\", ] # method 1 Y <- set_reference_sounds(X = X) # method 2 Y <- set_reference_sounds(X = X, method = 2) }"},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"signal_to_noise_ratio measures attenuation signal--noise ratio sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"","code":"signal_to_noise_ratio( X, mar = NULL, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), eq.dur = FALSE, noise.ref = c(\"adjacent\", \"custom\"), snr.formula = 1, bp = \"freq.range\", hop.size = getOption(\"hop.size\", 1), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 0), path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds (typically output align_test_files). Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass 7) \"sound.id\": ID sounds used identify counterparts across distances (needed \"custom\" noise reference, see \"noise.ref\" argument). mar numeric vector length 1. Specifies margins adjacent start point annotation measure ambient noise. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. eq.dur Logical. Controls whether ambient noise segment measured duration sound (TRUE. Default FALSE). TRUE 'mar' 'noise.ref' arguments ignored. noise.ref Character vector length 1 determined noise segment must used measuring ambient noise. Two options available: adjacent: measure ambient noise right test sounds (using argument 'mar' define duration ambient noise segments). custom: measure ambient noise segments referenced selection table (labeled 'ambient' 'sound.id' column). segments used apply ambient noise reference sounds sound file. Therefore, least one 'ambient' selection sound file must provided. several 'ambient' selections sound file supplied, root mean square amplitude envelope averaged across selections. snr.formula Integer vector length 1. Selects formula used calculate signal--noise ratio (S = signal , N = background noise): 1: ratio S amplitude envelope root mean square N amplitude envelope root mean square (20 * log10(rms(env(S))/rms(env(N)))) described Darden (2008). 2: ratio difference S amplitude envelope root mean square N amplitude envelope root mean square N amplitude envelope root mean square (20 * log10((rms(env(S)) - rms(env(N)))/rms(env(N))), described Dabelsteen et al (1993). bp Numeric vector length 2 giving lower upper limits frequency bandpass filter (kHz). Alternatively, set 'freq.range' (default), function use 'bottom.freq' 'top.freq' sound bandpass range. hop.size numeric vector length 1 specifying time window duration (ms). Default 1 ms, equivalent ~45 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. Ignored bp = NULL. supplied, 'hop.size' ignored. Note lower values increase time resolution, important amplitude ratios calculations. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 0. used bandpass filtering. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"Object 'X' additional column, 'signal..noise.ratio', signal--noise ratio values (dB).","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"Signal--noise ratio (SNR) measures sound amplitude level relation ambient noise. Noise measured background noise immediately test sound. general margin ambient noise measured must specified. Alternatively, selection ambient noise can used reference (see 'noise.ref' argument). margins overlap another sound nearby, SNR inaccurate, margin length carefully considered. SNR less equal one suggests background noise equal overpowering sound. function measure signal--noise ratio within supplied frequency range (e.g. bandpass) reference signal ('bottom.freq' 'top.freq' columns 'X') default (, bp = 'freq.range'. SNR can ~0 tail signal low amplitude.","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206.Darden, SK, Pedersen SB, Larsen , & Dabelsteen T. (2008). Sound transmission ground level short-grass prairie habitat implications long-range communication swift fox *Vulpes velox*. Journal Acoustical Society America, 124(2), 758-766.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/signal_to_noise_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure attenuation as signal-to-noise ratio — signal_to_noise_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # using measure ambient noise reference selections signal_to_noise_ratio(X = test_sounds_est, mar = 0.05, noise.ref = \"custom\") # using margin for ambient noise of 0.05 and adjacent measure ambient noise reference signal_to_noise_ratio(X = test_sounds_est, mar = 0.05, noise.ref = \"adjacent\") } #> Object of class 'extended_selection_table' #> * The output of the following call: #> selection_table(X = alg, path = \"./testing/example_data/tailored_files_tlalpan/\", extended = TRUE, confirm.extended = FALSE, mar = 10, by.song = \"sound.files\") #> #> Contains: #> * A selection table data frame with 25 row(s) and 10 columns: #> | |sound.files | selec| start| end| bottom.freq| top.freq| #> |:--|:--------------|-----:|------:|------:|-----------:|--------:| #> |8 |10m_closed.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> |9 |10m_closed.wav | 2| 1.3000| 1.5000| 7.8750| 8.8050| #> |10 |10m_closed.wav | 3| 1.5500| 1.7500| 3.2080| 4.0690| #> |11 |10m_closed.wav | 4| 1.8000| 2.0001| 0.4220| 1.2230| #> |12 |10m_closed.wav | 5| 2.0501| 2.2501| 6.9050| 7.9170| #> |13 |10m_open.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> ... 4 more column(s) (sound.id, transect, distance, signal.to.noise.ratio) #> and 19 more row(s) #> #> * 5 wave object(s) (as attributes): #> 10m_closed.wav, 10m_open.wav, 1m_open.wav, 30m_closed.wav, 30m_open.wav #> #> * A data frame (check.results) with 25 rows generated by check_sels() (as attribute) #> #> Additional information: #> * The selection table was created by song (see 'class_extended_selection_table') #> * 1 sampling rate(s) (in kHz): 22.05 #> * 1 bit depth(s): 16 #> * Created by warbleR 1.1.29"},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"spcc measures spectrographic cross-correlation measure sound distortion sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"","code":"spcc( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), cor.method = c(\"pearson\", \"spearman\", \"kendall\"), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 90), wn = \"hanning\", path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. cor.method Character string indicating correlation coefficient applied (\"pearson\", \"spearman\", \"kendall\", see cor). hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying % overlap two consecutive windows, spectro. Default 90. High values ovlp slow function produce accurate results. wn character vector length 1 specifying window name ftwindow. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"Object 'X' additional column, 'cross.correlation', containing computed spectrogram cross-correlation coefficients.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"Spectrographic cross-correlation measures frequency distortion sounds similarity metric. Values close 1 means similar spectrograms (.e. little sound distortion occurred). Cross-correlation measured sounds reference playback re-recorded increasing distances. 'sound.id' column must used indicate function compare sounds belonging category (e.g. song-types). function compares sound corresponding reference sound within supplied frequency range (e.g. bandpass) reference sound ('bottom.freq' 'top.freq' columns 'X'). Two methods computing cross-correlation provided (see 'method' argument). function wrapper warbleR's cross_correlation function.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Clark, C.W., Marler, P. & Beeman K. (1987). Quantitative analysis animal vocal phonology: application Swamp Sparrow song. Ethology. 76:101-115.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/spcc.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure spectrographic cross-correlation as a measure of sound distortion — spcc","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) # get spcc spcc(X = X) } #> Object of class 'extended_selection_table' #> * The output of the following call: #> selection_table(X = alg, path = \"./testing/example_data/tailored_files_tlalpan/\", extended = TRUE, confirm.extended = FALSE, mar = 10, by.song = \"sound.files\") #> #> Contains: #> * A selection table data frame with 25 row(s) and 11 columns: #> | |sound.files | selec| start| end| bottom.freq| top.freq| #> |:--|:--------------|-----:|------:|------:|-----------:|--------:| #> |8 |10m_closed.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> |9 |10m_closed.wav | 2| 1.3000| 1.5000| 7.8750| 8.8050| #> |10 |10m_closed.wav | 3| 1.5500| 1.7500| 3.2080| 4.0690| #> |11 |10m_closed.wav | 4| 1.8000| 2.0001| 0.4220| 1.2230| #> |12 |10m_closed.wav | 5| 2.0501| 2.2501| 6.9050| 7.9170| #> |13 |10m_open.wav | 1| 0.0500| 0.2000| 1.3333| 2.6667| #> ... 5 more column(s) (sound.id, transect, distance, reference, cross.correlation) #> and 19 more row(s) #> #> * 5 wave object(s) (as attributes): #> 10m_closed.wav, 10m_open.wav, 1m_open.wav, 30m_closed.wav, 30m_open.wav #> #> * A data frame (check.results) with 25 rows generated by check_sels() (as attribute) #> #> Additional information: #> * The selection table was created by song (see 'class_extended_selection_table') #> * 1 sampling rate(s) (in kHz): 22.05 #> * 1 bit depth(s): 16 #> * Created by warbleR 1.1.29"},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"spectrum_blur_ratio measures blur ratio frequency spectra sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"","code":"spectrum_blur_ratio( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), spec.smooth = getOption(\"spec.smooth\", 5), spectra = FALSE, res = 150, hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), path = getOption(\"sound.files.path\", \".\"), n.bins = 100 )"},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. spec.smooth Numeric vector length 1 determining length sliding window used sum smooth power spectrum calculation (kHz). Default 5. spectra Logical control power spectra returned (attributes). Default FALSE. res Numeric argument length 1. Controls image resolution. Default 150 (faster) although 300 - 400 recommended publication/presentation quality. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Applied spectra spectrograms image files. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 70. Applied spectra spectrograms image files. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. n.bins Numeric vector length 1 specifying number frequency bins use representing power spectra. Default 100. null raw power spectrum used (note can result high RAM memory usage large data sets). Power spectrum values interpolated using approx.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"Object 'X' additional column, 'spectrum.blur.ratio', containing computed spectrum blur ratio values. spectra = TRUE output include power spectra sounds attributes ('attributes(X)$spectra').","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"Spectral blur ratio measures degradation sound function change sound power frequency domain, analogous blur ratio proposed Dabelsteen et al (1993) time domain (implemented blur_ratio). Low values indicate low degradation sounds. function measures blur ratio spectra sounds reference playback re-recorded different distances. Spectral blur ratio measured mismatch power spectra (expressed probability density functions) reference sound re-recorded sound. function compares sound type corresponding reference sound. 'sound.id' column must used tell function compare sounds belonging category (e.g. song-types). Two methods setting experimental design provided. wave objects extended selection table must sampling rate length spectra comparable. function uses spec internally compute power spectra. NA returned least one power spectra computed.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"Dabelsteen, T., Larsen, O. N., & Pedersen, S. B. (1993). Habitat-induced degradation sound signals: Quantifying effects communication sounds bird location blur ratio, excess attenuation, signal--noise ratio blackbird song. Journal Acoustical Society America, 93(4), 2206.Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_blur_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure blur ratio in the frequency domain — spectrum_blur_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # add reference to X X <- set_reference_sounds(X = test_sounds_est) # get spetrum blur ratio spectrum_blur_ratio(X = X) # using method 2 X <- set_reference_sounds(X = test_sounds_est, method = 2) spectrum_blur_ratio(X = X) # get power spectra sbr <- spectrum_blur_ratio(X = X, spectra = TRUE) spctr <- attributes(sbr)$spectra # make distance a factor for plotting spctr$distance <- as.factor(spctr$distance) # plot rlang::check_installed(\"ggplot2\") library(ggplot2) ggplot(spctr[spctr$freq > 0.3, ], aes(y = amp, x = freq, col = distance)) + geom_line() + facet_wrap(~sound.id) + scale_color_viridis_d(alpha = 0.7) + labs(x = \"Frequency (kHz)\", y = \"Amplitude (PMF)\") + coord_flip() + theme_classic() }"},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure frequency spectrum correlation — spectrum_correlation","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"spectrum_correlation measures frequency spectrum correlation sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"","code":"spectrum_correlation( X, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), cor.method = c(\"pearson\", \"spearman\", \"kendall\"), spec.smooth = getOption(\"spec.smooth\", 5), hop.size = getOption(\"hop.size\", 11.6), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 70), path = getOption(\"sound.files.path\", \".\"), n.bins = 100 )"},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"X output set_reference_sounds object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass, 6) \"top.freq\": high frequency bandpass, 7) \"sound.id\": ID sounds used identify counterparts across distances 8) \"reference\": identity sounds used reference test sound (row). See set_reference_sounds details structure 'X'. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. cor.method Character string indicating correlation coefficient applied (\"pearson\", \"spearman\", \"kendall\", see cor). spec.smooth Numeric vector length 1 determining length sliding window used sum smooth power spectrum calculation (kHz). Default 5. hop.size numeric vector length 1 specifying time window duration (ms). Default 11.6 ms, equivalent 512 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl vector single even integer number specifying window length spectrogram, default NULL. supplied, 'hop.size' ignored. Odd integers rounded nearest even number. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 70. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used. n.bins Numeric vector length 1 specifying number frequency bins use representing power spectra. Default 100. null raw power spectrum used (note can result high RAM memory usage large data sets). Power spectrum values interpolated using approx.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"Object 'X' additional column, 'spectrum.correlation', containing computed frequency spectrum correlation coefficients.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"spectral correlation measures similarity two sounds frequency domain. function measures spectral correlation coefficients sounds reference playback re-recorded increasing distances. Values range 1 (identical frequency spectrum, .e. degradation) 0. 'sound.id' column must used indicate function compare sounds belonging category (e.g. song-types). function compare sound corresponding reference sound. Two methods computing spectral correlation provided (see 'method' argument). function uses meanspec internally compute power spectra. Use spectrum_blur_ratio extract raw spectra values. NA returned least one power spectra computed.","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Apol, C.., Sturdy, C.B. & Proppe, D.S. (2017). Seasonal variability habitat structure may shaped acoustic signals repertoires black-capped boreal chickadees. Evol Ecol. 32:57-74.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/spectrum_correlation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure frequency spectrum correlation — spectrum_correlation","text":"","code":"{ # load example data data(\"test_sounds_est\") # method 1 # add reference column Y <- set_reference_sounds(X = test_sounds_est) # run spectrum correlation spectrum_correlation(X = Y) # method 2 Y <- set_reference_sounds(X = test_sounds_est, method = 2) # spectrum_correlation(X = Y) }"},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":null,"dir":"Reference","previous_headings":"","what":"Create synthetic sounds — synth_sounds","title":"Create synthetic sounds — synth_sounds","text":"synth_sounds create synthetic sounds","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create synthetic sounds — synth_sounds","text":"","code":"synth_sounds( replicates = 1, frequencies, durations, nharmonics = 1, fm = FALSE, am = FALSE, am.amps = rep(c(1:4, 3:2), length.out = 11), mar = 0.05, seed = NULL, sig2 = 0.3, shuffle = FALSE, hrm.freqs = c(1/2, 1/3, 2/3, 1/4, 3/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10), sampling.rate = 44.1, pb = TRUE )"},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create synthetic sounds — synth_sounds","text":"replicates Numeric vector length 1 indicating number replicates treatment combination. Default 1. Useful measuring variation transmission parameters. frequencies Numeric vector different frequencies (seconds) synthesize. Brownian bridge motion stochastic process (diff.fun == \"BB\") used simulate frequency modulation (see simulate_songs). durations Numeric vector different durations (seconds) synthesize. nharmonics Numeric vector length 1 specifying number harmonics simulate. 1 indicates fundamental frequency harmonic simulated. fm Logical control frequency modulated sounds pure tones (.e. non-modulated sounds) synthesize. FALSE (default) pure tones synthesized. Logical control amplitude modulated sounds non-modulated sounds synthesize. FALSE (default) non-modulated sounds synthesized. .amps Numeric vector relative amplitude time step simulate amplitude modulation (applied fundamental frequency). default value (rep(c(1:4, 3:2), length.= 11)) 2 amplitude peaks (although applied '= TRUE') mar Numeric vector duration margins silence around sounds seconds. Default 0.05. seed Numeric vector length 1. allows users get results different runs (using se.seed internally). Default NULL. sig2 Numeric vector length 1 defining sigma value brownian motion model (used simulating frequency modulation). Default 0.3. shuffle Logical control position sounds randomized. sounds treatment sequence can problematic environmental noise masks . Hence 'shuffle' useful avoid sounds treatment next . Default FALSE. hrm.freqs Numeric vector frequencies harmonics relative fundamental frequency. default values c(1/2, 1/3, 2/3, 1/4, 3/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10). sampling.rate Numeric vector length 1. Sets sampling frequency wave object (kHz). Default 44.1. pb Logical argument control progress bar shown. Default TRUE.","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create synthetic sounds — synth_sounds","text":"extended selection table, can input master_sound_file create .wav file. table contains columns varying features 'treatment' column (useful tell acoustic features sound) 'replicate' column indicating replicates 'treatment'.","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create synthetic sounds — synth_sounds","text":"function creates synthetic sounds can used playback experiments understand link signal structure transmission properties. function can add variation signal structure 5 features: frequency: continuous, argument 'frequencies'. duration: continuous, argument 'durations'. harmonic structure: binary (harmonics vs -harmonics), arguments 'nharmonics' 'hrm.freqs'. frequency modulation: variation fundamental frequency across time. Binary (modulated vs non-modulated), arguments 'fm' 'sig2'. amplitude modulation: variation amplitude across time. Binary (modulated vs non-modulated), arguments '' '.amps'. Sound possible combinations selected structure dimensions synthesized. output extended selection table, can input master_sound_file create .wav file. functions uses simulate_songs internally synthesizing individual sounds. Brownian bridge motion stochastic process (diff.fun == \"BB\") used simulate frequency modulation. output table contains columns varying features 'treatment' column (useful tell sound combination features using replicates).","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Create synthetic sounds — synth_sounds","text":"Araya-Salas, M., & Smith-Vidaurre, G. (2017). warbleR: R package streamline analysis animal acoustic signals. Methods Ecology Evolution, 8(2), 184-191.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Create synthetic sounds — synth_sounds","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/synth_sounds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create synthetic sounds — synth_sounds","text":"","code":"if (FALSE) { synthetic_est <- synth_sounds( mar = 0.01, frequencies = c(1, 2, 3, 5), durations = 0.1, fm = TRUE, am = TRUE, nharmonics = 4, shuffle = TRUE, replicates = 3 ) }"},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":null,"dir":"Reference","previous_headings":"","what":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"tail_to_signal_ratio measures reverberations tail--signal ratio sounds referenced extended selection table.","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"","code":"tail_to_signal_ratio( X, mar, cores = getOption(\"mc.cores\", 1), pb = getOption(\"pb\", TRUE), tsr.formula = 1, bp = \"freq.range\", hop.size = getOption(\"hop.size\", 1), wl = getOption(\"wl\", NULL), ovlp = getOption(\"ovlp\", 0), path = getOption(\"sound.files.path\", \".\") )"},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"X Object class 'data.frame', 'selection_table' 'extended_selection_table' (last 2 classes created function selection_table warbleR package) reference test sounds . Must contain following columns: 1) \"sound.files\": name .wav files, 2) \"selec\": unique selection identifier (within sound file), 3) \"start\": start time 4) \"end\": end time selections, 5) \"bottom.freq\": low frequency bandpass 6) \"top.freq\": high frequency bandpass. mar numeric vector length 1. Specifies margins adjacent end sound measure tail power. cores Numeric vector length 1. Controls whether parallel computing applied specifying number cores used. Default 1 (.e. parallel computing). pb Logical argument control progress bar shown. Default TRUE. tsr.formula Integer vector length 1. Determine formula used calculate tail--signal ratio (S = signal, T = tail, N = background noise): 1: ratio T amplitude envelope quadratic mean S amplitude envelope quadratic mean (rms(env(T))/rms(env(S))) described Dabelsteen et al. (1993). 2: ratio T amplitude envelope quadratic mean N amplitude envelope quadratic mean (rms(env(T))/rms(env(N))). N measure margin right sound. tsr.formula 2 actually measures tail--noise ratio. bp Numeric vector length 2 giving lower upper limits frequency bandpass filter (kHz). Alternatively, set 'freq.range' (default), function use 'bottom.freq' 'top.freq' sound bandpass range. hop.size numeric vector length 1 specifying time window duration (ms). Default 1 ms, equivalent ~45 wl 44.1 kHz sampling rate. Ignored 'wl' supplied. wl numeric vector length 1 specifying window length spectrogram, default NULL. Ignored bp = NULL. supplied, 'hop.size' ignored. Note lower values increase time resolution, important amplitude calculations. ovlp Numeric vector length 1 specifying percentage overlap two consecutive windows, spectro. Default 0. used bandpass filtering. path Character string containing directory path sound files found. needed 'X' extended selection table. supplied current working directory used.","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"Object 'X' additional column, 'tail..signal.ratio', tail--signal ratio values (dB).","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"Tail--signal ratio (TSR) measures ratio power tail reverberations test sound. general margin reverberation tail measured must specified. function measure TSR within supplied frequency range (e.g. bandpass) reference sound ('bottom.freq' 'top.freq' columns 'X'). Two methods computing reverberations provided (see 'tsr.formula' argument). Note 'tsr.formula' 2 equivalent original description TSR Dabelsteen et al. (1993) better referred tail--noise ratio. Tail--signal ratio values typically negative signals tend higher power reverberating tail. TSR can ~0 tail signal low amplitude.","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"Araya-Salas, M. (2020). baRulho: baRulho: quantifying degradation (animal) acoustic signals R. R package version 1.0.2Darden, SK, Pedersen SB, Larsen , & Dabelsteen T. (2008). Sound transmission ground level short-grass prairie habitat implications long-range communication swift fox *Vulpes velox*. Journal Acoustical Society America, 124(2), 758-766.Mathevon, N., Dabelsteen, T., & Blumenrath, S. H. (2005). high perches blackcap Sylvia atricapilla song listening posts? sound transmission study. Journal Acoustical Society America, 117(1), 442-449.","code":""},{"path":[]},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"Marcelo Araya-Salas (marcelo.araya@ucr.ac.cr)","code":""},{"path":"https://marce10.github.io/baRulho/reference/tail_to_signal_ratio.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Measure reverberations as tail-to-signal ratio — tail_to_signal_ratio","text":"","code":"{ # load example data data(\"test_sounds_est\") # set global options options(pb = FALSE) # using margin for noise of 0.01 tsr <- tail_to_signal_ratio(X = test_sounds_est, mar = 0.01) # use tsr.formula 2 which is equivalent to tail-to-noise ratio tsr <- tail_to_signal_ratio(X = test_sounds_est, mar = 0.01, tsr.formula = 2) }"},{"path":"https://marce10.github.io/baRulho/reference/test_sounds_est.html","id":null,"dir":"Reference","previous_headings":"","what":"Extended selection table with re-recorded playbacks — test_sounds_est","title":"Extended selection table with re-recorded playbacks — test_sounds_est","text":"Extended selection table (est) 7 re-recorded synthetic sounds. synthetic sounds 2 s long, frequency modulated, amplitude modulated, broadcast re-recorded 3 distances (1, 10 30m, column 'distance'). data created function selection_table warbleR package. master sound file data used create test sounds found example object master_est.","code":""},{"path":"https://marce10.github.io/baRulho/reference/test_sounds_est.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extended selection table with re-recorded playbacks — test_sounds_est","text":"","code":"data(test_sounds_est)"},{"path":"https://marce10.github.io/baRulho/reference/test_sounds_est.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Extended selection table with re-recorded playbacks — test_sounds_est","text":"Extended selection table object warbleR format, contains annotations acoustic data.","code":""},{"path":"https://marce10.github.io/baRulho/reference/test_sounds_est.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Extended selection table with re-recorded playbacks — test_sounds_est","text":"Marcelo Araya-Salas","code":""},{"path":[]},{"path":[]},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"new-features-2-1-0","dir":"Changelog","previous_headings":"","what":"NEW FEATURES","title":"baRulho 2.1.0","text":"new function add_noise() modifying signal--noise ratio adding synthetic noise new function manual_realign() generates interactive plot manual adjustment time alignments new function plot_blur_ratio() generates plots previously created blur_ratio() spectrum_blur_ratio() new function plot_degradation() visually compare sounds across distances new function plot_aligned_sounds() visually assess precision test sound alignment align_test_files() now can take several markers input select highest correlation score aligning test files New function attenuation() Data frames selection tables can used input data Added new methods blur_ratio() excess_atenuation() spectral_correlation() spectral_blur_ratio() renamed spectrum_correlation(), spectrum_blur_ratio() respectively","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"minor-improvements-2-1-0","dir":"Changelog","previous_headings":"NEW FEATURES","what":"MINOR IMPROVEMENTS","title":"baRulho 2.1.0","text":"optimize performance signal_to_noise_ratio() atmospheric_attenuation() longer available (use attenuation() instead) Improved documentation functions Fix bug spcc() excess_attenuation() ‘markers’ argument deprecated align_test_files() fix bug auto_realign() find_markers() compares time difference markers master sound file measure precision find_markers() can run several markers templates files ‘template.rows’ argument deprecated find_markers() spcc_align() renamed auto_realign() search_templates() renamed find_markers() ‘output’ argument deprecated ‘parallel’ argument deprecated replaced ‘cores’","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-106","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.6","title":"baRulho 1.0.6","text":"CRAN release: 2022-03-01 Update requested CRAN","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-105","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.5","title":"baRulho 1.0.5","text":"CRAN release: 2021-04-21 Update requested CRAN","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-104","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.4","title":"baRulho 1.0.4","text":"CRAN release: 2021-03-09","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"minor-improvements-1-0-4","dir":"Changelog","previous_headings":"","what":"MINOR IMPROVEMENTS","title":"baRulho 1.0.4","text":"warbleR::freq_range_detec() now used internally detect frequency range markers master_sound_file()","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-103","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.3","title":"baRulho 1.0.3","text":"CRAN release: 2021-02-11 Update requested CRAN","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-103-1","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.3","title":"baRulho 1.0.3","text":"CRAN release: 2021-02-11","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"minor-improvements-1-0-3","dir":"Changelog","previous_headings":"","what":"MINOR IMPROVEMENTS","title":"baRulho 1.0.3","text":"New argument ‘marker’ align_test_files() control start end marker used aligning Fix bug detecting several templates per sound file search_templates()","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-102","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.2","title":"baRulho 1.0.2","text":"CRAN release: 2020-06-07","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"minor-improvements-1-0-2","dir":"Changelog","previous_headings":"","what":"MINOR IMPROVEMENTS","title":"baRulho 1.0.2","text":"Windows length converted even functions Fix sign error signal amplitude measurements (signal_to_noise_ratio() excess_attenuation()) New function noise_profile() rename snr() signal_to_noise_ratio() New function tail_to_signal_ratio() measure reverberations Fix bug excess_attenuation() method = 1 Added type argument excess_attenuation() run “Darden” version excess attenuation","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-101","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.1","title":"baRulho 1.0.1","text":"CRAN release: 2020-03-09","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"new-features-1-0-1","dir":"Changelog","previous_headings":"","what":"NEW FEATURES","title":"baRulho 1.0.1","text":"New function search_templates() find signals re-recorded sound files New function align_test_files() set time signals aligned re-recorded files Parallel available internal prep_X_bRlo_int() function Data frame also returned functions","code":""},{"path":"https://marce10.github.io/baRulho/news/index.html","id":"barulho-100","dir":"Changelog","previous_headings":"","what":"baRulho 1.0.0","title":"baRulho 1.0.0","text":"CRAN release: 2020-02-22 First release","code":""}]