L iwdZddlZddlZddlZddlZddlZddlZddlm Z gdZ Gdde Z GddZ Gd d e Zejej hZd Zd Z dd ZdZdZdZddZdZdZy)z Module to read / write wav files using NumPy arrays Functions --------- `read`: Return the sample rate (in samples/sec) and data from a WAV file. `write`: Write a NumPy array as a WAV file. N)IntEnum)WavFileWarningreadwritec eZdZy)rN)__name__ __module__ __qualname__V/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/io/wavfile.pyrrsr rcNeZdZdZdZd dZejfdZdZ dZ dZ y) SeekEmulatingReadera  Tracks stream position, provides tell(), and emulates only those seeks that can be supported by reading forward. Other seeks raise io.UnsupportedOperation. Note that this class implements only the minimum necessary to keep wavfile.read() happy. c ||_d|_y)Nr)readerpos)selfrs r __init__zSeekEmulatingReader.__init__&s r cx|jj|}|xjt|z c_|SN)rrrlen)rsizedatas r rzSeekEmulatingReader.read*s-{{% CI r c|xtjk(r:||jk\r+|j||jz |jSxtjk(r#|dk\r|j||jStj k(r!|dk(r|j|jS t jd)NrzNSeekEmulatingReader was asked to emulate a seek operation it does not support.)osSEEK_SETrrSEEK_CURSEEK_ENDioUnsupportedOperation)roffsetwhences r seekzSeekEmulatingReader.seek/s$(( 2 &488+,xx!  &! xx !  xx--/WXXr c|jSr)rrs r tellzSeekEmulatingReader.tell<s xxr c8|jjyr)rcloser%s r r(zSeekEmulatingReader.close?s r c,tjd)Nz SeekEmulatingReader can't flush.)rr r%s r flushzSeekEmulatingReader.flushDs%%&HIIr N)) rr r __doc__rrrrr#r&r(r*r r r rrs/  #%++  Jr rc|eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"d Z#d!Z$d"Z%d#Z&d$Z'd%Z(d&Z)d'Z*d(Z+d)Z,d*Z-d+Z.d,Z/d-Z0d.Z1d/Z2d0Z3d1Z4d2Z5d3Z6d4Z7d5Z8d6Z9d7Z:d8Z;d9ZdZAd?ZBd@ZCdAZDdBZEdCZFdDZGdEZHdFZIdGZJdHZKdIZLdJZMdKZNdLZOdMZPdNZQdOZRdPZSdQZTdRZUdSZVdTZWdUZXdVZYdWZZdXZ[dYZ\dZZ]d[Z^d\Z_d]Z`d^Zad_Zbd`ZcdaZddbZedcZfddZgdeZhdfZidgZjdhZkdiZldjZmdkZndlZodmZpdnZqdoZrdpZsdqZtdrZudsZvdtZwduZxdvZydwZzdxZ{dyZ|dzZ}d{Z~d|Zd}Zd~ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ dZ d Z d Z d Zd Zy ( WAVE_FORMATz WAVE form wFormatTag IDs Complete list is in mmreg.h in Windows 10 SDK. ALAC and OPUS are the newest additions, in v10.0.14393 2016-07 r  !"#$%&'(0123456789:;<=@ABCDEPRSUY`abcdefgipqrstuvwxyz{iiii i!i#i%i0i1i2i3i4i5i6i@iAiBiPiQiUi`iaibicidipiqirisitiuiviwixiiiiiiiii i0i@iAiIiPiQi`ipiqirisiiiiiPiQiiiiPiiiiiiiiiiiiiiiiiiiiiii i i iiiqiyii iii i i3iCAiBiCBiLCiLViVWiOgiPgiQgiogipgiqgialipiOpimpiasibsicsi!zi"ziiiiiiiiii i i i i iiiiiiiiiiiiiiiiiii i!i"i#i$iiiN(rr r r,UNKNOWNPCMADPCM IEEE_FLOATVSELPIBM_CVSDALAWMULAWDTSDRM WMAVOICE9 WMAVOICE10 OKI_ADPCM DVI_ADPCM IMA_ADPCMMEDIASPACE_ADPCM SIERRA_ADPCM G723_ADPCMDIGISTDDIGIFIXDIALOGIC_OKI_ADPCMMEDIAVISION_ADPCMCU_CODEC HP_DYN_VOICE YAMAHA_ADPCMSONARCDSPGROUP_TRUESPEECHECHOSC1AUDIOFILE_AF36APTXAUDIOFILE_AF10 PROSODY_1612LRC DOLBY_AC2GSM610MSNAUDIO ANTEX_ADPCMECONTROL_RES_VQLPCDIGIREAL DIGIADPCMCONTROL_RES_CR10 NMS_VBXADPCM CS_IMAADPCMECHOSC3ROCKWELL_ADPCMROCKWELL_DIGITALKXEBEC G721_ADPCM G728_CELPMSG723 INTEL_G723_1 INTEL_G729 SHARP_G726MPEGRT24PAC MPEGLAYER3 LUCENT_G723CIRRUSESPCMVOXWARE CANOPUS_ATRAC G726_ADPCM G722_ADPCMDSAT DSAT_DISPLAYVOXWARE_BYTE_ALIGNED VOXWARE_AC8 VOXWARE_AC10 VOXWARE_AC16 VOXWARE_AC20 VOXWARE_RT24 VOXWARE_RT29VOXWARE_RT29HW VOXWARE_VR12 VOXWARE_VR18 VOXWARE_TQ40 VOXWARE_SC3 VOXWARE_SC3_1 SOFTSOUND VOXWARE_TQ60MSRT24G729AMVI_MVI2DF_G726 DF_GSM610ISIAUDIOONLIVEMULTITUDE_FT_SX20INFOCOM_ITS_G721_ADPCM CONVEDIA_G729 CONGRUENCYSBC24DOLBY_AC3_SPDIFMEDIASONIC_G723 PROSODY_8KBPS ZYXEL_ADPCM PHILIPS_LPCBBPACKEDMALDEN_PHONYTALKRACAL_RECORDER_GSMRACAL_RECORDER_G720_ARACAL_RECORDER_G723_1RACAL_RECORDER_TETRA_ACELPNEC_AACRAW_AAC1RHETOREX_ADPCMIRAT VIVO_G723 VIVO_SIREN PHILIPS_CELPPHILIPS_GRUNDIG DIGITAL_G723SANYO_LD_ADPCMSIPROLAB_ACEPLNETSIPROLAB_ACELP4800SIPROLAB_ACELP8V3 SIPROLAB_G729SIPROLAB_G729ASIPROLAB_KELVIN VOICEAGE_AMR G726ADPCMDICTAPHONE_CELP68DICTAPHONE_CELP54QUALCOMM_PUREVOICEQUALCOMM_HALFRATETUBGSMMSAUDIO1WMAUDIO2WMAUDIO3WMAUDIO_LOSSLESSWMASPDIFUNISYS_NAP_ADPCMUNISYS_NAP_ULAWUNISYS_NAP_ALAWUNISYS_NAP_16KSYCOM_ACM_SYC008SYCOM_ACM_SYC701_G726LSYCOM_ACM_SYC701_CELP54SYCOM_ACM_SYC701_CELP68KNOWLEDGE_ADVENTURE_ADPCMFRAUNHOFER_IIS_MPEG2_AACDTS_DSCREATIVE_ADPCMCREATIVE_FASTSPEECH8CREATIVE_FASTSPEECH10 UHER_ADPCMULEAD_DV_AUDIOULEAD_DV_AUDIO_1 QUARTERDECKILINK_VC RAW_SPORTESST_AC3GENERIC_PASSTHRUIPI_HSX IPI_RPELPCS2SONY_SCXSONY_SCY SONY_ATRAC3SONY_SPC TELUM_AUDIOTELUM_IA_AUDIONORCOM_VOICE_SYSTEMS_ADPCM FM_TOWNS_SNDMICRONASMICRONAS_CELP833 BTV_DIGITALINTEL_MUSIC_CODER INDEO_AUDIO QDESIGN_MUSIC ON2_VP7_AUDIO ON2_VP6_AUDIO VME_VMPCMTPCLIGHTWAVE_LOSSLESSOLIGSMOLIADPCMOLICELPOLISBCOLIOPRLH_CODEC LH_CODEC_CELP LH_CODEC_SBC8LH_CODEC_SBC12LH_CODEC_SBC16NORRIS ISIAUDIO_2SOUNDSPACE_MUSICOMPRESS MPEG_ADTS_AAC MPEG_RAW_AAC MPEG_LOASNOKIA_MPEG_ADTS_AACNOKIA_MPEG_RAW_AACVODAFONE_MPEG_ADTS_AACVODAFONE_MPEG_RAW_AAC MPEG_HEAACVOXWARE_RT24_SPEECHSONICFOUNDRY_LOSSLESSINNINGS_TELECOM_ADPCMLUCENT_SX8300PLUCENT_SX5363SCUSEEMENTCSOFT_ALF2CM_ACMDVMDTS2MAKEAVISDIVIO_MPEG4_AACNOKIA_ADAPTIVE_MULTIRATE DIVIO_G726 LEAD_SPEECH LEAD_VORBIS WAVPACK_AUDIOOGG_VORBIS_MODE_1OGG_VORBIS_MODE_2OGG_VORBIS_MODE_3OGG_VORBIS_MODE_1_PLUSOGG_VORBIS_MODE_2_PLUSOGG_VORBIS_MODE_3_PLUSALAC _3COM_NBXOPUSFAAD_AACAMR_NBAMR_WBAMR_WP GSM_AMR_CBRGSM_AMR_VBR_SIDCOMVERSE_INFOSYS_G723_1COMVERSE_INFOSYS_AVQSBCCOMVERSE_INFOSYS_SBC SYMBOL_G729_AVOICEAGE_AMR_WBINGENIENT_G726 MPEG4_AAC ENCORE_G726 ZOLL_ASAO SPEEX_VOICE VIANIX_MASCWM9_SPECTRUM_ANALYZERWMF_SPECTRUM_ANAYZERGSM_610GSM_620GSM_660GSM_690GSM_ADAPTIVE_MULTIRATE_WB POLYCOM_G722 POLYCOM_G728POLYCOM_G729_A POLYCOM_SIRENGLOBAL_IP_ILBCRADIOTIME_TIME_SHIFT_RADIONICE_ACA NICE_ADPCM VOCORD_G721 VOCORD_G726 VOCORD_G722_1 VOCORD_G728 VOCORD_G729 VOCORD_G729_A VOCORD_G723_1 VOCORD_LBC NICE_G728FRACE_TELECOM_G729CODIANFLAC EXTENSIBLE DEVELOPMENTr r r r.r.Hs G C EJ EH D E C CIJIIILJGGHLL F GN DNL CI FHLHILKGN EJI FLJJ D D CJK F EGMJJ DL!KLLLLLNLLLKMIL F EHGIH F#MJ EOOMKM F""!'GHN DIJLOLNMNOLI FHHHHOON#$$ &% FN!"JNKHIHGI CHHKHKN!'LHKKMMMI C FHG F FHMMNN FJ$MLI #"J ""NNG C DHO%JKKM### DI DH F F FKO$$!MONIKIKK"!GGGG &LLNMN!'HJKKMKKMMJI F DJKr r.c t|j}td|ddjdtDz#t$r|d}Y;wxYw)Nz#06xzUnknown wave file format: z. Supported formats: z, c34K|]}|jywr)name).0xs r z$_raise_bad_format..gsB!qvvBs)r.r ValueErrorjoinKNOWN_WAVE_FORMATS) format_tag format_names r _raise_bad_formatr`sm+!*-22  1+?!!YYB/ABBC DD +#D) +sA AAc"|rd}nd}tj|dz|jdd}|dkr tdtj|dz|jd}d}|\}}}} } } |tj k(r|d k\rtj|d z|jd d} |d z }| d k\rS|jd } |d z }| d d }|rd}nd}|j |r+tj|dz|ddd}n td|tvr t|||kDr|j||z t|||tjk(r| || zk7rtd|d| d| ||||| | | fS)a% Returns ------- size : int size of format subchunk in bytes (minus 8 for "fmt " and itself) format_tag : int PCM, float, or compressed format channels : int number of channels fs : int sampling frequency in samples per second bytes_per_second : int overall byte rate for the file block_align : int bytes per sample, including all channels bit_depth : int bits per sample Notes ----- Assumes file pointer is immediately after the 'fmt ' id ><Ir2rr:z.Binary structure of wave file is not compliantHHIIHHr<Hr0r@r4s 8qs 8qNz{WAV header is invalid: nAvgBytesPerSec must equal product of nSamplesPerSec and nBlockAlign, but file has nSamplesPerSec = z, nBlockAlign = z, and nAvgBytesPerSec = ) structunpackrrr.rendswithrr_handle_pad_byter)fid is_big_endianfmtrres bytes_readrchannelsfsbytes_per_second block_align bit_depthext_chunk_sizeextensible_chunk_dataraw_guidtails r _read_fmt_chunkrjs. ==S#((1+ .q 1D byIJJ --H chhrl 3CJILFJ". Y[+++s3w r1r3r4r5V1r\iz(Unsupported bit depth: the WAV file has z-bit integer data.>rEr\fz-bit floating-point data.)dtypecount)rr1i4i8r+N>r/r0r2r6c)rmoder!shapezmmap=True not compatible with z-byte container size.)rrrr.rrrrr&npfromfilerr r# frombufferzerosrritemsizereshapeviewrmemmapr)rrrrris_rf64rmmaprf64_chunk_sizerrbytes_per_sample n_samplesrstartrrdtas r _read_data_chunkrs4 }}SWchhqk215  #h.((I[__$ Q E  -E "_e1-./E$$-;.@BC C {-- -  e1-./E$$-;.GIJ J *% HHJE  >!TMDyE;;s%u=D D=/14C5SE*B#d)'77"9N9NO"&(A*.,, HHUA ==$u=D >s&!IA JJc|rd}nd}|jd}|r8tj||d}|j|dt ||yy)N>I>> from os.path import dirname, join as pjoin >>> from scipy.io import wavfile >>> import scipy.io Get the filename for an example .wav file from the tests/data directory. >>> data_dir = pjoin(dirname(scipy.io.__file__), 'tests', 'data') >>> wav_fname = pjoin(data_dir, 'test-44100Hz-2ch-32bit-float-be.wav') Load the .wav file contents. >>> samplerate, data = wavfile.read(wav_fname) >>> print(f"number of channels = {data.shape[1]}") number of channels = 2 >>> length = data.shape[0] / samplerate >>> print(f"length = {length}s") length = 0.01s Plot the waveform. >>> import matplotlib.pyplot as plt >>> import numpy as np >>> time = np.linspace(0., length, data.shape[0]) >>> plt.plot(time, data[:, 0], label="Left channel") >>> plt.plot(time, data[:, 1], label="Right channel") >>> plt.legend() >>> plt.xlabel("Time [s]") >>> plt.ylabel("Amplitude") >>> plt.show() rFrbr2z%Reached EOF prematurely; finished at dz bytes, expected z bytes from header.r0) stacklevelzUnexpected end of file.zIncomplete chunk ID: z, ignoring it.fmt Tr/r4r3factdatazNo fmt chunk before datasLIST>FakeJUNKz-Chunk (non-data) not understood, skipping it.r)hasattropenseekablerrr&rwarningswarnrrrrrrrr(r#)filenamerr was_seekablerrrrfmt_chunk_receiveddata_chunk_receivedchunk_idmsg fmt_chunkrrrrrrs r rras]Lx 8T"LLN *L *!#&:=Mc=R: ='?"#hhj9$xx{H&MM? 1~N$$-a=0CE&16$%>??X"-d8n-=>%*=MM#(8"8.-.0%S/)7"%)"+C? +4Qq>( Hb%aL 'l W$#C7W$&*#)$%?@@'Z9(5w (,o?W$#C7//#C7 M,<#C7_hhj9$bx( IIK t8O  HHQK t8Ox( IIK  HHQKs FG<<3H/c 6t|dr|}n t|d}|} |jj}gd}|jj|vrt d|jdd}|dz }|dz }|d z }|d z }|d k(rt j}nt j}|jd k(rd } n|jd } |jjd z} || d zz| z} | | d zz} tjd|| || | | } |dk(s |dk(s| dz } |tjdt| z }|| z }t|dzdz|jz}|d z dkD}|rd}|dz }|dz }|d z }|dz }|tjddz }|tjddz }|tjd|jz }|tjd|jdz }|tjddz }|d z }|tjdt| z }|| z }|dk(s1|dk(s,|dz }|tjdd|jdz }|j!||j!d|j!tjdt#|jd|jj$dk(s,|jj$dk(r#t&j$d k(r|j)}t+|||j-}|s:|j/d|j!tjd|d z n9|j/d!|j!tjd|d z t|ds|j1y"|j/dy"#t|ds|j1w|j/dwxYw)#a Write a NumPy array as a WAV file. Parameters ---------- filename : string or open file handle Output wav file. rate : int The sample rate (in samples/sec). data : ndarray A 1-D or 2-D NumPy array of either integer or float data-type. Notes ----- * Writes a simple uncompressed WAV file. * To write multiple-channels, use a 2-D array of shape (Nsamples, Nchannels). * The bits-per-sample and PCM/float will be determined by the data-type. Common data types: [1]_ ===================== =========== =========== ============= WAV format Min Max NumPy dtype ===================== =========== =========== ============= 32-bit floating-point -1.0 +1.0 float32 32-bit PCM -2147483648 +2147483647 int32 16-bit PCM -32768 +32767 int16 8-bit PCM 0 255 uint8 ===================== =========== =========== ============= Note that 8-bit PCM is unsigned. References ---------- .. [1] IBM Corporation and Microsoft Corporation, "Multimedia Programming Interface and Data Specifications 1.0", section "Data Format of the Samples", August 1991 http://www.tactilemedia.com/info/MCI_Control_Info.html Examples -------- Create a 100Hz sine wave, sampled at 44100Hz. Write to 16-bit PCM, Mono. >>> from scipy.io.wavfile import write >>> import numpy as np >>> samplerate = 44100; fs = 100 >>> t = np.linspace(0., 1., samplerate) >>> amplitude = np.iinfo(np.int16).max >>> data = amplitude * np.sin(2. * np.pi * fs * t) >>> write("example.wav", samplerate, data.astype(np.int16)) rwb)float32float64uint8int16int32int64zUnsupported data type ''r rsrrrr/r6zN)rrrkindrrr.rrndimrrrpackrnbytesrmin byteordersysbyteswap _array_tofiler&r#r()rraterrrdkindallowed_dtypes header_datarrrrrfmt_chunk_dataresulting_file_sizerrs r rrslx!8T" BY > ::??. 06tzzl!DE E w ** w  w C<$//J$J 99>Hzz!}HJJ''!+ yA~.x7)q.1 Y Hb%5{IO  k )Nv{{4^)<== ~% "+.2Q6D&*j8 K 7 "K . .K 7 "K 7 "K 6;;tR0 0K 6;;tQ/ /K 6;;tT[[9 9K 6;;tTZZ]; ;K 6;;tQ/ /K 7 "K 6;;tS-@A AK > )K  7 "K 6;;uaA? ?K + ' &++dC Z$@AB ::  3 &4::+?+?3+F+.==E+A==?Dc4 xxz HHQK IIfkk$Q/ 0 HHRL IIfkk$Q/ 0x) IIK HHQKx) IIK HHQKs NO((0Pct|j|jjdjy)Nb)rravelrr)rrs r r#r#s%IIdjjl$))*r )FN)F)r,rrr!numpyrrrenumr__all__ UserWarningrrr.rrrrrrrrrrrr#r r r r1s     [ &J&JRR'Rj"oo{'='=>DL`?CbJ$"(>Vk\Vr+r