
    _Mho                         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__     P/var/www/html/test/jupyter/venv/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}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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KKKr   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!qvBBBBBBr   )r   r  
ValueErrorjoinKNOWN_WAVE_FORMATS)
format_tagformat_names     r   _raise_bad_formatr  6  s    +!*--2 + + +#**+
 !+ ! ! !YY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    rt          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         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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1DbyyIJJJ
-Hchhrll
3
3CJILFJ".Y[+++s3w<<Q?a
R$'HHRLL!"J,SZ8H  KJJ  && E#]3s7HRaRLAA!D
MNNN+++*%%% j
"### S$[_$$rK/// 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i8N>   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Wchhqkk2215hhjj}T388A;;//2 #h.((I[_$$	QEE--EE"__//-//EE B$-B B B C C C	{-	-	-  //-//EE I$-I I I J J J 	*%%%HHJJE I	>!TMMDDyE;s%u===DD& 	> 	> 	>HHUA=$u===DDD	> D==/144CS***B#d))'77"9NO"&( ( (A P*.,,<L7M*N*N!!!&&&&''+/<<=M8N+O+O!!!&&'''(66"::%%agcrcl33D|++HHJJE9SC'0l4 4 4DHHUT\"""" 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     88A;;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   88A;;Dw		  AT

 A A A B B 	B  #M#sxx{{33A6:	xx{{ 	xx{{xx{{7??GHHHM$44Q7	M#sxx{{33A6:	 	Q"""wKd4jjKKKLLLmW,,r   c                 @    |dz  r|                      dd           d S d S )Nr   r   )r  )r  r  s     r   r  r  1  s/     ax 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   #8T""7,<S,A,A)	='"#hhjj9$$xx{{H *& @ME

V E E$-DE E E&16 6 6 6 $%>???X"">d8nn>>% **= *M#(8"8.-.0 0 0 0 0 %S//)7""%)"+C??	+4QqS>(
Hb%aL	'lW$$#C7777W$$&*#) A$%?@@@'Z9(5wTS SW$$#C7777///#C7777M,< < < <#C777] hhjj9$$` x(( 	IIKKKKHHQKKKK x(( 	IIKKKKHHQKKKKt8Os   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    }|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    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!! #8T""	BY
> > >:?.00DtzDDDEEEw**w 	wC<<$/JJ$J9>>HHz!}HJ'!+	yA~.x7)q.1Y
Hb%5{IO Ok)Nv{4^)<)<===~% "+..2Q6D&*j8 	*K7"K..K7"K7"K6;tR000K6;tQ///K6;tT[999K6;tTZ];;;K6;tQ///K7"K6;tS-@-@AAAK>)K 7"K6;uaA???K		+ 			'		&+dCZ$@$@AABBB:3&&4:+?3+F+F+.=E+A+A==??Dc4    xxzz 	1HHQKKKIIfk$Q//0000HHRLLLIIfk$Q//000 x)) 	IIKKKKKHHQKKKKK x)) 	IIKKKKHHQKKKKs   M7O <Pc                     |                      |                                                    d          j                   d S )Nb)r   ravelr  r  )r  r  s     r   r  r  y  s3    IIdjjll$$)*****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   