diff --git a/Lib/test/audiodata/pluck-alaw.aifc b/Lib/test/audiodata/pluck-alaw.aifc new file mode 100644 index 0000000000000000000000000000000000000000..3b7fbd2af75a0a190b0a507ec43afbf8bd2b2267 GIT binary patch literal 6910 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 a>Ds!v*8g{&=>O)C0{(AY=>KP|=>Gv*xd*}k diff --git a/Lib/test/audiodata/pluck-pcm16.au b/Lib/test/audiodata/pluck-pcm16.au new file mode 100644 index 0000000000000000000000000000000000000000..398f07f071974314161f1f364d005586921eba1d GIT binary patch literal 13252 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 Jzz+Zb{|~=C(N+Ke diff --git a/Lib/test/audiodata/pluck-pcm16.wav b/Lib/test/audiodata/pluck-pcm16.wav new file mode 100644 index 0000000000000000000000000000000000000000..cb8627def9fd84ecd4607b122ac744bae1668ecb GIT binary patch literal 13370 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 diff --git a/Lib/test/audiodata/pluck-pcm24.aiff b/Lib/test/audiodata/pluck-pcm24.aiff new file mode 100644 index 0000000000000000000000000000000000000000..8eba145a44d37a837b00428c6e39c6d68e25ac4b GIT binary patch literal 20120 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 RCfPHs4fvF>*PYP+=YO}r>U{tJ diff --git a/Lib/test/audiodata/pluck-pcm32.aiff b/Lib/test/audiodata/pluck-pcm32.aiff new file mode 100644 index 0000000000000000000000000000000000000000..46ac0373f6abbc7454a53b536daa27589857604c GIT binary patch literal 26734 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 Ji{Ss?{{axc^56gf diff --git a/Lib/test/audiodata/pluck-pcm32.wav b/Lib/test/audiodata/pluck-pcm32.wav new file mode 100644 index 0000000000000000000000000000000000000000..846628bf82f7278697b093db94becb704be2c3d8 GIT binary patch literal 26598 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�WP{ajQKy4-&8UbNX+C30d~j7HjfSo@}G^o9t#eA=>)BNuLpfqZf)f>H2Z- z`upST=4)YGr;`o9@Z%>FH|+>Nm;;?l7i#9Fz zz1i@RbD7+C-O0aobHfDv0)es&{*IAe9@vWi!}1aR<`0RXG7CBFxlyyWlSg5yx}=%w8}I z5BMTuOZPs6cik?tO?l%%&g_MtqpCBPzp@wq;n#S!;7&A_)vaVDYXok(%e^`KThd)3 zS^XEaO@?tL{9E7Ppnzf-=X)lql_0{=?dLNr1&6q_ilWIliZiA-I&X6_D6v{gKvvdIsIQkD5$bGUOkS{;ZSy^vl_0GzXaFrbDU_% za;GHb8Dp>uThtwfQr4@Jo6O&jIn{ItWmadm7?+EA!tu|W|M~fjvxZ-3HVvzH3Oyao zKzy4rJt%F7@3J2nmalcH)DFI2LknpQDR$f653-7|C^&h*2cVkq+12>!A(ADWk+;hq+y35&tkd0yZ1yEZc9h;V_@w+v!&Sm zjmy$|c8e5@puow}mV|d#fanS1P^x|TMrSM198v04?3YV}k`ajMwuG~^9z*41M?gtP z?ho;r!ASFG-4A(>j!3Y53LWuOXLqI<76@gVc4A3Qr7!9 zM$@9%#>JjkYqtkAu zNv1{dN?je1q;8EzT#gQz2h|ItZQ?NqoFb5l=MdUgv5bCD5+O8>`w@BW5muBBq|`Zw z(Tc!oU|Rg5 z?a&k0<61R|4Sk>?DgVdy94-a07de1Xo!LAKdzWVt0sRi4QDj@7@4!L35Vk7XNkQ|QA+0LgjX|mMD%$ch5Lw6% zWcuS~sII(&J$8SD=F~cO-Ng~eeBp&a^WY~khb$N9N0;Eat75o{8@~~$4+p)*;NoX2FVl8 zJJp+oNVL7yp?PVh6ep4$x|z2~8Lf6i_U*>Wf}9R-<7z^|8{twawzx?rb)(D`nOJpA z&V-*j!0eQZIaB=VW~JLipd5Ag$JcJBfF(GTtRb}^>tY1^>ShS2+|$C2PwDEh^@zTx$@ealRZMbknfV{Iuf8rw9+r$O*JA|6u*vw+&5qF8%81SG zxlMjv({P;fnlt}eJj(1U0qvK?KRJJW4 z(>8X4@(uAWd2B4Qs4h4q^ZuZ5WCMHDSMOXr(*vwG2D){^z2r8G*z$s!wm%zFNv3;(Hf&F;iBe2(|ZCJFj z80L?c5zfn6n7`IYXu$|lB;G>gmmDCQY+rHYgj+b_)kM5qGY!OTyogNZV{T=}WeDsl zZY7f^qR<syE%$Ebx=|irNqgGZ#ENG!a`!jLP zha8IitEtrmE>2wCk<3({L}JBgm&7xj(cLyVMadZ5oby`ygi)*dI?p_7VB?}^|4cZxo-=Md;N)LD$yvKUW)69# zbG7npwjw;8BYq!=#tk)djV>!*@8<<MTK?-?KhkC0&@^ZXqvwn|&WlolPa(Dp%H;0o;i@S2>`_Lg+ zp<~SHfewAlcgjBDJ!|$gkkL9lGP}&KXTFK7q~8#i%Hc){|9k0-yC2Db#$soroP(+! zzqsk`V7@SKHfb&E#FI!$D0O}SD4ia{nCNvbU3o04xn2G9c^%+P@|TWo?M8B6Y1gBl0e|Nu-8akg(v0%XlFNSx%L-BGyDX(J;?j0PWuFbqe7Pap=4dnXii+HcX>BPQQ|E_T(s&dEpxSU zSx5d3L1Cmz+IWIz{4k0X&0fGW2PRPy>KXwtu9_~sa+!=9!7{qLr<)2_o@VXihC7Ca zd}77P@9AgEula6GW~YK~oNomO)+L5pJBw!_IBX2wjSqbrogQc zt8rt676;3`esQPHqX+^l9N0*dmV8HLZST-2SByxr<_V*?IsqxFBY0-M0GZyl7HAEf zkZH$bx3II($kcBw&#z++GM}DEsXb34(eryP_F=yvNq4_rnpptX155kuLyq;?MLtVgtM)MHw?avNpo>V?dQkCC2JY#cc8(I9}gr*`9h2H&gDSM4GEF0dCeNDHWQNMy)J2O1mQpX9hcvc zAli#kp#1Q0oUA{KRF{J=n0njY_EChTk$_)(tpgSW7@5@RFHzY1!Hm?r3Q2~JCbFY@ zqwuDCZmE5JkdBw?7N(ko;$naB{4!FJ)ly6AyK51s_}L=qE=0<~)96cw7sKJz?%ejd zslYe#H@dFpIZiU#;k0*J&sxq6cNk$;M!o3+<+N8)LuaQ$E6+|I`?(p!U6@8@^A^x{ z&sVOkTO@6>b#d|%e0 z@E{ps?YfqzcC%P<$~`L9n#@)#31jK{n`~L}FRq#RgB5`GSg?04R~q~hRqnEKij$?p z#_8#xc;8CC%&`qhZY&@Y@M@&*xCCwWl4EnqIq2;};lk5rIL(%Ygv3O;v?22e!mE^3 z(%wXTmmC&GmZI>0qvGK zYW~h)EXkoQFKiuH#b{s3m@$Lh6F!8sChcU|j9jiF{0SSbyMZ>Y9>@_>UZMdf{@}#= z(ZqWc1LWPu@eMa7Lc`1hMCSe>DAJOObZuJW+$Tq2?Cr;RZpv67?;A*{>Q9lTxaov3 z=QU$HCn7%lya8>e%W!hlM(Ep9i%l1fe8`(GXbmqqNLU9%M$jaLq zSUT@JJM7|PApSCxIhgYwr?g1O$ZNGMSY~nLAJ1Xzdsmav<4JV)@e4o&{~+agVl*_% zs!02SJxp9}I9X9Jn3lezTn`JXS^bqyt^%(XWOy-Txp?RMxSJD z+aA)^C9%%bP8%2zF}KBVx{?va>Bzx(K5S_S!(3`Lhh5Y;mh;+^&Wc7(M13n+)~oO( zBJz?sI=cYpj~fcY_p`jjAp$5Hc#ANl*`d?^6on6efd+g@fp)_|%+1XK@;mJa<@H6B z)DTDn%?6CMst1wKK?{TXRpT@6LtyE~GgxCe%6D$wf~7qx+-zMEu=nLxz_ce6o8f)B z$>u_yIqpz+_$-nnPvFP$RwMfvo*TFvi&XxH`MC@BqvESxkcirgq}O>a(Xb&%@7>u6$U7k&c16Rt69w|jxOjz#1HJL@0$0)NEj4(3 z478bgQv=3|SnarUGBY=b)*THX{W`8?otxar%8?4BnLLWLh}-jir8eocW(TeiT%yXN z7I48M_tWz639gD(L5yhjt`^zP%Z%v>LHey|V8G!*1`O-V9{9tbOKTm=dT)6Nb637# zEl*2PSKpbOv^oq6bxzLN<|?n%`KLgzwSo{Y$%gsBg#sG(qnh|5uykuEwiN@Y+VKfz z?;1uMZuTJbFp`$KdlNf9jDX4~4LCBU6%5{S6Whin@qG9?Y>%Yeh_(lC{-lr4FgFet zq*1hPi!WZ>zYkERK0}i8CwK)_hmnYV#Si#r=dYYf;cFisN39e3A~5tA(#E$YX?`#g zT)5#H{PiYWQ>zuS@3>$7c;1U*gVT{3FSm|*Q zEncw>nhK*SqcxY+Uw=*d)JD+?CWcJ&Z^b(A4H=*}{Nu+q=J;IwTBo+UbV%0qj z)hECm1Ye&=i%unyA*Tfl82P3p`p_l@tkSwPvIk5)if3#b%fzimoc81ItSWU0B+4$a zxq0`I7u}Z=#Uotm{udWFcnYsepCiB)`kjdEwGJBI^ur>@475mj7TVWz!i(aELfz6F zY<|&-QM`wQEvA2Xl+AT$uhT}F?qNYc? zaLw^0Oz@`hxYc1L7pJX5;M;q``oxHgQ#1JbNk@=(=4QU`Y&xpEGDbEYdlXE7t~D`qQg z(RAkQ1<;zANqx7D9 zemmQ=;~etMB3Yxn2)SOQapC8yh;{k%fLO&5FVcoW=e1clY+_ra+j$%6C2vujPY7)M zdmGN(_MR!ut-|@%o0RwX7JM>t1R(l-!Q^)W=0_A_bFBe;t>WjSTn}fsKg|SkrhnEGg+g=o}A`j9tKY?z(`SUW@p|<4jc4rT|xZoJYkM!)U27 z8X0zkyCM|Tu<>m;^Gr4lDhkfA%RRLq(=m^pd-o4cK<2q>=-aGLG0Nq)`645F70<+0 zU7>we^@ZZ$HPpMs_c+6`5K8aXK%1Likp-&~8PT3yWKZ`)z&J0FEc3HsA@wIId)SY# z9-TuKJ{b&EH`~%RCG+XjS$Ak<(|d<~-4I4y^4zJ=Y+;(_z zMo*UGc$J=&_sqkx$m`Uv9bk=B&xzZ=#qk3?pe(EaM?d(8iUZGMt9u_epBMwymL?Hf z2WH>_FLZ2v-5R`AIE}UaC&HTQU~DUShrDar@*6+pqVP9?eADae$k}Z&p%h(3UPrbw z_LUou>U*Lq?KBNDDlGJws)g`L|A*|%S=pdKZK3PFS~=mdK=Q+RJFB=e)|P2 z9!|vFnnLaOz51iT7b_n=RY1|^*&#i z=;BepzB`C5IyxRnN1ND?wQ7V0jpwwJ0dXMdC#Q|H6Vrcx2!bA+!HG{#!nA87Z1P`* zjt-1~%0Ikths|TS$`1!|asFFMxbPuv@o=!BsA3!#>ISoC<>J_&iKsH_G!|Sv%&)j| z3M*5)^F-@2@R=1;IANh0tFO~c<3|Z@>Y9j*)UUgtkY0T|FM$E~ zdLpl2KV;q<0W*Xj(TSUnxk_Oa24#b2jpzdIl@-ZG9{L0C^lAqBeny-&_8HU-JC5}) zt9klQ$FT6`QJ#*}WBI@~AUl0K7DZGrl|RSeOUc)uzSMz)9@BYY{J&6fhk72!xQ*m1 zz7jUWP4sTgRjwd@KhiqJkV@JY3FT$fp$W%e*w|a_P1%2d=yr+mpE?u>76ejDW9D(f z^{K8y^@~`w{1%n+DTXP3Kyk?~6POC2` zW!n}b?Y=rvbG<#GxHp*!y1fQ@yS=6SzT~hf-g??PlX4aL|3}*wCOIXa$1?hE+bPlh zZH!Ob;cUT&`%KHcEKYm44V%^_53Xbqf3ZU-np#h>MZSSJdGJ|I$zCMlzApw6&0AdB zcL>z~Jp~aboG>mR5*qO}boWnxAXzpNXMZ|NNA})@Q=PAv)KwWc`pgR;3e#iz*?3s` zMT@;X{dkILd$BRTlGilwFxFiu1GW!aamw9yj8ioccewu@WM;8Q(fc(~R$Gc}srPv` z_B@pTr6bR8#|^Z%@GLN`J%qHc-;v2zha$_^II2A|!WUEbvoj93LGeM3iTybnNGt!K z#IBv3cfosC?(<`;{pk#F=VrePvYt+w-`s&sDTK@&ReisHT;%=bf!(BN+?d zhiZLw1EYD%Fa1yv=d9TrQ!p(CmYrP6di@iG=Fb1jW(#b{;klhNoQWmWqelYu ztgrY-ZwPIH>ySLC7zzTTU`n5DXy=KYz)Rc)mmTZFD1xG}w(Bw`W#%p{vmFJ}wYza+ z$D?hd@khX!Ph}&*;z2=2 zF}=Jliwoz5ko2g>tT-4^#Yf7SFr}UK?u?m|dzB#NLj*0VYGTdwD=K{7B*uOxh6+y8 zutu^M1*(+L_)k~L7I6uiS4C2Wv=(H^dQJT{rhzN&6HUhvdnqF7BQ0+A(OKMMI3ssH zB7HZmXT;urGPxITFu}h~;A}AtCizPzc<9C)RoU4d@%i73YbGb_+Xz zSU}_bp>IG@V;X9latccCuZA{bD5~#S03tK0QRIzWMtVzzCD%GJ(H7OOOr8kBXT;&M zTb?kiX*s5o{=^w~mg0&--+9R!SK~55fvhz#*!WJ)3JZepb!#pse?cSK>rY(c{}ie7 z=J8^^vXK6hm}fk77I~cGgy7bJmxLc52o!!h5My z**{}hbL3QNrK}F9K1!)LT?Cdj#8O0bFC4z{J;j>W0N)MKwB0_L77wt}+V=sjxHVG7 zTEB_(8nKZP&Dg|5?!U<_*!3HyJJ`&8qMm}_-)FGGCU=xE)66EkTZK$jAzbD5DqPmm z%n1iT!WjJr&~&_uYLeDN^m98*R`x{^Ri8ob#R8O5HIa>!im-Kk1MM|w1|BuInlpTx zk2`m00zQvt;oPrXaO>Y@U~lkA!w%=+&so8UIcHmXE3HsxxdqG?PXhOo_eX;qs z`zU;2SDv^f0|}G5@iZ@WNIkL$1<&4&G#R6rrf1`jw5W-U9`FJdeZIg<{W=ax)i>CL z-seDpilu#X8aNgEja)76%;|RLk)MZ+U?cObjB@)@X70SpAiMrHeK;+bGwdEh3npeU zw(DkU?!s2AY)(8it4s}~i^3_n7lF0PBr5vE7_9DJOKt5@4a%BU(0+FTQ{1zbmc$!e ztpmq1ntB;o@lnIj4TG43U3VB|<2P1YDL{? z7k#XzgVKiKvEogf zYSRSFfBgY?TZ6FW?|rB=W&~C=C-B4z$6&E(53XoG4u6*S<_z;h_{Wb=?ABeiD6_{t z6qkJ+SN0yA4b zVUg-4XdJtkxwMA>;_x}t>&(%d?07C|xVD(p=$10{Ux%3grmqH;WuNI`w;+gZnor02 ze`N&H1}gJnEh8PDPJR7L2(&9VQL?g&sG?9$Sp((RlGQ{N22O#-^XutG>vcvu-%i`A zx{C;g9gM6CLMY*-zhP$de{@i{ zP`K#$U#vFeK2Z0}XATgZfttEYna%ULxH(VB!1=q`f&oA2rXIJM3I4r6YLo}__VHMt z=)031JUfsj`g_sQPc4kF=mFKM;wER*ouaG{CLl|C4kgk}zzI4&otShE>f0pIP!T9GQ|JhOGoVcH^k%Y5x_U@u*4&xURwxttdf?2BW2VW)O?Snvlz z9U2C6HBWz_XBmZ@siq98_bdaFxVCskhfXlis}$CL`V(44cY?YTbC5RrI#;PLLMqon9hX_z%%gPap-LwD?q8g-dI&>K zSP8`JW%|iMhC(v# z0bA3n0dBMn;dFztkw3c4NuzG!`l30Y*w7oV`oMv>@;bO?+eMgR?g4eLq=?QVK&I>p zO3@`T(GO}-LBa2A%3TtT$=V6Z;+qk9coEFL|1VPiDYwZbMthz_rJq|aju4*zhfU4-qM}AoA{U&U7ko+7O+gg#TZV9 zW;2>OyMXRW3GJI$#rpMGLYtrc!>E^e((S|AaTV+*Dq_(lDEs9DM7;o~92rVCDhDF( zNtyIbpH-aCC|^cI8bF4uDrYQVBo)=qgH`+-&!$cr$8I$r=j7wJu$#l$ z!KlBVv+}xfc>3H>j`(9G3S)CP>(afrRnTM*)5o+{` zhN=m-(8^91S@rjQsJ+J|kWw0o{GKnu(lLFJxX&&kp~e$QW_2LEN3}+5hdyv~z)$G4 z>k{p8`!;O4ID|eUo&wwNi)NL-y#zV#I`+VpF(9+~6`ig>&xL2IsElP*tkOYJbHDas zJ6Cvesh`&{-LI=b#_!Galg%D~X{bo_t)9|a5%%m4rY diff --git a/Lib/test/audiodata/pluck-pcm8.aiff b/Lib/test/audiodata/pluck-pcm8.aiff new file mode 100644 index 0000000000000000000000000000000000000000..5de4f3b2d879bae0a41710cea4d0b1aad9309124 GIT binary patch literal 6892 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 diff --git a/Lib/test/audiotests.py b/Lib/test/audiotests.py new file mode 100644 --- /dev/null +++ b/Lib/test/audiotests.py @@ -0,0 +1,298 @@ +from test.support import findfile, TESTFN, unlink +import unittest +import array +import io +import pickle +import sys + +class UnseekableIO(io.FileIO): + def tell(self): + raise io.UnsupportedOperation + + def seek(self, *args, **kwargs): + raise io.UnsupportedOperation + + def close(self): + pass + +def byteswap2(data): + a = array.array('h', data) + a.byteswap() + return a.tobytes() + +def byteswap3(data): + ba = bytearray(data) + ba[::3] = data[2::3] + ba[2::3] = data[::3] + return bytes(ba) + +def byteswap4(data): + a = array.array('i', data) + a.byteswap() + return a.tobytes() + + +class AudioTests: + close_fd = False + + def setUp(self): + self.f = self.fout = None + + def tearDown(self): + if self.f is not None: + self.f.close() + if self.fout is not None: + self.fout.close() + unlink(TESTFN) + + def check_params(self, f, nchannels, sampwidth, framerate, nframes, + comptype, compname): + self.assertEqual(f.getnchannels(), nchannels) + self.assertEqual(f.getsampwidth(), sampwidth) + self.assertEqual(f.getframerate(), framerate) + self.assertEqual(f.getnframes(), nframes) + self.assertEqual(f.getcomptype(), comptype) + self.assertEqual(f.getcompname(), compname) + + params = f.getparams() + self.assertEqual(params, + (nchannels, sampwidth, framerate, nframes, comptype, compname)) + self.assertEqual(params.nchannels, nchannels) + self.assertEqual(params.sampwidth, sampwidth) + self.assertEqual(params.framerate, framerate) + self.assertEqual(params.nframes, nframes) + self.assertEqual(params.comptype, comptype) + self.assertEqual(params.compname, compname) + + dump = pickle.dumps(params) + self.assertEqual(pickle.loads(dump), params) + + +class AudioWriteTests(AudioTests): + + def create_file(self, testfile): + f = self.fout = self.module.open(testfile, 'wb') + f.setnchannels(self.nchannels) + f.setsampwidth(self.sampwidth) + f.setframerate(self.framerate) + f.setcomptype(self.comptype, self.compname) + return f + + def check_file(self, testfile, nframes, frames): + with self.module.open(testfile, 'rb') as f: + self.assertEqual(f.getnchannels(), self.nchannels) + self.assertEqual(f.getsampwidth(), self.sampwidth) + self.assertEqual(f.getframerate(), self.framerate) + self.assertEqual(f.getnframes(), nframes) + self.assertEqual(f.readframes(nframes), frames) + + def test_write_params(self): + f = self.create_file(TESTFN) + f.setnframes(self.nframes) + f.writeframes(self.frames) + self.check_params(f, self.nchannels, self.sampwidth, self.framerate, + self.nframes, self.comptype, self.compname) + f.close() + + def test_write_context_manager_calls_close(self): + # Close checks for a minimum header and will raise an error + # if it is not set, so this proves that close is called. + with self.assertRaises(self.module.Error): + with self.module.open(TESTFN, 'wb'): + pass + with self.assertRaises(self.module.Error): + with open(TESTFN, 'wb') as testfile: + with self.module.open(testfile): + pass + + def test_context_manager_with_open_file(self): + with open(TESTFN, 'wb') as testfile: + with self.module.open(testfile) as f: + f.setnchannels(self.nchannels) + f.setsampwidth(self.sampwidth) + f.setframerate(self.framerate) + f.setcomptype(self.comptype, self.compname) + self.assertEqual(testfile.closed, self.close_fd) + with open(TESTFN, 'rb') as testfile: + with self.module.open(testfile) as f: + self.assertFalse(f.getfp().closed) + params = f.getparams() + self.assertEqual(params.nchannels, self.nchannels) + self.assertEqual(params.sampwidth, self.sampwidth) + self.assertEqual(params.framerate, self.framerate) + if not self.close_fd: + self.assertIsNone(f.getfp()) + self.assertEqual(testfile.closed, self.close_fd) + + def test_context_manager_with_filename(self): + # If the file doesn't get closed, this test won't fail, but it will + # produce a resource leak warning. + with self.module.open(TESTFN, 'wb') as f: + f.setnchannels(self.nchannels) + f.setsampwidth(self.sampwidth) + f.setframerate(self.framerate) + f.setcomptype(self.comptype, self.compname) + with self.module.open(TESTFN) as f: + self.assertFalse(f.getfp().closed) + params = f.getparams() + self.assertEqual(params.nchannels, self.nchannels) + self.assertEqual(params.sampwidth, self.sampwidth) + self.assertEqual(params.framerate, self.framerate) + if not self.close_fd: + self.assertIsNone(f.getfp()) + + def test_write(self): + f = self.create_file(TESTFN) + f.setnframes(self.nframes) + f.writeframes(self.frames) + f.close() + + self.check_file(TESTFN, self.nframes, self.frames) + + def test_incompleted_write(self): + with open(TESTFN, 'wb') as testfile: + testfile.write(b'ababagalamaga') + f = self.create_file(testfile) + f.setnframes(self.nframes + 1) + f.writeframes(self.frames) + f.close() + + with open(TESTFN, 'rb') as testfile: + self.assertEqual(testfile.read(13), b'ababagalamaga') + self.check_file(testfile, self.nframes, self.frames) + + def test_multiple_writes(self): + with open(TESTFN, 'wb') as testfile: + testfile.write(b'ababagalamaga') + f = self.create_file(testfile) + f.setnframes(self.nframes) + framesize = self.nchannels * self.sampwidth + f.writeframes(self.frames[:-framesize]) + f.writeframes(self.frames[-framesize:]) + f.close() + + with open(TESTFN, 'rb') as testfile: + self.assertEqual(testfile.read(13), b'ababagalamaga') + self.check_file(testfile, self.nframes, self.frames) + + def test_overflowed_write(self): + with open(TESTFN, 'wb') as testfile: + testfile.write(b'ababagalamaga') + f = self.create_file(testfile) + f.setnframes(self.nframes - 1) + f.writeframes(self.frames) + f.close() + + with open(TESTFN, 'rb') as testfile: + self.assertEqual(testfile.read(13), b'ababagalamaga') + self.check_file(testfile, self.nframes, self.frames) + + +class AudioTestsWithSourceFile(AudioTests): + + @classmethod + def setUpClass(cls): + cls.sndfilepath = findfile(cls.sndfilename, subdir='audiodata') + + def test_read_params(self): + f = self.f = self.module.open(self.sndfilepath) + #self.assertEqual(f.getfp().name, self.sndfilepath) + self.check_params(f, self.nchannels, self.sampwidth, self.framerate, + self.sndfilenframes, self.comptype, self.compname) + + def test_close(self): + testfile = open(self.sndfilepath, 'rb') + f = self.f = self.module.open(testfile) + self.assertFalse(testfile.closed) + f.close() + self.assertEqual(testfile.closed, self.close_fd) + testfile = open(TESTFN, 'wb') + fout = self.module.open(testfile, 'wb') + self.assertFalse(testfile.closed) + with self.assertRaises(self.module.Error): + fout.close() + self.assertEqual(testfile.closed, self.close_fd) + fout.close() # do nothing + + def test_read(self): + framesize = self.nchannels * self.sampwidth + chunk1 = self.frames[:2 * framesize] + chunk2 = self.frames[2 * framesize: 4 * framesize] + f = self.f = self.module.open(self.sndfilepath) + self.assertEqual(f.readframes(0), b'') + self.assertEqual(f.tell(), 0) + self.assertEqual(f.readframes(2), chunk1) + f.rewind() + pos0 = f.tell() + self.assertEqual(pos0, 0) + self.assertEqual(f.readframes(2), chunk1) + pos2 = f.tell() + self.assertEqual(pos2, 2) + self.assertEqual(f.readframes(2), chunk2) + f.setpos(pos2) + self.assertEqual(f.readframes(2), chunk2) + f.setpos(pos0) + self.assertEqual(f.readframes(2), chunk1) + with self.assertRaises(self.module.Error): + f.setpos(-1) + with self.assertRaises(self.module.Error): + f.setpos(f.getnframes() + 1) + + def test_copy(self): + f = self.f = self.module.open(self.sndfilepath) + fout = self.fout = self.module.open(TESTFN, 'wb') + fout.setparams(f.getparams()) + i = 0 + n = f.getnframes() + while n > 0: + i += 1 + fout.writeframes(f.readframes(i)) + n -= i + fout.close() + fout = self.fout = self.module.open(TESTFN, 'rb') + f.rewind() + self.assertEqual(f.getparams(), fout.getparams()) + self.assertEqual(f.readframes(f.getnframes()), + fout.readframes(fout.getnframes())) + + def test_read_not_from_start(self): + with open(TESTFN, 'wb') as testfile: + testfile.write(b'ababagalamaga') + with open(self.sndfilepath, 'rb') as f: + testfile.write(f.read()) + + with open(TESTFN, 'rb') as testfile: + self.assertEqual(testfile.read(13), b'ababagalamaga') + with self.module.open(testfile, 'rb') as f: + self.assertEqual(f.getnchannels(), self.nchannels) + self.assertEqual(f.getsampwidth(), self.sampwidth) + self.assertEqual(f.getframerate(), self.framerate) + self.assertEqual(f.getnframes(), self.sndfilenframes) + self.assertEqual(f.readframes(self.nframes), self.frames) + + +def chunks(seq, size): + for i in range(0, len(seq), size): + yield seq[i: i + size] + +def printhex(framesize, frames): + linesize = 32 // framesize * framesize + for line in chunks(frames, linesize): + sline = ''.join('%02X' % b for b in line) + print(" '%s'\\" % ' '.join(chunks(sline, 2 * framesize))) + +def unpack(width, data, byteorder): + return [int.from_bytes(data[i: i + width], byteorder, signed=True) + for i in range(0, len(data), width)] + +def drawsound(nchannels, sampwidth, frames, byteorder): + import sys + d = unpack(sampwidth, frames, byteorder) + w = 50 + for i, x in enumerate(d[::2]): + #x = x & 0xffff + print('%8d' % (i,), end=' ') + if x < 0: + print('%*s%*s %8d' % (w, '*' * (w * -x // 2**15), w, '', x)) + else: + print('%*s%-*s %8d' % (w, '', w, '#' * (w * x // 2**15), x)) diff --git a/Lib/test/test_aifc.py b/Lib/test/test_aifc.py --- a/Lib/test/test_aifc.py +++ b/Lib/test/test_aifc.py @@ -1,57 +1,170 @@ -from test.support import findfile, run_unittest, TESTFN, unlink +from test.support import findfile, TESTFN, unlink import unittest +from test import audiotests import os import io +import sys import struct -import pickle - import aifc -class AIFCTest(unittest.TestCase): +class AifcPCM8Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = aifc + sndfilename = 'pluck-pcm8.aiff' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 1 + framerate = 11025 + nframes = 48 + comptype = b'NONE' + compname = b'not compressed' + frames = bytes.fromhex("""\ + 02FF 4B00 3104 8008 CB06 4803 BF01 03FE B8FA B4F3 29EB 1AE6 \ + EDE4 C6E2 0EE0 EFE0 57E2 FBE8 13EF D8F7 97FB F5FC 08FB DFFB \ + 11FA 3EFB BCFC 66FF CF04 4309 C10E 5112 EE17 8216 7F14 8012 \ + 490E 520D EF0F CE0F E40C 630A 080A 2B0B 510E 8B11 B60E 440A \ + """) + close_fd = True - def setUp(self): - self.f = self.fout = None - self.sndfilepath = findfile('Sine-1000Hz-300ms.aif') - def tearDown(self): - if self.f is not None: - self.f.close() - if self.fout is not None: - try: - self.fout.close() - except (aifc.Error, AttributeError): - pass - unlink(TESTFN) - unlink(TESTFN + '.aiff') +class AifcPCM16Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = aifc + sndfilename = 'pluck-pcm16.aiff' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 2 + framerate = 11025 + nframes = 48 + comptype = b'NONE' + compname = b'not compressed' + frames = bytes.fromhex("""\ + 022EFFEA 4B5D00F6 311804EA 80E10840 CBE106B1 48A903F5 BFE601B2 036CFE7B \ + B858FA3E B4B1F34F 299AEBCA 1A5DE6DA EDFAE491 C628E275 0E09E0B5 EF2AE029 \ + 5758E271 FB35E83F 1376EF86 D82BF727 9790FB76 F5FAFC0F 0867FB9C DF30FB43 \ + 117EFA36 3EE5FB5B BC79FCB1 66D9FF5D CF150412 431D097C C1BA0EC8 512112A1 \ + EEE21753 82071665 7FFF1443 8004128F 49A20EAF 52BB0DBA EFB40F60 CE3C0FBF \ + E4B30CEC 63430A5C 08C80A20 2BBB0B08 514A0E43 8BCF1139 B6F60EEB 44120A5E \ + """) + close_fd = True + +class AifcPCM24Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = aifc + sndfilename = 'pluck-pcm24.aiff' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 3 + framerate = 11025 + nframes = 48 + comptype = b'NONE' + compname = b'not compressed' + frames = bytes.fromhex("""\ + 022D65FFEB9D 4B5A0F00FA54 3113C304EE2B 80DCD6084303 \ + CBDEC006B261 48A99803F2F8 BFE82401B07D 036BFBFE7B5D \ + B85756FA3EC9 B4B055F3502B 299830EBCB62 1A5CA7E6D99A \ + EDFA3EE491BD C625EBE27884 0E05A9E0B6CF EF2929E02922 \ + 5758D8E27067 FB3557E83E16 1377BFEF8402 D82C5BF7272A \ + 978F16FB7745 F5F865FC1013 086635FB9C4E DF30FCFB40EE \ + 117FE0FA3438 3EE6B8FB5AC3 BC77A3FCB2F4 66D6DAFF5F32 \ + CF13B9041275 431D69097A8C C1BB600EC74E 5120B912A2BA \ + EEDF641754C0 8207001664B7 7FFFFF14453F 8000001294E6 \ + 499C1B0EB3B2 52B73E0DBCA0 EFB2B20F5FD8 CE3CDB0FBE12 \ + E4B49C0CEA2D 6344A80A5A7C 08C8FE0A1FFE 2BB9860B0A0E \ + 51486F0E44E1 8BCC64113B05 B6F4EC0EEB36 4413170A5B48 \ + """) + close_fd = True + + +class AifcPCM32Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = aifc + sndfilename = 'pluck-pcm32.aiff' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 4 + framerate = 11025 + nframes = 48 + comptype = b'NONE' + compname = b'not compressed' + frames = bytes.fromhex("""\ + 022D65BCFFEB9D92 4B5A0F8000FA549C 3113C34004EE2BC0 80DCD680084303E0 \ + CBDEC0C006B26140 48A9980003F2F8FC BFE8248001B07D92 036BFB60FE7B5D34 \ + B8575600FA3EC920 B4B05500F3502BC0 29983000EBCB6240 1A5CA7A0E6D99A60 \ + EDFA3E80E491BD40 C625EB80E27884A0 0E05A9A0E0B6CFE0 EF292940E0292280 \ + 5758D800E2706700 FB3557D8E83E1640 1377BF00EF840280 D82C5B80F7272A80 \ + 978F1600FB774560 F5F86510FC101364 086635A0FB9C4E20 DF30FC40FB40EE28 \ + 117FE0A0FA3438B0 3EE6B840FB5AC3F0 BC77A380FCB2F454 66D6DA80FF5F32B4 \ + CF13B980041275B0 431D6980097A8C00 C1BB60000EC74E00 5120B98012A2BAA0 \ + EEDF64C01754C060 820700001664B780 7FFFFFFF14453F40 800000001294E6E0 \ + 499C1B000EB3B270 52B73E000DBCA020 EFB2B2E00F5FD880 CE3CDB400FBE1270 \ + E4B49CC00CEA2D90 6344A8800A5A7CA0 08C8FE800A1FFEE0 2BB986C00B0A0E00 \ + 51486F800E44E190 8BCC6480113B0580 B6F4EC000EEB3630 441317800A5B48A0 \ + """) + close_fd = True + + +class AifcULAWTest(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = aifc + sndfilename = 'pluck-ulaw.aifc' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 2 + framerate = 11025 + nframes = 48 + comptype = b'ulaw' + compname = b'' + frames = bytes.fromhex("""\ + 022CFFE8 497C0104 307C04DC 8284083C CB84069C 497C03DC BE8401AC 036CFE74 \ + B684FA24 B684F344 2A7CEC04 19FCE704 EE04E504 C584E204 0E3CE104 EF04DF84 \ + 557CE204 FB24E804 12FCEF04 D784F744 9684FB64 F5C4FC24 083CFBA4 DF84FB24 \ + 11FCFA24 3E7CFB64 BA84FCB4 657CFF5C CF84041C 417C093C C1840EBC 517C12FC \ + EF0416FC 828415FC 7D7C13FC 828412FC 497C0EBC 517C0DBC F0040F3C CD840FFC \ + E5040CBC 617C0A3C 08BC0A3C 2C7C0B3C 517C0E3C 8A8410FC B6840EBC 457C0A3C \ + """) + if sys.byteorder != 'big': + frames = audiotests.byteswap2(frames) + close_fd = True + + +class AifcALAWTest(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = aifc + sndfilename = 'pluck-alaw.aifc' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 2 + framerate = 11025 + nframes = 48 + comptype = b'alaw' + compname = b'' + frames = bytes.fromhex("""\ + 0230FFE8 4A0000F8 310004E0 82000840 CB0006A0 4A0003F0 BE0001A8 0370FE78 \ + BA00FA20 B600F340 2900EB80 1A80E680 ED80E480 C700E280 0E40E080 EF80E080 \ + 5600E280 FB20E880 1380EF80 D900F740 9600FB60 F5C0FC10 0840FBA0 DF00FB20 \ + 1180FA20 3F00FB60 BE00FCB0 6600FF58 CF000420 42000940 C1000EC0 52001280 \ + EE801780 82001680 7E001480 82001280 4A000EC0 52000DC0 EF800F40 CF000FC0 \ + E4800CC0 62000A40 08C00A40 2B000B40 52000E40 8A001180 B6000EC0 46000A40 \ + """) + if sys.byteorder != 'big': + frames = audiotests.byteswap2(frames) + close_fd = True + + +class AifcMiscTest(audiotests.AudioTests, unittest.TestCase): def test_skipunknown(self): #Issue 2245 #This file contains chunk types aifc doesn't recognize. - self.f = aifc.open(self.sndfilepath) - - def test_params(self): - f = self.f = aifc.open(self.sndfilepath) - params = f.getparams() - self.assertEqual(f.getfp().name, self.sndfilepath) - self.assertEqual(f.getnchannels(), 2) - self.assertEqual(f.getsampwidth(), 2) - self.assertEqual(f.getframerate(), 48000) - self.assertEqual(f.getnframes(), 14400) - self.assertEqual(f.getcomptype(), b'NONE') - self.assertEqual(f.getcompname(), b'not compressed') - self.assertEqual( - f.getparams(), - (2, 2, 48000, 14400, b'NONE', b'not compressed'), - ) - - params = f.getparams() - self.assertEqual(params.nchannels, 2) - self.assertEqual(params.sampwidth, 2) - self.assertEqual(params.framerate, 48000) - self.assertEqual(params.nframes, 14400) - self.assertEqual(params.comptype, b'NONE') - self.assertEqual(params.compname, b'not compressed') + self.f = aifc.open(findfile('Sine-1000Hz-300ms.aif')) def test_params_added(self): f = self.f = aifc.open(TESTFN, 'wb') @@ -68,102 +181,6 @@ self.assertEqual(params.comptype, f.getcomptype()) self.assertEqual(params.compname, f.getcompname()) - def test_getparams_picklable(self): - self.f = aifc.open(self.sndfilepath) - params = self.f.getparams() - dump = pickle.dumps(params) - self.assertEqual(pickle.loads(dump), params) - self.f.close() - - def test_context_manager(self): - with open(self.sndfilepath, 'rb') as testfile: - with aifc.open(testfile) as f: - pass - self.assertEqual(testfile.closed, True) - with open(TESTFN, 'wb') as testfile: - with self.assertRaises(aifc.Error): - with aifc.open(testfile, 'wb') as fout: - pass - self.assertEqual(testfile.closed, True) - fout.close() # do nothing - - def test_read(self): - f = self.f = aifc.open(self.sndfilepath) - self.assertEqual(f.readframes(0), b'') - self.assertEqual(f.tell(), 0) - self.assertEqual(f.readframes(2), b'\x00\x00\x00\x00\x0b\xd4\x0b\xd4') - f.rewind() - pos0 = f.tell() - self.assertEqual(pos0, 0) - self.assertEqual(f.readframes(2), b'\x00\x00\x00\x00\x0b\xd4\x0b\xd4') - pos2 = f.tell() - self.assertEqual(pos2, 2) - self.assertEqual(f.readframes(2), b'\x17t\x17t"\xad"\xad') - f.setpos(pos2) - self.assertEqual(f.readframes(2), b'\x17t\x17t"\xad"\xad') - f.setpos(pos0) - self.assertEqual(f.readframes(2), b'\x00\x00\x00\x00\x0b\xd4\x0b\xd4') - with self.assertRaises(aifc.Error): - f.setpos(-1) - with self.assertRaises(aifc.Error): - f.setpos(f.getnframes() + 1) - - def test_write(self): - f = self.f = aifc.open(self.sndfilepath) - fout = self.fout = aifc.open(TESTFN, 'wb') - fout.aifc() - fout.setparams(f.getparams()) - for frame in range(f.getnframes()): - fout.writeframes(f.readframes(1)) - fout.close() - fout = self.fout = aifc.open(TESTFN, 'rb') - f.rewind() - self.assertEqual(f.getparams(), fout.getparams()) - self.assertEqual(f.readframes(5), fout.readframes(5)) - - def test_compress(self): - f = self.f = aifc.open(self.sndfilepath) - fout = self.fout = aifc.open(TESTFN, 'wb') - fout.aifc() - fout.setnchannels(f.getnchannels()) - fout.setsampwidth(f.getsampwidth()) - fout.setframerate(f.getframerate()) - fout.setcomptype(b'ULAW', b'foo') - for frame in range(f.getnframes()): - fout.writeframes(f.readframes(1)) - fout.close() - self.assertLess( - os.stat(TESTFN).st_size, - os.stat(self.sndfilepath).st_size*0.75, - ) - fout = self.fout = aifc.open(TESTFN, 'rb') - f.rewind() - self.assertEqual(f.getparams()[0:3], fout.getparams()[0:3]) - self.assertEqual(fout.getcomptype(), b'ULAW') - self.assertEqual(fout.getcompname(), b'foo') - - def test_close(self): - class Wrapfile(object): - def __init__(self, file): - self.file = open(file, 'rb') - self.closed = False - def close(self): - self.file.close() - self.closed = True - def __getattr__(self, attr): return getattr(self.file, attr) - testfile = Wrapfile(self.sndfilepath) - f = self.f = aifc.open(testfile) - self.assertEqual(testfile.closed, False) - f.close() - self.assertEqual(testfile.closed, True) - testfile = open(TESTFN, 'wb') - fout = aifc.open(testfile, 'wb') - self.assertFalse(testfile.closed) - with self.assertRaises(aifc.Error): - fout.close() - self.assertTrue(testfile.closed) - fout.close() # do nothing - def test_write_header_comptype_sampwidth(self): for comptype in (b'ULAW', b'ulaw', b'ALAW', b'alaw', b'G722'): fout = aifc.open(io.BytesIO(), 'wb') @@ -375,10 +392,5 @@ f.close() -def test_main(): - run_unittest(AIFCTest) - run_unittest(AIFCLowLevelTest) - - if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_sunau.py b/Lib/test/test_sunau.py --- a/Lib/test/test_sunau.py +++ b/Lib/test/test_sunau.py @@ -1,128 +1,102 @@ -from test.support import TESTFN, unlink +from test.support import TESTFN import unittest -import pickle -import os - +from test import audiotests +import sys import sunau -nchannels = 2 -sampwidth = 2 -framerate = 8000 -nframes = 100 -class SunAUTest(unittest.TestCase): +class SunauPCM8Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = sunau + sndfilename = 'pluck-pcm8.au' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 1 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = bytes.fromhex("""\ + 02FF 4B00 3104 8008 CB06 4803 BF01 03FE B8FA B4F3 29EB 1AE6 \ + EDE4 C6E2 0EE0 EFE0 57E2 FBE8 13EF D8F7 97FB F5FC 08FB DFFB \ + 11FA 3EFB BCFC 66FF CF04 4309 C10E 5112 EE17 8216 7F14 8012 \ + 490E 520D EF0F CE0F E40C 630A 080A 2B0B 510E 8B11 B60E 440A \ + """) - def setUp(self): - self.f = None - def tearDown(self): - if self.f is not None: - self.f.close() - unlink(TESTFN) +class SunauPCM16Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = sunau + sndfilename = 'pluck-pcm16.au' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 2 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = bytes.fromhex("""\ + 022EFFEA 4B5C00F9 311404EF 80DB0844 CBE006B0 48AB03F3 BFE601B5 0367FE80 \ + B853FA42 B4AFF351 2997EBCD 1A5AE6DC EDF9E492 C627E277 0E06E0B7 EF29E029 \ + 5759E271 FB34E83F 1377EF85 D82CF727 978EFB79 F5F7FC12 0864FB9E DF30FB40 \ + 1183FA30 3EEAFB59 BC78FCB4 66D5FF60 CF130415 431A097D C1BA0EC7 512312A0 \ + EEE11754 82071666 7FFE1448 80001298 49990EB7 52B40DC1 EFAD0F65 CE3A0FBE \ + E4B70CE6 63490A57 08CC0A1D 2BBC0B09 51480E46 8BCB113C B6F60EE9 44150A5A \ + """) - def test_lin(self): - self.f = sunau.open(TESTFN, 'w') - self.f.setnchannels(nchannels) - self.f.setsampwidth(sampwidth) - self.f.setframerate(framerate) - self.f.setcomptype('NONE', 'not compressed') - output = b'\xff\x00\x12\xcc' * (nframes * nchannels * sampwidth // 4) - self.f.writeframes(output) - self.f.close() - self.f = sunau.open(TESTFN, 'rb') - self.assertEqual(nchannels, self.f.getnchannels()) - self.assertEqual(sampwidth, self.f.getsampwidth()) - self.assertEqual(framerate, self.f.getframerate()) - self.assertEqual(nframes, self.f.getnframes()) - self.assertEqual('NONE', self.f.getcomptype()) - self.assertEqual(self.f.readframes(nframes), output) - self.f.close() +class SunauPCM32Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = sunau + sndfilename = 'pluck-pcm32.au' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 4 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = bytes.fromhex("""\ + 022D65BCFFEB9D92 4B5A0F8000FA549C 3113C34004EE2BC0 80DCD680084303E0 \ + CBDEC0C006B26140 48A9980003F2F8FC BFE8248001B07D92 036BFB60FE7B5D34 \ + B8575600FA3EC920 B4B05500F3502BC0 29983000EBCB6240 1A5CA7A0E6D99A60 \ + EDFA3E80E491BD40 C625EB80E27884A0 0E05A9A0E0B6CFE0 EF292940E0292280 \ + 5758D800E2706700 FB3557D8E83E1640 1377BF00EF840280 D82C5B80F7272A80 \ + 978F1600FB774560 F5F86510FC101364 086635A0FB9C4E20 DF30FC40FB40EE28 \ + 117FE0A0FA3438B0 3EE6B840FB5AC3F0 BC77A380FCB2F454 66D6DA80FF5F32B4 \ + CF13B980041275B0 431D6980097A8C00 C1BB60000EC74E00 5120B98012A2BAA0 \ + EEDF64C01754C060 820700001664B780 7FFFFFFF14453F40 800000001294E6E0 \ + 499C1B000EB3B270 52B73E000DBCA020 EFB2B2E00F5FD880 CE3CDB400FBE1270 \ + E4B49CC00CEA2D90 6344A8800A5A7CA0 08C8FE800A1FFEE0 2BB986C00B0A0E00 \ + 51486F800E44E190 8BCC6480113B0580 B6F4EC000EEB3630 441317800A5B48A0 \ + """) - def test_ulaw(self): - self.f = sunau.open(TESTFN, 'w') - self.f.setnchannels(nchannels) - self.f.setsampwidth(sampwidth) - self.f.setframerate(framerate) - self.f.setcomptype('ULAW', '') - # u-law compression is lossy, therefore we can't expect non-zero data - # to come back unchanged. - output = b'\0' * nframes * nchannels * sampwidth - self.f.writeframes(output) - self.f.close() - self.f = sunau.open(TESTFN, 'rb') - self.assertEqual(nchannels, self.f.getnchannels()) - self.assertEqual(sampwidth, self.f.getsampwidth()) - self.assertEqual(framerate, self.f.getframerate()) - self.assertEqual(nframes, self.f.getnframes()) - self.assertEqual('ULAW', self.f.getcomptype()) - self.assertEqual(self.f.readframes(nframes), output) - self.f.close() - - def test_getparams(self): - self.f = sunau.open(TESTFN, 'w') - self.f.setnchannels(nchannels) - self.f.setsampwidth(sampwidth) - self.f.setframerate(framerate) - self.f.setcomptype('ULAW', '') - output = b'\0' * nframes * nchannels * sampwidth - self.f.writeframes(output) - self.f.close() - - self.f = sunau.open(TESTFN, 'rb') - params = self.f.getparams() - self.assertEqual(params.nchannels, nchannels) - self.assertEqual(params.sampwidth, sampwidth) - self.assertEqual(params.framerate, framerate) - self.assertEqual(params.nframes, nframes) - self.assertEqual(params.comptype, 'ULAW') - - dump = pickle.dumps(params) - self.assertEqual(pickle.loads(dump), params) - - def test_write_context_manager_calls_close(self): - # Close checks for a minimum header and will raise an error - # if it is not set, so this proves that close is called. - with self.assertRaises(sunau.Error): - with sunau.open(TESTFN, 'wb') as f: - pass - with self.assertRaises(sunau.Error): - with open(TESTFN, 'wb') as testfile: - with sunau.open(testfile): - pass - - def test_context_manager_with_open_file(self): - with open(TESTFN, 'wb') as testfile: - with sunau.open(testfile) as f: - f.setnchannels(nchannels) - f.setsampwidth(sampwidth) - f.setframerate(framerate) - self.assertFalse(testfile.closed) - with open(TESTFN, 'rb') as testfile: - with sunau.open(testfile) as f: - self.assertFalse(f.getfp().closed) - params = f.getparams() - self.assertEqual(params[0], nchannels) - self.assertEqual(params[1], sampwidth) - self.assertEqual(params[2], framerate) - self.assertIsNone(f.getfp()) - self.assertFalse(testfile.closed) - - def test_context_manager_with_filename(self): - # If the file doesn't get closed, this test won't fail, but it will - # produce a resource leak warning. - with sunau.open(TESTFN, 'wb') as f: - f.setnchannels(nchannels) - f.setsampwidth(sampwidth) - f.setframerate(framerate) - with sunau.open(TESTFN) as f: - self.assertFalse(f.getfp().closed) - params = f.getparams() - self.assertEqual(params[0], nchannels) - self.assertEqual(params[1], sampwidth) - self.assertEqual(params[2], framerate) - self.assertIsNone(f.getfp()) +class SunauULAWTest(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = sunau + sndfilename = 'pluck-ulaw.au' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 2 + framerate = 11025 + nframes = 48 + comptype = 'ULAW' + compname = 'CCITT G.711 u-law' + frames = bytes.fromhex("""\ + 022CFFE8 497C00F4 307C04DC 8284083C CB84069C 497C03DC BE8401AC 036CFE74 \ + B684FA24 B684F344 2A7CEC04 19FCE704 EE04E504 C584E204 0E3CE104 EF04DF84 \ + 557CE204 FB24E804 12FCEF04 D784F744 9684FB64 F5C4FC24 083CFBA4 DF84FB24 \ + 11FCFA24 3E7CFB64 BA84FCB4 657CFF5C CF84041C 417C09BC C1840EBC 517C12FC \ + EF0416FC 828415FC 7D7C13FC 828412FC 497C0EBC 517C0DBC F0040F3C CD840FFC \ + E5040CBC 617C0A3C 08BC0A3C 2C7C0B3C 517C0E3C 8A8410FC B6840EBC 457C0A3C \ + """) + if sys.byteorder != 'big': + frames = audiotests.byteswap2(frames) if __name__ == "__main__": diff --git a/Lib/test/test_wave.py b/Lib/test/test_wave.py --- a/Lib/test/test_wave.py +++ b/Lib/test/test_wave.py @@ -1,129 +1,108 @@ -from test.support import TESTFN, unlink +from test.support import TESTFN +import unittest +from test import audiotests import wave -import pickle -import unittest -nchannels = 2 -sampwidth = 2 -framerate = 8000 -nframes = 100 -class TestWave(unittest.TestCase): +class WavePCM8Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = wave + sndfilename = 'pluck-pcm8.wav' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 1 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = bytes.fromhex("""\ + 827F CB80 B184 0088 4B86 C883 3F81 837E 387A 3473 A96B 9A66 \ + 6D64 4662 8E60 6F60 D762 7B68 936F 5877 177B 757C 887B 5F7B \ + 917A BE7B 3C7C E67F 4F84 C389 418E D192 6E97 0296 FF94 0092 \ + C98E D28D 6F8F 4E8F 648C E38A 888A AB8B D18E 0B91 368E C48A \ + """) - def setUp(self): - self.f = None - def tearDown(self): - if self.f is not None: - self.f.close() - unlink(TESTFN) +class WavePCM16Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = wave + sndfilename = 'pluck-pcm16.wav' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 2 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = bytes.fromhex("""\ + 022EFFEA 4B5C00F9 311404EF 80DC0843 CBDF06B2 48AA03F3 BFE701B2 036BFE7C \ + B857FA3E B4B2F34F 2999EBCA 1A5FE6D7 EDFCE491 C626E279 0E05E0B8 EF27E02D \ + 5754E275 FB31E843 1373EF89 D827F72C 978BFB7A F5F7FC11 0866FB9C DF30FB42 \ + 117FFA36 3EE4FB5D BC75FCB6 66D5FF5F CF16040E 43220978 C1BC0EC8 511F12A4 \ + EEDF1755 82061666 7FFF1446 80001296 499C0EB2 52BA0DB9 EFB70F5C CE400FBC \ + E4B50CEB 63440A5A 08CA0A1F 2BBA0B0B 51460E47 8BCB113C B6F50EEA 44150A59 \ + """) + frames = audiotests.byteswap2(frames) - def test_it(self, test_rounding=False): - self.f = wave.open(TESTFN, 'wb') - self.f.setnchannels(nchannels) - self.f.setsampwidth(sampwidth) - if test_rounding: - self.f.setframerate(framerate - 0.1) - else: - self.f.setframerate(framerate) - self.f.setnframes(nframes) - output = b'\0' * nframes * nchannels * sampwidth - self.f.writeframes(output) - self.f.close() - self.f = wave.open(TESTFN, 'rb') - self.assertEqual(nchannels, self.f.getnchannels()) - self.assertEqual(sampwidth, self.f.getsampwidth()) - self.assertEqual(framerate, self.f.getframerate()) - self.assertEqual(nframes, self.f.getnframes()) - self.assertEqual(self.f.readframes(nframes), output) +class WavePCM24Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = wave + sndfilename = 'pluck-pcm24.wav' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 3 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = bytes.fromhex("""\ + 022D65FFEB9D 4B5A0F00FA54 3113C304EE2B 80DCD6084303 \ + CBDEC006B261 48A99803F2F8 BFE82401B07D 036BFBFE7B5D \ + B85756FA3EC9 B4B055F3502B 299830EBCB62 1A5CA7E6D99A \ + EDFA3EE491BD C625EBE27884 0E05A9E0B6CF EF2929E02922 \ + 5758D8E27067 FB3557E83E16 1377BFEF8402 D82C5BF7272A \ + 978F16FB7745 F5F865FC1013 086635FB9C4E DF30FCFB40EE \ + 117FE0FA3438 3EE6B8FB5AC3 BC77A3FCB2F4 66D6DAFF5F32 \ + CF13B9041275 431D69097A8C C1BB600EC74E 5120B912A2BA \ + EEDF641754C0 8207001664B7 7FFFFF14453F 8000001294E6 \ + 499C1B0EB3B2 52B73E0DBCA0 EFB2B20F5FD8 CE3CDB0FBE12 \ + E4B49C0CEA2D 6344A80A5A7C 08C8FE0A1FFE 2BB9860B0A0E \ + 51486F0E44E1 8BCC64113B05 B6F4EC0EEB36 4413170A5B48 \ + """) + frames = audiotests.byteswap3(frames) - def test_fractional_framerate(self): - """ - Addresses [ 1512791 ] module wave does no rounding - Floating point framerates should be rounded, rather than truncated. - """ - self.test_it(test_rounding=True) - def test_issue7681(self): - self.f = wave.open(TESTFN, 'wb') - self.f.setnchannels(nchannels) - self.f.setsampwidth(sampwidth) - self.f.setframerate(framerate) - # Don't call setnframes, make _write_header divide to figure it out - output = b'\0' * nframes * nchannels * sampwidth - self.f.writeframes(output) - - def test_getparams(self): - self.f = wave.open(TESTFN, 'wb') - self.f.setnchannels(nchannels) - self.f.setsampwidth(sampwidth) - self.f.setframerate(framerate) - self.f.close() - - self.f = wave.open(TESTFN, 'rb') - params = self.f.getparams() - self.assertEqual(params.nchannels, self.f.getnchannels()) - self.assertEqual(params.nframes, self.f.getnframes()) - self.assertEqual(params.sampwidth, self.f.getsampwidth()) - self.assertEqual(params.framerate, self.f.getframerate()) - self.assertEqual(params.comptype, self.f.getcomptype()) - self.assertEqual(params.compname, self.f.getcompname()) - - def test_getparams_picklable(self): - self.f = wave.open(TESTFN, 'wb') - self.f.setnchannels(nchannels) - self.f.setsampwidth(sampwidth) - self.f.setframerate(framerate) - self.f.close() - - self.f = wave.open(TESTFN, 'rb') - params = self.f.getparams() - dump = pickle.dumps(params) - self.assertEqual(pickle.loads(dump), params) - - def test_wave_write_context_manager_calls_close(self): - # Close checks for a minimum header and will raise an error - # if it is not set, so this proves that close is called. - with self.assertRaises(wave.Error): - with wave.open(TESTFN, 'wb') as f: - pass - with self.assertRaises(wave.Error): - with open(TESTFN, 'wb') as testfile: - with wave.open(testfile): - pass - - def test_context_manager_with_open_file(self): - with open(TESTFN, 'wb') as testfile: - with wave.open(testfile) as f: - f.setnchannels(nchannels) - f.setsampwidth(sampwidth) - f.setframerate(framerate) - self.assertFalse(testfile.closed) - with open(TESTFN, 'rb') as testfile: - with wave.open(testfile) as f: - self.assertFalse(f.getfp().closed) - params = f.getparams() - self.assertEqual(params.nchannels, nchannels) - self.assertEqual(params.sampwidth, sampwidth) - self.assertEqual(params.framerate, framerate) - self.assertIsNone(f.getfp()) - self.assertFalse(testfile.closed) - - def test_context_manager_with_filename(self): - # If the file doesn't get closed, this test won't fail, but it will - # produce a resource leak warning. - with wave.open(TESTFN, 'wb') as f: - f.setnchannels(nchannels) - f.setsampwidth(sampwidth) - f.setframerate(framerate) - with wave.open(TESTFN) as f: - self.assertFalse(f.getfp().closed) - params = f.getparams() - self.assertEqual(params.nchannels, nchannels) - self.assertEqual(params.sampwidth, sampwidth) - self.assertEqual(params.framerate, framerate) - self.assertIsNone(f.getfp()) +class WavePCM32Test(audiotests.AudioWriteTests, + audiotests.AudioTestsWithSourceFile, + unittest.TestCase): + module = wave + sndfilename = 'pluck-pcm32.wav' + sndfilenframes = 3307 + nchannels = 2 + sampwidth = 4 + framerate = 11025 + nframes = 48 + comptype = 'NONE' + compname = 'not compressed' + frames = bytes.fromhex("""\ + 022D65BCFFEB9D92 4B5A0F8000FA549C 3113C34004EE2BC0 80DCD680084303E0 \ + CBDEC0C006B26140 48A9980003F2F8FC BFE8248001B07D92 036BFB60FE7B5D34 \ + B8575600FA3EC920 B4B05500F3502BC0 29983000EBCB6240 1A5CA7A0E6D99A60 \ + EDFA3E80E491BD40 C625EB80E27884A0 0E05A9A0E0B6CFE0 EF292940E0292280 \ + 5758D800E2706700 FB3557D8E83E1640 1377BF00EF840280 D82C5B80F7272A80 \ + 978F1600FB774560 F5F86510FC101364 086635A0FB9C4E20 DF30FC40FB40EE28 \ + 117FE0A0FA3438B0 3EE6B840FB5AC3F0 BC77A380FCB2F454 66D6DA80FF5F32B4 \ + CF13B980041275B0 431D6980097A8C00 C1BB60000EC74E00 5120B98012A2BAA0 \ + EEDF64C01754C060 820700001664B780 7FFFFFFF14453F40 800000001294E6E0 \ + 499C1B000EB3B270 52B73E000DBCA020 EFB2B2E00F5FD880 CE3CDB400FBE1270 \ + E4B49CC00CEA2D90 6344A8800A5A7CA0 08C8FE800A1FFEE0 2BB986C00B0A0E00 \ + 51486F800E44E190 8BCC6480113B0580 B6F4EC000EEB3630 441317800A5B48A0 \ + """) + frames = audiotests.byteswap4(frames) if __name__ == '__main__':