eaiovnaovbqoebvqoeavibavo B YI~d. @s@ddlZddlZddlZdddgZGdddeZdZddZd d Zd d Z d dZ ddZ dZ ddZ ddZddZddZddZddZddZdd lmZdd!lmZed"d#Zd$ej_d%ej_d&ej_d'ej_d(ej_d)ej_Gd*d+d+Z Gd,d-d-Z!d@d.dZ"dAd/dZ#e$d0krZ6e6sPe27e6qWWdQRXe*d?WdQRXdS)BNErroropenopenfpc@s eZdZdS)rN)__name__ __module__ __qualname__rr)/opt/alt/python37/lib64/python3.7/aifc.pyrsl@QEcCs8ytd|ddStjk r2tdYnXdS)Nz>lr)structunpackreaderrorEOFError)filerrr _read_longsrcCs8ytd|ddStjk r2tdYnXdS)Nz>Lr r)r r r rr)rrrr _read_ulongsrcCs8ytd|ddStjk r2tdYnXdS)Nz>hr)r r r rr)rrrr _read_shortsrcCs8ytd|ddStjk r2tdYnXdS)Nz>Hrr)r r r rr)rrrr _read_ushortsrcCs@t|d}|dkrd}n ||}|d@dkr<|d}|S)Nr)ordr )rlengthdatadummyrrr _read_strings   rgcCst|}d}|dkr d}|d}t|}t|}||krN|krNdkrXnnd}n0|dkrft}n"|d}|d|td |d }||S) Nrrigii?lg@?)rr _HUGE_VALpow)fexponsignhimantlomantrrr _read_floats"r&cCs|td|dS)Nz>h)writer pack)r!xrrr _write_shortsr*cCs|td|dS)Nz>H)r'r r()r!r)rrr _write_ushortsr+cCs|td|dS)Nz>l)r'r r()r!r)rrr _write_longsr,cCs|td|dS)Nz>L)r'r r()r!r)rrr _write_ulongsr-cCsRt|dkrtd|tdt|||t|d@dkrN|ddS)Nz%string exceeds maximum pstring lengthBrr)len ValueErrorr'r r()r!srrr _write_strings   r4c Csddl}|dkrd}|d}nd}|dkr8d}d}d}n||\}}|dks^|dks^||krp|dB}d}d}nh|d}|dkr|||}d}||B}||d}||}t|}|||d}||}t|}t||t||t||dS) Nriri@rii? )mathZfrexpZldexpZfloorintr+r-) r!r)r6r#r"r$r%ZfmantZfsmantrrr _write_floats8       r8)Chunk) namedtuple _aifc_paramsz7nchannels sampwidth framerate nframes comptype compnamez3Number of audio channels (1 for mono, 2 for stereo)zSample width in byteszSampling frequencyzNumber of audio framesz(Compression type ("NONE" for AIFF files)zRA human-readable version of the compression type ('not compressed' for AIFF files)c@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1ZdS)2 Aifc_readNcCs8d|_d|_g|_d|_||_t|}|dkr:td|d}|dkrTd|_ n|dkrdd|_ ntdd|_ d|_ xd|_ yt|j}Wnt k rPYnX|}|d kr||d|_ nH|d kr||_ |d }d|_ n(|d krt||_n|d kr|||qzW|j r,|j s4tddS)NrsFORMz file does not start with FORM idr sAIFFsAIFCrznot an AIFF or AIFF-C filesCOMMsSSNDsFVERsMARKz$COMM chunk and/or SSND chunk missing)_version_convert_markers _soundpos_filer9Zgetnamerr _aifcZ_comm_chunk_read _ssnd_chunk_ssnd_seek_neededr_read_comm_chunkr _readmarkskip)selfrchunkZformdataZ chunknamerrrr initfp4sJ        zAifc_read.initfpcCsLt|tr>t|d}y||WqH|YqHXn ||dS)Nrb) isinstancestrbuiltinsrrKclose)rIr! file_objectrrr __init__\s   zAifc_read.__init__cCs|S)Nr)rIrrr __enter__hszAifc_read.__enter__cGs |dS)N)rP)rIargsrrr __exit__kszAifc_read.__exit__cCs|jS)N)rB)rIrrr getfpqszAifc_read.getfpcCsd|_d|_dS)Nrr)rErA)rIrrr rewindtszAifc_read.rewindcCs |j}|dk rd|_|dS)N)rBrP)rIrrrr rPxszAifc_read.closecCs|jS)N)rA)rIrrr tell~szAifc_read.tellcCs|jS)N) _nchannels)rIrrr getnchannelsszAifc_read.getnchannelscCs|jS)N)_nframes)rIrrr getnframesszAifc_read.getnframescCs|jS)N) _sampwidth)rIrrr getsampwidthszAifc_read.getsampwidthcCs|jS)N) _framerate)rIrrr getframerateszAifc_read.getframeratecCs|jS)N) _comptype)rIrrr getcomptypeszAifc_read.getcomptypecCs|jS)N) _compname)rIrrr getcompnameszAifc_read.getcompnamecCs*t||||||S)N)r;rZr^r`r\rbrd)rIrrr getparamss zAifc_read.getparamscCst|jdkrdS|jS)Nr)r1r@)rIrrr getmarkersszAifc_read.getmarkerscCs2x|jD]}||dkr|SqWtd|dS)Nrzmarker {0!r} does not exist)r@rformat)rIidmarkerrrr getmarks  zAifc_read.getmarkcCs*|dks||jkrtd||_d|_dS)Nrzposition not in ranger)r[rrArE)rIposrrr setposszAifc_read.setposcCs|jrD|jd|jd}|j|j}|r>|j|dd|_|dkrPdS|j||j}|jrv|rv||}|jt||j|j |_|S)Nrr=r) rErDseekr rA _framesizer?r1rYr])rInframesrrkrrrr readframess     zAifc_read.readframescCsddl}||dS)Nrr)audioopZalaw2lin)rIrrqrrr _alaw2linszAifc_read._alaw2lincCsddl}||dS)Nrr)rqZulaw2lin)rIrrqrrr _ulaw2linszAifc_read._ulaw2lincCs2ddl}t|dsd|_||d|j\}|_|S)Nr _adpcmstater)rqhasattrrtZ adpcm2lin)rIrrqrrr _adpcm2lins  zAifc_read._adpcm2lincCsVt||_t||_t|dd|_tt||_|jdkrFtd|jdkrXtd|j|j|_ |j rFd}|j dkrd}t dd |_ |d |_|rt|jd}|d@dkr|d}|j ||_ |jd dt||_|jd krR|jd kr |j|_n4|jdkr |j|_n|jdkr6|j|_ntdd|_n d |_d|_dS)Nr=rzbad sample widthzbad # of channelsrzWarning: bad COMM chunk sizer rsNONEsG722)sulawsULAW)salawsALAWzunsupported compression typersnot compressed)rrYrr[r]r7r&r_rrnrCZ chunksizewarningswarnr rarrrmrrcrvr?rsrr)rIrJZkludgerrrr rFsD                 zAifc_read._read_comm_chunkcCst|}yHxBt|D]6}t|}t|}t|}|s8|r|j|||fqWWnDtk rdt|jt|jdkr|dnd|f}t |YnXdS)Nz;Warning: MARK chunk contains only %s marker%s instead of %srr3) rrangerrr@appendrr1rzr{)rIrJZnmarkersirhrknamewrrr rGszAifc_read._readmark)rrrrBrKrRrSrUrVrWrPrXrZr\r^r`rbrdrerfrjrlrprrrsrvrFrGrrrr r<s2$( *r<c@s0eZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Z dd?Z"d@dAZ#dBdCZ$dDdEZ%dFdGZ&dHdIZ'dS)J Aifc_writeNcCs\t|trNt|d}y||Wn|YnX|drXd|_n ||dS)Nwbz.aiffr)rMrNrOrrKrPendswithrC)rIr!rQrrr rR/s   zAifc_write.__init__cCs^||_t|_d|_d|_d|_d|_d|_d|_d|_ d|_ d|_ d|_ g|_ d|_d|_dS)NsNONEsnot compressedrr)rB _AIFC_versionr>rarcr?rYr]r_r[_nframeswritten _datawritten _datalengthr@ _marklengthrC)rIrrrr rK?szAifc_write.initfpcCs |dS)N)rP)rIrrr __del__PszAifc_write.__del__cCs|S)Nr)rIrrr rSSszAifc_write.__enter__cGs |dS)N)rP)rIrTrrr rUVszAifc_write.__exit__cCs|jrtdd|_dS)Nz0cannot change parameters after starting to writer)rrrC)rIrrr aiff\szAifc_write.aiffcCs|jrtdd|_dS)Nz0cannot change parameters after starting to writer)rrrC)rIrrr aifcaszAifc_write.aifccCs(|jrtd|dkrtd||_dS)Nz0cannot change parameters after starting to writerzbad # of channels)rrrY)rI nchannelsrrr setnchannelsfs zAifc_write.setnchannelscCs|jstd|jS)Nznumber of channels not set)rYr)rIrrr rZmszAifc_write.getnchannelscCs0|jrtd|dks|dkr&td||_dS)Nz0cannot change parameters after starting to writerr zbad sample width)rrr])rI sampwidthrrr setsampwidthrs zAifc_write.setsampwidthcCs|jstd|jS)Nzsample width not set)r]r)rIrrr r^yszAifc_write.getsampwidthcCs(|jrtd|dkrtd||_dS)Nz0cannot change parameters after starting to writerzbad frame rate)rrr_)rI frameraterrr setframerate~s zAifc_write.setframeratecCs|jstd|jS)Nzframe rate not set)r_r)rIrrr r`szAifc_write.getframeratecCs|jrtd||_dS)Nz0cannot change parameters after starting to write)rrr[)rIrorrr setnframesszAifc_write.setnframescCs|jS)N)r)rIrrr r\szAifc_write.getnframescCs.|jrtd|dkrtd||_||_dS)Nz0cannot change parameters after starting to write)sNONEsulawsULAWsalawsALAWsG722zunsupported compression type)rrrarc)rIcomptypecompnamerrr setcomptypes zAifc_write.setcomptypecCs|jS)N)ra)rIrrr rbszAifc_write.getcomptypecCs|jS)N)rc)rIrrr rdszAifc_write.getcompnamecCsf|\}}}}}}|jrtd|dkr.td|||||||||||dS)Nz0cannot change parameters after starting to write)sNONEsulawsULAWsalawsALAWsG722zunsupported compression type)rrrrrrr)rIparamsrrrrorrrrr setparamss    zAifc_write.setparamscCs8|jr|jr|jstdt|j|j|j|j|j|jS)Nznot all parameters set)rYr]r_rr;r[rarc)rIrrr reszAifc_write.getparamscCs|dkrtd|dkr tdt|ts2tdx 0zmarker position must be >= 0zmarker name must be bytes)rrMbytesr}r1r@r~)rIrhrkrrrrr setmarks zAifc_write.setmarkcCs2x|jD]}||dkr|SqWtd|dS)Nrzmarker {0!r} does not exist)r@rrg)rIrhrirrr rjs  zAifc_write.getmarkcCst|jdkrdS|jS)Nr)r1r@)rIrrr rfszAifc_write.getmarkerscCs|jS)N)r)rIrrr rXszAifc_write.tellcCszt|ttfst|d}|t|t||j|j}|j rN| |}|j ||j ||_ |j t||_ dS)Nr/)rMr bytearray memoryviewcast_ensure_header_writtenr1r]rYr?rBr'rr)rIrrorrr writeframesraws   zAifc_write.writeframesrawcCs.|||j|jks"|j|jkr*|dS)N)rrr[rr _patchheader)rIrrrr writeframess   zAifc_write.writeframescCs|jdkrdSz^|d|jd@r<|jd|jd|_||j|jksb|j|jksb|jrj| Wdd|_ |j}d|_| XdS)Nrrr0) rBrrr' _writemarkersrr[rrrr?rP)rIr!rrr rPs         zAifc_write.closecCsddl}||dS)Nrr)rqZlin2alaw)rIrrqrrr _lin2alawszAifc_write._lin2alawcCsddl}||dS)Nrr)rqZlin2ulaw)rIrrqrrr _lin2ulawszAifc_write._lin2ulawcCs2ddl}t|dsd|_||d|j\}|_|S)Nrrtr)rqrurtZ lin2adpcm)rIrrqrrr _lin2adpcms  zAifc_write._lin2adpcmcCsf|jsb|jdkr.|jsd|_|jdkr.td|js|jdkr|j|_n&|jdkr(|j|_n|jdkr:|j|_dS)NsG722)sulawsULAW)salawsALAW)rarr?rr)rIrrr _init_compressions      zAifc_write._init_compressionc CsJ|jr|jdkr||jd|js<||j|j|_|j|j|j|_|jd@rf|jd|_|jr|jdkr|jd|_|jd@r|jd|_n0|jdkr|jdd|_|jd@r|jd|_y|j |_ Wnt t fk rd|_ YnX| |j}|jrB|jd |jd t|jdt|j|jn |jd |jd t|j|t|j|j|j dk r|j |_t|j|j|jd krt|jdnt|j|jdt|j|j|jr|j|jt|j|j|jd|j dk r|j |_t|j|jdt|jdt|jddS)NsNONEsFORMr)sulawsULAWsalawsALAWrsG722r sAIFCsFVERsAIFFsCOMM)sULAWsulawsALAWsalawsG722r=sSSNDr)rCrarrBr'r[rYr]rrX_form_length_posAttributeErrorOSError_write_form_lengthr-r>r* _nframes_posr8r_r4rc_ssnd_length_pos)rIZ initlength commlengthrrr r%s^                        zAifc_write._write_headercCs\|jr*dt|j}|d@r$|d}d}nd}d}t|jd||jd|d||S) Nryr rxrr r=)rCr1rcr-rBr)rI datalengthrZ verslengthrrr rXs zAifc_write._write_form_lengthcCs|j}|jd@r,|jd}|jdn|j}||jkrd|j|jkrd|jdkrd|j|ddS|j|j d| |}|j|j dt |j|j|j|j dt |j|d|j|d|j|_||_dS)Nrr0rr=)rBrXrr'rr[rrrmrrrr-r)rIZcurposrrrrr res&       zAifc_write._patchheadercCst|jdkrdS|jdd}xD|jD]:}|\}}}|t|dd}t|d@dkr*|d}q*Wt|j||d|_t|jt|jx<|jD]2}|\}}}t|j|t|j|t|j|qWdS)NrsMARKrrr=)r1r@rBr'r-rr*r4)rIrrirhrkrrrr r{s"          zAifc_write._writemarkers)(rrrrBrRrKrrSrUrrrrZrr^rr`rr\rrbrdrrerrjrfrXrrrPrrrrrrrrrrrrr rsJ    3 rcCsJ|dkrt|dr|j}nd}|dkr.t|S|dkr>t|StddS)NmoderL)rrL)rrz$mode must be 'r', 'rb', 'w', or 'wb')rurr<rr)r!rrrr rs cCstjdtddt||dS)NzBaifc.openfp is deprecated since Python 3.7. Use aifc.open instead.r) stacklevel)r)rzr{DeprecationWarningr)r!rrrr rs __main__rz/usr/demos/data/audio/bach.aiffrZReadingz nchannels =z nframes =z sampwidth =z framerate =z comptype =z compname =rZWritingrizDone.)N)N)8r rOrz__all__ Exceptionrrrrrrrrr&r*r+r,r-r4r8rJr9 collectionsr:r;r__doc__rrrorrr<rrrrsysargvr~fnr!printrZr\r^r`rbrdZgngrrerprrrrrr sz  !