3 \-Eã@s–ddlZdddddgZGdd„deƒZdZdZddlZddlZddlZdd l m Z dd l m Z e ddƒZ Gdd„dƒZGdd„dƒZddd„ZeZdS)éNÚopenÚopenfpÚErrorÚ Wave_readÚ Wave_writec@s eZdZdS)rN)Ú__name__Ú __module__Ú __qualname__©r r ú/usr/lib64/python3.6/wave.pyrNséÚbÚhÚi)ÚChunk)Ú namedtupleÚ _wave_paramsz7nchannels sampwidth framerate nframes comptype compnamec@s´eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+S),rc Csd|_d|_t|dd�|_|jjƒdkr0tdƒ‚|jjdƒdkrHtdƒ‚d|_d|_x�d|_ yt|jdd�}Wnt k r„PYnX|jƒ}|d kr¨|j |ƒd|_n2|d krÚ|js¾td ƒ‚||_|j |j |_d|_ P|jƒqVW|j sø|j �rtd ƒ‚dS) Nr)Z bigendiansRIFFz file does not start with RIFF idésWAVEznot a WAVE filer sfmt sdatazdata chunk before fmt chunkz#fmt chunk and/or data chunk missing)Ú_convertÚ _soundposrÚ_fileZgetnamerÚreadZ_fmt_chunk_readÚ _data_chunkÚ_data_seek_neededÚEOFErrorÚ_read_fmt_chunkZ chunksizeÚ _framesizeÚ_nframesÚskip)ÚselfÚfileÚchunkZ chunknamer r r Úinitfp}s:  zWave_read.initfpc CsRd|_t|tƒr"tj|dƒ}||_y|j|ƒWn|jrF|jƒ‚YnXdS)NÚrb)Ú_i_opened_the_fileÚ isinstanceÚstrÚbuiltinsrr"Úclose)rÚfr r r Ú__init__œs  zWave_read.__init__cCs |jƒdS)N)r()rr r r Ú__del__©szWave_read.__del__cCs|S)Nr )rr r r Ú __enter__¬szWave_read.__enter__cGs |jƒdS)N)r()rÚargsr r r Ú__exit__¯szWave_read.__exit__cCs|jS)N)r)rr r r ÚgetfpµszWave_read.getfpcCsd|_d|_dS)Nr r)rr)rr r r Úrewind¸szWave_read.rewindcCs"d|_|j}|rd|_|jƒdS)N)rr$r()rr r r r r(¼s zWave_read.closecCs|jS)N)r)rr r r ÚtellÃszWave_read.tellcCs|jS)N)Ú _nchannels)rr r r Ú getnchannelsÆszWave_read.getnchannelscCs|jS)N)r)rr r r Ú getnframesÉszWave_read.getnframescCs|jS)N)Ú _sampwidth)rr r r Ú getsampwidthÌszWave_read.getsampwidthcCs|jS)N)Ú _framerate)rr r r Ú getframerateÏszWave_read.getframeratecCs|jS)N)Ú _comptype)rr r r Ú getcomptypeÒszWave_read.getcomptypecCs|jS)N)Ú _compname)rr r r Ú getcompnameÕszWave_read.getcompnamecCs*t|jƒ|jƒ|jƒ|jƒ|jƒ|jƒƒS)N)rr3r6r8r4r:r<)rr r r Ú getparamsØs zWave_read.getparamscCsdS)Nr )rr r r Ú getmarkersÝszWave_read.getmarkerscCs tdƒ‚dS)Nzno marks)r)rÚidr r r ÚgetmarkàszWave_read.getmarkcCs*|dks||jkrtdƒ‚||_d|_dS)Nrzposition not in ranger )rrrr)rÚposr r r ÚsetposãszWave_read.setposcCs¬|jr8|jjddƒ|j|j}|r2|jj|dƒd|_|dkrDdS|jj||jƒ}|jdkrxtjdkrxt j ||jƒ}|j rŒ|rŒ|j |ƒ}|jt |ƒ|j |j|_|S)Nrór Úbig)rrÚseekrrrr5ÚsysÚ byteorderÚaudioopÚbyteswaprÚlenr2)rÚnframesrAÚdatar r r Ú readframesés   zWave_read.readframescCsztjd|jdƒƒ\}|_|_}}|tkrNtjd|jdƒƒd}|dd|_ntd|fƒ‚|j|j|_d |_ d |_ dS) Nzr@rBrMrr r r r r^s* c@sìeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9S):rc CsRd|_t|tƒr"tj|dƒ}||_y|j|ƒWn|jrF|jƒ‚YnXdS)NÚwb)r$r%r&r'rr"r()rr)r r r r*#s  zWave_write.__init__cCs@||_d|_d|_d|_d|_d|_d|_d|_d|_d|_ dS)NrF) rrr2r5r7rÚ_nframeswrittenÚ _datawrittenÚ _datalengthÚ_headerwritten)rr r r r r"/szWave_write.initfpcCs |jƒdS)N)r()rr r r r+;szWave_write.__del__cCs|S)Nr )rr r r r,>szWave_write.__enter__cGs |jƒdS)N)r()rr-r r r r.AszWave_write.__exit__cCs(|jrtdƒ‚|dkrtdƒ‚||_dS)Nz0cannot change parameters after starting to writer zbad # of channels)rXrr2)rÚ nchannelsr r r Ú setnchannelsGs zWave_write.setnchannelscCs|jstdƒ‚|jS)Nznumber of channels not set)r2r)rr r r r3NszWave_write.getnchannelscCs0|jrtdƒ‚|dks|dkr&tdƒ‚||_dS)Nz0cannot change parameters after starting to writer rzbad sample width)rXrr5)rrUr r r Ú setsampwidthSs zWave_write.setsampwidthcCs|jstdƒ‚|jS)Nzsample width not set)r5r)rr r r r6ZszWave_write.getsampwidthcCs0|jrtdƒ‚|dkrtdƒ‚tt|ƒƒ|_dS)Nz0cannot change parameters after starting to writerzbad frame rate)rXrÚintÚroundr7)rÚ framerater r r Ú setframerate_s zWave_write.setframeratecCs|jstdƒ‚|jS)Nzframe rate not set)r7r)rr r r r8fszWave_write.getframeratecCs|jrtdƒ‚||_dS)Nz0cannot change parameters after starting to write)rXrr)rrKr r r Ú setnframeskszWave_write.setnframescCs|jS)N)rW)rr r r r4pszWave_write.getnframescCs.|jrtdƒ‚|dkrtdƒ‚||_||_dS)Nz0cannot change parameters after starting to writerRzunsupported compression type)rR)rXrr9r;)rÚcomptypeÚcompnamer r r Ú setcomptypess zWave_write.setcomptypecCs|jS)N)r9)rr r r r:{szWave_write.getcomptypecCs|jS)N)r;)rr r r r<~szWave_write.getcompnamecCsV|\}}}}}}|jrtdƒ‚|j|ƒ|j|ƒ|j|ƒ|j|ƒ|j||ƒdS)Nz0cannot change parameters after starting to write)rXrr\r]rarbre)rZparamsr[rUr`rKrcrdr r r Ú setparams�s    zWave_write.setparamscCs>|j s|j s|j r tdƒ‚t|j|j|j|j|j|jƒS)Nznot all parameters set)r2r5r7rrrr9r;)rr r r r=‹szWave_write.getparamscCs tdƒ‚dS)Nzsetmark() not supported)r)rr?rAÚnamer r r Úsetmark‘szWave_write.setmarkcCs tdƒ‚dS)Nzno marks)r)rr?r r r r@”szWave_write.getmarkcCsdS)Nr )rr r r r>—szWave_write.getmarkerscCs|jS)N)rW)rr r r r1šszWave_write.tellcCsžt|ttfƒst|ƒjdƒ}|jt|ƒƒt|ƒ|j|j}|j rN|j |ƒ}|jdkrpt j dkrpt j ||jƒ}|jj|ƒ|jt|ƒ7_|j||_dS)NÚBr rD)r%ÚbytesÚ bytearrayÚ memoryviewÚcastÚ_ensure_header_writtenrJr5r2rrFrGrHrIrÚwriterXrW)rrLrKr r r Úwriteframesraw�s  zWave_write.writeframesrawcCs"|j|ƒ|j|jkr|jƒdS)N)rprYrXÚ _patchheader)rrLr r r Ú writeframesªs  zWave_write.writeframesc CsXz2|jr0|jdƒ|j|jkr&|jƒ|jjƒWdd|_|j}|rRd|_|jƒXdS)Nr)rrnrYrXrqÚflushr$r()rr r r r r(¯s  zWave_write.closecCs>|js:|jstdƒ‚|js"tdƒ‚|js0tdƒ‚|j|ƒdS)Nz# channels not specifiedzsample width not specifiedzsampling rate not specified)rZr2rr5r7Ú _write_header)rZdatasizer r r rnÁsz!Wave_write._ensure_header_writtencCsì|jjdƒ|js$||j|j|_|j|j|j|_y|jjƒ|_Wntt fk rfd|_YnX|jjt j dd|jdddt |j|j |j|j |j|j|j|jddƒ ƒ|jdk rÌ|jjƒ|_|jjt j d |jƒƒd |_dS) NsRIFFzr1rprrr(rnrtrqr r r r r s8     cCsJ|dkrt|dƒr|j}nd}|dkr.t|ƒS|dkr>t|ƒStdƒ‚dS) NÚmoder#ÚrÚwrVz$mode must be 'r', 'rb', 'w', or 'wb')r}r#)r~rV)Úhasattrr|rrr)r)r|r r r rìs )Nr rNr)N)r'Ú__all__Ú ExceptionrrTZ _array_fmtsrHrSrFr!rÚ collectionsrrrrrrr r r r ÚJs"  ,d