U e5dG@sddlmZddlZeddZdZdZdZdZd Zd Z d Z d Z d Z dZ dZdZdZdZeeeee egZGdddeZddZddZGdddZGdddZd!ddZd"dd ZdS)#) namedtupleN _sunau_paramsz7nchannels sampwidth framerate nframes comptype compnameidns.lc@s eZdZdS)ErrorN)__name__ __module__ __qualname__rr/usr/lib64/python3.8/sunau.pyrsrcCs8d}tdD]&}|d}|s"t|dt|}q |S)Nrrr)rangereadEOFErrorord)filexiZbyterrr _read_u32s  rcCsFg}tdD]&}t|d\}}|dt||}q |t|dS)Nrrr)rdivmodinsertintwritebytes)rrdatardmrrr _write_u32s  r'c@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)S)*Au_readcCs@t|tdkr,ddl}||d}d|_nd|_||dS)NrrbTFtypebuiltinsopen_openedinitfpselffr-rrr__init__s  zAu_read.__init__cCs|jr|dSN_filecloser2rrr__del__szAu_read.__del__cCs|Sr5rr9rrr __enter__szAu_read.__enter__cGs |dSr5r8r2argsrrr__exit__szAu_read.__exit__c Cs||_d|_tt|}|tkr(tdtt||_|jdkrHtd|jdkrZtdt||_|jtkrzt|j|_tt||_ |j t krtd|j t t fkrd|_ d |_nj|j tkrd |_|_ nR|j tkrd|_|_ n:|j tkrd |_|_ n"|j tkrd |_|_ ntd tt||_tt||_|jsLtd |j|j|_|jdkr||jd|_|jd\|_}}nd|_z||_Wn ttfk rd|_YnXdS)Nrzbad magic numberr zheader size too smalldzheader size ridiculously largezencoding not (yet) supportedrrrrzunknown encodingzbad # of channels)r7 _soundposr!rAUDIO_FILE_MAGICrZ _hdr_size _data_sizeAUDIO_UNKNOWN_SIZE _encoding_simple_encodingsAUDIO_FILE_ENCODING_MULAW_8AUDIO_FILE_ENCODING_ALAW_8 _sampwidth _framesizeAUDIO_FILE_ENCODING_LINEAR_8AUDIO_FILE_ENCODING_LINEAR_16AUDIO_FILE_ENCODING_LINEAR_24AUDIO_FILE_ENCODING_LINEAR_32 _framerate _nchannelsr_info partitiontell _data_posAttributeErrorOSError)r2rmagic_rrrr0sV            zAu_read.initfpcCs|jSr5)r7r9rrrgetfpsz Au_read.getfpcCs|jSr5)rRr9rrr getnchannelsszAu_read.getnchannelscCs|jSr5)rKr9rrr getsampwidthszAu_read.getsampwidthcCs|jSr5)rQr9rrr getframerateszAu_read.getframeratecCs(|jtkrtS|jtkr$|j|jSdSNr)rErFrGrHrLr9rrr getnframess    zAu_read.getnframescCs$|jtkrdS|jtkrdSdSdS)NULAWALAWNONErGrIrJr9rrr getcomptypes   zAu_read.getcomptypecCs$|jtkrdS|jtkrdSdSdS)NCCITT G.711 u-lawCCITT G.711 A-lawnot compressedrdr9rrr getcompnames   zAu_read.getcompnamecCs*t||||||Sr5rr\r]r^r`rerir9rrr getparamss zAu_read.getparamscCsdSr5rr9rrr getmarkersszAu_read.getmarkerscCs tddS)Nzno marks)r)r2idrrrgetmark szAu_read.getmarkcCsp|jtkrl|tkr|j}n|j||j}|jt||j7_|jtkrhddl }| ||j }|SdSr_) rGrHrFr7rrLrClenrIaudioopZulaw2linrK)r2nframesr$rprrr readframess   zAu_read.readframescCs*|jdkrtd|j|jd|_dS)N cannot seekr)rVrXr7seekrCr9rrrrewinds zAu_read.rewindcCs|jSr5)rCr9rrrrU!sz Au_read.tellcCsP|dks||krtd|jdkr.td|j|j||j||_dS)Nrzposition not in rangers)r`rrVrXr7rtrLrC)r2posrrrsetpos$s  zAu_read.setposcCs"|j}|rd|_|jr|dSr5)r7r/r8r2rrrrr8,s z Au_read.closeN)rrrr4r:r;r?r0r[r\r]r^r`rerirkrlrnrrrurUrwr8rrrrr(s( . r(c@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3S)4Au_writecCs@t|tdkr,ddl}||d}d|_nd|_||dS)Nr)rwbTFr+r1rrrr45s  zAu_write.__init__cCs|jr|d|_dSr5r6r9rrrr:>szAu_write.__del__cCs|Sr5rr9rrrr;CszAu_write.__enter__cGs |dSr5r<r=rrrr?FszAu_write.__exit__cCsF||_d|_d|_d|_d|_t|_d|_d|_d|_ d|_ d|_ dS)NrrBra) r7rQrRrKrLrF_nframes_nframeswritten _datawritten _datalengthrS _comptyperxrrrr0IszAu_write.initfpcCs(|jrtd|dkrtd||_dS)N0cannot change parameters after starting to write)rrrz"only 1, 2, or 4 channels supported)r|rrR)r2 nchannelsrrr setnchannelsVs zAu_write.setnchannelscCs|jstd|jS)Nznumber of channels not set)rRrr9rrrr\]szAu_write.getnchannelscCs(|jrtd|dkrtd||_dS)Nr)rrrrzbad sample width)r|rrK)r2 sampwidthrrr setsampwidthbs zAu_write.setsampwidthcCs|jstd|jS)Nsample width not specified)rQrrKr9rrrr]iszAu_write.getsampwidthcCs|jrtd||_dS)Nr)r|rrQ)r2 frameraterrr setframeratenszAu_write.setframeratecCs|jstd|jS)Nzframe rate not set)rQrr9rrrr^sszAu_write.getframeratecCs(|jrtd|dkrtd||_dS)Nrrz# of frames cannot be negative)r|rr{)r2rqrrr setnframesxs zAu_write.setnframescCs|jSr5r|r9rrrr`szAu_write.getnframescCs|dkr||_ntddS)N)rcrazunknown compression type)rr)r2r,namerrr setcomptypeszAu_write.setcomptypecCs|jSr5rr9rrrreszAu_write.getcomptypecCs$|jdkrdS|jdkrdSdSdS)Nrarfrbrgrhrr9rrrris   zAu_write.getcompnamecCsH|\}}}}}}|||||||||||dSr5)rrrrr)r2ZparamsrrrrqZcomptypeZcompnamerrr setparamss     zAu_write.setparamscCs*t||||||Sr5rjr9rrrrks zAu_write.getparamscCs|jSr5rr9rrrrUsz Au_write.tellcCs~t|ttfst|d}||jdkrDddl}|||j }t ||j }|j ||j||_|jt ||_dS)NBrar) isinstancer# bytearray memoryviewcast_ensure_header_writtenrrpZlin2ulawrKrorLr7r"r|r})r2r$rprqrrrwriteframesraws   zAu_write.writeframesrawcCs.|||j|jks"|j|jkr*|dSr5)rr|r{r~r} _patchheader)r2r$rrr writeframess    zAu_write.writeframescCs^|jrZz6||j|jks(|j|jkr0||j W5|j}d|_|jrX|XdSr5) r7r/r8rr|r{r~r}rflushrxrrrr8s  zAu_write.closecCs<|js8|jstd|js"td|js0td|dS)Nz# of channels not specifiedrzframe rate not specified)r|rRrrKrQ _write_headerr9rrrrszAu_write._ensure_header_writtenc Cs|jdkrl|jdkr t}d|_q|jdkr6t}d|_q|jdkrLt}d|_q|jdkrbt}d|_qtdn|jdkrt}d|_ntd|j|j |_t |j t dt |j}|d d @}t |j ||jtkrt}n |j|j}z|j |_Wn ttfk rd|_YnXt |j |||_t |j |t |j |jt |j |j |j |j|j d |t |jd dS) Nrcrrrrzinternal errorrar r irAr )rrKrMrLrNrOrPrrIrRr'r7rDrorSr{rFrU_form_length_posrWrXr~rQr")r2encoding header_sizeZlengthrrrrsJ               zAu_write._write_headercCsH|jdkrtd|j|jt|j|j|j|_|jdddS)Nrsrr)rrXr7rtr'r}r~r9rrrrs  zAu_write._patchheaderN)rrrr4r:r;r?r0rr\rr]rr^rr`rrerirrkrUrrr8rrrrrrrry3s2    *rycCsJ|dkrt|dr|j}nd}|dkr.t|S|dkr>t|StddS)Nmoder*)rr*)wrzz$mode must be 'r', 'rb', 'w', or 'wb')hasattrrr(ryrr3rrrrr.s r.cCstjdtddt||dS)NzDsunau.openfp is deprecated since Python 3.7. Use sunau.open instead.r) stacklevel)r)warningswarnDeprecationWarningr.rrrropenfps r)N)N) collectionsrrrrDrIrMrNrOrPZAUDIO_FILE_ENCODING_FLOATZAUDIO_FILE_ENCODING_DOUBLEZAUDIO_FILE_ENCODING_ADPCM_G721ZAUDIO_FILE_ENCODING_ADPCM_G722Z AUDIO_FILE_ENCODING_ADPCM_G723_3Z AUDIO_FILE_ENCODING_ADPCM_G723_5rJrFrH Exceptionrrr'r(ryr.rrrrrjsD  Q