3 \~@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"e"Z#e$d/kr6ddl%Z%e%j&d0dsDe%j&j'd1e%j&d0Z(e"e(d2Z)e*d3e(e*d4e)j+e*d5e)j,e*d6e)j-e*d7e)j.e*d8e)j/e*d9e)j0e%j&d:dr,e%j&d:Z1e*d;e1e"e1d<8Z2e2j3e)j4x"e)j5d=Z6e6s Pe2j7e6qWWdQRXe*d>WdQRXdS)@NErroropenopenfpc@s eZdZdS)rN)__name__ __module__ __qualname__rr/usr/lib64/python3.6/aifc.pyrsl@QEc Cs6ytjd|jddStjk r0tYnXdS)Nz>lr)structunpackreaderrorEOFError)filerrr _read_longsrc Cs6ytjd|jddStjk r0tYnXdS)Nz>Lr r)r r r rr)rrrr _read_ulongsrc Cs6ytjd|jddStjk r0tYnXdS)Nz>hr)r r r rr)rrrr _read_shortsrc Cs6ytjd|jddStjk r0tYnXdS)Nz>Hrr)r r r rr)rrrr _read_ushortsrcCs@t|jd}|dkrd}n |j|}|d@dkr<|jd}|S)Nr)ordr )rlengthdatadummyrrr _read_strings   rgcCst|}d}|dkr d }|d}t|}t|}||koL|koLdknrXd}n0|dkrft}n"|d}|d|td|d }||S) Nrrigii?lg@?)rr _HUGE_VALpow)fexponsignhimantlomantrrr _read_floats"r&cCs|jtjd|dS)Nz>h)writer pack)r!xrrr _write_shortsr*cCs|jtjd|dS)Nz>H)r'r r()r!r)rrr _write_ushortsr+cCs|jtjd|dS)Nz>l)r'r r()r!r)rrr _write_longsr,cCs|jtjd|dS)Nz>L)r'r r()r!r)rrr _write_ulongsr-cCsRt|dkrtd|jtjdt||j|t|d@dkrN|jddS)Nz%string exceeds maximum pstring lengthBrr)len ValueErrorr'r r()r!srrr _write_strings   r4c Csddl}|dkrd}|d}nd}|dkr8d}d}d}n|j|\}}|dks^|dks^||krp|dB}d}d}nh|d}|dkr|j||}d}||B}|j|d}|j|}t|}|j||d}|j|}t|}t||t||t||dS) Nriri@ii? r)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_readNc Cs<d|_d|_g|_d|_||_t|}|jdkr:td|jd}|dkrTd|_ n|dkrdd|_ ntdd|_ d|_ xd|_ yt|j}Wnt k rPYnX|j}|d kr|j|d|_ nH|d kr||_ |jd }d|_ n(|d krt||_n|d kr|j||jqzW|j s0|j r8tddS)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.initfpc CsLt|tr>tj|d}y|j|WqH|jYqHXn |j|dS)Nrb) isinstancestrbuiltinsrrKclose)rIr! file_objectrrr __init__\s   zAifc_read.__init__cCs|S)Nr)rIrrr __enter__hszAifc_read.__enter__cGs |jdS)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|_|jdS)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|j|j|j|j|j|jS)N)r;rZr^r`r\rbrd)rIrrr getparamss zAifc_read.getparamscCst|jdkrdS|jS)Nr)r1r@)rIrrr getmarkersszAifc_read.getmarkerscCs2x|jD]}||dkr|SqWtdj|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|jjd|jjd}|j|j}|r>|jj|dd|_|dkrPdS|jj||j}|jrv|rv|j|}|jt||j|j |_|S)Nrr=r) rErDseekr rA _framesizer?r1rYr])rInframesrrkrrrr readframess     zAifc_read.readframescCsddl}|j|dS)Nrr)audioopZalaw2lin)rIrrqrrr _alaw2linszAifc_read._alaw2lincCsddl}|j|dS)Nrr)rqZulaw2lin)rIrrqrrr _ulaw2linszAifc_read._ulaw2lincCs2ddl}t|dsd|_|j|d|j\}|_|S)Nr _adpcmstater)rqhasattrrtZ adpcm2lin)rIrrqrrr _adpcm2lins  zAifc_read._adpcm2lincCs.t||_t||_t|dd|_tt||_|j|j|_|j rd}|j dkrld}t j dd|_ |j d|_|rt|jj d}|d@dkr|d}|j ||_ |jjddt||_|jd kr*|jd kr|j|_n2|jdkr|j|_n|jdkr|j|_ntdd|_n d |_d|_dS)Nr=rrzWarning: bad COMM chunk sizer sNONEsG722ulawULAWalawALAWzunsupported compression typersnot compressedr)rzr{)r|r})rrYrr[r]r7r&r_rnrCZ chunksizewarningswarnr rarrrmrrcrvr?rsrrr)rIrJZkludgerrrr rFs<               zAifc_read._read_comm_chunkc Cst|}yHxBt|D]6}t|}t|}t|}|s8|r|jj|||fqWWnDtk rdt|jt|jdkr|dnd|f}tj |YnXdS)Nz;Warning: MARK chunk contains only %s marker%s instead of %srr3) rrangerrr@appendrr1r~r)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_writeNc Cs\t|trNtj|d}y|j|Wn|jYnX|jdrXd|_n |j|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 |jdS)N)rP)rIrrr __del__LszAifc_write.__del__cCs|S)Nr)rIrrr rSOszAifc_write.__enter__cGs |jdS)N)rP)rIrTrrr rURszAifc_write.__exit__cCs|jrtdd|_dS)Nz0cannot change parameters after starting to writer)rrrC)rIrrr aiffXszAifc_write.aiffcCs|jrtdd|_dS)Nz0cannot change parameters after starting to writer)rrrC)rIrrr aifc]szAifc_write.aifccCs(|jrtd|dkrtd||_dS)Nz0cannot change parameters after starting to writerzbad # of channels)rrrY)rI nchannelsrrr setnchannelsbs zAifc_write.setnchannelscCs|jstd|jS)Nznumber of channels not set)rYr)rIrrr rZiszAifc_write.getnchannelscCs0|jrtd|dks|dkr&td||_dS)Nz0cannot change parameters after starting to writerr zbad sample width)rrr])rI sampwidthrrr setsampwidthns zAifc_write.setsampwidthcCs|jstd|jS)Nzsample width not set)r]r)rIrrr r^uszAifc_write.getsampwidthcCs(|jrtd|dkrtd||_dS)Nz0cannot change parameters after starting to writerzbad frame rate)rrr_)rI frameraterrr setframeratezs 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|d krtd||_||_dS) Nz0cannot change parameters after starting to writeNONEulawULAWalawALAWG722zunsupported compression type)rrrrrr)rrrarc)rIcomptypecompnamerrr setcomptypeszAifc_write.setcomptypecCs|jS)N)ra)rIrrr rbszAifc_write.getcomptypecCs|jS)N)rc)rIrrr rdszAifc_write.getcompnamecCsf|\}}}}}}|jrtd|d kr.td|j||j||j||j||j||dS) Nz0cannot change parameters after starting to writeNONEulawULAWalawALAWG722zunsupported compression type)rrrrrr)rrrrrrr)rIZparamsrrrrorrrrr setparamss    zAifc_write.setparamscCs>|j s|j s|j r tdt|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)rrMbytesrr1r@r)rIrhrkrrrrr setmarks zAifc_write.setmarkcCs2x|jD]}||dkr|SqWtdj|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|jd}|jt|t||j|j}|j rN|j |}|j j ||j ||_ |j t||_ dS)Nr/)rMr bytearray memoryviewcast_ensure_header_writtenr1r]rYr?rBr'rr)rIrrorrr writeframesraws   zAifc_write.writeframesrawcCs.|j||j|jks"|j|jkr*|jdS)N)rrr[rr _patchheader)rIrrrr writeframess   zAifc_write.writeframesc Cs|jdkrdSz^|jd|jd@r<|jjd|jd|_|j|j|jksb|j|jksb|jrj|j Wdd|_ |j}d|_|j XdS)Nrrr0) rBrrr' _writemarkersrr[rrrr?rP)rIr!rrr rPs         zAifc_write.closecCsddl}|j|dS)Nrr)rqZlin2alaw)rIrrqrrr _lin2alawszAifc_write._lin2alawcCsddl}|j|dS)Nrr)rqZlin2ulaw)rIrrqrrr _lin2ulawszAifc_write._lin2ulawcCs2ddl}t|dsd|_|j|d|j\}|_|S)Nrrtr)rqrurtZ lin2adpcm)rIrrqrrr _lin2adpcms  zAifc_write._lin2adpcmcCsf|jsb|jd kr.|jsd|_|jdkr.td|js|jdkr|j|_n&|jdkr(|j|_n|jdkr:|j|_dS)NsG722ulawULAWalawALAW)rr)rr)rarr?rr)rIrrr _init_compressions      zAifc_write._init_compressioncCsL|jr|jdkr|j|jjd|js<||j|j|_|j|j|j|_|jd@rf|jd|_|jr|jdkr|jd|_|jd@r|jd|_n0|jd kr|jd d |_|jd@r|jd|_y|jj |_ Wn t t fk rd|_ YnX|j |j}|jrD|jjd |jjd t|jd t|j|jn |jjd|jjdt|j|t|j|j|j dk r|jj |_t|j|j|jdkrt|jdnt|j|jdt|j|j|jr|jj|jt|j|j|jjd|j dk r|jj |_t|j|jdt|jdt|jddS)NsNONEsFORMrulawULAWalawALAWrG722r sAIFCsFVERsAIFFsCOMMr=sSSNDr)rrrr)rrrrr)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*d t|j}|d@r$|d}d}nd}d}t|jd||jd|d||S) Nrxr rr r=ry)rCr1rcr-rBr)rI datalengthrZ verslengthrrr rTs zAifc_write._write_form_lengthcCs|jj}|jd@r,|jd}|jjdn|j}||jkrd|j|jkrd|jdkrd|jj|ddS|jj|j d|j |}|jj|j dt |j|j|jj|j dt |j|d|jj|d|j|_||_dS)Nrr0rr=)rBrXrr'rr[rrrmrrrr-r)rIZcurposrrrrr ras&       zAifc_write._patchheadercCst|jdkrdS|jjdd}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 rws"          zAifc_write._writemarkers)(rrrrBrRrKrrSrUrrrrZrr^rr`rr\rrbrdrrerrjrfrXrrrPrrrrrrrrrrrrr r sJ    3 rcCsJ|dkrt|dr|j}nd}|dkr.t|S|dkr>t|StddS) NmoderLrrrz$mode must be 'r', 'rb', 'w', or 'wb')rrL)rr)rurr<rr)r!rrrr rs __main__rz/usr/demos/data/audio/bach.aiffrZReadingz nchannels =z nframes =z sampwidth =z framerate =z comptype =z compname =rZWritingrizDone.)N)8r rOr~__all__ Exceptionrrrrrrrrr&r*r+r,r-r4r8rJr9 collectionsr:r;r__doc__rrrorrr<rrrrsysargvrfnr!printrZr\r^r`rbrdZgngrrerprrrrrr sx  !  ~