]|@sddlZddlZddlZdddgZGdddeZdZddZd d Zd d Z d dZ ddZ dZ ddZ ddZddZddZddZddZddZdd lmZdd!lmZed"d#ZGd$d%d%ZGd&d'd'Zdd(dZeZed)krddlZejd*d rejj d+ejd*Z!ee!d,Z"e#d-e!e#d.e"j$e#d/e"j%e#d0e"j&e#d1e"j'e#d2e"j(e#d3e"j)ejd4drejd4Z*e#d5e*ee*d6EZ+e+j,e"j-x(e"j.d7Z/e/ rPe+j0e/q~WWdQRXe#d8WdQRXdS)9NErroropenopenfpc@seZdZdS)rN)__name__ __module__ __qualname__rr)/opt/alt/python35/lib64/python3.5/aifc.pyrs l@QEc CsCy!tjd|jddSWntjk r>tYnXdS)Nz>lr)structunpackreaderrorEOFError)filerrr _read_longs!rc CsCy!tjd|jddSWntjk r>tYnXdS)Nz>Lr r)r r r rr)rrrr _read_ulongs!rc CsCy!tjd|jddSWntjk r>tYnXdS)Nz>hr)r r r rr)rrrr _read_shorts!rc CsCy!tjd|jddSWntjk r>tYnXdS)Nz>Hrr)r r r rr)rrrr _read_ushorts!rcCs\t|jd}|dkr*d}n|j|}|d@dkrX|jd}|S)Nr)ordr )rlengthdatadummyrrr _read_strings  rgcCst|}d}|dkr.d }|d}t|}t|}||koh|kohdknrvd}n>|dkrt}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-cCsqt|dkrtd|jtjdt||j|t|d@dkrm|jddS)Nz%string exceeds maximum pstring lengthBrrs)len ValueErrorr'r r()r!srrr _write_strings   r3c Cseddl}|dkr+d}|d}nd}|dkrRd}d}d}n|j|\}}|dks|dks||kr|dB}d}d}n|d}|dkr|j||}d}||B}|j|d}|j|}t|}|j||d}|j|}t|}t||t||t||dS) Nriri@ii? r)mathfrexpldexpfloorintr+r-) r!r)r5r#r"r$r%ZfmantZfsmantrrr _write_floats8     $         r:)Chunk) namedtuple _aifc_paramsz7nchannels sampwidth framerate nframes comptype compnamec@s6eZdZdZddZddZddZdd 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 Csd|_d|_g|_d|_||_t|}|jdkrWtd|jd}|dkr~d|_ n$|dkrd|_ n tdd|_ xd|_ yt|j}Wnt k rPYnX|j}|d kr|j |d|_ ng|d krA||_|jd }d|_ n7|d kr_t||_n|d krx|j||jqW|j s|j rtddS)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_filer;Zgetnamerr _aifcZ_comm_chunk_read_ssnd_seek_neededr_read_comm_chunk _ssnd_chunkr _readmarkskip)selfrchunkZformdataZ chunknamerrrr initfp+sH                         zAifc_read.initfpc Cs^t|trMtj|d}y|j|WqZ|jYqZXn |j|dS)Nrb) isinstancestrbuiltinsrrMclose)rKr! file_objectrrr __init__Rs  zAifc_read.__init__cCs|S)Nr)rKrrr __enter__^szAifc_read.__enter__cGs|jdS)N)rR)rKargsrrr __exit__aszAifc_read.__exit__cCs|jS)N)rD)rKrrr getfpgszAifc_read.getfpcCsd|_d|_dS)Nrr)rFrC)rKrrr rewindjs zAifc_read.rewindcCs,|j}|dk r(d|_|jdS)N)rDrR)rKrrrr rRns   zAifc_read.closecCs|jS)N)rC)rKrrr telltszAifc_read.tellcCs|jS)N) _nchannels)rKrrr getnchannelswszAifc_read.getnchannelscCs|jS)N)_nframes)rKrrr getnframeszszAifc_read.getnframescCs|jS)N) _sampwidth)rKrrr getsampwidth}szAifc_read.getsampwidthcCs|jS)N) _framerate)rKrrr getframerateszAifc_read.getframeratecCs|jS)N) _comptype)rKrrr getcomptypeszAifc_read.getcomptypecCs|jS)N) _compname)rKrrr getcompnameszAifc_read.getcompnamecCs=t|j|j|j|j|j|jS)N)r=r\r`rbr^rdrf)rKrrr getparamsszAifc_read.getparamscCs t|jdkrdS|jS)Nr)r0rB)rKrrr getmarkersszAifc_read.getmarkerscCsAx%|jD]}||dkr |Sq Wtdj|dS)Nrzmarker {0!r} does not exist)rBrformat)rKidmarkerrrr getmarkszAifc_read.getmarkcCs=|dks||jkr'td||_d|_dS)Nrzposition not in ranger)r]rrCrF)rKposrrr setposs  zAifc_read.setposcCs|jr^|jjd|jjd}|j|j}|rU|jj|dd|_|dkrndS|jj||j}|jr|r|j|}|jt||j|j |_|S)Nrr?r) rFrHseekr rC _framesizerAr0r[r_)rKnframesrrmrrrr readframess   zAifc_read.readframescCsddl}|j|dS)Nrr)audioopZalaw2lin)rKrrsrrr _alaw2lins zAifc_read._alaw2lincCsddl}|j|dS)Nrr)rsZulaw2lin)rKrrsrrr _ulaw2lins zAifc_read._ulaw2lincCsIddl}t|ds$d|_|j|d|j\}|_|S)Nr _adpcmstater)rshasattrrvZ adpcm2lin)rKrrsrrr _adpcm2lins   !zAifc_read._adpcm2lincCst||_t||_t|dd|_tt||_|j|j|_|j rd}|j dkrd}t j dd|_ |j d|_|rt|jj d}|d@dkr|d}|j ||_ |jjddt||_|jd kr|jd kr@|j|_nH|jdkr^|j|_n*|jdkr||j|_n tdd|_nd |_d|_dS)Nr?rrzWarning: bad COMM chunk sizer sNONEsG722ulawULAWalawALAWzunsupported compression typersnot compressedr)r|r})r~r)rr[rr]r_r9r&rarprE chunksizewarningswarnr rcrrrorrerxrArurtr)rKrLZkludgerrrr rGs<       zAifc_read._read_comm_chunkc Cst|}ydx]t|D]O}t|}t|}t|}|sR|r|jj|||fqWWnVtk rdt|jt|jdkrdnd|f}tj |YnXdS)Nz;Warning: MARK chunk contains only %s marker%s instead of %srr2) rrangerrrBappendrr0rr)rKrLZnmarkersirjrmnamewrrr rIs     ! * zAifc_read._readmark)rrrrDrMrTrUrWrXrYrRrZr\r^r`rbrdrfrgrhrlrnrrrtrurxrGrIrrrr r>s2 $ '                     &r>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/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Z d<d=Z!d>d?Z"d@dAZ#dBdCZ$dDdEZ%dFdGZ&dHdIZ'dS)J Aifc_writeNc Csvt|tretj|d}y|j|Wn|jYnX|jdrrd|_n |j|dS)Nwbz.aiffr)rOrPrQrrMrRendswithrE)rKr!rSrrr rT!s  zAifc_write.__init__cCs||_t|_d|_d|_d|_d|_d|_d|_d|_ d|_ d|_ d|_ g|_ d|_d|_dS)NsNONEsnot compressedrr)rD _AIFC_versionr@rcrerAr[r_rar]_nframeswritten _datawritten _datalengthrB _marklengthrE)rKrrrr rM1s              zAifc_write.initfpcCs|jdS)N)rR)rKrrr __del__BszAifc_write.__del__cCs|S)Nr)rKrrr rUEszAifc_write.__enter__cGs|jdS)N)rR)rKrVrrr rWHszAifc_write.__exit__cCs"|jrtdd|_dS)Nz0cannot change parameters after starting to writer)rrrE)rKrrr aiffNs  zAifc_write.aiffcCs"|jrtdd|_dS)Nz0cannot change parameters after starting to writer)rrrE)rKrrr aifcSs  zAifc_write.aifccCs:|jrtd|dkr-td||_dS)Nz0cannot change parameters after starting to writerzbad # of channels)rrr[)rK nchannelsrrr setnchannelsXs     zAifc_write.setnchannelscCs|jstd|jS)Nznumber of channels not set)r[r)rKrrr r\_s  zAifc_write.getnchannelscCsF|jrtd|dks-|dkr9td||_dS)Nz0cannot change parameters after starting to writerr zbad sample width)rrr_)rK sampwidthrrr setsampwidthds    zAifc_write.setsampwidthcCs|jstd|jS)Nzsample width not set)r_r)rKrrr r`ks  zAifc_write.getsampwidthcCs:|jrtd|dkr-td||_dS)Nz0cannot change parameters after starting to writerzbad frame rate)rrra)rK frameraterrr setframerateps     zAifc_write.setframeratecCs|jstd|jS)Nzframe rate not set)rar)rKrrr rbws  zAifc_write.getframeratecCs"|jrtd||_dS)Nz0cannot change parameters after starting to write)rrr])rKrqrrr setnframes|s  zAifc_write.setnframescCs|jS)N)r)rKrrr r^szAifc_write.getnframescCsC|jrtd|d kr-td||_||_dS) Nz0cannot change parameters after starting to writeNONEulawULAWalawALAWG722zunsupported compression type)rrrrrr)rrrcre)rKcomptypecompnamerrr setcomptypes     zAifc_write.setcomptypecCs|jS)N)rc)rKrrr rdszAifc_write.getcomptypecCs|jS)N)re)rKrrr rfszAifc_write.getcompnamecCs|\}}}}}}|jr-td|d krEtd|j||j||j||j||j||dS) Nz0cannot change parameters after starting to writeNONEulawULAWalawALAWG722zunsupported compression type)rrrrrr)rrrrrrr)rKparamsrrrrqrrrrr setparamss        zAifc_write.setparamscCsU|j s|j s|j r*tdt|j|j|j|j|j|jS)Nznot all parameters set)r[r_rarr=r]rcre)rKrrr rgs zAifc_write.getparamscCs|dkrtd|dkr0tdt|tsKtdxNtt|jD]7}||j|dkra|||f|j| 0zmarker position must be >= 0zmarker name must be bytes)rrObytesrr0rBr)rKrjrmrrrrr setmarks     zAifc_write.setmarkcCsAx%|jD]}||dkr |Sq Wtdj|dS)Nrzmarker {0!r} does not exist)rBrri)rKrjrkrrr rlszAifc_write.getmarkcCs t|jdkrdS|jS)Nr)r0rB)rKrrr rhszAifc_write.getmarkerscCs|jS)N)r)rKrrr rZszAifc_write.tellcCst|ttfs*t|jd}|jt|t||j|j}|j ro|j |}|j j ||j ||_ |j t||_ dS)Nr/)rOr bytearray memoryviewcast_ensure_header_writtenr0r_r[rArDr'rr)rKrrqrrr writeframesraws zAifc_write.writeframesrawcCs?|j||j|jks1|j|jkr;|jdS)N)rrr]rr _patchheader)rKrrrr writeframess zAifc_write.writeframesc Cs|jdkrdSz|jd|jd@rP|jjd|jd|_|j|j|jks|j|jks|jr|j Wdd|_ |j}d|_|j XdS)Nrrs) rDrrr' _writemarkersrr]rrrrArR)rKr!rrr rRs        zAifc_write.closecCsddl}|j|dS)Nrr)rsZlin2alaw)rKrrsrrr _lin2alaws zAifc_write._lin2alawcCsddl}|j|dS)Nrr)rsZlin2ulaw)rKrrsrrr _lin2ulaws zAifc_write._lin2ulawcCsIddl}t|ds$d|_|j|d|j\}|_|S)Nrrvr)rsrwrvZ lin2adpcm)rKrrsrrr _lin2adpcms   !zAifc_write._lin2adpcmcCs|js|jd krE|js*d|_|jdkrEtd|jsZtd|jsotd |jstd |j|dS) NULAWulawALAWalawG722rzRsample width must be 2 when compressing with ulaw/ULAW, alaw/ALAW or G7.22 (ADPCM)z# channels not specifiedzsample width not specifiedzsampling rate not specified)rrrrr)rrcr_rr[ra _write_header)rKZdatasizerrr rs          z!Aifc_write._ensure_header_writtencCs[|jdkr|j|_n9|jdkr<|j|_n|jdkrW|j|_dS)NsG722ulawULAWalawALAW)rr)rr)rcrrArr)rKrrr _init_compressions zAifc_write._init_compressioncCs |jr"|jdkr"|j|jjd|jsR||j|j|_|j|j|j|_|jd@r|jd|_|jr|jdkr|jd|_|jd@r|jd|_n@|jd kr|jd d |_|jd@r|jd|_y|jj |_ Wn!t t fk rJd|_ YnX|j |j}|jr|jjd |jjd t|jd t|j|jn|jjd|jjdt|j|t|j|j|j dk r|jj |_t|j|j|jdkrEt|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)rErcrrDr'r]r[r_rrZ_form_length_posAttributeErrorOSError_write_form_lengthr-r@r* _nframes_posr:rar3re_ssnd_length_pos)rKZ initlength commlengthrrr rs^        zAifc_write._write_headercCst|jr9d t|j}|d@r0|d}d}n d}d}t|jd||jd|d||S) Nrzr rr r?r{)rEr0rer-rDr)rK datalengthrZ verslengthrrr rJs     "zAifc_write._write_form_lengthcCs0|jj}|jd@r<|jd}|jjdn |j}||jkr|j|jkr|jdkr|jj|ddS|jj|j d|j |}|jj|j dt |j|j|jj|j dt |j|d|jj|d|j|_||_dS)Nrsrr?)rDrZrr'rr]rrrorrrr-r)rKZcurposrrrrr rWs&    zAifc_write._patchheadercCst|jdkrdS|jjdd}xX|jD]M}|\}}}|t|dd}t|d@dkr9|d}q9Wt|j||d|_t|jt|jxP|jD]E}|\}}}t|j|t|j|t|j|qWdS)NrsMARKrrr?)r0rBrDr'r-rr*r3)rKrrkrjrmrrrr rms" zAifc_write._writemarkers)(rrrrDrTrMrrUrWrrrr\rr`rrbrr^rrdrfrrgrrlrhrZrrrRrrrrrrrrrrrrr rsJ                              3 rcCsi|dkr-t|dr'|j}nd}|dkrCt|S|dkrYt|StddS) NmoderNrrrz$mode must be 'r', 'rb', 'w', or 'wb')rrN)rr)rwrr>rr)r!rrrr rs      __main__rz/usr/demos/data/audio/bach.aiffrZReadingz nchannels =z nframes =z sampwidth =z framerate =z comptype =z compname =rZWritingrizDone.)1r rQr__all__ Exceptionrrrrrrrrr&r*r+r,r-r3r:rLr; collectionsr<r=r>rrrrsysargvrfnr!printr\r^r`rbrdrfZgngrrgrrrrrrrr sf               !