§
    µ³Ùgço  ã                   óÖ   — d Z ddlZddlZddlZddlZddlZddlmZ g d¢Z	 G d„ de
¦  «        Z G d„ de¦  «        Zej        ej        hZd	„ Zd
„ Z	 dd„Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ ZdS )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)ÚWavFileWarningÚreadÚwritec                   ó   — e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© ó    úF/granary/edev/quantum/lib/python3.11/site-packages/scipy/io/wavfile.pyr   r      s   € € € € € Ø€Dr   r   c                   ó~  — e 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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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%Z(d&Z)d'Z*d(Z+d)Z,d*Z-d+Z.d,Z/d-Z0d.Z1d/Z2d0Z3d1Z4d2Z5d3Z6d4Z7d5Z8d6Z9d7Z:d8Z;d9Z<d:Z=d;Z>d<Z?d=Z@d>ZAd?ZBd@ZCdAZDdBZEdCZFdDZGdEZHdFZIdGZJdHZKdIZLdJZMdKZNdLZOdMZPdNZQdOZRdPZSdQZTdRZUdSZVdTZWdUZXdVZYdWZZdXZ[dYZ\dZZ]d[Z^d\Z_d]Z`d^Zad_Zbd`ZcdaZddbZedcZfddZgdeZhdfZidgZjdhZkdiZldjZmdkZndlZodmZpdnZqdoZrdpZsdqZtdrZudsZvdtZwduZxdvZydwZzdxZ{dyZ|dzZ}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ˆ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•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¢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¯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¼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É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Ö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ã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ð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ý�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
�Z�d�Z�d�Z�dS (  Ú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   é   é   é   é   é   é   é   é   é	   é
   é   é   é   é   é   é   é   é   é   é   é   é   é    é!   é"   é#   é$   é%   é&   é'   é(   é0   é1   é2   é3   é4   é5   é6   é7   é8   é9   é:   é;   é<   é=   é@   éA   éB   éC   éD   éE   éP   éR   éS   éU   éY   é`   éa   éb   éc   éd   ée   éf   ég   éi   ép   éq   ér   és   ét   éu   év   éw   éx   éy   éz   é{   é€   é�   é‚   éƒ   é„   é…   é†   éˆ   é‰   éŠ   é‹   éŒ   é�   é‘   é’   é“   é”   é—   é˜   é™   é    é¡   é¢   é£   é¤   é°   éÿ   é   i  i  i  i   i!  i#  i%  i0  i1  i2  i3  i4  i5  i6  i@  iA  iB  iP  iQ  iU  i`  ia  ib  ic  id  ip  iq  ir  is  it  iu  iv  iw  ix  i€  i�  i   i  i  i  i  i  i   i0  i@  iA  iI  iP  iQ  i`  ip  iq  ir  is  i€  i�  i…  i   iP  iQ  i   i  i  iP  i   i  i€  i�  i®  i   i  i  i  i  i   i  i  i  i  i   i  i   i   i  i  i  i	  i
  i  i  i  iq  iy  i  i  i  iÄ  i    i   i3  iCA  iB  iCB  iLC  iLV  iVW  iOg  iPg  iQg  iog  ipg  iqg  ial  i p  iOp  imp  ias  ibs  ics  i!z  i"z  i ¡  i¡  i¡  i¡  i¡  i¡  i¡  i¡  i¡  i	¡  i
¡  i¡  i¡  i¡  i¡  i¡  i¡  i¡  i¡  i¡  i¡  i¡  i¡  i¡  i¡  i¡  i¡  i¡  i¡  i¡  i¡  i¡  i ¡  i!¡  i"¡  i#¡  i$¡  i¬ñ  iþÿ  iÿÿ  N(  r   r	   r
   Ú__doc__ÚUNKNOWNÚPCMÚADPCMÚ
IEEE_FLOATÚVSELPÚIBM_CVSDÚALAWÚMULAWÚDTSÚDRMÚ	WMAVOICE9Ú
WMAVOICE10Ú	OKI_ADPCMÚ	DVI_ADPCMÚ	IMA_ADPCMÚMEDIASPACE_ADPCMÚSIERRA_ADPCMÚ
G723_ADPCMÚDIGISTDÚDIGIFIXÚDIALOGIC_OKI_ADPCMÚMEDIAVISION_ADPCMÚCU_CODECÚHP_DYN_VOICEÚYAMAHA_ADPCMÚSONARCÚDSPGROUP_TRUESPEECHÚECHOSC1ÚAUDIOFILE_AF36ÚAPTXÚAUDIOFILE_AF10ÚPROSODY_1612ÚLRCÚ	DOLBY_AC2ÚGSM610ÚMSNAUDIOÚANTEX_ADPCMEÚCONTROL_RES_VQLPCÚDIGIREALÚ	DIGIADPCMÚCONTROL_RES_CR10ÚNMS_VBXADPCMÚCS_IMAADPCMÚECHOSC3ÚROCKWELL_ADPCMÚROCKWELL_DIGITALKÚXEBECÚ
G721_ADPCMÚ	G728_CELPÚMSG723ÚINTEL_G723_1Ú
INTEL_G729Ú
SHARP_G726ÚMPEGÚRT24ÚPACÚ
MPEGLAYER3ÚLUCENT_G723ÚCIRRUSÚESPCMÚVOXWAREÚCANOPUS_ATRACÚ
G726_ADPCMÚ
G722_ADPCMÚDSATÚDSAT_DISPLAYÚVOXWARE_BYTE_ALIGNEDÚVOXWARE_AC8ÚVOXWARE_AC10ÚVOXWARE_AC16ÚVOXWARE_AC20ÚVOXWARE_RT24ÚVOXWARE_RT29ÚVOXWARE_RT29HWÚVOXWARE_VR12ÚVOXWARE_VR18ÚVOXWARE_TQ40ÚVOXWARE_SC3ÚVOXWARE_SC3_1Ú	SOFTSOUNDÚVOXWARE_TQ60ÚMSRT24ÚG729AÚMVI_MVI2ÚDF_G726Ú	DF_GSM610ÚISIAUDIOÚONLIVEÚMULTITUDE_FT_SX20ÚINFOCOM_ITS_G721_ADPCMÚCONVEDIA_G729Ú
CONGRUENCYÚSBC24ÚDOLBY_AC3_SPDIFÚMEDIASONIC_G723ÚPROSODY_8KBPSÚZYXEL_ADPCMÚPHILIPS_LPCBBÚPACKEDÚMALDEN_PHONYTALKÚRACAL_RECORDER_GSMÚRACAL_RECORDER_G720_AÚRACAL_RECORDER_G723_1ÚRACAL_RECORDER_TETRA_ACELPÚNEC_AACÚRAW_AAC1ÚRHETOREX_ADPCMÚIRATÚ	VIVO_G723Ú
VIVO_SIRENÚPHILIPS_CELPÚPHILIPS_GRUNDIGÚDIGITAL_G723ÚSANYO_LD_ADPCMÚSIPROLAB_ACEPLNETÚSIPROLAB_ACELP4800ÚSIPROLAB_ACELP8V3ÚSIPROLAB_G729ÚSIPROLAB_G729AÚSIPROLAB_KELVINÚVOICEAGE_AMRÚ	G726ADPCMÚDICTAPHONE_CELP68ÚDICTAPHONE_CELP54ÚQUALCOMM_PUREVOICEÚQUALCOMM_HALFRATEÚTUBGSMÚMSAUDIO1ÚWMAUDIO2ÚWMAUDIO3ÚWMAUDIO_LOSSLESSÚWMASPDIFÚUNISYS_NAP_ADPCMÚUNISYS_NAP_ULAWÚUNISYS_NAP_ALAWÚUNISYS_NAP_16KÚSYCOM_ACM_SYC008ÚSYCOM_ACM_SYC701_G726LÚSYCOM_ACM_SYC701_CELP54ÚSYCOM_ACM_SYC701_CELP68ÚKNOWLEDGE_ADVENTURE_ADPCMÚFRAUNHOFER_IIS_MPEG2_AACÚDTS_DSÚCREATIVE_ADPCMÚCREATIVE_FASTSPEECH8ÚCREATIVE_FASTSPEECH10Ú
UHER_ADPCMÚULEAD_DV_AUDIOÚULEAD_DV_AUDIO_1ÚQUARTERDECKÚILINK_VCÚ	RAW_SPORTÚESST_AC3ÚGENERIC_PASSTHRUÚIPI_HSXÚ	IPI_RPELPÚCS2ÚSONY_SCXÚSONY_SCYÚSONY_ATRAC3ÚSONY_SPCÚTELUM_AUDIOÚTELUM_IA_AUDIOÚNORCOM_VOICE_SYSTEMS_ADPCMÚFM_TOWNS_SNDÚMICRONASÚMICRONAS_CELP833ÚBTV_DIGITALÚINTEL_MUSIC_CODERÚINDEO_AUDIOÚQDESIGN_MUSICÚON2_VP7_AUDIOÚON2_VP6_AUDIOÚ	VME_VMPCMÚTPCÚLIGHTWAVE_LOSSLESSÚOLIGSMÚOLIADPCMÚOLICELPÚOLISBCÚOLIOPRÚLH_CODECÚLH_CODEC_CELPÚLH_CODEC_SBC8ÚLH_CODEC_SBC12ÚLH_CODEC_SBC16ÚNORRISÚ
ISIAUDIO_2ÚSOUNDSPACE_MUSICOMPRESSÚMPEG_ADTS_AACÚMPEG_RAW_AACÚ	MPEG_LOASÚNOKIA_MPEG_ADTS_AACÚNOKIA_MPEG_RAW_AACÚVODAFONE_MPEG_ADTS_AACÚVODAFONE_MPEG_RAW_AACÚ
MPEG_HEAACÚVOXWARE_RT24_SPEECHÚSONICFOUNDRY_LOSSLESSÚINNINGS_TELECOM_ADPCMÚLUCENT_SX8300PÚLUCENT_SX5363SÚCUSEEMEÚNTCSOFT_ALF2CM_ACMÚDVMÚDTS2ÚMAKEAVISÚDIVIO_MPEG4_AACÚNOKIA_ADAPTIVE_MULTIRATEÚ
DIVIO_G726ÚLEAD_SPEECHÚLEAD_VORBISÚWAVPACK_AUDIOÚOGG_VORBIS_MODE_1ÚOGG_VORBIS_MODE_2ÚOGG_VORBIS_MODE_3ÚOGG_VORBIS_MODE_1_PLUSÚOGG_VORBIS_MODE_2_PLUSÚOGG_VORBIS_MODE_3_PLUSÚALACÚ	_3COM_NBXÚOPUSÚFAAD_AACÚAMR_NBÚAMR_WBÚAMR_WPÚGSM_AMR_CBRÚGSM_AMR_VBR_SIDÚCOMVERSE_INFOSYS_G723_1ÚCOMVERSE_INFOSYS_AVQSBCÚCOMVERSE_INFOSYS_SBCÚSYMBOL_G729_AÚVOICEAGE_AMR_WBÚINGENIENT_G726Ú	MPEG4_AACÚENCORE_G726Ú	ZOLL_ASAOÚSPEEX_VOICEÚVIANIX_MASCÚWM9_SPECTRUM_ANALYZERÚWMF_SPECTRUM_ANAYZERÚGSM_610ÚGSM_620ÚGSM_660ÚGSM_690ÚGSM_ADAPTIVE_MULTIRATE_WBÚPOLYCOM_G722ÚPOLYCOM_G728ÚPOLYCOM_G729_AÚPOLYCOM_SIRENÚGLOBAL_IP_ILBCÚRADIOTIME_TIME_SHIFT_RADIOÚNICE_ACAÚ
NICE_ADPCMÚVOCORD_G721ÚVOCORD_G726ÚVOCORD_G722_1ÚVOCORD_G728ÚVOCORD_G729ÚVOCORD_G729_AÚVOCORD_G723_1Ú
VOCORD_LBCÚ	NICE_G728ÚFRACE_TELECOM_G729ÚCODIANÚFLACÚ
EXTENSIBLEÚDEVELOPMENTr   r   r   r   r      s”  € € € € € ðð ð €GØ
€CØ€EØ€JØ€EØ€HØ€DØ€EØ
€CØ
€CØ€IØ€JØ€IØ€IØ€IØÐØ€LØ€JØ€GØ€GØÐØÐØ€HØ€LØ€LØ€FØ ÐØ€GØ€NØ€DØ€NØ€LØ
€CØ€IØ€FØ€HØ€LØÐØ€HØ€IØÐØ€LØ€KØ€GØ€NØÐØ€EØ€JØ€IØ€FØ€LØ€JØ€JØ€DØ€DØ
€CØ€JØ€KØ€FØ€EØ€GØ€MØ€JØ€JØ€DØ€LØ!ÐØ€KØ€LØ€LØ€LØ€LØ€LØ€NØ€LØ€LØ€LØ€KØ€MØ€IØ€LØ€FØ€EØ€HØ€GØ€IØ€HØ€FØÐØ#ÐØ€MØ€JØ€EØ€OØ€OØ€MØ€KØ€MØ€FØÐØÐØ"ÐØ"ÐØ!'ÐØ€GØ€HØ€NØ€DØ€IØ€JØ€LØ€OØ€LØ€NØÐØÐØÐØ€MØ€NØ€OØ€LØ€IØÐØÐØÐØÐØ€FØ€HØ€HØ€HØÐØ€HØÐØ€OØ€OØ€NØÐØ#ÐØ$ÐØ$ÐØ &ÐØ%ÐØ€FØ€NØ!ÐØ"ÐØ€JØ€NØÐØ€KØ€HØ€IØ€HØÐØ€GØ€IØ
€CØ€HØ€HØ€KØ€HØ€KØ€NØ!'ÐØ€LØ€HØÐØ€KØÐØ€KØ€MØ€MØ€MØ€IØ
€CØÐØ€FØ€HØ€GØ€FØ€FØ€HØ€MØ€MØ€NØ€NØ€FØ€JØ$ÐØ€MØ€LØ€IØ ÐØÐØ#ÐØ"ÐØ€JØ ÐØ"ÐØ"ÐØ€NØ€NØ€GØÐØ
€CØ€DØ€HØ€OØ%ÐØ€JØ€KØ€KØ€MØÐØÐØÐØ#ÐØ#ÐØ#ÐØ€DØ€IØ€DØ€HØ€FØ€FØ€FØ€KØ€OØ$ÐØ$ÐØ!ÐØ€MØ€OØ€NØ€IØ€KØ€IØ€KØ€KØ"ÐØ!ÐØ€GØ€GØ€GØ€GØ &ÐØ€LØ€LØ€NØ€MØ€NØ!'ÐØ�HØ�JØ�KÙ�KÙ�MÙ�KÙ�KÙ�MÙ�MÙ�JÙ�IÙÑÙ�FÙ�DÙ�JÙ�K�K€Kr   r   c                 óÆ   — 	 t          | ¦  «        j        }n# t          $ r | d›}Y nw xY wt          d|› d�d                     d„ t          D ¦   «         ¦  «        z   ¦  «        ‚)Nz#06xzUnknown wave file format: z. Supported formats: z, c              3   ó$   K  — | ]}|j         V — Œd S )N)Úname)Ú.0Úxs     r   ú	<genexpr>z$_raise_bad_format.<locals>.<genexpr>=  s$   è è € ÐBÐB¨!˜qœvÐBÐBÐBÐBÐBÐBr   )r   rˆ  Ú
ValueErrorÚjoinÚKNOWN_WAVE_FORMATS)Ú
format_tagÚformat_names     r   Ú_raise_bad_formatr‘  6  s“   € ð+Ý! *Ñ-Ô-Ô2ˆˆøÝð +ð +ð +Ø#Ð*Ð*ˆˆˆð+øøøå
ð !°+ð !ð !ð !à—Y’YÐBÐBÕ/AÐBÑBÔBÑBÔBñCñ Dô Dð Ds   ‚ —(§(c                 ó˜  — |rd}nd}t          j        |dz   |                      d¦  «        ¦  «        d         }|dk     rt          d¦  «        ‚t          j        |dz   |                      d¦  «        ¦  «        }d}|\  }}}}	}
}|t          j        k    r¸|d	k    r²t          j        |d
z   |                      d¦  «        ¦  «        d         }|dz  }|dk    rg|                      d¦  «        }|dz  }|dd…         }|rd}nd}|                     |¦  «        r&t          j        |dz   |dd…         ¦  «        d         }nt          d¦  «        ‚|t          vrt          |¦  «         ||k    r|                      ||z
  ¦  «         t          | |¦  «         |t          j
        k    r!|	||
z  k    rt          d|› d|
› d|	› �¦  «        ‚|||||	|
|fS )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
    ú>ú<ÚIr   r   r   z.Binary structure of wave file is not compliantÚHHIIHHr   ÚHr   r!   r   s      €  ª 8›qs      €  ª 8›qNz{WAV header is invalid: nAvgBytesPerSec must equal product of nSamplesPerSec and nBlockAlign, but file has nSamplesPerSec = z, nBlockAlign = z, and nAvgBytesPerSec = )ÚstructÚunpackr   rŒ  r   r„  ÚendswithrŽ  r‘  Ú_handle_pad_byter{   )ÚfidÚis_big_endianÚfmtÚsizeÚresÚ
bytes_readr�  ÚchannelsÚfsÚbytes_per_secondÚblock_alignÚ	bit_depthÚext_chunk_sizeÚextensible_chunk_dataÚraw_guidÚtails                   r   Ú_read_fmt_chunkr«  @  s;  € ð. ð ØˆˆàˆåŒ=˜˜S™ #§(¢(¨1¡+¤+Ñ.Ô.¨qÔ1€Dàˆb‚y€yÝÐIÑJÔJÐJå
Œ-˜˜H™ c§h¢h¨r¡l¤lÑ
3Ô
3€CØ€JàILÑF€J�˜"Ð.°¸Yà•[Ô+Ò+Ð+°¸²°Ýœ s¨3¡w°·²¸±´Ñ<Ô<¸QÔ?ˆØ�a‰ˆ
Ø˜RÒÐØ$'§H¢H¨R¡L¤LÐ!Ø˜"ÑˆJØ,¨S°¨ZÔ8ˆHð ð KØJ��àJ�Ø× Ò  Ñ&Ô&ð EÝ#œ]¨3¨s©7°H¸R¸a¸R´LÑAÔAÀ!ÔD�
øåÐMÑNÔNÐNàÕ+Ð+Ð+Ý˜*Ñ%Ô%Ð%ð ˆjÒÐØ�Š�˜
Ñ"Ñ#Ô#Ð#õ �S˜$ÑÔÐà•[”_Ò$Ð$Ø˜r KÑ/Ò/Ð/Ýð Fð "$ðFð Fð 6AðFð Fð 4Dð	Fð Fñ Gô Gð Gð �*˜h¨Ð,<¸kØðð r   Fc                 ór  — |rd}nd}|s2t          j        |dz   |                      d¦  «        ¦  «        d         }	n�|                      ¦   «         }
|                      d¦  «         t          j        d|                      d¦  «        ¦  «        d         }	|                      |
¦  «         |                      d¦  «         ||z  }|	|z  }|t
          j        k    r;d	|cxk    rdk    rn nd
}nf|dv rd}n_|dk    r|› d|› �}nQt          d|› d�¦  «        ‚|t
          j        k    r|dv r|› d|› �}n"t          d|› d�¦  «        ‚t          |¦  «         |                      ¦   «         }|�sF	 |dk    r|	n|}t          j        | ||¬¦  «        }nT# t          j        $ rB |                      |d¦  «         t          j        |                      |	¦  «        |¬¦  «        }Y nw xY w|dk    rÈ|dk    r|› d�n|› d�}t          j        t!          |¦  «        |z  t          j        |¦  «        j        fd¬¦  «        }|r!|                     d|f¦  «        |dd…d|…f<   n!|                     d|f¦  «        |dd…| d…f<   |                     |¦  «                             |j        dd…         ¦  «        }n^|dv rG|                      ¦   «         }t          j        | |d||f¬¦  «        }|                      ||	z   ¦  «         nt          d|› d�¦  «        ‚t/          | |	¦  «         |d	k    r|                     d|¦  «        }|S ) a  
    Notes
    -----
    Assumes file pointer is immediately after the 'data' id

    It's possible to not use all available bits in a container, or to store
    samples in a container bigger than necessary, so bytes_per_sample uses
    the actual reported container size (nBlockAlign / nChannels).  Real-world
    examples:

    Adobe Audition's "24-bit packed int (type 1, 20-bit)"

        nChannels = 2, nBlockAlign = 6, wBitsPerSample = 20

    http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Samples/AFsp/M1F1-int12-AFsp.wav
    is:

        nChannels = 2, nBlockAlign = 4, wBitsPerSample = 12

    http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Docs/multichaudP.pdf
    gives an example of:

        nChannels = 2, nBlockAlign = 8, wBitsPerSample = 20
    r“  r”  r•  r   r   é   ú<Qr   r   Úu1>   r   r   r   r   ÚV1r=   Úiz(Unsupported bit depth: the WAV file has z-bit integer data.>   r&   r=   Úfz-bit floating-point data.)ÚdtypeÚcount)r³  r   Úi4Úi8éÿÿÿÿN>   r   r   r   r   Úc)r³  ÚmodeÚoffsetÚshapezmmap=True not compatible with z-byte container size.)r˜  r™  r   ÚtellÚseekr   r{   rŒ  r}   r‘  ÚnpÚfromfileÚioÚUnsupportedOperationÚ
frombufferÚzerosÚlenr³  ÚitemsizeÚreshapeÚviewr»  Úmemmapr›  )rœ  r�  r¢  r¦  r�  Úis_rf64r¥  Úmmaprž  rŸ  ÚposÚbytes_per_sampleÚ	n_samplesr³  Ústartr´  ÚdataÚdtÚas                      r   Ú_read_data_chunkrÒ  �  sÿ  € ð4 ð Øˆˆàˆð ð 	ÝŒ}˜S ™W c§h¢h¨q¡k¤kÑ2Ô2°1Ô5ˆˆà�hŠh‰jŒjˆà�Š�‰ŒˆÝŒ}˜T 3§8¢8¨A¡;¤;Ñ/Ô/°Ô2ˆØ�Š�‰Œˆà�Š�‰Œˆð # hÑ.ÐØÐ(Ñ(€Ià•[”_Ò$Ð$Ø�	ÐÐÒÐ˜QÒÐÐÐÐØˆEˆEØ Ð-Ð-àˆEˆEØ˜"Š_ˆ_àÐ/Ð/Ð-Ð/Ð/ˆEˆEåð BØ$-ðBð Bð Bñ Cô Cð Cà	•{Ô-Ò	-Ð	-Ø˜Ð Ð ØÐ/Ð/Ð-Ð/Ð/ˆEˆEåð IØ$-ðIð Ið Iñ Jô Jð Jõ 	˜*Ñ%Ô%Ð%à�HŠH‰JŒJ€EØñ Ið	>Ø! TšM˜M�D�D¨yˆEÝ”;˜s¨%°uÐ=Ñ=Ô=ˆDˆDøÝÔ&ð 	>ð 	>ð 	>Ø�HŠH�U˜AÑÔÐÝ”= §¢¨$¡¤°uÐ=Ñ=Ô=ˆDˆDˆDð	>øøøð �DŠ=ˆ=à/°1Ò4Ð4�C����¸S¸*¸*¸*ˆBÝ”�#˜d™)œ)Ð'7Ñ7½¼À"¹¼Ô9NÐOØ"&ð(ñ (ô (ˆAàð PØ*.¯,ª,¸Ð<LÐ7MÑ*NÔ*N��!�!�!Ð&Ð&Ð&Ð&Ñ'Ð'à+/¯<ª<¸Ð=MÐ8NÑ+OÔ+O��!�!�!Ð&Ð&Ð'Ð'Ð'Ñ(Ø—6’6˜"‘:”:×%Ò% a¤g¨c¨r¨c¤lÑ3Ô3ˆDøà˜|Ð+Ð+Ø—H’H‘J”JˆEÝ”9˜S¨°CÀØ'0 lð4ñ 4ô 4ˆDà�HŠH�U˜T‘\Ñ"Ô"Ð"Ð"åð HØ 0ðHð Hð Hñ Iô Ið Iõ �S˜$ÑÔÐà�!‚|€|Ø�|Š|˜B Ñ)Ô)ˆØ€Ks   Å(!F
 Æ
AGÇGc                 óÈ   — |rd}nd}|                       d¦  «        }|rCt          j        ||¦  «        d         }|                      |d¦  «         t	          | |¦  «         d S d S )Nú>Iú<Ir   r   r   )r   r˜  r™  r½  r›  )rœ  r�  rž  rÏ  rŸ  s        r   Ú_skip_unknown_chunkrÖ  ÷  sy   € Øð Øˆˆàˆà�8Š8�A‰;Œ;€Dð
 ð $ÝŒ}˜S $Ñ'Ô'¨Ô*ˆØ�Š��qÑÔÐÝ˜˜dÑ#Ô#Ð#Ð#Ð#ð$ð $r   c                 ó:  — |                       d¦  «        }|dk    rd}d}d}n:|dk    rd}d}d}n-|dk    rd}d}d	}n t          d
t          |¦  «        › d�¦  «        ‚|sGt          j        ||                       d¦  «        ¦  «        d         dz   }|                       d¦  «        }nÌ|                       d¦  «         |                       d¦  «        }|                       d¦  «        }|dk    rt          d¦  «        ‚t          j        d|                       d¦  «        ¦  «        d         }t          j        ||                       d¦  «        ¦  «        d         dz   }|                      |dz
  d¦  «         |dk    r t          dt          |¦  «        › d�¦  «        ‚|||fS )Nr   ó   RIFFFrÕ  s   RIFXTrÔ  ó   RF64r®  zFile format z; not understood. Only 'RIFF', 'RIFX', and 'RF64' supported.r   r   ó   ds64z(Invalid RF64 file: ds64 chunk not found.r   ó   WAVEz"Not a WAV file. RIFF form type is ú.)r   rŒ  Úreprr˜  r™  r½  )	rœ  Ústr1rÉ  r�  rž  Ú	file_sizeÚstr2Ústr3Ú	ds64_sizes	            r   Ú_read_riff_chunkrã    s²  € Ø�8Š8�A‰;Œ;€DØˆw‚€ØˆØˆØˆˆØ	�ŠˆØˆØˆØˆˆØ	�ŠˆØˆØˆØˆˆõ ð A­¨T©
¬
ð Að Að Añ Bô Bð 	Bð ð #Ý”M # s§x¢x°¡{¤{Ñ3Ô3°AÔ6¸Ñ:ˆ	Ø�xŠx˜‰{Œ{ˆˆð 	�Š�‰ŒˆØ�xŠx˜‰{Œ{ˆØ�xŠx˜‰{Œ{ˆØ�7Š?ˆ?ÝÐGÑHÔHÐHÝ”M $¨¯ª°©¬Ñ4Ô4°QÔ7ˆ	Ý”M # s§x¢x°¡{¤{Ñ3Ô3°AÔ6¸Ñ:ˆ	ð 	�Š�˜Q‘ Ñ"Ô"Ð"àˆw‚€ÝÐK½dÀ4¹j¼jÐKÐKÐKÑLÔLÐLà�m WÐ,Ð,r   c                 ó@   — |dz  r|                       dd¦  «         d S d S )Nr   r   )r½  )rœ  rŸ  s     r   r›  r›  1  s/   € ð ˆa�xð Ø�Š��A‰Œˆˆˆðð r   c           
      óú  — t          | d¦  «        r| }d}nt          | d¦  «        }	 t          |¦  «        \  }}}d}d}|                     ¦   «         |k     �r¨|                     d¦  «        }|sJ|r9t          j        d|                     ¦   «         d›d|d›d�t          d	¬
¦  «         �nVt          d¦  «        ‚t          |¦  «        dk     rEdt          |¦  «        › �}	|r"|r t          j        |	dz   t          d	¬
¦  «         nt          |	¦  «        ‚|dk    r1d}t          ||¦  «        }
|
dd…         \  }}}|
d         }|
d         }nŸ|dk    rt          ||¦  «         nˆ|dk    r*d}|st          d¦  «        ‚t          ||||||||¦  «        }nX|dk    rt          ||¦  «         nA|dv rt          ||¦  «         n,t          j        dt          d	¬
¦  «         t          ||¦  «         |                     ¦   «         |k     �°¨t          | d¦  «        s|                     ¦   «          nU|                     d¦  «         n?# t          | d¦  «        s|                     ¦   «          w |                     d¦  «         w xY w||fS )a  
    Open a WAV file.

    Return the sample rate (in samples/sec) and data from an LPCM WAV file.

    Parameters
    ----------
    filename : string or open file handle
        Input WAV file.
    mmap : bool, optional
        Whether to read data as memory-mapped (default: False).  Not compatible
        with some bit depths; see Notes.  Only to be used on real files.

        .. versionadded:: 0.12.0

    Returns
    -------
    rate : int
        Sample rate of WAV file.
    data : numpy array
        Data read from WAV file. Data-type is determined from the file;
        see Notes.  Data is 1-D for 1-channel WAV, or 2-D of shape
        (Nsamples, Nchannels) otherwise. If a file-like input without a
        C-like file descriptor (e.g., :class:`python:io.BytesIO`) is
        passed, this will not be writeable.

    Notes
    -----
    Common data types: [1]_

    =====================  ===========  ===========  =============
         WAV format            Min          Max       NumPy dtype
    =====================  ===========  ===========  =============
    32-bit floating-point  -1.0         +1.0         float32
    32-bit integer PCM     -2147483648  +2147483647  int32
    24-bit integer PCM     -2147483648  +2147483392  int32
    16-bit integer PCM     -32768       +32767       int16
    8-bit integer PCM      0            255          uint8
    =====================  ===========  ===========  =============

    WAV files can specify arbitrary bit depth, and this function supports
    reading any integer PCM depth from 1 to 64 bits.  Data is returned in the
    smallest compatible numpy int type, in left-justified format.  8-bit and
    lower is unsigned, while 9-bit and higher is signed.

    For example, 24-bit data will be stored as int32, with the MSB of the
    24-bit data stored at the MSB of the int32, and typically the least
    significant byte is 0x00.  (However, if a file actually contains data past
    its specified bit depth, those bits will be read and output, too. [2]_)

    This bit justification and sign matches WAV's native internal format, which
    allows memory mapping of WAV files that use 1, 2, 4, or 8 bytes per sample
    (so 24-bit files cannot be memory-mapped, but 32-bit can).

    IEEE float PCM in 32- or 64-bit format is supported, with or without mmap.
    Values exceeding [-1, +1] are not clipped.

    Non-linear PCM (mu-law, A-law) is not supported.

    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
    .. [2] Adobe Systems Incorporated, "Adobe Audition 3 User Guide", section
       "Audio file formats: 24-bit Packed Int (type 1, 20-bit)", 2007

    Examples
    --------
    >>> 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()

    r   FÚrbr   z%Reached EOF prematurely; finished at Údz bytes, expected z bytes from header.r   )Ú
stacklevelzUnexpected end of file.zIncomplete chunk ID: z, ignoring it.ó   fmt Tr   r   r   ó   factó   datazNo fmt chunk before datas   LIST>   ó   Fakeó   JUNKz-Chunk (non-data) not understood, skipping it.r   )ÚhasattrÚopenrã  r¼  r   ÚwarningsÚwarnr   rŒ  rÄ  rÝ  r«  rÖ  rÒ  Úcloser½  )ÚfilenamerÊ  rœ  rß  r�  rÉ  Úfmt_chunk_receivedÚdata_chunk_receivedÚchunk_idÚmsgÚ	fmt_chunkr�  r¢  r£  r¦  r¥  rÏ  s                    r   r   r   8  s  € õL ˆx˜Ñ Ô ð #ØˆØˆˆå�8˜TÑ"Ô"ˆð7Ý,<¸SÑ,AÔ,AÑ)ˆ	�= 'Ø"ÐØ#ÐØ�hŠh‰jŒj˜9Ò$Ñ$à—x’x ‘{”{ˆHàð *Ø&ð @å”MðEÀÇÂÁ
Ä
ÐVð Eð EØ$-ÐDðEð Eð Eå&°1ð6ñ 6ô 6ð 6ñ å$Ð%>Ñ?Ô?Ð?Ý�X‘” Ò"Ð"Ø>­d°8©n¬nÐ>Ð>�à%ð *Ð*=ð *Ý”M #Ð(8Ñ"8½.Ø-.ð0ñ 0ô 0ð 0ð 0õ % S™/œ/Ð)à˜7Ò"Ð"Ø%)Ð"Ý+¨C°Ñ?Ô?�	Ø+4°Q°q°S¬>Ñ(�
˜H bØ% aœL�	Ø'¨œl��Ø˜WÒ$Ð$Ý# C¨Ñ7Ô7Ð7Ð7Ø˜WÒ$Ð$Ø&*Ð#Ø)ð AÝ$Ð%?Ñ@Ô@Ð@Ý'¨¨Z¸À9Ø(5°wÀÈTñSô S��à˜WÒ$Ð$å# C¨Ñ7Ô7Ð7Ð7ØÐ/Ð/Ð/å# C¨Ñ7Ô7Ð7Ð7å”ÐMÝ,¸ð<ñ <ô <ð <å# C¨Ñ7Ô7Ð7ð] �hŠh‰jŒj˜9Ò$Ñ$õ` �x Ñ(Ô(ð 	Ø�IŠI‰KŒKˆKˆKà�HŠH�Q‰KŒKˆKˆKøõ �x Ñ(Ô(ð 	Ø�IŠI‰KŒKˆKˆKà�HŠH�Q‰KŒKˆKˆKøøøàˆtˆ8€Os   §GH: È:<I6c           	      ó4  — t          | d¦  «        r| }nt          | d¦  «        }|}	 |j        j        }g d¢}|j        j        |vrt          d|j        › d�¦  «        ‚d}|dz  }|dz  }|d	z  }|d
z  }|dk    rt          j        }nt          j        }|j	        dk    rd}	n|j
        d         }	|j        j        dz  }
||
dz  z  |	z  }|	|
dz  z  }t          j        d||	||||
¦  «        }|dk    s|dk    s|dz  }|t          j        dt          |¦  «        ¦  «        z  }||z  }t          |¦  «        dz   dz   |j        z   }|dz
  dk    }|rÍd}|dz  }|dz  }|d	z  }|dz  }|t          j        dd¦  «        z  }|t          j        dd¦  «        z  }|t          j        d|j        ¦  «        z  }|t          j        d|j
        d         ¦  «        z  }|t          j        dd¦  «        z  }|d
z  }|t          j        dt          |¦  «        ¦  «        z  }||z  }|dk    s/|dk    s)|dz  }|t          j        dd|j
        d         ¦  «        z  }|                     |¦  «         |                     d¦  «         |                     t          j        dt#          |j        d¦  «        ¦  «        ¦  «         |j        j        dk    s |j        j        dk    r$t&          j        d k    r|                     ¦   «         }t+          ||¦  «         |                     ¦   «         }|sA|                     d¦  «         |                     t          j        d|dz
  ¦  «        ¦  «         n@|                     d!¦  «         |                     t          j        d|dz
  ¦  «        ¦  «         t          | d¦  «        s|                     ¦   «          d"S |                     d¦  «         d"S # t          | d¦  «        s|                     ¦   «          w |                     d¦  «         w xY w)#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))

    r   Úwb)Úfloat32Úfloat64Úuint8Úint16Úint32Úint64zUnsupported data type 'ú'r   rØ  s       rÛ  ré  r²  r   r   z<HHIIHHr±  Úus     rÕ  r   l   ÿÿ rÙ  s   ÿÿÿÿrÚ  r­  r®  r   rê  z<IIrë  r“  ú=Úbigr   N)rî  rï  r³  Úkindrˆ  rŒ  r   r}   r{   Úndimr»  rÅ  r˜  ÚpackrÄ  Únbytesr   ÚminÚ	byteorderÚsysÚbyteswapÚ_array_tofiler¼  r½  rò  )ró  ÚraterÏ  rœ  r£  ÚdkindÚallowed_dtypesÚheader_datar�  r¢  r¦  r¤  r¥  Úfmt_chunk_dataÚresulting_file_sizerÉ  rŸ  s                    r   r   r   à  sH  € õl ˆx˜Ñ!Ô!ð #Øˆˆå�8˜TÑ"Ô"ˆà	€BðYØ”
”ˆð>ð >ð >ˆàŒ:Œ? .Ð0Ð0ÝÐD°t´zÐDÐDÐDÑEÔEÐEàˆà�wÑˆØÐ*Ñ*ˆØ�wÑˆð 	�wÑˆØ�CŠ<ˆ<Ý$Ô/ˆJˆJå$œˆJØŒ9˜Š>ˆ>ØˆHˆHà”z !”}ˆHØ”JÔ'¨!Ñ+ˆ	Ø˜y¨A™~Ñ.¨xÑ7ÐØ )¨q¡.Ñ1ˆåœ Y°
¸HÀbØ%5°{ÀIñOô Oˆà˜’� ¨¢ à˜kÑ)ˆNà•v”{ 4­¨^Ñ)<Ô)<Ñ=Ô=Ñ=ˆØ�~Ñ%ˆõ " +Ñ.Ô.°Ñ2°QÑ6¸¼ÑDÐØ&¨Ñ*¨jÒ8ˆØð 	*ØˆKØ˜7Ñ"ˆKØÐ.Ñ.ˆKØ˜7Ñ"ˆKØ˜7Ñ"ˆKà�6œ; t¨RÑ0Ô0Ñ0ˆKà�6œ; t¨QÑ/Ô/Ñ/ˆKØ�6œ; t¨T¬[Ñ9Ô9Ñ9ˆKØ�6œ; t¨T¬Z¸¬]Ñ;Ô;Ñ;ˆKà�6œ; t¨QÑ/Ô/Ñ/ˆKØ˜7Ñ"ˆKØ�6œ; t­S°Ñ-@Ô-@ÑAÔAÑAˆKØ˜>Ñ)ˆKð ˜’� ¨¢ Ø˜7Ñ"ˆKØ�6œ; u¨a°´¸A´Ñ?Ô?Ñ?ˆKà�	Š	�+ÑÔÐð 	�	Š	�'ÑÔÐà�	Š	•&”+˜d¥C¨¬°ZÑ$@Ô$@ÑAÔAÑBÔBÐBàŒ:Ô 3Ò&Ð&¨4¬:Ô+?À3Ò+FÐ+FÝ+.¬=¸EÒ+AÐ+AØ—=’=‘?”?ˆDÝ�c˜4Ñ Ô Ð ð �xŠx‰zŒzˆØð 	1Ø�HŠH�Q‰KŒKˆKØ�IŠI•f”k $¨¨Q©Ñ/Ô/Ñ0Ô0Ð0Ð0à�HŠH�R‰LŒLˆLØ�IŠI•f”k $¨¨Q©Ñ/Ô/Ñ0Ô0Ð0õ �x Ñ)Ô)ð 	Ø�IŠI‰KŒKˆKˆKˆKà�HŠH�Q‰KŒKˆKˆKˆKøõ �x Ñ)Ô)ð 	Ø�IŠI‰KŒKˆKˆKà�HŠH�Q‰KŒKˆKˆKøøøs   §M7O Ï<Pc                 ó„   — |                       |                     ¦   «                              d¦  «        j        ¦  «         d S )NÚb)r   ÚravelrÇ  rÏ  )rœ  rÏ  s     r   r  r  y  s3   € à‡I‚Iˆd�jŠj‰lŒl×Ò Ñ$Ô$Ô)Ñ*Ô*Ð*Ð*Ð*r   )F)ry   rÀ  r  Únumpyr¾  r˜  rð  Úenumr   Ú__all__ÚUserWarningr   r   r{   r}   rŽ  r‘  r«  rÒ  rÖ  rã  r›  r   r   r  r   r   r   ú<module>r     s‰  ðð	ð 	ð 
€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð ðð ð €ð	ð 	ð 	ð 	ð 	�[ñ 	ô 	ð 	ðRð Rð Rð Rð R�'ñ Rô Rð Rðj "”o {Ô'=Ð>Ð ðDð Dð DðLð Lð Lð` (-ðeð eð eð eðP$ð $ð $ð"&-ð &-ð &-ðRð ð ðeð eð eð eðPVð Vð Vðr+ð +ð +ð +ð +r   