From e289690a253d841b3ff852ee91eabacfd6588a08 Mon Sep 17 00:00:00 2001 From: Thong Nguyen Date: Sun, 24 Mar 2013 16:23:35 +0000 Subject: [PATCH] Fixed bug where AudioPlayer may skip current track part way through if next queued track is being buffered and it has a different audio format --- .../UserInterfaceState.xcuserstate | Bin 26547 -> 26565 bytes Audjustable/Classes/AudioPlayer/AudioPlayer.h | 1 - Audjustable/Classes/AudioPlayer/AudioPlayer.m | 83 ++++++++++++++---- 3 files changed, 66 insertions(+), 18 deletions(-) diff --git a/Audjustable.xcodeproj/project.xcworkspace/xcuserdata/tum.xcuserdatad/UserInterfaceState.xcuserstate b/Audjustable.xcodeproj/project.xcworkspace/xcuserdata/tum.xcuserdatad/UserInterfaceState.xcuserstate index aefcec4dbc9949c7a04d9c6f55a75769c6d976fa..85993f0789db23184bcb38df2d6cd1eb16d5b20c 100644 GIT binary patch delta 11644 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 a-6?z93TwspoF_r(`J{_HpYQ*-68s;+ZqwBO delta 11332 zcmZ`<2S8KT*U!6eLI_C+kU$6of?+3N%Z4Om6QTj!MO0K=IIynTysOqdYM*s4z)^RV zI_lP1_o~}E>aKO6bz8093(?wsf8_z;oqK=xobx;P+{w?!kcMN(*MX>ovQ7<(LE5j? zwL@HOKso3PT!01;i~u9SDDV{+4aR`6U>q0^CV(k`0W-i{Fb~v$#b6a!4c375;770v z>;^xBL*N+r1)KqA!F})mG=hiV5%?2422a3K@C-Z$ufX3Zit-VSe%cf>33O1vxH1Mi7f<9+cOd>}pqABum8yYP|tD10nF z4xfZi#=pTCd;z`?uf^-|dVCSS7+->~!yE7)@b&lxd?UUI{}KNg-;2BU;rsDZ_-XtM zeht5l-@qT@kMKY7$M{=R?g zCw94r-NaAC9^yFh3vq%tNt_~16K9BP#C75Zag%sN{7F0}-jW;=A$g=P$tMM52q_~& z$uKgGj3*Pw3^J3}`7fF+&$uZ=3@@sM$ z`7JqzoJ%ewmyk=z@5s)p$o1p~awEBk{E^&2?j(1ShseX^5%MT`n*5EtLS7}Wk=Mx^ zGsW2*nQc#gpGb)BkqcW*1Dv!#i^i&~b zW?o`>h<`%{-U@h;bQ_5HK}6Iri!8@N2BjSt-eFjBYFb8eygV_bdGq0Ihb5<_B&Nj6 z(-}XXXFeSY26m~ccJ!(kQrVwT@GdYd!arlGd>6*WCJd;o(GBe1zp_tFuOTffE4ozm z=~mdMrvH%4iauSOH5L79+$dI<$rQ!JG_>RU6XY8D7=4^BV?t#LW>&yFWK~0YU=;8L zCG^T#5K7n6W#xikrr0;wb&})7@#b(rThN~4R}1*`f?CjlUQOq|FX#v=IME9i(q-=j zT|hrh^h!_(x`J+?JE#IZKu^#M^ag!EHRwx!Pp_rd(GBzu^m=*&y^-ET|4479x2y#H z!2nRhiC`aV)1w5#z!wsZmEKD4q<7H*_9<$5+R%sSBkO`@BA-oU4Vwfex3)W-HT_u+ z>236m6RhlOFco~$#_m)N@QAlNPH@sW&A~MAZMlGNcNPt-sp!Jl0(;&mr~^N7vQB}$ENmax&v^_EAZg$rGbSXW{a9QAS`lzS+32?GpApD2Q_qcj+3Y=!%gxFf11J^jw%fNZ?E4TnIf=l2s z_zheESLt8q6ZA>?6n&aLL!YJ3(dUj;yj)0M^w{thc+E!QeK0F)>cL;&4JWIV?GBYSCz`tLTkx_D<)8?CnSM-P zd>0iIL%lfBi%=XTP!gr+-{>p!Rr=Z@)EniZJ}8gAPX9qar2lkhfv`(;=YhT1+_F`7 zuBfSEUW7&_`*Tw3&;T@$zCqun`R6%L(I7M!m2$Xf2NqaLu>R+ zflJ^=|4!d(@)Au(w6$moeTS}o?_oNc{ZS8d&|KETeEKfk$a?sQF7q^?!KHu}C`iQ5%l`T=7L?~gc`9pN|nl%efDsgKcQdJ z4|o`kCN6Rxy}NKWBuBzW+m2H?$wx zA05C_%rL3S=x<&xJ*oJnjy5^EHHi^?|Q1Q20^PN1!9oQRr9nUl8Fy1c3;6 zZ~R!d@hRib@$_r@?Z>U3^e@_`G|~2kHREqK@>S^{>ot?mY3Q^jZ>OPC+<(z;{NA!( zZji_DnGGi+eG%7uM7xl#_K0fVB?LQ2ql=pUe%}X{qRTkZwMYhCS&J@*2=(6bRfx78 zU5&0mzlVqyM0_B^|3E|ox`7?AkV3>jcc-iB(2eLOhm2^e{x&Bo;D9m2#wrnVP0$%G0=-e@|g|Sq`Kt#t*cL>4ZA|&S};)U^P4qXZn zWw{`afoW1^er_<65F5z#_sFBm1qN20#mc;!tKT_^iLnsYB20n>VZoRbBC!yOgGf9? z5*A@HEEEgFSQ}Yi(;?CvB3kB9>{e?O7V|!&7+YWcE~HojqOHSJm>MD)h@}1#O)LpZ zWy63aV<`|xgh)~ymWHwIB|{{I5epT}(>TBIT&&=K>gby4q|v#G{3*?uH!69mi5(#@ zGh}-c{}g89JmWm&aIqrHjum5$HUlbqRd%kas_p}kY=~q*BoiV9<%0Zwk>Sm3jrWt5 zV6EJYmSSZP$$?029o8CS*Fkv@$!Gein=!r#erQLmg0UpX@p`Ni)|oLSyDJY?zz6PIUiT z>;G5v8+X+r zch&JtH96%Bst#^3!%gB$h&cXD;v8%)=8rib(h?#qAQH_|rzqI)dZ>K=g4^#k)MAU= zywzd#5OG4Jqz+rmxd)L_rjJ@3v=UqOUwXdBe&Ix~5y+WM>fB1~I7C`Qq%B0+L*z4v zbc9GJh;)HSSBP|nNDqkgf(RS9z7SzatAWVp5E%@Sp%7tN`Vt~EL`Fbl6huZtWGqC+ zLxgp0GDNn5#)`1G@h!M{$m)qyytf?#Q%F;!(IqP|j2*^`N{x zFBL4V8}%-oJF``LQ}1%PlF3V{WWG=4Q9+)n-B>|?Zm8#_s$9^X?d%TbK@OMcnakrU zJo299f{smcS8511+9T^-E^siyTnqCs)sIT>$g0^np(B%>>_a7a1pSyV(}r`?Jud^? ztq60iOuI6F<}hn|wnsjYd7ImlnVibw7I*}M$^|`|)D`;%xhrxF9{G?D@?hplh7V=+ z$cHif#8BpKl7?OCHvuSzr(pQM3OtBXPl1aywEVxsw)K=ihR*HbHijzq2u89l^lc)e zi%0O)2RGzCc$G&u<^x0grpkRh@^R&YQr4AXmL;5#tD1(-V#gc& zTYNe`182MVEQrj8$Q+2wU4+lZ=WrtMc@Sa0=euX11<3swenMH{_$ty~6)uA#WhE5h9!1kRO@nECeOkS@+`*!i(_cL=Zj@ z*#eQRZpb#qri()T2r<*w5a1^vf;@KbfXGgd-Sc!Zm7Hky$rhDFln1gKB0qT`w^@ja zNdAZ^gw}0DFCC$0i`mKO07MSDix1IdO#}L%H0!-j z?eT}d8|euf(SlV>6cKi!m~cSk2t$@ZD~s&b;s zCvB}Hx_aC@4Usb*_m&sRRK1D*pM(q`*j+fm&I0Eka^4O3m3dkig?>T6CXPoCBiZ7w zAaW5RP5ZOUjKL6vP9VN^7x$P-e8U#A)4~;qTy>+bz4N})(q6x{AC{D!u3-;2k}@>I z+YC!iOi7HFYyR?RZ<_n5DYv8tbmgDiyDOY9@|6Kq)7Zr%uyhY)$R zh&V(X_GtMNB9A><-1*JhI9cj~bt)@z8o`OwsKrqC=_0h0U_ zK_o?baUw`AMBYNcVSxZ)#+##6LNf4EW|Lx4!a~?ZH3|XdhTzNsl&0zI}kl)1<`I_x*-ck;!b|^B0jRB%7J6TfiFvZWE3fZV6LmlLeo& zPD|=o>k1*@LE!7Qj?WylM5(N#gN1xF;$#c5rALbp0zZ$IFsn?}hWzZ4TFS|etd>p? z_(Krj))L6{utur6lfB)Lk982T4_WQeB7q>tqh*Ix7WFwfm|ez_gCLOBl0zVn{bx-? ze%Ul_fe;3@Oh;l&=I~%)qHhku+O)8vD&UC|OKoD6=&VrzsyJ_7#c703Ehd{}$Z^>HECV^um z>&Zpr;&MSCyL)Ugu&Q%UTXl6$M@6?v`@r6vD*L-PY|#)zK@js_Eh1)V5g%PfE@yr# z3d8Hk7350hQc<3CHMy2u43lff?;(hTAij=VM>ar^0D+20w+|6+Cbzn6+X8{6mfQwG zBD2dL*=#qtmlIu2{zUE}e}*6#f)of+>&boOe)0eWX%ILdXu)_FR~wHZ+C}7X@)z<1 zc@lzj2y!9NLSX!7Z$O?Qe|5KYmOMwEhoCtG84zUFlNZQ~X3Cjg?Ed+W$>$%#y&zwbuOQGtpogH4#pONp z;5u{U%>YM!f_%&2QXC3txasHtT!yA|G76=z4*#5!=__g~>RA!a$zo3j-EZ%@0!323 zoaiOwS;~v@CeKqo6q^#PZzc%Lta}hxAh0f>_((VnJ%V z>$8&TE)_%M6*cn2#LVOj!JT#$1H1GXIH2jow&}=&QnJT493Bnc9f44>h;}))72Aa! z#(uf=S}JOypo1@Ztd%H(-#$F35)Gxy5;T{fzyls$8=siYAO#bH+?oH$M@ zCzF$h{l(t@__8-X;dnHjz+Uns;%V$9PZoR0(*+;KUf0aR=iu|$tD0K&nr1P+lwC7! z#<$|z@tyc?d=Gm;vmZZ*AI2}R_c2oTc4Y#wia5Ytjl3ZV(u?G>mm+~=I2r3AlgM;3 zpDZBlWChuoz5nP&R*^l)-efh|kG%&OO^#)6KPHls*&7gsy#blY-hs?x6Kgvgb&|cl zFjMWRp41>}6!k4NgPKLnq2^Hws9LI?T1;)AHc^|Yt<-jEC$*c}L+z#ZQx~WwUcigz zrSLL%we_m>a`pEb=rzb|sMi->UwSR^YVg|NwaIIX*EX*mUVFTL@jB=AtJg)Z%U(CV ze)syr>#o;*?;!6)Z?ktx?^5qp-fg_QdJps-HUrOH1Fx&Grebf z&-I?~z0kYPdyV%N?=#+axCA$ntKr(XZMdDdUASGj-MKxu16Dl~>K{#~Z+N@y7DT^Ct49@#gUs@M?LhcpG?|c$;~9 zdHZ>%c~^ONd9M4sM&2Xe7QStL`}z*_o!~pocZcsD-$s52zmVUO-8lHh24eyghPengkKBi z3FiwJ2y2C_g=>Wk!VSVr!p*{?!n4AQ!pp)d!fV1t;S=FA;S1p#;afk%5B1~u1^T%Z ze$jrhe(`>Ze#w5Re(8Q@zm|TT{RaDep;)#MpQjts) zCJGm&iJFTtMcJZUQNGA5DiM{5T8r9>+KWCDbre;JdWw3BJ{JuZ4HbGKsRdh#mU(_giBzol^=^x|o^l$G!!heka zD*w&?+x&O<@Alv0zt{hm|0(}7{^$IE_5a=fp8o^?hyG9fpZmY`|I7b%03P5MAPxu$ zkOs&DA_5`#CowoY!+L^MdCK%uHv5J-r{O;jreo%VDV7#F!5ONB=HpSRPl82Oz~{- zT=6pTYVr5tb>fZUAH`e5+r$T5;v?c?;uGRi;xppw;#=a|;=AJe;zsdn@mmQZ!6bx) zk_1R3l3 zW=dvDmP&R?c1!k1_Dc3k4oVJ7j!KS8PDoBk&PdKl9!VZco=RNLB`+m^N#01_1|dOc z5FSJZc?EHUGK1_vLxbiAZ40^-^ei|eI5oIDcy#c*;3dIpg4YH&1aA%A8@xaGK=6s+ z8^L#jp9H^=21(`8Y-tN=J85_6KIFrP4Cm@G^g z78jNfrVdLCD+}u#HX>|#*s`$gVJE^)g`EjI7j_}+QrH!FzT7NtDeom8AfF_!m+zM! zlpmHKl^>U%kY8}gFUzmUugM$bFXXS}ujPM-bHcsCx#7HUez-7P6dn>D79Jk12sedW z!foO9@D}0D@Urj?;XA_jhaU((6#i?3e?(oxnutvin(I(aUkMQ#F2<&5ho%} zMO=!w7I7ouR>W-uPr+9R6(U8TLZXl=hABoVmMK;!Rw-O-6l)a?iuH<3id~95ioJ^c ziqneAiYtn1iW`bsiblmF#S_JI#Vf_@NIcRz(kIe4QV^LMnI4%DnH4!Fa#7@g$U~9G zBTq!0io6tgIr2*6gJwR>t~a~a?0&PxW-pq(Z1$HDQ{qZe>8}(kgOnl4FlD$hR+*?w zQKl<1mDw((S!q`~lr5F5lx>wAl;z6)%3;c}%1O#8%Bjlf%2~>}%K6Hb%Js_K%6-ZM z%0tTI%9F}7%5%!Q$|q6!sFqRXQ8iJ6qJ~BdkD{YSMvaad7d0_zO4K(|OQV)Wt&Cb7 zwKnR9sEtvZqqaruh}sqPQ`E0f&!dIW(b1{V-J^#_yS|NH6TLV3Wc0=8-=eQY-;BN; z{V4iL^z-Of(Ql&P#$?2FikTSmUCjEJ%`w|zcEik%y~Ahs@cMeOR>wXr|MZjAjg_C}m2P8-)VZgAYNxZ!bh+{n1E z;wHy2ans{w#m#ZWeHXVX?)$igxJ_|e;L{Mq=+@i*gN zB@hYx1a(4MLRmtugdqt-6NV)WPZ*!TBur13l`uD9LBe+lD-v9*6V@jDkgy@)s!E{B zQ*~DjR1H=QRSj3ssu8LQs;^ayYPxEsYO!j$YNcwmszJ40wMn&E^^@wj>a^;t>b&Z* z>Wb>R>Za;}8ddwK`D#D4zq*+^S{^cxw^FxNw^x6ru2lC@L-l0! z6!q8YZ`2E1>TBwo>f7qO>Idpa>L=>w>R0MF8jc3l5E?IykA|=D(*$TF8mT5!6RwHW zL}_9*2^x(iS(B#8&}3`!G+ND9nz5P*n#r1}nrWIDn%SCpnuVHr%@WNr%}UK0%{t9` z%_hwj&34T$%^uA@%|Xo(&2i01%^A&k%|(stH_bK8P0jC`Cz@xP7n;8kJ16!{?4MYZ zI4JQ%;%|vp6R#)UN-`#uB$Xw#PHLC*W76KF{YeLtjwDAXrzWQ-XC!AQ&r4pOyfS%p z^4b(}N@R*MB|0T8WopX&l!YmEDT`CFRAH(pH6T@zIxKZ;>iE=&sZ&y~r8cHMN`0LA zEUnCy);X;*ty@};ve=k={AIYx;@w-_oz9Ur)c)+}XTi^G?mX zH1F2@RP(FNuQ$Kh{C0*TqeDh{Mny)KjKdk{GcIIY%D9r5pIMYyoY^9?By&gR;mo6% z$1_i6>9bm7IkQT$T4!y^+MjhW>u}bw?4<0x?1F4vw#$$`KYK;?s_Zq{>vHfMza0OZ zz?`6*0XcNeh@4S5V{&fgJkEKV^E~HOZtL92+-|v5xxI4F=HAG?m3uq)ZeFXrE_q$^ zy65%GJDGPS?~lBDd5w90<~_~(J0Ho%@`-$}d~UunzbL<5{>c1^`P1{~<{!^LnSVO}VS%`ySwT@jSwZK5-UUMoMiz`N7*{Z{U`oNvf;k2A z3lt_S4pA2Wf|DM`}lF$7x*?w3D@8YiDWewX3w7wLfY1 zY7b}+YmaHqX)kCmYp-apYj0{FXkX}nj<1vGq`FXDxGqwcpwsA*b*Z}Mx=fu;SEOsD z>!RzetJd|?4bTnLeW`=GQM%E(ak>e*X}bBk6}lgE8+Ds?+jKj12Xu#Z$8^8wPU+6* ze$)No(mm6?)dM}Qr}SLCzh0~l)`#fB^x^tgeTqI;Z`GIR%k-`FZT0Q-mHO`bp8DSU zzWV<9Vfu0UY5H3Ia{Vg(_xc9?2K^5GZvD^tefop?!}{L~eG5Yh^@T-+tqMC9_AdOq za7f`7g|5O8g%b)V7fvl?3a1y&EUYbDQRv!KxT|na;l9Fyg+~g{6rL}% z#!zFpQDIaXqm7BiEThTT!dPN#Wo&EgVC-tFGWIg|G4?YKFn(biXJm{EjmwNHjcbhS zjO&ftjk}C{jC+j-jE9W3Ogxj+q%+w}rKV1%o~Aygex@4JAQNpGX&P-BYnou1WSVYT zXj*RCXxeG|$+XvWz;xK;I&C^-&|xaGq*9fHT3DQxQp;zS z3QHGDS4)+pr=`Y1TP9hiTV`42S{7L9EGsOlEo&_emJOComR*)ZmeZDNmb;b*mPeK+ zmgnq0VWC#SN?Ey9o;A=aw{Ua;P_-m%`ZHrgU>iMAA5x-HX| zW6QI(vvsjm+Pc|lY=dk=ZNqJ}ZG>%#ZK{p2O}Cw~UANt`{b9RjYqUKo;uQrJ1r>!9 zg%+ucOhuNWq9R9;vxq60TeP@nkE`fV(H%R-&a?a31MCvJ%r3Vp?9J>M_7?U@_G$K7 z`y%^N`*Qm#`x^T;`vLnI`z8Ao`*r&*`+fUE`(yhv`-|eZVncCxarfeW#Wlr)iiZ{t zFLo7AEM|(Q7tbo5TU=kfq+|kuh<>=+8 zcJy-$bqsfmb4+*4b1Zb!JC-)qh$2%uEXFKOP7dY#ji=9iI%bY8m$DL10!b;2~Elb*!bS~*tQe85*#8on? zgem#9q_$*v$*PhyC2PBvY%V!ga-!sP$+?mXC6`OCmfR@$z2r{G{gTF#*Cl_Ka!S$C zno?Lgvh=Icv87i^@0T`~J}P}u*1oK&tY=y8vc6^K%I=gkmOb^HDgog6r0ky0_rJ@Y F{~wCET_ykk diff --git a/Audjustable/Classes/AudioPlayer/AudioPlayer.h b/Audjustable/Classes/AudioPlayer/AudioPlayer.h index fe4e7fa..6470d76 100644 --- a/Audjustable/Classes/AudioPlayer/AudioPlayer.h +++ b/Audjustable/Classes/AudioPlayer/AudioPlayer.h @@ -147,7 +147,6 @@ AudioQueueBufferRefLookupEntry; AudioFileStreamID audioFileStream; BOOL discontinuous; - BOOL nextIsIncompatible; int bytesFilled; int packetsFilled; diff --git a/Audjustable/Classes/AudioPlayer/AudioPlayer.m b/Audjustable/Classes/AudioPlayer/AudioPlayer.m index 550763f..c0347dc 100644 --- a/Audjustable/Classes/AudioPlayer/AudioPlayer.m +++ b/Audjustable/Classes/AudioPlayer/AudioPlayer.m @@ -666,10 +666,24 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ return; } - if (audioQueue == nil || memcmp(¤tAudioStreamBasicDescription, ¤tlyReadingEntry->audioStreamBasicDescription, sizeof(currentAudioStreamBasicDescription)) != 0) + if (audioQueue == nil) { [self createAudioQueue]; } + else if (memcmp(¤tAudioStreamBasicDescription, ¤tlyReadingEntry->audioStreamBasicDescription, sizeof(currentAudioStreamBasicDescription)) != 0) + { + if (audioPacketsPlayedCount == 0 && audioPacketsReadCount == 0) + { + NSLog(@"CreateAudioQueue"); + + [self createAudioQueue]; + [self setInternalState:AudioPlayerInternalStateWaitingForData]; + } + else + { + return; + } + } if (discontinuous) { @@ -865,7 +879,7 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ { if (entry != nil) { - if (entry.bufferIndex <= audioPacketsPlayedCount && entry.bufferIndex != -1) + if (entry.bufferIndex == audioPacketsPlayedCount && entry.bufferIndex != -1) { entry.bufferIndex = -1; @@ -1300,8 +1314,14 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ currentlyReadingEntry = entry; currentlyReadingEntry.dataSource.delegate = self; - [currentlyReadingEntry.dataSource registerForEvents:[NSRunLoop currentRunLoop]]; + if (currentlyReadingEntry.dataSource.position != 0) + { + [currentlyReadingEntry.dataSource seekToOffset:0]; + } + + [currentlyReadingEntry.dataSource registerForEvents:[NSRunLoop currentRunLoop]]; + if (startPlaying) { [bufferingQueue removeAllObjects]; @@ -1356,27 +1376,27 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ SPIN_LOCK_LOCK(¤tlyPlayingLock); { currentlyPlayingEntry = next; + currentlyPlayingEntry->bytesPlayed = 0; + } SPIN_LOCK_UNLOCK(¤tlyPlayingLock); - currentlyPlayingEntry->bytesPlayed = 0; - - NSObject* playingQueueItemId = currentlyPlayingEntry.queueItemId; + NSObject* playingQueueItemId = playingQueueItemId = currentlyPlayingEntry.queueItemId; if (nextIsDifferent && entry) { dispatch_async(dispatch_get_main_queue(), ^ - { - [self.delegate audioPlayer:self didFinishPlayingQueueItemId:queueItemId withReason:stopReason andProgress:progress andDuration:duration]; - }); + { + [self.delegate audioPlayer:self didFinishPlayingQueueItemId:queueItemId withReason:stopReason andProgress:progress andDuration:duration]; + }); } if (nextIsDifferent) { dispatch_async(dispatch_get_main_queue(), ^ - { - [self.delegate audioPlayer:self didStartPlayingQueueItemId:playingQueueItemId]; - }); + { + [self.delegate audioPlayer:self didStartPlayingQueueItemId:playingQueueItemId]; + }); } } else @@ -1421,7 +1441,6 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ [self setCurrentlyReadingEntry:entry andStartPlaying:YES]; newFileToPlay = NO; - nextIsIncompatible = NO; } else if (seekToTimeWasRequested && currentlyPlayingEntry && currentlyPlayingEntry != currentlyReadingEntry) { @@ -1430,8 +1449,6 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ currentlyReadingEntry->parsedHeader = NO; [currentlyReadingEntry.dataSource seekToOffset:0]; - - nextIsIncompatible = NO; } else if (self.internalState == AudioPlayerInternalStateStopped && stopReason == AudioPlayerStopReasonUserAction) { @@ -1495,6 +1512,26 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ } else if (currentlyReadingEntry == nil) { + BOOL nextIsIncompatible = NO; + + QueueEntry* next = [bufferingQueue peek]; + + if (next == nil) + { + next = [upcomingQueue peek]; + + if (next) + { + if (next->audioStreamBasicDescription.mSampleRate != 0) + { + if (memcmp(&next->audioStreamBasicDescription, ¤tAudioStreamBasicDescription, sizeof(currentAudioStreamBasicDescription)) != 0) + { + nextIsIncompatible = YES; + } + } + } + } + if (nextIsIncompatible && currentlyPlayingEntry != nil) { // Holding off cause next is incompatible @@ -1534,10 +1571,22 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ { if (memcmp(¤tAudioStreamBasicDescription, ¤tlyReadingEntry->audioStreamBasicDescription, sizeof(currentAudioStreamBasicDescription)) != 0) { - [upcomingQueue skipQueue:[[QueueEntry alloc] initWithDataSource:currentlyReadingEntry.dataSource andQueueItemId:currentlyReadingEntry.queueItemId]]; + [currentlyReadingEntry.dataSource unregisterForEvents]; + if ([bufferingQueue peek] == currentlyReadingEntry) + { + [bufferingQueue dequeue]; + } + + QueueEntry* newEntry = [[QueueEntry alloc] initWithDataSource:currentlyReadingEntry.dataSource andQueueItemId:currentlyReadingEntry.queueItemId]; + + newEntry->audioStreamBasicDescription = currentlyReadingEntry->audioStreamBasicDescription; + + [upcomingQueue skipQueue:newEntry]; + + SPIN_LOCK_LOCK(¤tlyPlayingLock); currentlyReadingEntry = nil; - nextIsIncompatible = YES; + SPIN_LOCK_UNLOCK(¤tlyPlayingLock); } } }