
    9iw                         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rSSKJ	r	  / SQr
 " S S\5      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	       P/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/scipy/io/wavfile.pyr   r      s    r   r   c                   Z    \ rS rSrSrS rSS jr\R                  4S jr	S r
S rS rS	rg
)SeekEmulatingReader   z
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                     Xl         SU l        g )Nr   )readerpos)selfr   s     r   __init__SeekEmulatingReader.__init__&   s    r   c                x    U R                   R                  U5      nU =R                  [        U5      -  sl        U$ N)r   r   r   len)r   sizedatas      r   r   SeekEmulatingReader.read*   s-    {{%CIr   c                   U=[         R                  :X  a9  XR                  :  a*    U R                  XR                  -
  5        U R                  $ =[         R                  :X  a$  US:  a    U R                  U5        U R                  $ [         R
                  :X  a"  US:X  a  U R                  5         U R                  $  [        R                  " S5      e)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   seekSeekEmulatingReader.seek/   s    (( 2		&88+, xx !		&! xx !		 xx -- /W X Xr   c                     U R                   $ r   )r   r   s    r   tellSeekEmulatingReader.tell<   s    xxr   c                 8    U R                   R                  5         g r   )r   closer,   s    r   r0   SeekEmulatingReader.close?   s    r   c                 .    [         R                  " S5      e)Nz SeekEmulatingReader can't flush.)r%   r&   r,   s    r   flushSeekEmulatingReader.flushD   s    %%&HIIr   )r   r   N))r
   r   r   r   __doc__r   r   r!   r"   r)   r-   r0   r3   r   r	   r   r   r   r      s/    
 #%++ 
J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_FORMATH   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                           	   
                                           !   "   #   $   %   &   '   (   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   r6   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   r8   r8   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   r8   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r   )name).0xs     r   	<genexpr>$_raise_bad_format.<locals>.<genexpr>g  s     B/A!vv/As   )r8   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                 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   rE   z.Binary structure of wave file is not compliantHHIIHHrG   Hr;   rK   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  r8   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"[+++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	                 T   U(       a  Sn	OSn	U(       d-  [         R                  " U	S-   U R                  S5      5      S   n
OUn
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   r:   rA   u1>   r<   r>   r?   r@   V1rg   iz(Unsupported bit depth: the WAV file has z-bit integer data.>   rP   rg   fz-bit floating-point data.)dtypecount)r  r<   i4i8r5   N>   r:   r;   r=   rA   c)r  moder'   shapezmmap=True not compatible with z-byte container size.)r  r  r   r8   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  #.(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   =I A
J'&J'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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[        R                  " S	U R                  S5      5      S   nU R                  U	S-
  S5        US:w  a  [        S[        U5       S35      eXSX&4$ )Nr=      RIFFFr  s   RIFXTr     RF64<QzFile format z; not understood. Only 'RIFF', 'RIFX', and 'RF64' supported.r   rA      ds64z(Invalid RF64 file: ds64 chunk not found.rE   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#xx{3A6:	xx{ 	xx{xx{7?GHHMM$4Q7	MM#xx{3A6:	 --chhqk:1= 	R#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  Z  s     axA r   c                    [        U S5      (       a  U nSnO[        U S5      nUR                  5       =n(       d  [        U5      n [	        U5      u  pEpgS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XVWX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(       a  UR#                  S5        WW4$ ! [        U S5      (       d  UR!                  5         f U(       a  UR#                  S5        f 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openseekabler   r  r-   r   warningswarnr   r  r   r  r  r  r  r0   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  sR   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>(
b%aL	'lW$#C7W$&*#)$%?@@'Z9(5(,? W$#C7//#C7M,<#C7_ hhj9$b x((IIK t8O  HHQKt8O x((IIK HHQK s   FH# #=I 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:   rA   z<HHIIHHr  us     r  r=   l    r  s   r     r  r   r
  z<IIr  r  =bigrI   N)r  r  r  kindr  r  r8   r   r   ndimr  r  r  packr   nbytesr   min	byteordersysbyteswap_array_tofiler-   r)   r0   )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/    s%    IIdjjl$))*r   )FN)F)r6   r%   r!   r-  numpyr  r  r  enumr   __all__UserWarningr   r   r8   r   r   r  r  r  r  r  r  r  r   r   r/  r	   r   r   <module>r=     s   	 
 	 
    	[ 	&J &JRR' Rj "oo{'='=> DL` ?CbJ$"(>Vk\Vr+r   