U e5d. @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$d0kr:ddl%Z%e%j&d1dsJe%j&'d2e%j&d1Z(e"e(d3Z)e*d4e(e*d5e)+e*d6e),e*d7e)-e*d8e).e*d9e)/e*d:e)0e%j&d;dr0e%j&d;Z1e*dZ6e6sqe27e6qW5QRXe*d?W5QRXdS)BNErroropenopenfpc@s eZdZdS)rN)__name__ __module__ __qualname__rr/usr/lib64/python3.8/aifc.pyrsl@QEcCs:ztd|ddWStjk r4tdYnXdS)N>lrstructZunpackreaderrorEOFErrorfilerrr _read_longsrcCs:ztd|ddWStjk r4tdYnXdS)N>Lr rr rrrr _read_ulongsrcCs:ztd|ddWStjk r4tdYnXdS)N>hrr rrrr _read_shortsrcCs:ztd|ddWStjk r4tdYnXdS)N>Hrrr rrrr _read_ushortsrcCs@t|d}|dkrd}n ||}|d@dkr<|d}|S)Nr)ordr)rlengthdatadummyrrr _read_strings   r!gcCst|}d}|dkr d}|d}t|}t|}||krN|krNdkrXnnd}n0|dkrft}n"|d}|d|td |d }||S) Nrrgi?lg@?)rr _HUGE_VALpow)fexponsignhimantlomantrrr _read_floats"r-cCs|td|dS)Nrwriter packr(xrrr _write_shortsr3cCs|td|dS)Nrr.r1rrr _write_ushortsr4cCs|td|dS)Nr r.r1rrr _write_longsr5cCs|td|dS)Nrr.r1rrr _write_ulongsr6cCsRt|dkrtd|tdt|||t|d@dkrN|ddS)Nz%string exceeds maximum pstring lengthBrr)len ValueErrorr/r r0)r(srrr _write_strings   r=c 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) Nrr#r"i@rr$i? )mathZfrexpZldexpZfloorintr4r6) r(r2r?r*r)r+r,ZfmantZfsmantrrr _write_floats8       rA)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|_ d|_ zt|j}Wnt k rYqYnX|}|d kr||d|_ nH|d kr||_ |d }d|_ n(|d krt||_n|d kr|||qx|j r,|j s4tddS)NrFORMz file does not start with FORM idr AIFFAIFCrznot an AIFF or AIFF-C fileCOMMSSNDFVERMARKz$COMM chunk and/or SSND chunk missing)_version_convert_markers _soundpos_filerBZgetnamerr_aifcZ_comm_chunk_read _ssnd_chunk_ssnd_seek_neededr_read_comm_chunkr _readmarkskip)selfrchunkZformdataZ chunknamer rrr initfp4sH         zAifc_read.initfpcCsLt|tr>t|d}z||WqH|YqHXn ||dS)Nrb) isinstancestrbuiltinsrr[closerYr(Z file_objectrrr __init__\s   zAifc_read.__init__cCs|SNrrYrrr __enter__hszAifc_read.__enter__cGs |dSrcr`rYargsrrr __exit__kszAifc_read.__exit__cCs|jSrc)rRrdrrr getfpqszAifc_read.getfpcCsd|_d|_dS)Nrr)rUrQrdrrr rewindtszAifc_read.rewindcCs |j}|dk rd|_|dSrc)rRr`rYrrrr r`xszAifc_read.closecCs|jSrc)rQrdrrr tell~szAifc_read.tellcCs|jSrc) _nchannelsrdrrr getnchannelsszAifc_read.getnchannelscCs|jSrc)_nframesrdrrr getnframesszAifc_read.getnframescCs|jSrc) _sampwidthrdrrr getsampwidthszAifc_read.getsampwidthcCs|jSrc) _frameraterdrrr getframerateszAifc_read.getframeratecCs|jSrc _comptyperdrrr getcomptypeszAifc_read.getcomptypecCs|jSrc _compnamerdrrr getcompnameszAifc_read.getcompnamecCs*t||||||Src)rDrorsrurqrxr{rdrrr getparamss zAifc_read.getparamscCst|jdkrdS|jSNrr:rPrdrrr getmarkersszAifc_read.getmarkerscCs2|jD]}||dkr|Sqtd|dSNrzmarker {0!r} does not existrPrformatrYidmarkerrrr getmarks   zAifc_read.getmarkcCs*|dks||jkrtd||_d|_dS)Nrzposition not in ranger)rprrQrU)rYposrrr setposszAifc_read.setposcCs|jrD|jd|jd}|j|j}|r>|j|dd|_|dkrPdS|j||j}|jrv|rv||}|jt||j|j |_|S)NrrKr) rUrTseekrrQ _framesizerOr:rnrr)rYnframesr rrrrr readframess       zAifc_read.readframescCsddl}||dSNrr)audioopZalaw2linrYrrrrr _alaw2linszAifc_read._alaw2lincCsddl}||dSr)rZulaw2linrrrr _ulaw2linszAifc_read._ulaw2lincCs2ddl}t|dsd|_||d|j\}|_|SNr _adpcmstater)rhasattrrZ adpcm2linrrrr _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)NrKrbad sample widthbad # of channelsrzWarning: bad COMM chunk sizer r"NONEG722ulawULAWalawALAWunsupported compression typernot compressed)rrnrrprrr@r-rtrrrSZ chunksizewarningswarnrrwrrrr!rzrrOrr)rYrZZkludgerrrr rVsD                 zAifc_read._read_comm_chunkcCst|}zDt|D]6}t|}t|}t|}|s6|r|j|||fqWnDtk rdt|jt|jdkrxdnd|f}t |YnXdS)Nz;Warning: MARK chunk contains only %s marker%s instead of %srr<) rrangerr!rPappendrr:rr)rYrZZnmarkersirrnamewrrr rWs zAifc_read._readmark)rrrrRr[rbrerirjrkr`rmrorqrsrurxr{r|rrrrrrrrVrWrrrr rEs2$( *rEc@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}z||Wn|YnX|drXd|_n ||dS)Nwbz.aiffr)r]r^r_rr[r`endswithrSrarrr rb/s   zAifc_write.__init__cCs^||_t|_d|_d|_d|_d|_d|_d|_d|_ d|_ d|_ d|_ g|_ d|_d|_dS)Nrrrr)rR _AIFC_versionrNrwrzrOrnrrrtrp_nframeswritten _datawritten _datalengthrP _marklengthrSrlrrr r[?szAifc_write.initfpcCs |dSrcrfrdrrr __del__PszAifc_write.__del__cCs|Srcrrdrrr reSszAifc_write.__enter__cGs |dSrcrfrgrrr riVszAifc_write.__exit__cCs|jrtdd|_dS)N0cannot change parameters after starting to writerrrrSrdrrr aiff\szAifc_write.aiffcCs|jrtdd|_dS)Nrrrrdrrr aifcaszAifc_write.aifccCs(|jrtd|dkrtd||_dS)Nrrr)rrrn)rY nchannelsrrr setnchannelsfs zAifc_write.setnchannelscCs|jstd|jS)Nznumber of channels not set)rnrrdrrr romszAifc_write.getnchannelscCs0|jrtd|dks|dkr&td||_dS)Nrrr r)rrrr)rY sampwidthrrr setsampwidthrs zAifc_write.setsampwidthcCs|jstd|jS)Nzsample width not set)rrrrdrrr rsyszAifc_write.getsampwidthcCs(|jrtd|dkrtd||_dS)Nrrzbad frame rate)rrrt)rY frameraterrr setframerate~s zAifc_write.setframeratecCs|jstd|jS)Nzframe rate not set)rtrrdrrr ruszAifc_write.getframeratecCs|jrtd||_dS)Nr)rrrp)rYrrrr setnframesszAifc_write.setnframescCs|jSrcrrdrrr rqszAifc_write.getnframescCs.|jrtd|dkrtd||_||_dSNr)rrrrrrr)rrrwrz)rYcomptypecompnamerrr setcomptypes zAifc_write.setcomptypecCs|jSrcrvrdrrr rxszAifc_write.getcomptypecCs|jSrcryrdrrr r{szAifc_write.getcompnamecCsf|\}}}}}}|jrtd|dkr.td|||||||||||dSr)rrrrrrr)rYZparamsrrrrrrrrr setparamss    zAifc_write.setparamscCs8|jr|jr|jstdt|j|j|j|j|j|jS)Nznot all parameters set)rnrrrtrrDrprwrzrdrrr r|szAifc_write.getparamscCs|dkrtd|dkr tdt|ts2tdtt|jD],}||j|dkr@|||f|j|<dSq@|j|||fdS)Nrzmarker ID must be > 0zmarker position must be >= 0zmarker name must be bytes)rr]bytesrr:rPr)rYrrrrrrr setmarks zAifc_write.setmarkcCs2|jD]}||dkr|Sqtd|dSrrrrrr rs   zAifc_write.getmarkcCst|jdkrdS|jSr}r~rdrrr rszAifc_write.getmarkerscCs|jSrcrrdrrr rmszAifc_write.tellcCszt|ttfst|d}|t|t||j|j}|j rN| |}|j ||j ||_ |j t||_ dS)Nr8)r]r bytearray memoryviewcast_ensure_header_writtenr:rrrnrOrRr/rr)rYrrrrr writeframesraws   zAifc_write.writeframesrawcCs.|||j|jks"|j|jkr*|dSrc)rrrprr _patchheader)rYrrrr writeframess    zAifc_write.writeframescCs|jdkrdSz^|d|jd@r<|jd|jd|_||j|jksb|j |jksb|j rj| W5d|_|j}d|_|XdS)Nrrr9) rRrOr`rrr/ _writemarkersrrprrr)rYr(rrr r`s$        zAifc_write.closecCsddl}||dSr)rZlin2alawrrrr _lin2alawszAifc_write._lin2alawcCsddl}||dSr)rZlin2ulawrrrr _lin2ulawszAifc_write._lin2ulawcCs2ddl}t|dsd|_||d|j\}|_|Sr)rrrZ lin2adpcmrrrr _lin2adpcms  zAifc_write._lin2adpcmcCsf|jsb|jdkr.|jsd|_|jdkr.td|js|jdkr|j|_n&|jdkr(|j|_n|jdkr:|j|_dS)Nrrr)rwrrOrrrdrrr _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|_z|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)NrrFr)rrrrrrr rHrLrGrIrrKrJr)rSrwrrRr/rprnrrrrm_form_length_posAttributeErrorOSError_write_form_lengthr6rNr3 _nframes_posrArtr=rz_ssnd_length_pos)rYZ initlength commlengthrrr r%s^                        zAifc_write._write_headercCs\|jr*dt|j}|d@r$|d}d}nd}d}t|jd||jd|d||S) Nrr rrr rK)rSr:rzr6rRr)rY 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)Nrr9rrK)rRrmrr/rrprrrrrrr6r)rYZcurposrr rrr res*      zAifc_write._patchheadercCst|jdkrdS|jdd}|jD]:}|\}}}|t|dd}t|d@dkr(|d}q(t|j||d|_t|jt|j|jD]2}|\}}}t|j|t|j|t|j|qdS)NrrMrrrK)r:rPrRr/r6rr3r=)rYrrrrrrrr r{s"          zAifc_write._writemarkers)(rrrrRrbr[rrerirrrrorrsrrurrqrrxr{rr|rrrrmrrr`rrrrrrrrrrrrr rsJ    3 rcCsJ|dkrt|dr|j}nd}|dkr.t|S|dkr>t|StddS)Nmoder\)rr\)rrz$mode must be 'r', 'rb', 'w', or 'wb')rrrErrr(rrrr rs cCstjdtddt||dS)NzBaifc.openfp is deprecated since Python 3.7. Use aifc.open instead.r) stacklevel)r)rrDeprecationWarningrrrrr rs __main__rz/usr/demos/data/audio/bach.aiffrZReadingz nchannels =z nframes =z sampwidth =z framerate =z comptype =z compname =rZWritingrizDone.)N)N)8r r_r__all__ Exceptionrrrrrrr!r&r-r3r4r5r6r=rArZrB collectionsrCrDr__doc__rrrrrrErrrrsysargvrfnr(printrorqrsrurxr{Zgngrr|rrrrrrr sz  !