o
    Ö­jço  ã                   @   s¾   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„ de
ƒZG dd„ deƒZejejhZd	d
„ Zdd„ Z	ddd„Zdd„ Zdd„ Zdd„ Zddd„Zdd„ Zd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                   @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r	   r	   úM/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/io/wavfile.pyr      s    r   c                   @   s|  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   r   c                 C   sN   zt | ƒj}W n ty   | d›}Y nw td|› d�d dd„ tD ƒ¡ ƒ‚)Nz#06xzUnknown wave file format: z. Supported formats: z, c                 s   s   � | ]}|j V  qd S )N)Úname)Ú.0Úxr	   r	   r
   Ú	<genexpr>=  s   € z$_raise_bad_format.<locals>.<genexpr>)r   r‚  Ú
ValueErrorÚjoinÚKNOWN_WAVE_FORMATS)Ú
format_tagÚformat_namer	   r	   r
   Ú_raise_bad_format6  s   ÿþr‹  c                 C   sl  |rd}nd}t  |d |  d¡¡d }|dk rtdƒ‚t  |d |  d¡¡}d}|\}}}}	}
}|tjkr}|d	kr}t  |d
 |  d¡¡d }|d7 }|dkry|  d¡}|d7 }|dd… }|rcd}nd}| |¡rxt  |d |dd… ¡d }ntdƒ‚|tvr…t|ƒ ||kr�|  || ¡ t	| |ƒ |tj
kr­|	||
 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_byterw   )Ú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Útailr	   r	   r
   Ú_read_fmt_chunk@  sP   

€

ýýüÿr¤  Fc                 C   sŽ  |rd}nd}|st  |d |  d¡¡d }	n|  ¡ }
|  d¡ t  d|  d¡¡d }	|  |
¡ |  d¡ || }|	| }|tjkrld	|  krLdkrQn nd
}n8|dv rXd}n1|dkrd|› d|› �}n%td|› d�ƒ‚|tjkr…|dv r}|› d|› �}ntd|› d�ƒ‚t	|ƒ |  ¡ }|�sz|dkr—|	n|}t
j| ||d�}W n tjy¼   |  |d¡ t
j|  |	¡|d�}Y nw |dk�r|dkrË|› d�n|› d�}t
jt|ƒ| t
 |¡jfdd�}|ró| d|f¡|dd…d|…f< n| d|f¡|dd…| d…f< | |¡ |jdd… ¡}n$|dv �r-|  ¡ }t
j| |d||fd�}|  ||	 ¡ ntd|› d�ƒ‚t| |	ƒ |d	k�rE| 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   ÚV1r9   Úiz(Unsupported bit depth: the WAV file has z-bit integer data.>   r"   r9   Ú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   rw   r†  ry   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Úar	   r	   r
   Ú_read_data_chunk�  sz   




ÿ

ÿþ
ÿ  €
ÿ
ÿ

rÊ  c                 C   sJ   |rd}nd}|   d¡}|r#t ||¡d }|  |d¡ t| |ƒ d S d S )Nú>Iú<Ir   r   r   )r   r‘  r’  rµ  r”  )r•  r–  r—  rÇ  r˜  r	   r	   r
   Ú_skip_unknown_chunk÷  s   
ýrÍ  c           	      C   s  |   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�ƒ‚|sEt ||   d¡¡d d }|   d¡}n7|   d¡ |   d¡}|   d¡}|dkr\tdƒ‚t d|   d¡¡d }t ||   d¡¡d d }|  |d 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_sizer	   r	   r
   Ú_read_riff_chunk  s8   




rÙ  c                 C   s   |d r|   dd¡ d S d S )Nr   r   )rµ  )r•  r˜  r	   r	   r
   r”  1  s   ÿr”  c              	   C   sÞ  t | dƒr
| }d}nt| dƒ}zÏt|ƒ\}}}d}d}| ¡ |k rÈ| d¡}|sB|r>tjd| ¡ d›d|d›d�td	d
� nŠtdƒ‚t	|ƒdk rbdt
|ƒ› �}	|r^|r^tj|	d td	d
� nt|	ƒ‚|dkrd}t||ƒ}
|
dd… \}}}|
d }|
d }nC|dkr‰t||ƒ n9|dkr¡d}|s•tdƒ‚t||||||||ƒ}n!|dkr«t||ƒ n|dv rµt||ƒ ntjdtd	d
� t||ƒ | ¡ |k s!W t | dƒsÖ| ¡  ||fS | d¡ ||fS t | dƒsé| ¡  w | d¡ w )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Ç  r	   r	   r
   r   8  sx   
f

ÿýÿ


ÿÿ
Ò€
0
þ
û
r   c              	   C   s  t | dƒr| }nt| dƒ}|}�zg|jj}g d¢}|jj|vr(td|j› d�ƒ‚d}|d7 }|d7 }|d	7 }|d
7 }|dkrBtj}ntj}|j	dkrMd}	n|j
d }	|jjd }
||
d  |	 }|	|
d  }t d||	||||
¡}|dks}|dks}|d7 }|t dt|ƒ¡7 }||7 }t|ƒd d |j }|d dk}|rîd}|d7 }|d7 }|d	7 }|d7 }|t dd¡7 }|t dd¡7 }|t d|j¡7 }|t d|j
d ¡7 }|t dd¡7 }|d
7 }|t dt|ƒ¡7 }||7 }|dk�s|dk�s|d7 }|t dd|j
d ¡7 }| |¡ | d¡ | t dt|jdƒ¡¡ |jjdk�s3|jjdk�r7tjd k�r7| ¡ }t||ƒ | ¡ }|�sT| d¡ | t d|d ¡¡ n| d!¡ | t d|d ¡¡ W t | dƒ�sq| ¡  d"S | d¡ d"S t | dƒ�sƒ| ¡  w | d¡ 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Î  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   ry   rw   Ú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˜  r	   r	   r
   r   à  sŠ   
6


ÿ




€ý
r   c                 C   s   |   | ¡  d¡j¡ d S )NÚb)r   Úravelr¿  rÇ  )r•  rÇ  r	   r	   r
   r  y  s   r  )F)ru   r¸  rÿ  Únumpyr¶  r‘  rä  Úenumr   Ú__all__ÚUserWarningr   r   rw   ry   rˆ  r‹  r¤  rÊ  rÍ  rÙ  r”  r   r   r  r	   r	   r	   r
   Ú<module>   s2    
  
P
ÿh)
 ) 