From 580e4acf10e49f37926d9e602f8491626aef07c8 Mon Sep 17 00:00:00 2001 From: Adrian Sampson Date: Mon, 3 Jan 2011 15:32:58 -0800 Subject: [PATCH] WavPack and Musepack support --- NEWS | 5 +++++ beets/mediafile.py | 13 +++++++++++-- test/rsrc/full.mpc | Bin 0 -> 2899 bytes test/rsrc/full.wv | Bin 0 -> 13543 bytes test/test_mediafile_basic.py | 14 +++++++++++++- 5 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 test/rsrc/full.mpc create mode 100644 test/rsrc/full.wv diff --git a/NEWS b/NEWS index 14fdccf38..e48fff686 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,11 @@ * A new "-q" command line switch for the import command suppresses all prompts for input; it pessimistically skips all albums that the importer is not completely confident about. +* Added support for the WavPack and Musepack formats. Unfortunately, + due to a limitation in the Mutagen library (used by beets for + metadata manipulation), Musepack SV8 is not yet supported. Here's + the upstream bug in question: + http://code.google.com/p/mutagen/issues/detail?id=7 * BPD now uses a pure-Python socket library and no longer requires eventlet/greenlet (the latter of which is a C extension). For the curious, the socket library in question is called Bluelet: diff --git a/beets/mediafile.py b/beets/mediafile.py index dd5fef428..9221bce06 100644 --- a/beets/mediafile.py +++ b/beets/mediafile.py @@ -59,6 +59,8 @@ TYPES = { 'ogg': 'OGG', 'flac': 'FLAC', 'ape': 'APE', + 'wv': 'WavPack', + 'mpc': 'Musepack', } @@ -244,8 +246,8 @@ class MediaField(object): def __init__(self, out_type = unicode, **kwargs): """Creates a new MediaField. - out_type: The field's semantic (exterior) type. - - kwargs: A hash whose keys are 'mp3', 'mp4', 'flac', 'ogg', - and 'ape' and whose values are StorageStyle instances + - kwargs: A hash whose keys are 'mp3', 'mp4', and 'etc' + and whose values are StorageStyle instances parameterizing the field's storage for each type. """ self.out_type = out_type @@ -503,6 +505,10 @@ class MediaFile(object): self.type = 'ogg' elif type(self.mgfile).__name__ == 'MonkeysAudio': self.type = 'ape' + elif type(self.mgfile).__name__ == 'WavPack': + self.type = 'wv' + elif type(self.mgfile).__name__ == 'Musepack': + self.type = 'mpc' else: raise FileTypeError('file type %s unsupported by MediaFile' % type(self.mgfile).__name__) @@ -685,6 +691,9 @@ class MediaFile(object): #fixme: The utility of this guess is questionable. return self.mgfile.info.sample_rate * \ self.mgfile.info.bits_per_sample + elif self.type == 'wv': + # Mutagen doesn't provide enough information. + return 0 else: return self.mgfile.info.bitrate diff --git a/test/rsrc/full.mpc b/test/rsrc/full.mpc new file mode 100644 index 0000000000000000000000000000000000000000..428d13042c06c5c4b24bc63d97eb5fcebda08014 GIT binary patch literal 2899 zcmZ`)4^&gv8NV+HdGQaDY;$oSCe2w}tHvM@NLnRfhU%%S(karj71IC_A_P(rP)pi8 zq^>!mI{%%yQ;#N{Rgc-K_K3(($V2POrjsD^*cp*P@qqOYAfP0M+Ru&*vVV3>vMeCwm(h>BPf&Uold*3#px8tWLY{HjNNfE znX^qS3e-8B;GIpOSXEO;vAelr2fxAWZ|FRecVm^m!Mq{odYWg$*pp3n#EMY$Nl%?P z=VXKV+@t;Gl8=k3kFN6n=H{Z6drq4>j`a7x;PRK6{0*nA=6}ns?VG>D)AU(s<@BSh zqI=;yvI}=9IC+6)fnARxShW=mV4Rst^djLO!@Q7Kge6GF;_&hrtmOB(bM8|PruC4}GCt#RXq(o>9z%1ca+v4aAATC#*33#31IK>M|L}e9 zp?2ZGj8L#Dqgx^pj6%J<5HfBE$O+3ZS*tb(#4*H4UM%aq)2(4>g||*D5>YiY;zV;n z<0N`xC79tK0bbBJl4e0Ikx+Kvh zSem-Uav1a4rujmOdjLyj&O}fHf;zS1G0%0d|9)rD*hgo^&L28$zv}8<<$40x<ZQISgDmOEpq#kA(;tL0|!a39Z$!kGkgg30G@asoVz=5h_5A$Nyb2#?QkMO{P>-}oy8^&Ak?+PQqM(Q z+KU}Gs75Yqq6D^6>0g}ZZ^%1W=08#5zk4&yj2-?e?8OcYq#GU}*z?YU;OgfWdJ3{~ zlsjJYOyA?V@Mhey+`|(->+R=``TFNnOrOXFP{Z+OLaDLFIl3Vt-W3sv#`6@CfP>dp zEuxsoTEo#}z`6h^uIB{s04MJXaiM{9#oAnub9}5So`D_A-SLqBGJ@k$#amLzmTWOL zf)U9-fFubvZx~0HyISx&0;>q#;r!m_d8tEzbjeFDbC>ICJ=tn@P_b%%7C&i;& z{`Pa{C4)BxxFP$tX30BAf}cdf+gj!=46G%&yGd#W-`Q0>&U+c!#Oyh3Bg6LUrIMsm zUw%!6wzbaFXMf4vzL#bo1sj;+N9V$SchD#(U_b0u== zi+3sJ^|sDv3j(GKXav1(+fMvNyZ?z9yNFWg12e#EmqM!7Rr65|=%F_-W*%R~+*zCH zVm3j0v4-zkL!m}odji&nWEDZo<2bZlw?g&R(}^vP^9L0Q!6JU}U2V7ibMfc`WM8(} zcj=d4T1)ztAGmD=Kr$+ZALtnZ*unCF?d=aOEt**Bn)r*W(;f*HEp^=(K@ZpndI+}= z^biN#gf1zjEyzN{w;ds2th>1Ja6|MQ#An zt2T2zaAZxUj8M|2i59}Jlskc*OE~7$Xz$ErxW)Hhjdqa=rNWPe_1Q@;XlVuoh%vM) z@ddB+xj-k!&S(HOfy{{T_0B4HgSjb<nthOQ&LxkhXH0p%f`&o`qRQ!lI;PMN-O?Rn&r*TEDmY zr0aj}h)G$cIp0|EZPEqhW{auRU^A7Mp(Wo57|q{`Ql>pyc!ja7!ia3eMrje@ro@@0 z`IY9V*g&}H&#X(gR+u0kVm`@EDKaZ;CaZ1IA2`#jIdT6=xgXRm#-|JY}p zwLkh$mQ7;<00IgCynf*C_SY|rJPO_X{3+GaC^nSO?-zl9!`wr`=|>A`__r9)+v_h> z<=cKRfCo|~g_6JIK*-_4A%_G&5ajEB{`8y%K*4_z!XQo1w=huJ-&)lg8PFDTy8AJ8 zw|mmRb8{W&vekfrmh2(?|epQh#MJC-K<%UY9z>p*vP zy(6l@P`bRWNUPG)!BMuC;yZ^;2jZVnOt#0KdV*T>`&H-TD3$aDaZ%xNWT->NT2Vyr zK^Z0z-Ega2THQi07Rv-0*T6Po^9N!Ed=qZML1MhZJ=27@{lnOF*$`>|kMh7&jTDUq z3e+TIzJXX5S)9BfCEq3GGJk=@>vf*q^VBJPF8!|7&z}~TRZZ2_F9Nn!?%n}mMiJgq z0Or`PgWtmlUw^wmwn+$=yzwR*yvCSye0;f^|CAZ+{4(w#2+x_BjCz@32(y`lU9Z>W=i`bGykF5^@vn-NfS zQ`jXUKL)*TcP)mR+FDu5az!0Sak79IbcQ}X2R%huVU@c78m9PUe2|)MzR*(b)>CCG zZ|NGBrpLpVf%R8WBkS;#Gi(83JpwA>!7;H1Dh#0BF_rP3fRx5JdE?bgpBVC4aHtUY zFst^3?m10T_|QzGe}2Uh1Oo(@AW;4zFm?baM~vS=I#A|tZXWmZ!Zkw8$)-rc1`)p+ z>R(f(3ll5u51KstVf+BVYi$)>DP16x2KkfJ%vP`X+R`w02Rr~WJe9Jy!JBuwZPhjX zBF5hO_=xZ~-X9QBvx?;TMiZNG*LR^du(yi{=(B)Y`}gck0d+hY(XTDxxpOF$Wh>`I zsIZf=Cvj*Mrmf}_FPTZ6dVx4;iNP0T+>*^uA;5OqSN;IdaU?6n{`N@PBeB_IJ8j>B zh9^9*JhNUoRcrJ@gqRsWXNzvlx|GoLDoa$ptH`PYa@u`T*QoX1;NQI-z_P<&v>O2v z7HSM)LbVjNQ2J&=TK%M3?gY_K)r;ytUd!`4!bvV81*~M;f&#jGRWV=th~Um9JK{6^ zH|<>5YLZ!v#R&2fLdRdrMsq#1VX}S_huSxl7)y39~N_>=r4rN^lz@i0T$J5N5Nx znG}0Ke}?w}jK{=Q$kP{*JkQnmYfewCa-1M!kd_oXR{ym2uv}P#kMpX8~7ZhDC zY#IRf@0PC}z1>~!vPDQ9;HN zq={I~6!(=0UnYHo{9X-xAtVEggR`UULd*4*jM z@$!evf8eKL>8&?=+OisqOQ#)Miwu>7V$sW5gDV*8$mCNpb{(iB*h8Cgvv&GMYEK)sueuO ze(f;}c&>W;q974w7V!a%HvC!-X+o+*+px)m1{Lp4hulUQBN=tvtK0ytfpsI$_p{DN z%<)e-;}VZ7YIVc-riyIqXaS1NDSq&Fl)Pz(V=7S1%$?V@uEKR!bQnOqJ^Ki;&Uq=a zMPDO~i{z(XR`(^N_FGxqS~X46*(%Rar;}fnCGhSPVT>d~ zN>><*V}+0samv6O8XR(;IqqtPno(6%Zz#5BPhzhqAS7(S$K^0>bi~ zZ$?5dOL=V);1gT;7 zqLOu>#FFDTUsPw#UQ9bPdwCkR(9K+FHCA?tmmZK$E;ZU3P)b4vDpk-{dwK=Bg ztW|}T%xTjx+b#I7lJ7DLPv5BILh8BPgT3j0Ql`?Zl!N;0<;P}2QSrbK>J)!5#otuF zaTWl+k%a}7&JJ|cjlH3{aQ#fC?Cij`Q`9+ar-35D$J}%}vaU|9B0|C13qQLRr-wTc z>8AmkPSC90hTr;qZ41T}WSTt-Yxt*9m6&bAov(j~I~NWjn{c=-(~Iu5;B?Oh3`t-X z*LmGxI$Nt5c&wM<%e#J}p<+V!WP!cJ!Q04Cw-*&QnocNi=uxEB@4hp|3LB^LMTHo! zNReF`{@j8{^6^OMc5s?Y`*|$mcx7_hGB~pz?7I(sy)o9F`lGoTyTBu%20)Wfh9gE0 z>kM-~QX}$ir2QG&2^srnu)@4|v)KUythw3gtrl0VA`a&_q_rKb_PiDeTXyRD{?^Pe z{BHYU)#T8{p?qyb>KT*c&$_qNL&a{$K+g}5_8=N$_7tHRT6-;~iE5&C3}3Kfu!1LW z!)|%Mj?wxxgJVPAp7pS{qLbnl5U<4@38NXwud zakv#Ys`?|A<0`tE+vNk+KHqKmnxO!cv4evR!w`L2{h zJLW(1*%rzavVwPWD?y%OiUfNDbdgC@TY_%ASl7Tusemnql{-AK*->fF+kZ9 zfHa_)))BJ##(Q*MXxr94}I$nY7c*j%4#U-Yzb6#=8D+#Bi#Q=IYCoIE2QzK8VXM!B^x(Hb&41>%KRh~Vb{VkSxsb_M3W+QN~y z)lH`hxr?aenul?m!X%-$3DA;DTWlXQ900Q24$c2~uePwERE@9&n*;K? zOfzP%UH|kS<#aRCbCu-R31U0PPHK-jxLY?suWy@bqKQ;O5+Q z>tGSHc&?F`+FlTiY0%*aBZ|19if?y?SB|$F4GLA!RuI)8 zg-SjY>DjJ5c4^#O%VC}^RVxvA{_5Z)CwYW8mCCgvjYJ(&H$ZG~DQ;`}#FjXv(_zge zpkR}5A84=1_u>og15~@R(b@BlSHZV)lM^;CvGF-yel5{8rdkR zveYRWzq{cBcy6||gYAvVD;hwKu2oiZ?)wV4u>Hue?M#~0DX{((gw*O-kjf+zpw83M zF4V8^{ikL}CInqumdfy%_rXKQ1UB>C%ZVC@`x^#9K!U%?OFZXUrDzB>`GW?cB`NF= zY4X#AQQbf}A$`l%CKg#@`hx0QP$4@_7`)KJR(>hIyWkH7ItYD?_gNj%uF4eXpTY5z z)l+la>KoKy#Y25z>-$=Ho2!Xirw-(-;dv0dn`({atxVVUHPS*X=X;XnIx@t5f>5-X zJg@M(V>{#4q$9C&*fPX%nOtuU@3;t4T&s4=s}mAx8)?RqSnm}|I~Ra-%{JaB;g!;b zqr_V@BA2ERbQm61Zdp~?0#+dtYbr!hrfORHdumjp`sc0B-T_hLIoEPhHQckaMr}`$ zD0LDV!#GpTS{!r%1qR$n{?Walh&>)^i2MhQorFE}k=C~gZTW-9Of9Dt-x@PSTuamTv_eHK~+Q&!$Qw)`;%T zQtnU?m^ZQak%nleu$;_3_(F2*nl{_Csz*e^d1= z$bB$5WX#RAkXu8{V;KRp(yGV4);E#li~0CPP_~QrwhLW8ydYZ;nXD#1-|)IWaxJ^x zyUpmuqEAV!$cTC}f244t9Xa*~*p$;R*0m$U<;caWc})-{22dUVdQObl?&VhpHQ7%8 zn3S(cE0LJ;hsNpQ_GolCn0Cs)iD!K=@RuFu$ukOQ{a!~&kJkJvvyRz7Gnd)Cb^#^T z+l2C1U5$64{Bwp-J6pz}%0TIoAXdB_NHDyvB4I4`p*|M-xOQn zGl|h^Tr_}fkR&9l=I>h;U&w_ioszP;CrOV}&%-Z=50qLGp%iXR*gbcz6lYMpgMCve zXd=#nUX3kFEx`9gymxIPk2Nd*#jTL#F?3vBb@${t?xrDLHVo(p95fhpCExH@lR|2K*jAf<2K1q%lOUoiH@EVvh#&e9FvgbAw}94nU9pz zR>-Fl#!5i185DBs%_#rA;{(iD@!CZO5c+~<)A{u6Usl#>dm#on4l;ZnuXnQLz`9U> z1ppUDdOR87nm;z!QG>iTw~)GEhN4iVgEJ|(p@t#Zkmh@hjODGp~>V`zj_j{0(H9Yq&9Atf=#*VOk z#_wZB2?3kj0ki}UY3a1V3qKE}J47RnO@v%<{2c$|e!t`ewj%|CbivU7fydDyE!RPi z$JiHjB%>Qf33gIST}3Pk?@^bZ&J99#k(axP03)Ms7uYRkMQ)ia>=VW@ElS#Z5|pG4j@|nRB1nmiYY4UGdorWZR5^3ARb~Y-N~ZXk?vT)kWK&(QcC;dM}K&(EgxE z@ddDym<{+#qM3D4pu@9LRwDUi=*#m>En*sB;b}PtVvf23-x2qEn^2AF33oE}g-;oc z$pl=4jSlA!yCw^a0I6>J&5a8-n8znl>g2>oJNMt#k1dqZj`h3wxcDtVOBM>TsN*rs zPlB?B0<>NU$G2?&TAf6$>go;joh}8G?DbvCR_UcahdX*RQ(hC0DqBr>`a3g8E(_i?poxryV(zfE2N< z08=Y>s9B90EDq~+*uEllC^}>T``H);PRyA8N&kA~B{v3mWg@2i&MUYoSveNv(Vfz0 ztX4hi#nk4GSsB?Wp31u$YD3euofnB7@3(+^7SFVpeQj%=bu;6VUv0uzDme$tfg5IQ zkiUmCghm@@8|eZEGvQ!Z64RN&67iH3n`ItUW=RRaBQYYF*>+$?wtLK zK~sAJMv(rwnFPC87YIs;OZ^UMJ!${$C0pBEp}kx>icGmFqTQ!{WzJ+k5lF)(QLJMoF-WuSHI^ph3nuJc>WIp9hc8clwMSf zVUdN7bKRA#N5;kc3nv}AZQTq;4z_CjS!iFjNorAl`y+sw=uSQrEHX#>os5-$H-ZVX0#FnG8ooHF-czCyb8AsbK!QpP$~;%lRa zuxgbyiS7z6a}AtIuMCzsx$VuM4-d|0;9>W34AkvMs(vEX21eMTxt-k%D&r3-ALhu`A8R;zIp3Zule{3%Fm<^s}=+b=z?DU?WM_afCi;PL$I=|OUJXREG^X(_N z8i%j>;}I4ni*^RT0wi2nBk$MD_kql0fN{?k+XP}5_QshNX3`(7naIPE%ui9T4mI3v zy=8Dr+fnBLB9)!D=5{HBg4E>Y;S)5^x7)F?@Sba1?y;d|z9Gc7*|3zZVDznU$BU^0 z;M|^_nO?P5yyI5Ml&u=xKbc(}V2=i#O!9j=Uvu?19XgAL1iI0$pq^k)PvXXY5|*7rpGcw{EB_oXeC*k+BCL>w5*B0s z`WB|rf{rvaz7uFu>GPHM=v|~Pl%*1u;-3t#)L>Z;HvdTKO`8dGLQESzuTr3D3?e+m~kdOT!Y7@pDy2SG&r`+=nhUrro5 z=Sb5yTG=U=J$+X6cEhxS2y+=+up*5B(;+cc^JlG)cBL7q`b(qGv!S_+hrx9_py2V+ z<}p`;oH1)B#%8x9akqj?YxM?z^H|Y-e<&%_x6<@gbEPRTEyhf&0}Ewn$&vN@H0Ab} z2)DaC?)ZCTj<FZDFp(q!-s6qh~BIm^tm{)cFCx{G=j%c+S`978P!$6fTgEY6q*q__XwWhzgsy<`|mp zaM4G>d8rKdP?hAL!>6rPViHStE#Y=yXX56e_J(k==L+P27ON})0|TC`g{OZtGpY)N z{dDgajp2)=-d6FPQDT}3X;uh9Ce|uK^eb_$#7MPcAkcVu+dGP7b!o5jr_gr4UhcEK zGHYwWIr<92U4HRieImd5PnwytAoHW0q5YWGs@%jN^Dk582+WM)$BIe##ID=#5F;m)Of$D=kM~sUc@n58uc}?G zk@Cb(Q$bZP>z%Hmc%3pEh2iZX8!M!7d{sZ~Rnxq!V9~xWvIY5GvIaDb-Talf#e2!c z0W7iG1Nvq>lO^!hyr>)ZiGjKy-RZ9NB_I7p6S`kW;mV*DR;c~#)?LkQU05!D%63(p zls`;4e0?P-aid;JHcac?$hL?DqcjtzK<@X5$+u(yQ-YOO6z8YFrwb)sBg~IOXJJUB ze`ITB5^w03s6LUjF8dY)zSb#JaVT_7-1GC3uYi<#dK&+{_c zX4{rO5yV+Kcs0v|**|k*!zvahq#${IKd8lLqGzYUI$*jj5DHvBOa|;e-eDB3*Md$3 zOk$jxfhPRSwcn%Vc-x)YVR;HbPm2R==$tFH{Fa*NA?dCjfP~o=@>p)qOOH*ohn~{j zW%TeTDyX(j9G)Euo<18t-qU7m`JEz2U*2n2ZnK&5R+h-*D;W80Hq@dY1mAER9o zvQ2*H{;bN2c$?F?5LQE{R@ms*7hi*|aaw{v7kzVqmijFCwL;J!;tTndmU^BR$pUc< zuy;)w&H}IezNLZ79LMt#Xjh~Uv`J=JV`_>8SXx9m>QAJNLObm5X1$s=n5jggkC6s{ zL9FkR4VKWi#cZ%%^+;h3Q2bq<3;}3IABzNT`!t~9{-P`d6W>%**5_@kgBA6yn%l^! zbS>O4zQK4LZ8O84Hfh+(hVh)on2UrjOi;ov3p`>>OOW>-@Cpn=0$D|v{Y`C=>>wL0 zyhQ@^zcTWRo4-SBaW#9dwDPp3juCErU_TMy>-`W4#Im-VOG5d%W=5WP?@KyP#1(Jf zEeT5exYxXVn=Kr1|DM>1IQ0Ro&2kWQ5NN*v4tNwK>1oTX_>@7olUB9GOVSI~j7K^mG z!!hveH`CWzdO%mU?V90@YHG= zrN~ZiPBYngpIiwY{J9hSP3ZyP{O%Veyw7LfuH8qhRzIKZEZ|(b2dy(HH0k4bjGmSJ zc7B=*MOwWe9T2;_q+9@;_*!d+%n%YD?MH-hxO)H zP%o1>ncKlDkNY6wRcVYpz>K`#@r-O#0V)pT^4BW;^4NBQ$SwX8_Xs1>{Ttj4RDMt$ zH|Fc>SR#?{S)JdXd_?aDPE3x~z>)+@WskPvTe1ZK6RKX1yYO0nXOta)@uOWtqSf53 zekBMToFSU4ED45=Q^3aM9iN_ke!ZI!N1TN&Iw; zY9nvRx)h-Yb-MC>0)v|#X;W53>%Ta$#R4FS|D|rWL0_8amVm4!+P4|nDm{8f#iKUnC$D6k#1|j;v_)vE6v#utuY?1rt1(W=B!fnB4f z=W6GRg^fBg(&J)VSg`*{Nx~R890Y0?A1N$+$F_JKG{COh1HYHRn(;RL5q0_d@^b+* zgLp~Q-X}J{OZugn21HInbqlJw(!yAd<&_WYBv`d{GA3EaC4yoB|SmScNANu5l_8x~bJ_p!_lcm3@aBWo65Cmd8>34NU3ElR!?tUQk z3i1QkoW!p>wWbc(FQ?I5VW+5pJBmjC-xfMF-YeDpgSR*_Z2|F{ z*nM+}5IEO3fIyKmOWg>FB`3}8I|Wrr;_aJgJYB?wv8IADK@U@81}{tCjlE_zAV0va ztjFX)yG4=(NZ*Px=#sfeU_-~il^%6F3Yf>?i$n<%+o33Zmk0s}cD`UN0C%p$ zlSn#`mOm#$M46?nfg452iZsW=C8UP-w#)7pzKt%hN|?b!-;!P^2_{<_q_K@G49f7r zsj27$#$x86*fW%)KWhEb0|dCIE|A`fn{AJE@xh(BunT&Jn%tNkGEy4*@CKN1xPPuu z7SzsTcPyJI4ZF6(MkEX7@gW5f3nlDJkOxUAPb$F`{Vmx>4bng>2d5>A1qFz~dy}0^ z*Yv#`Fp3Q9?fH1`y2-b4Jf?Meyam|=-Y1P&?{k>R1+%bBRA7SC5E4IsGR2j0*-4F7*DGh)~Vb%OGtJW=J* z_4VwMBPk2ne<~f;W+-W(XGAP=#9NG5&dju_*J&Nj!ngiNLEn{0}}RuRh;|%q{$b7&RT{^OjCPc3?jx_mQ^uyBfutI;Htx%4uccr0Lgf^ z;FlMd*g#0K!3JHucastezD9+El%fXWFEp%!TA_4I{?~auYr#pB9Dq3Nmx#!B8LdXR)2z0c>Ve zWatHoQ58FrGO!0P2x2&bfa~J1wtaCQ6PX*h_(tJ@8F*EaPEYB@%VzH@l;`%Wo-7Rm zY2^=~Y`qiDN~_;hPV&GD4f*A`(8v95S)QC{aZwC;?wVNeLU5Ffd%Ra^1sj?xd#-v#u3*Gy`PQk~&;H4NZ^Qq{walDDe{= zv16Y~O##+YnieGP_qk@fG_=y{gtnp%EG<+{<(tz4jy47>I_B6q2=ts|dqN0vRBGoN z9d_fdEf&e&EDyOs8dP9dL&|nSB03IZJy$(+o^D_*?UnxFu_XPZ+EQho9|Gm>+Knkzk0AC!z=>_NT_jh{$WlhvPBH z>#|0g|3jQ5dWc(gR<`zQ5;$B(|G*;&_Ci3*(3*&F4Dm^b#akESzbv(u-kR)P2eJ|+Sszw+Bxn@X|U5*Ol4QbNOpd>~z z@I@sxnEH{XkQ%yfwFmkq+lejQCZ-tBkIrb5yaQB~UI$A^LwzQG=Sq<<>NIlTBCalo z*+uUbUVCA}a!m5MDSoPMPK)KXA%Hh6A86{crd;*A)I;R!NVE$TMmwvxd}4 zv-s04XI!|uy6`bbb*DU4mp2IQ)`dP}Z)tiK;-jDMMNuz)lBKdHR@*^dt)7ocsh_op z4QitP-VRf5o#%wAZ*$R0TV8e^hxw)xs;zpc#LqIM6D==VPW!djx~fMYXW^R?5s+nW zxCv1&&bEzupkw?2HnUde)>w)n3l5EeY>omU{#Q^Kk@V;?Af@U<bqlM*w0q~uXw))q8c&nc1+DfQgHdOq z11RU}^A43(Zk}H(LsuNoIol88{1(7+ix1s-6ajV#uV1LZ`sIDz#EHXj>~A5sHKicRaGbR=SLX09M_O-S?X2dW*^=9xzh4y*z#pS3kxeF~tq zD_-lz(AFn@OhUa|VVDqQTO~oM-;E-PQkrlFX{HwG4RN;1?w9%|gUlb0Ul{GO^`v-2 zMNiv`q9>~et+k6Utpf#4-c8Z>NeT=grisigY+$ON+q0w9lA;FSl1Nu45szFN(~E6D zrhHufRS&7}DBa+iCWgbxsCxqtSLqV}j*2ouP4$)#3#R@!upGbBW7y`f-$O=HG&`kf z@|%12c@B1$`+Z8`3MW1#hU@45Ta-iSCywyae?{^eapuRwSpJ^u7)F(=hGo%sRw;A13Wd z4B^-TZ!67jw6Xo;tdenZ@hThS+i@E-=X8JB<9^q;B<;}Kl8H986R1!s{syTB;mRcX z8(G@ggHdHQ{>P`m9kbR_HkC!#%%yRs zx(uf+Y!ri<*3wBUC;j8M>wrkqF&h=?>+`?rl^Fc9D8h430hH8EXStXI%xChh z=r=5r^||`M`QH|+mPBF5mbp^|N4_=0RV3p{GrL;>{AZ?~ee32mHwu+Anp}fKR*)Yj zjEay4RW#ga8wr>M9OJ_t3TPdo+iIj{1a*1 zrd8Db1jysbb|jagju$s1YU7@uYcZam3iq+NKT$p(nV%vAS)Q(6Lp(6g2|2>ipMCMk zaU0es^ax3}K)6_##l)vsMYj{P@nh5T+}YAx0Lgm@jii^s<3vYjps6t@n)4LeNTrvU zZ3fWZTu%8N@GXZ~n5Lm@s1+g4Rf))2y$E(hHOJ3=4$gEN@#Rj#O1|yxpUK0_)A9X|KJLP zt`|4~vi3sL~qe>9mSzwm!+f7w!i zw{KSeYK8fdlW;wABNPDxH? zOWZu%-O|0&{$Kuo&-<;vcN*Kvo$cZ6%$7)4&MYr)hI6tv+r!yI;_cy{#!gH3WU~LC z{(sN+ErC}`IwMWuo$Ac?O!jtWrAktrlO^71&P;a?4~Zv>?d_c=`Ttp-@_)|@_@6&q B0oDKj literal 0 HcmV?d00001 diff --git a/test/test_mediafile_basic.py b/test/test_mediafile_basic.py index 005c54a43..3aab06131 100644 --- a/test/test_mediafile_basic.py +++ b/test/test_mediafile_basic.py @@ -203,7 +203,6 @@ correct_dicts = { } read_only_correct_dicts = { - 'full.mp3': { 'length': 1.0, 'bitrate': 80000, @@ -234,6 +233,17 @@ read_only_correct_dicts = { 'format': 'APE', }, + 'full.wv': { + 'length': 1.0, + 'bitrate': 0, + 'format': 'WavPack', + }, + + 'full.mpc': { + 'length': 1.0, + 'bitrate': 23, + 'format': 'Musepack', + }, } def suite_for_file(path, correct_dict, writing=True): @@ -253,6 +263,8 @@ test_files = { 'flac': ['full', 'partial', 'min'], 'ogg': ['full'], 'ape': ['full'], + 'wv': ['full'], + 'mpc': ['full'], } def suite():