
    Џkhw                         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Zddlm	Z	 g dZ
 G d de      Z G d d      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y)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y)r   N)__name__
__module____qualname__     L/var/www/teggl/fontify/venv/lib/python3.12/site-packages/scipy/io/wavfile.pyr   r      s    r   r   c                   N    e Zd ZdZd Zd	dZej                  fdZd Z	d Z
d Z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   )readerpos)selfr   s     r   __init__zSeekEmulatingReader.__init__&   s    r   c                x    | j                   j                  |      }| xj                  t        |      z  c_        |S N)r   r   r   len)r   sizedatas      r   r   zSeekEmulatingReader.read*   s-    {{%CIr   c                   |xt         j                  k(  r:|| j                  k\  r+ | j                  || j                  z
         | j                  S xt         j                  k(  r#|dk\  r | j                  |       | j                  S t         j
                  k(  r!|dk(  r| j                          | j                  S 	 t        j                  d      )Nr   zNSeekEmulatingReader was asked to emulate a seek operation it does not support.)osSEEK_SETr   r   SEEK_CURSEEK_ENDioUnsupportedOperation)r   offsetwhences      r   seekzSeekEmulatingReader.seek/   s    $(( 2		&488+, xx !		&! xx !		 xx -- /W X Xr   c                     | j                   S r   )r   r   s    r   tellzSeekEmulatingReader.tell<   s    xxr   c                 8    | j                   j                          y r   )r   closer%   s    r   r(   zSeekEmulatingReader.close?   s    r   c                 ,    t        j                  d      )Nz SeekEmulatingReader can't flush.)r   r    r%   s    r   flushzSeekEmulatingReader.flushD   s    %%&HIIr   N))r   r	   r
   __doc__r   r   r   r   r#   r&   r(   r*   r   r   r   r   r      s/    
 #%++ 
Jr   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}Zd~ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZdZd ZdZdZdZdZdZdZ	dZ
dZd	Zd
ZdZdZy(  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
   r,   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.   H   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Kr   r.   c                     	 t        |       j                  }t        d| ddj                  d t        D              z         # t        $ r | d}Y ;w xY w)Nz#06xzUnknown wave file format: z. Supported formats: z, c              3   4   K   | ]  }|j                     y wr   )name).0xs     r   	<genexpr>z$_raise_bad_format.<locals>.<genexpr>g  s     B!qvvBs   )r.   r  
ValueErrorjoinKNOWN_WAVE_FORMATS)
format_tagformat_names     r   _raise_bad_formatr  `  sm    +!*-22 1+ ?! !YYB/ABBC D D  +#D)+s   A AAc                 "   |rd}nd}t        j                  |dz   | j                  d            d   }|dk  rt        d      t        j                  |dz   | j                  d            }d}|\  }}}}	}
}|t        j
                  k(  r|d	k\  rt        j                  |d
z   | j                  d            d   }|dz  }|dk\  rS| j                  d      }|dz  }|dd }|rd}nd}|j                  |      r+t        j                  |dz   |dd       d   }nt        d      |t        vrt        |       ||kD  r| j                  ||z
         t        | |       |t        j                  k(  r|	||
z  k7  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
    ><Ir2   r   r:   z.Binary structure of wave file is not compliantHHIIHHr<   Hr0   r@   r4   s         8qs         8qNz{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fmtr   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  j  s   . ==S#((1+.q1DbyIJJ
--Hchhrl
3CJILFJ".Y[+++s3w<Q?a
R$'HHRL!"J,S8H JJ  &#]]3s7HRaLA!D
MNN++*% j
"# S$[__$rK// ! "$$4[M B33C2D	F G G *h,<k r   c	                 $   |rd}	nd}	|s,t        j                  |	dz   | j                  d            d   }
n|}
| j                  d       ||z  }|
|z  }|t        j                  k(  r4d|cxk  rdk  rn nd}n\|d	v rd
}nU|dk  r|	 d| }nHt        d| d      |t        j                  k(  r|dv r|	 d| }nt        d| d      t        |       | j                         }|s	 d
k(  r|
n|}t        j                  | ||      }|d
k(  r|dk(  r|	 dn|	 d}t        j                  t!        |      |z  t        j"                  |      j$                  fd
      }|r|j'                  d|f      |ddd|f<   n|j'                  d|f      |dd| df<   |j)                  |      j'                  |j*                  dd       }nS|dv r@| j                         }t        j,                  | d||f      }| j                  ||
z          nt        d| d      t/        | |
       |dkD  r|j'                  d|      }|S # t        j                  $ r< | j                  |d       t        j                  | j                  |
            }Y w xY w)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  r2   r   r/   r6   u1>   r1   r3   r4   r5   V1r\   iz(Unsupported bit depth: the WAV file has z-bit integer data.>   rE   r\   fz-bit floating-point data.)dtypecount)r  r1   i4i8r+   N>   r/   r0   r2   r6   c)r  moder!   shapezmmap=True not compatible with z-byte container size.)r  r  r   r.   r   r  r   r  r&   npfromfiler   r    r#   
frombufferzerosr   r  itemsizereshapeviewr  memmapr  )r  r  r  r  r  is_rf64r  mmaprf64_chunk_sizer  r   bytes_per_sample	n_samplesr  startr  r   dtas                      r   _read_data_chunkr    s   4  }}SWchhqk215  #h.((I[__$	QE-E"_e1-./E $$-;.@B C C	{--	- e1-./E $$-;.GI J J 	*%HHJE	>!TMDyE;;s%u=D
 D=/14C5SE*B#d)'77"9N9NO"&(A*.,,<L7M*N!&&&&'+/<<=M8N+O!&&''(66":%%aggcrl3D|+HHJE99SC'0l4DHHUT\"= 011FH I I S$!|||B)K9 && 	>HHUA==$u=D	>s   &!I   AJJc                     |rd}nd}| j                  d      }|r8t        j                  ||      d   }| j                  |d       t	        | |       y y )N>I<Ir2   r   r/   )r   r  r  r#   r  )r  r  r  r   r   s        r   _skip_unknown_chunkr    sS    88A;D
 }}S$'*qd# r   c                 
   | j                  d      }|dk(  rd}d}d}n0|dk(  rd}d}d}n$|dk(  rd}d}d	}nt        d
t        |       d      |s?t        j                  || j                  d            d   dz   }d }| j                  d      }n| j                  d       | j                  d      }| j                  d      }|dk7  rt        d      t        j                  d| j                  d            d   }	t        j                  || j                  d            d   dz   }t        j                  d	| j                  d            d   }| j                  |	dz
  d       |dk7  rt        dt        |       d      ||||fS )Nr2      RIFFFr  s   RIFXTr     RF64<QzFile format z; not understood. Only 'RIFF', 'RIFX', and 'RF64' supported.r   r6      ds64z(Invalid RF64 file: ds64 chunk not found.r:   r/      WAVEz"Not a WAV file. RIFF form type is .)r   r  reprr  r  r#   )
r  str1r  r  r  	file_sizer  str2str3	ds64_sizes
             r   _read_riff_chunkr  /  s   88A;Dw		 <T
| 4A A B 	B MM#sxx{3A6:	xx{ 	xx{xx{7?GHHMM$4Q7	MM#sxx{3A6:	 --chhqk:1= 	R#w=d4j\KLLmWo==r   c                 4    |dz  r| j                  dd       y y )Nr0   r/   )r#   )r  r   s     r   r  r  Z  s     axA r   c                 d   t        | d      r| }d}nt        | d      }|j                         x}st        |      }	 t	        |      \  }}}}d}d}	|j                         |k  ra|j                  d      }
|
sB|	r5t        j                  d|j                         dd|ddt        d	
       nt        d      t        |
      dk  r=dt        |
       }|r"|	r t        j                  |dz   t        d	
       nt        |      |
dk(  r"d}t        ||      }|dd \  }}}|d   }|d   }n|
dk(  rt        ||       ns|
dk(  r#d}	|st        d      t        |||||	      }nK|
dk(  rt        ||       n9|
dv rt        ||       n(t        j                  dt        d	
       t        ||       |j                         |k  rat        | d      s|j!                          fS |r|j#                  d       fS # t        | d      s|j!                          w |r|j#                  d       w w xY 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rbr2   z%Reached EOF prematurely; finished at dz bytes, expected z bytes from header.r0   )
stacklevelzUnexpected end of file.zIncomplete chunk ID: z, ignoring it.   fmt Tr/   r4   r3      fact   datazNo fmt chunk before datas   LIST>      Fake   JUNKz-Chunk (non-data) not understood, skipping it.r   )hasattropenseekabler   r  r&   r   warningswarnr   r  r   r  r  r  r  r(   r#   )filenamer  r  was_seekabler  r  r  r  fmt_chunk_receiveddata_chunk_receivedchunk_idmsg	fmt_chunkr  r  r  r  r  r   s                      r   r   r   a  s]   L x 8T"LLN*L*!#&:=Mc=R:	='?"#hhj9$xx{H&MM?
1~ N$$-a=0CE&16 $%>??X"-d8n-=>%*=MM#(8"8.-.0 %S/)7"%)"+C?	+4Qq>(
Hb%aL	'lW$#C7W$&*#)$%?@@'Z9(5w(,o? W$#C7//#C7M,<#C7_ hhj9$b x(IIK t8O  HHQKt8O x(IIK HHQK s   FG< <3H/c           	      6   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kD  }|rd}|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(  s1|dk(  s,|dz  }|t        j                  dd|j                  d         z  }|j!                  |       |j!                  d       |j!                  t        j                  dt#        |j                  d                   |j                  j$                  dk(  s,|j                  j$                  dk(  r#t&        j$                  d k(  r|j)                         }t+        ||       |j-                         }|s:|j/                  d       |j!                  t        j                  d|dz
               n9|j/                  d!       |j!                  t        j                  d|dz
               t        | d      s|j1                          y"|j/                  d       y"# t        | d      s|j1                          w |j/                  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/   r6   z<HHIIHHr  us     r  r2   l    r  s   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     s   l x!8T"	BY

>::??.06tzzl!DEEw**w 	wC<$//J$J99>Hzz!}HJJ''!+	yA~.x7)q.1Y
Hb%5{IOk)Nv{{4^)<==~% "+.2Q6D&*j8K7"K..K7"K7"K6;;tR00K6;;tQ//K6;;tT[[99K6;;tTZZ];;K6;;tQ//K7"K6;;tS-@AAK>)K 7"K6;;uaA??K		+ 			'		&++dCZ$@AB::3&4::+?+?3+F+.==E+A==?Dc4  xxzHHQKIIfkk$Q/0HHRLIIfkk$Q/0 x)IIKHHQK x)IIKHHQKs   NO( (0Pc                 t    | j                  |j                         j                  d      j                         y )Nb)r   ravelr  r   )r  r   s     r   r#  r#    s%    IIdjjl$))*r   )FN)F)r,   r   r   r!  numpyr  r  r  enumr   __all__UserWarningr   r   r.   r   r   r  r  r  r  r  r  r  r   r   r#  r   r   r   <module>r1     s   	 
 	 
    	[ 	&J &JRR' Rj "oo{'='=> DL` ?CbJ$"(>Vk\Vr+r   