
    (pho                         S r SSKrSSKrSSKrSSKrSSKrSSKJr  / SQr	 " S S\
5      r " S S\5      r\R                  \R                  1rS	 rS
 r SS jrS rS rS rSS jrS rS rg)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                       \ rS rSrSrg)r       N)__name__
__module____qualname____firstlineno____static_attributes__r	       C/var/www/html/venv/lib/python3.13/site-packages/scipy/io/wavfile.pyr   r      s    r   r   c                      \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!Sr"S r#S!r$S"r%S#r&S$r'S%r(S&r)S'r*S(r+S)r,S*r-S+r.S,r/S-r0S.r1S/r2S0r3S1r4S2r5S3r6S4r7S5r8S6r9S7r:S8r;S9r<S:r=S;r>S<r?S=r@S>rAS?rBS@rCSArDSBrESCrFSDrGSErHSFrISGrJSHrKSIrLSJrMSKrNSLrOSMrPSNrQSOrRSPrSSQrTSRrUSSrVSTrWSUrXSVrYSWrZSXr[SYr\SZr]S[r^S\r_S]r`S^raS_rbS`rcSardSbreScrfSdrgSerhSfriSgrjShrkSirlSjrmSkrnSlroSmrpSnrqSorrSprsSqrtSrruSsrvStrwSurxSvrySwrzSxr{Syr|Szr}S{r~S|rS}rS~rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSGr SGrSGrGS GrGSGrGSGrGSGrGSGrGSGrGSGr	GSGr
GSGrGS	GrGS
GrGSGrGSGrGSGrGSGrGg(  WAVE_FORMAT   z
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                           	   
                                    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  r	   N(  r
   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   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Kr   r   c                      [        U 5      R                  n[        SU S3SR                  S [         5       5      -   5      e! [         a    U S n N<f = f)Nz#06xzUnknown wave file format: z. Supported formats: z, c              3   8   #    U  H  oR                   v   M     g 7f)N)name).0xs     r   	<genexpr>$_raise_bad_format.<locals>.<genexpr>=  s     B/A!vv/As   )r   r  
ValueErrorjoinKNOWN_WAVE_FORMATS)
format_tagformat_names     r   _raise_bad_formatr  6  sm    +!*-22 1+ ?! !YYB/ABBC D D  +#D)+s   A AAc                 F   U(       a  SnOSn[         R                  " US-   U R                  S5      5      S   nUS:  a  [        S5      e[         R                  " US-   U R                  S5      5      nSnUu  pgppU[        R
                  :X  a  US	:  a  [         R                  " US
-   U R                  S5      5      S   nUS-  nUS:  a^  U R                  S5      nUS-  nUSS nU(       a  SnOSnUR                  U5      (       a   [         R                  " US-   USS 5      S   nO[        S5      eU[        ;  a  [        U5        X5:  a  U R                  X5-
  5        [        X5        U[        R                  :X  a  XU
-  :w  a  [        SU SU
 SU	 35      eX6XxXU4$ )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byIJJ
--Hchhrl
3CJILFJ"[+++s3w<Q?a
R$'HHRL!"J,S8H JJ  &&#]]3s7HRaLA!D
MNN++*% "# S[__$K// ! "$$4[M B33C2D	F G G h,< r   c                    U(       a  SnOSnU(       d-  [         R                  " US-   U R                  S5      5      S   n	OlU R                  5       n
U R	                  S5        [         R                  " SU R                  S5      5      S   n	U R	                  U
5        U R                  S5        Xb-  nX-  nU[
        R                  :X  a9  S	Us=::  a  S::  a  O  OS
nObUS;   a  SnOYUS::  a  U SU 3nOK[        SU S35      eU[
        R                  :X  a  US;   a  U SU 3nO[        SU S35      e[        U5        U R                  5       nU(       d   WS:X  a  U	OUn[        R                  " XUS9nUS:X  a  US:X  a  U S3OU S3n[        R                  " [!        U5      U-  [        R"                  " U5      R$                  4SS9nU(       a  UR'                  SU45      USS2SU24'   OUR'                  SU45      USS2U* S24'   UR)                  U5      R'                  UR*                  SS 5      nORUS;   a=  U R                  5       n[        R,                  " U WSUU4S9nU R	                  X-   5        O[        SU S35      e[/        X	5        US	:  a  UR'                  SU5      nU$ ! [        R                   a:    U R	                  US5        [        R                  " U R                  U	5      WS9n GNf = f) 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Wchhqk215hhj}}T388A;/2 #.(I[__$	QE-E"_e1-./E $$-;.@B C C	{--	- e1-./E $$-;.GI J J 	*%HHJE	>!TMDyE;;su=D
 D=/14C5SE*B#d)'77"9N9NO"&(A*.,,<L7M*N!&&&&'+/<<=M8N+O!&&''(66":%%aggcrl3D|+HHJE99SC'0l4DHHU\"= 011FH I I S!|||B)K9 && 	>HHUA==$u=D	>s   J2 2A
L ?L c                     U(       a  SnOSnU R                  S5      nU(       a7  [        R                  " X#5      S   nU R                  US5        [	        X5        g g )N>I<Ir   r   r   )r   r  r  r  r  )r  r  r  r  r  s        r   _skip_unknown_chunkr    sO    88A;D
 }}S'*q# r   c                    U R                  S5      nUS:X  a  SnSnSnO2US:X  a  SnSnSnO%US:X  a  SnSnS	nO[        S
[        U5       S35      eU(       d=  [        R                  " X@R                  S5      5      S   S-   nU R                  S5      nOU R                  S5        U R                  S5      nU R                  S5      nUS:w  a  [        S5      e[        R                  " SU R                  S5      5      S   n[        R                  " X@R                  S5      5      S   S-   nU R                  US-
  S5        US:w  a  [        S[        U5       S35      eXSU4$ )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		 <T
| 4A A B 	B MM#xx{3A6:	xx{ 	xx{xx{7?GHHMM$4Q7	MM#xx{3A6:	 	Q"w=d4j\KLLW,,r   c                 >    US-  (       a  U R                  SS5        g g )Nr   r   )r  )r  r  s     r   r  r  1  s     axA r   c           
      f   [        U S5      (       a  U nSnO[        U S5      n [        U5      u  p4nSnSnUR                  5       U:  Gau  UR	                  S5      nU(       dE  U(       a3  [
        R                  " SUR                  5       S SUS S3[        S	S
9  GO#[        S5      e[        U5      S:  aE  S[        U5       3n	U(       a%  U(       a  [
        R                  " U	S-   [        S	S
9  O[        U	5      eUS:X  a   Sn[        X$5      n
U
SS u  pnU
S   nU
S   nOUS:X  a  [        X$5        OuUS:X  a&  SnU(       d  [        S5      e[        UWWWXEWU5      nOIUS:X  a  [        X$5        O7US;   a  [        X$5        O%[
        R                  " S[        S	S
9  [        X$5        UR                  5       U:  a  GMu  [        U S5      (       d  UR                  5         WW4$ UR                  S5         WW4$ ! [        U S5      (       d  UR                  5         f UR                  S5        f = f)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)	'"#hhj9$xx{H&MM?
1~ N$$-a=0CE&16 $%>??X"-d8n-=>%*=MM#(8"8.-.0 %S/)7"%)"+C?	+4Qq>(
b%aL	'lW$#C7W$&*#)$%?@@'Z9(5TSW$#C7//#C7M,<#C7] hhj9$` x((IIK t8O HHQKt8O x((IIKHHQKs   FG; ;5H0c           	         [        U S5      (       a  U nO[        U S5      nUn UR                  R                  n/ SQnUR                  R                  U;  a  [        SUR                   S35      eSnUS-  nUS-  nUS	-  nUS
-  nUS:X  a  [        R                  nO[        R                  nUR                  S:X  a  Sn	OUR                  S   n	UR                  R                  S-  n
XJS-  -  U	-  nXS-  -  n[        R                  " SXUXU
5      nUS:X  d  US:X  d  US-  nU[        R                  " S[        U5      5      -  nX}-  n[        U5      S-   S-   UR                  -   nUS-
  S:  nU(       a  SnUS-  nUS-  nUS	-  nUS-  nU[        R                  " SS5      -  nU[        R                  " SS5      -  nU[        R                  " SUR                  5      -  nU[        R                  " SUR                  S   5      -  nU[        R                  " SS5      -  nUS
-  nU[        R                  " S[        U5      5      -  nX}-  nUS:X  d3  US:X  d-  US-  nU[        R                  " SSUR                  S   5      -  nUR!                  U5        UR!                  S5        UR!                  [        R                  " S[#        UR                  S5      5      5        UR                  R$                  S:X  d.  UR                  R$                  S:X  a$  [&        R$                  S :X  a  UR)                  5       n[+        X25        UR-                  5       nU(       d;  UR/                  S5        UR!                  [        R                  " SUS-
  5      5        O:UR/                  S!5        UR!                  [        R                  " SUS-
  5      5        [        U S5      (       d  UR1                  5         g"UR/                  S5        g"! [        U S5      (       d  UR1                  5         f UR/                  S5        f = f)#aS  
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     s   l x!!8T"	BY

>::??.06tzzl!DEEw**w 	wC<$//J$J99>Hzz!}HJJ''!+	A~.x7q.1Y
b%5I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c  xxzHHQKIIfkk$Q/0HHRLIIfkk$Q/0 x))IIKHHQK x))IIKHHQKs   N4P 5Qc                 t    U R                  UR                  5       R                  S5      R                  5        g )Nb)r   ravelr  r  )r  r  s     r   r  r  y  s%    IIdjjl$))*r   )F)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   <module>r     s   	 
 
    	[ 	R' Rj "oo{'='=> DL` (-eP$"&-RePVr+r   