U AT^Gc@sddlmZddlZeddZdZdZdZdZd Zd Z d Z d Z d Z dZ dZdZdZdZeeeee egZGdddeZddZddZGdddZGdddZd!ddZd"dd ZdS)#) namedtupleN _sunau_paramsz7nchannels sampwidth framerate nframes comptype compnameidns.iiiiilc@s eZdZdS)ErrorN)__name__ __module__ __qualname__rr/usr/lib64/python3.8/sunau.pyr sr cCs8d}tdD]&}|d}|s"t|dt|}q |S)Nrrr)rangereadZEOFErrorZord)filexiZbyterrr _read_u32s  rcCsFg}tdD]&}t|d\}}|dt||}q |t|dS)Nrrr)rZdivmodZinsertintwritebytes)rrdatarZdZmrrr _write_u32s  rc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)S)*Au_readcC@t|tdkr,ddl}||d}d|_nd|_||dS)NrrbTFtypebuiltinsopen_openedinitfpselffr"rrr__init__  zAu_read.__init__cCs|jr|dSN_filecloser'rrr__del__szAu_read.__del__cC|Sr+rr/rrr __enter__zAu_read.__enter__cG |dSr+r.r'Zargsrrr__exit__r3zAu_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 numberrzheader size too smallidzheader size ridiculously largezencoding not (yet) supportedrrrrzunknown encodingzbad # of channels)r- _soundposrrAUDIO_FILE_MAGICr Z _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_infoZ partitiontell _data_posAttributeErrorOSError)r'rZmagicZ_rrrr%sV            zAu_read.initfpcC|jSr+)r-r/rrrgetfpr3z Au_read.getfpcCrOr+)rIr/rrr getnchannelsr3zAu_read.getnchannelscCrOr+)rBr/rrr getsampwidthr3zAu_read.getsampwidthcCrOr+)rHr/rrr getframerater3zAu_read.getframeratecCs(|jtkrtS|jtkr$|j|jSdSNr)r<r=r>r?rCr/rrr getnframess    zAu_read.getnframescC$|jtkrdS|jtkrdSdSdS)NULAWALAWNONEr>r@rAr/rrr getcomptype   zAu_read.getcomptypecCrV)NCCITT G.711 u-lawCCITT G.711 A-lawnot compressedrZr/rrr getcompnamer\zAu_read.getcompnamecC*t||||||Sr+rrQrRrSrUr[r`r/rrr getparams zAu_read.getparamscCsdSr+rr/rrr getmarkersr3zAu_read.getmarkerscCs tddS)Nzno marks)r )r'Zidrrrgetmark r3zAu_read.getmarkcCsp|jtkrl|tkr|j}n|j||j}|jt||j7_|jtkrhddl }| ||j }|SdSrT) r>r?r=r-rrCr:lenr@audioopZulaw2linrB)r'nframesrrhrrr readframess   zAu_read.readframescCs*|jdkrtd|j|jd|_dS)N cannot seekr)rLrNr-seekr:r/rrrrewinds zAu_read.rewindcCrOr+)r:r/rrrrK!r3z Au_read.tellcCsP|dks||krtd|jdkr.td|j|j||j||_dS)Nrzposition not in rangerk)rUr rLrNr-rlrCr:)r'Zposrrrsetpos$s  zAu_read.setposcCs"|j}|rd|_|jr|dSr+)r-r$r.r'rrrrr.,s z Au_read.closeN)r r r r)r0r2r7r%rPrQrRrSrUr[r`rcrerfrjrmrKrnr.rrrrrs( . rc@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_writecCr)NrrwbTFr r&rrrr)5r*zAu_write.__init__cCs|jr|d|_dSr+r,r/rrrr0>zAu_write.__del__cCr1r+rr/rrrr2Cr3zAu_write.__enter__cGr4r+r5r6rrrr7Fr3zAu_write.__exit__cCsF||_d|_d|_d|_d|_t|_d|_d|_d|_ d|_ d|_ dS)Nrr9rW) r-rHrIrBrCr=_nframes_nframeswritten _datawritten _datalengthrJ _comptyperorrrr%IszAu_write.initfpcC(|jrtd|dkrtd||_dS)N0cannot change parameters after starting to write)rrrz"only 1, 2, or 4 channels supported)rtr rI)r' nchannelsrrr setnchannelsV zAu_write.setnchannelscC|jstd|jS)Nznumber of channels not set)rIr r/rrrrQ]rrzAu_write.getnchannelscCrx)Nry)rrrrzbad sample width)rtr rB)r' sampwidthrrr setsampwidthbr|zAu_write.setsampwidthcCs|jstd|jS)Nsample width not specified)rHr rBr/rrrrRirrzAu_write.getsampwidthcCs|jrtd||_dS)Nry)rtr rH)r' frameraterrr setframeratenrrzAu_write.setframeratecCr})Nzframe rate not set)rHr r/rrrrSsrrzAu_write.getframeratecCs(|jrtd|dkrtd||_dS)Nryrz# of frames cannot be negative)rtr rs)r'rirrr setnframesxr|zAu_write.setnframescCrOr+rtr/rrrrUr3zAu_write.getnframescCs|dkr||_ntddS)N)rYrWzunknown compression type)rwr )r'r!Znamerrr setcomptypeszAu_write.setcomptypecCrOr+rwr/rrrr[r3zAu_write.getcomptypecCs$|jdkrdS|jdkrdSdSdS)NrWr]rXr^r_rr/rrrr`r\zAu_write.getcompnamecCsH|\}}}}}}|||||||||||dSr+)r{rrrr)r'Zparamsrzr~rriZcomptypeZcompnamerrr setparamss     zAu_write.setparamscCrar+rbr/rrrrcrdzAu_write.getparamscCrOr+rr/rrrrKr3z Au_write.tellcCs~t|ttfst|d}||jdkrDddl}|||j }t ||j }|j ||j||_|jt ||_dS)NZBrWr)Z isinstancerZ bytearrayZ memoryviewZcast_ensure_header_writtenrwrhZlin2ulawrBrgrCr-rrtru)r'rrhrirrrwriteframesraws   zAu_write.writeframesrawcCs.|||j|jks"|j|jkr*|dSr+)rrtrsrvru _patchheader)r'rrrr writeframess    zAu_write.writeframescCs^|jrZz6||j|jks(|j|jkr0||j W5|j}d|_|jrX|XdSr+) r-r$r.rrtrsrvrurZflushrorrrr.s  zAu_write.closecCs<|js8|jstd|js"td|js0td|dS)Nz# of channels not specifiedrzframe rate not specified)rtrIr rBrH _write_headerr/rrrrszAu_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) NrYrrrrzinternal errorrWr rir8r)rwrBrDrCrErFrGr r@rIrr-r;rgrJrsr=rK_form_length_posrMrNrvrHr)r'ZencodingZ header_sizeZlengthrrrrsJ               zAu_write._write_headercCsH|jdkrtd|j|jt|j|j|j|_|jdddS)Nrkrr)rrNr-rlrrurvr/rrrrs  zAu_write._patchheaderN)r r r r)r0r2r7r%r{rQrrRrrSrrUrr[r`rrcrKrrr.rrrrrrrrp3s2    *rpcCsJ|dkrt|dr|j}nd}|dkr.t|S|dkr>t|StddS)Nmoder)Zrr)Zwrqz$mode must be 'r', 'rb', 'w', or 'wb')Zhasattrrrrpr r(rrrrr#s r#cCstjdtddt||dS)NzDsunau.openfp is deprecated since Python 3.7. Use sunau.open instead.r)Z stacklevel)r)warningsZwarnZDeprecationWarningr#rrrropenfps rr+r+)Z collectionsrrrr;r@rDrErFrGZAUDIO_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_5rAr=r?Z Exceptionr rrrrpr#rrrrrZjsD  Q