annotate Lib/wave.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents fbebc90abcd1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
1 """Stuff to parse WAVE files.
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
2
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
3 Usage.
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
4
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
5 Reading WAVE files:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
6 f = wave.open(file, 'r')
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
7 where file is either the name of a file or an open file pointer.
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
8 The open file pointer must have methods read(), seek(), and close().
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
9 When the setpos() and rewind() methods are not used, the seek()
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
10 method is not necessary.
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
11
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
12 This returns an instance of a class with the following public methods:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
13 getnchannels() -- returns number of audio channels (1 for
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
14 mono, 2 for stereo)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
15 getsampwidth() -- returns sample width in bytes
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
16 getframerate() -- returns sampling frequency
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
17 getnframes() -- returns number of audio frames
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
18 getcomptype() -- returns compression type ('NONE' for linear samples)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
19 getcompname() -- returns human-readable version of
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
20 compression type ('not compressed' linear samples)
83234
340a12c18b7f #17487: wave.getparams now returns a namedtuple.
R David Murray <rdmurray@bitdance.com>
parents: 80456
diff changeset
21 getparams() -- returns a namedtuple consisting of all of the
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
22 above in the above order
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
23 getmarkers() -- returns None (for compatibility with the
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
24 aifc module)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
25 getmark(id) -- raises an error since the mark does not
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
26 exist (for compatibility with the aifc module)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
27 readframes(n) -- returns at most n frames of audio
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
28 rewind() -- rewind to the beginning of the audio stream
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
29 setpos(pos) -- seek to the specified position
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
30 tell() -- return the current position
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
31 close() -- close the instance (make it unusable)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
32 The position returned by tell() and the position given to setpos()
13620
5b727ab37092 Spelling fixes supplied by Rob W. W. Hooft. All these are fixes in either
Thomas Wouters <thomas@python.org>
parents: 11707
diff changeset
33 are compatible and have nothing to do with the actual position in the
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
34 file.
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
35 The close() method is called automatically when the class instance
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
36 is destroyed.
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
37
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
38 Writing WAVE files:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
39 f = wave.open(file, 'w')
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
40 where file is either the name of a file or an open file pointer.
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
41 The open file pointer must have methods write(), tell(), seek(), and
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
42 close().
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
43
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
44 This returns an instance of a class with the following public methods:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
45 setnchannels(n) -- set the number of channels
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
46 setsampwidth(n) -- set the sample width
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
47 setframerate(n) -- set the frame rate
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
48 setnframes(n) -- set the number of frames
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
49 setcomptype(type, name)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
50 -- set the compression type and the
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
51 human-readable compression type
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
52 setparams(tuple)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
53 -- set all parameters at once
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
54 tell() -- return current position in output file
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
55 writeframesraw(data)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
56 -- write audio frames without pathing up the
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
57 file header
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
58 writeframes(data)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
59 -- write audio frames and patch up the file header
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
60 close() -- patch up the file header and close the
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
61 output file
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
62 You should set the parameters before the first writeframesraw or
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
63 writeframes. The total number of frames does not need to be set,
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
64 but when it is set to the correct value, the header does not have to
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
65 be patched up.
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
66 It is best to first set all parameters, perhaps possibly the
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
67 compression type, and then write audio frames using writeframesraw.
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
68 When all frames have been written, either call writeframes('') or
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
69 close() to patch up the sizes in the header.
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
70 The close() method is called automatically when the class instance
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
71 is destroyed.
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
72 """
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
73
44098
0889daf6d0d9 #1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents: 43577
diff changeset
74 import builtins
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
75
16889
0feb63490093 final round of __all__ lists (I hope) - skipped urllib2 because Moshe may be
Skip Montanaro <skip@pobox.com>
parents: 15874
diff changeset
76 __all__ = ["open", "openfp", "Error"]
0feb63490093 final round of __all__ lists (I hope) - skipped urllib2 because Moshe may be
Skip Montanaro <skip@pobox.com>
parents: 15874
diff changeset
77
14021
5b34b70ecf22 Convert some old-style string exceptions to class exceptions.
Fred Drake <fdrake@acm.org>
parents: 13620
diff changeset
78 class Error(Exception):
5b34b70ecf22 Convert some old-style string exceptions to class exceptions.
Fred Drake <fdrake@acm.org>
parents: 13620
diff changeset
79 pass
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
80
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 WAVE_FORMAT_PCM = 0x0001
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
82
86411
a1a4a527c699 Issue #19276: Fixed the wave module on 64-bit big-endian platforms.
Serhiy Storchaka <storchaka@gmail.com>
parents: 86245
diff changeset
83 _array_fmts = None, 'b', 'h', None, 'i'
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
84
87454
fbebc90abcd1 Issue #19641: Added the audioop.byteswap() function to convert big-endian
Serhiy Storchaka <storchaka@gmail.com>
parents: 87305
diff changeset
85 import audioop
10106
16aa73588d93 Two important fixes:
Guido van Rossum <guido@python.org>
parents: 8131
diff changeset
86 import struct
87025
79b8b7c5fe8a Issue #1575020: Fixed support of 24-bit wave files on big-endian platforms.
Serhiy Storchaka <storchaka@gmail.com>
parents: 86411
diff changeset
87 import sys
79b8b7c5fe8a Issue #1575020: Fixed support of 24-bit wave files on big-endian platforms.
Serhiy Storchaka <storchaka@gmail.com>
parents: 86411
diff changeset
88 from chunk import Chunk
83234
340a12c18b7f #17487: wave.getparams now returns a namedtuple.
R David Murray <rdmurray@bitdance.com>
parents: 80456
diff changeset
89 from collections import namedtuple
10106
16aa73588d93 Two important fixes:
Guido van Rossum <guido@python.org>
parents: 8131
diff changeset
90
85513
a14ec46de0a4 Issue #17487: The result of the wave getparams method now is pickleable again.
Serhiy Storchaka <storchaka@gmail.com>
parents: 84944
diff changeset
91 _wave_params = namedtuple('_wave_params',
83234
340a12c18b7f #17487: wave.getparams now returns a namedtuple.
R David Murray <rdmurray@bitdance.com>
parents: 80456
diff changeset
92 'nchannels sampwidth framerate nframes comptype compname')
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
93
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 class Wave_read:
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
95 """Variables used in this class:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
96
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
97 These variables are available to the user though appropriate
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
98 methods of this class:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
99 _file -- the open file with methods read(), close(), and seek()
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
100 set through the __init__() method
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
101 _nchannels -- the number of audio channels
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
102 available through the getnchannels() method
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
103 _nframes -- the number of audio frames
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
104 available through the getnframes() method
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
105 _sampwidth -- the number of bytes per audio sample
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
106 available through the getsampwidth() method
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
107 _framerate -- the sampling frequency
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
108 available through the getframerate() method
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
109 _comptype -- the AIFF-C compression type ('NONE' if AIFF)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
110 available through the getcomptype() method
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
111 _compname -- the human-readable AIFF-C compression type
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
112 available through the getcomptype() method
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
113 _soundpos -- the position in the audio stream
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
114 available through the tell() method, set through the
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
115 setpos() method
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
116
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
117 These variables are used internally only:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
118 _fmt_chunk_read -- 1 iff the FMT chunk has been read
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
119 _data_seek_needed -- 1 iff positioned correctly in audio
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
120 file for readframes()
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
121 _data_chunk -- instantiation of a chunk class for the DATA chunk
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
122 _framesize -- size of one frame in the file
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
123 """
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
124
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
125 def initfp(self, file):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
126 self._convert = None
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
127 self._soundpos = 0
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
128 self._file = Chunk(file, bigendian = 0)
42354
36fbcda80b1c Make test_wave.py pass.
Guido van Rossum <guido@python.org>
parents: 41717
diff changeset
129 if self._file.getname() != b'RIFF':
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
130 raise Error('file does not start with RIFF id')
42354
36fbcda80b1c Make test_wave.py pass.
Guido van Rossum <guido@python.org>
parents: 41717
diff changeset
131 if self._file.read(4) != b'WAVE':
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
132 raise Error('not a WAVE file')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
133 self._fmt_chunk_read = 0
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
134 self._data_chunk = None
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
135 while 1:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
136 self._data_seek_needed = 1
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
137 try:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
138 chunk = Chunk(self._file, bigendian = 0)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
139 except EOFError:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
140 break
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
141 chunkname = chunk.getname()
42354
36fbcda80b1c Make test_wave.py pass.
Guido van Rossum <guido@python.org>
parents: 41717
diff changeset
142 if chunkname == b'fmt ':
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
143 self._read_fmt_chunk(chunk)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
144 self._fmt_chunk_read = 1
42354
36fbcda80b1c Make test_wave.py pass.
Guido van Rossum <guido@python.org>
parents: 41717
diff changeset
145 elif chunkname == b'data':
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
146 if not self._fmt_chunk_read:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
147 raise Error('data chunk before fmt chunk')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
148 self._data_chunk = chunk
19694
3716b116fb31 The first batch of changes recommended by the fixdiv tool. These are
Guido van Rossum <guido@python.org>
parents: 16889
diff changeset
149 self._nframes = chunk.chunksize // self._framesize
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
150 self._data_seek_needed = 0
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
151 break
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
152 chunk.skip()
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
153 if not self._fmt_chunk_read or not self._data_chunk:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
154 raise Error('fmt chunk and/or data chunk missing')
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
155
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
156 def __init__(self, f):
15135
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
157 self._i_opened_the_file = None
43577
ace45b361e87 Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents: 43020
diff changeset
158 if isinstance(f, str):
44098
0889daf6d0d9 #1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents: 43577
diff changeset
159 f = builtins.open(f, 'rb')
15135
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
160 self._i_opened_the_file = f
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
161 # else, assume it is an open file object already
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41449
diff changeset
162 try:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41449
diff changeset
163 self.initfp(f)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41449
diff changeset
164 except:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41449
diff changeset
165 if self._i_opened_the_file:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41449
diff changeset
166 f.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41449
diff changeset
167 raise
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
168
15135
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
169 def __del__(self):
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
170 self.close()
84932
8327780d3841 #17616: wave.open now supports the 'with' statement.
R David Murray <rdmurray@bitdance.com>
parents: 83983
diff changeset
171
8327780d3841 #17616: wave.open now supports the 'with' statement.
R David Murray <rdmurray@bitdance.com>
parents: 83983
diff changeset
172 def __enter__(self):
8327780d3841 #17616: wave.open now supports the 'with' statement.
R David Murray <rdmurray@bitdance.com>
parents: 83983
diff changeset
173 return self
8327780d3841 #17616: wave.open now supports the 'with' statement.
R David Murray <rdmurray@bitdance.com>
parents: 83983
diff changeset
174
8327780d3841 #17616: wave.open now supports the 'with' statement.
R David Murray <rdmurray@bitdance.com>
parents: 83983
diff changeset
175 def __exit__(self, *args):
8327780d3841 #17616: wave.open now supports the 'with' statement.
R David Murray <rdmurray@bitdance.com>
parents: 83983
diff changeset
176 self.close()
8327780d3841 #17616: wave.open now supports the 'with' statement.
R David Murray <rdmurray@bitdance.com>
parents: 83983
diff changeset
177
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
178 #
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
179 # User visible methods.
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
180 #
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
181 def getfp(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
182 return self._file
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
183
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
184 def rewind(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
185 self._data_seek_needed = 1
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
186 self._soundpos = 0
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
187
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
188 def close(self):
15135
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
189 if self._i_opened_the_file:
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
190 self._i_opened_the_file.close()
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
191 self._i_opened_the_file = None
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
192 self._file = None
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
193
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
194 def tell(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
195 return self._soundpos
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
196
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
197 def getnchannels(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
198 return self._nchannels
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
199
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
200 def getnframes(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
201 return self._nframes
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
202
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
203 def getsampwidth(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
204 return self._sampwidth
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
205
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
206 def getframerate(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
207 return self._framerate
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
208
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
209 def getcomptype(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
210 return self._comptype
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
211
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
212 def getcompname(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
213 return self._compname
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
214
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
215 def getparams(self):
85513
a14ec46de0a4 Issue #17487: The result of the wave getparams method now is pickleable again.
Serhiy Storchaka <storchaka@gmail.com>
parents: 84944
diff changeset
216 return _wave_params(self.getnchannels(), self.getsampwidth(),
83234
340a12c18b7f #17487: wave.getparams now returns a namedtuple.
R David Murray <rdmurray@bitdance.com>
parents: 80456
diff changeset
217 self.getframerate(), self.getnframes(),
340a12c18b7f #17487: wave.getparams now returns a namedtuple.
R David Murray <rdmurray@bitdance.com>
parents: 80456
diff changeset
218 self.getcomptype(), self.getcompname())
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
219
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
220 def getmarkers(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
221 return None
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
222
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
223 def getmark(self, id):
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
224 raise Error('no marks')
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
225
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
226 def setpos(self, pos):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
227 if pos < 0 or pos > self._nframes:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
228 raise Error('position not in range')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
229 self._soundpos = pos
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
230 self._data_seek_needed = 1
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
231
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
232 def readframes(self, nframes):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
233 if self._data_seek_needed:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
234 self._data_chunk.seek(0, 0)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
235 pos = self._soundpos * self._framesize
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
236 if pos:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
237 self._data_chunk.seek(pos, 0)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
238 self._data_seek_needed = 0
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
239 if nframes == 0:
42354
36fbcda80b1c Make test_wave.py pass.
Guido van Rossum <guido@python.org>
parents: 41717
diff changeset
240 return b''
87454
fbebc90abcd1 Issue #19641: Added the audioop.byteswap() function to convert big-endian
Serhiy Storchaka <storchaka@gmail.com>
parents: 87305
diff changeset
241 data = self._data_chunk.read(nframes * self._framesize)
fbebc90abcd1 Issue #19641: Added the audioop.byteswap() function to convert big-endian
Serhiy Storchaka <storchaka@gmail.com>
parents: 87305
diff changeset
242 if self._sampwidth != 1 and sys.byteorder == 'big':
fbebc90abcd1 Issue #19641: Added the audioop.byteswap() function to convert big-endian
Serhiy Storchaka <storchaka@gmail.com>
parents: 87305
diff changeset
243 data = audioop.byteswap(data, self._sampwidth)
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
244 if self._convert and data:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
245 data = self._convert(data)
19694
3716b116fb31 The first batch of changes recommended by the fixdiv tool. These are
Guido van Rossum <guido@python.org>
parents: 16889
diff changeset
246 self._soundpos = self._soundpos + len(data) // (self._nchannels * self._sampwidth)
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
247 return data
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
248
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
249 #
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
250 # Internal methods.
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
251 #
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
252
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
253 def _read_fmt_chunk(self, chunk):
80456
542bf1c1f2e3 Closes #16461: Wave library should be able to deal with 4GB wav files, and sample rate of 44100 Hz.
Jesus Cea <jcea@jcea.es>
parents: 68257
diff changeset
254 wFormatTag, self._nchannels, self._framerate, dwAvgBytesPerSec, wBlockAlign = struct.unpack_from('<HHLLH', chunk.read(14))
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
255 if wFormatTag == WAVE_FORMAT_PCM:
80456
542bf1c1f2e3 Closes #16461: Wave library should be able to deal with 4GB wav files, and sample rate of 44100 Hz.
Jesus Cea <jcea@jcea.es>
parents: 68257
diff changeset
256 sampwidth = struct.unpack_from('<H', chunk.read(2))[0]
19694
3716b116fb31 The first batch of changes recommended by the fixdiv tool. These are
Guido van Rossum <guido@python.org>
parents: 16889
diff changeset
257 self._sampwidth = (sampwidth + 7) // 8
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
258 else:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
259 raise Error('unknown format: %r' % (wFormatTag,))
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
260 self._framesize = self._nchannels * self._sampwidth
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
261 self._comptype = 'NONE'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
262 self._compname = 'not compressed'
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
263
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
264 class Wave_write:
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
265 """Variables used in this class:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
266
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
267 These variables are user settable through appropriate methods
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
268 of this class:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
269 _file -- the open file with methods write(), close(), tell(), seek()
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
270 set through the __init__() method
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
271 _comptype -- the AIFF-C compression type ('NONE' in AIFF)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
272 set through the setcomptype() or setparams() method
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
273 _compname -- the human-readable AIFF-C compression type
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
274 set through the setcomptype() or setparams() method
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
275 _nchannels -- the number of audio channels
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
276 set through the setnchannels() or setparams() method
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
277 _sampwidth -- the number of bytes per audio sample
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
278 set through the setsampwidth() or setparams() method
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
279 _framerate -- the sampling frequency
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
280 set through the setframerate() or setparams() method
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
281 _nframes -- the number of audio frames written to the header
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
282 set through the setnframes() or setparams() method
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
283
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
284 These variables are used internally only:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
285 _datalength -- the size of the audio samples written to the header
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
286 _nframeswritten -- the number of frames actually written
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
287 _datawritten -- the size of the audio samples actually written
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
288 """
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
289
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
290 def __init__(self, f):
15135
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
291 self._i_opened_the_file = None
43577
ace45b361e87 Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents: 43020
diff changeset
292 if isinstance(f, str):
44098
0889daf6d0d9 #1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents: 43577
diff changeset
293 f = builtins.open(f, 'wb')
15135
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
294 self._i_opened_the_file = f
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41449
diff changeset
295 try:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41449
diff changeset
296 self.initfp(f)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41449
diff changeset
297 except:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41449
diff changeset
298 if self._i_opened_the_file:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41449
diff changeset
299 f.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41449
diff changeset
300 raise
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
301
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
302 def initfp(self, file):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
303 self._file = file
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
304 self._convert = None
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
305 self._nchannels = 0
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
306 self._sampwidth = 0
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
307 self._framerate = 0
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
308 self._nframes = 0
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
309 self._nframeswritten = 0
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
310 self._datawritten = 0
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
311 self._datalength = 0
66275
5d55c5bb8ab1 Merged revisions 85970 via svnmerge from
Georg Brandl <georg@python.org>
parents: 58286
diff changeset
312 self._headerwritten = False
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
313
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
314 def __del__(self):
15135
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
315 self.close()
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
316
84932
8327780d3841 #17616: wave.open now supports the 'with' statement.
R David Murray <rdmurray@bitdance.com>
parents: 83983
diff changeset
317 def __enter__(self):
8327780d3841 #17616: wave.open now supports the 'with' statement.
R David Murray <rdmurray@bitdance.com>
parents: 83983
diff changeset
318 return self
8327780d3841 #17616: wave.open now supports the 'with' statement.
R David Murray <rdmurray@bitdance.com>
parents: 83983
diff changeset
319
8327780d3841 #17616: wave.open now supports the 'with' statement.
R David Murray <rdmurray@bitdance.com>
parents: 83983
diff changeset
320 def __exit__(self, *args):
8327780d3841 #17616: wave.open now supports the 'with' statement.
R David Murray <rdmurray@bitdance.com>
parents: 83983
diff changeset
321 self.close()
8327780d3841 #17616: wave.open now supports the 'with' statement.
R David Murray <rdmurray@bitdance.com>
parents: 83983
diff changeset
322
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
323 #
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
324 # User visible methods.
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
325 #
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
326 def setnchannels(self, nchannels):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
327 if self._datawritten:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
328 raise Error('cannot change parameters after starting to write')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
329 if nchannels < 1:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
330 raise Error('bad # of channels')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
331 self._nchannels = nchannels
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
332
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
333 def getnchannels(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
334 if not self._nchannels:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
335 raise Error('number of channels not set')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
336 return self._nchannels
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
337
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
338 def setsampwidth(self, sampwidth):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
339 if self._datawritten:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
340 raise Error('cannot change parameters after starting to write')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
341 if sampwidth < 1 or sampwidth > 4:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
342 raise Error('bad sample width')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
343 self._sampwidth = sampwidth
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
344
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
345 def getsampwidth(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
346 if not self._sampwidth:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
347 raise Error('sample width not set')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
348 return self._sampwidth
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
349
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
350 def setframerate(self, framerate):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
351 if self._datawritten:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
352 raise Error('cannot change parameters after starting to write')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
353 if framerate <= 0:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
354 raise Error('bad frame rate')
64297
5dc06a059630 Issue #1512791: In setframerate method of Wave_write, round non-integral
Mark Dickinson <dickinsm@gmail.com>
parents: 58286
diff changeset
355 self._framerate = int(round(framerate))
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
356
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
357 def getframerate(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
358 if not self._framerate:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
359 raise Error('frame rate not set')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
360 return self._framerate
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
361
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
362 def setnframes(self, nframes):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
363 if self._datawritten:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
364 raise Error('cannot change parameters after starting to write')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
365 self._nframes = nframes
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
366
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
367 def getnframes(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
368 return self._nframeswritten
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
369
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
370 def setcomptype(self, comptype, compname):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
371 if self._datawritten:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
372 raise Error('cannot change parameters after starting to write')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
373 if comptype not in ('NONE',):
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
374 raise Error('unsupported compression type')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
375 self._comptype = comptype
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
376 self._compname = compname
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
377
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
378 def getcomptype(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
379 return self._comptype
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
380
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
381 def getcompname(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
382 return self._compname
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
383
41717
9ad84070b22d Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41554
diff changeset
384 def setparams(self, params):
9ad84070b22d Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41554
diff changeset
385 nchannels, sampwidth, framerate, nframes, comptype, compname = params
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
386 if self._datawritten:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
387 raise Error('cannot change parameters after starting to write')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
388 self.setnchannels(nchannels)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
389 self.setsampwidth(sampwidth)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
390 self.setframerate(framerate)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
391 self.setnframes(nframes)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
392 self.setcomptype(comptype, compname)
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
393
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
394 def getparams(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
395 if not self._nchannels or not self._sampwidth or not self._framerate:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
396 raise Error('not all parameters set')
85513
a14ec46de0a4 Issue #17487: The result of the wave getparams method now is pickleable again.
Serhiy Storchaka <storchaka@gmail.com>
parents: 84944
diff changeset
397 return _wave_params(self._nchannels, self._sampwidth, self._framerate,
83234
340a12c18b7f #17487: wave.getparams now returns a namedtuple.
R David Murray <rdmurray@bitdance.com>
parents: 80456
diff changeset
398 self._nframes, self._comptype, self._compname)
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
399
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
400 def setmark(self, id, pos, name):
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
401 raise Error('setmark() not supported')
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
402
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
403 def getmark(self, id):
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
404 raise Error('no marks')
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
405
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
406 def getmarkers(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
407 return None
15874
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15135
diff changeset
408
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
409 def tell(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
410 return self._nframeswritten
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
411
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
412 def writeframesraw(self, data):
87149
b96f4ee1b08b Issue #16685: Added support for writing any bytes-like objects in the aifc,
Serhiy Storchaka <storchaka@gmail.com>
parents: 87148
diff changeset
413 if not isinstance(data, (bytes, bytearray)):
b96f4ee1b08b Issue #16685: Added support for writing any bytes-like objects in the aifc,
Serhiy Storchaka <storchaka@gmail.com>
parents: 87148
diff changeset
414 data = memoryview(data).cast('B')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
415 self._ensure_header_written(len(data))
19694
3716b116fb31 The first batch of changes recommended by the fixdiv tool. These are
Guido van Rossum <guido@python.org>
parents: 16889
diff changeset
416 nframes = len(data) // (self._sampwidth * self._nchannels)
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
417 if self._convert:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
418 data = self._convert(data)
87454
fbebc90abcd1 Issue #19641: Added the audioop.byteswap() function to convert big-endian
Serhiy Storchaka <storchaka@gmail.com>
parents: 87305
diff changeset
419 if self._sampwidth != 1 and sys.byteorder == 'big':
fbebc90abcd1 Issue #19641: Added the audioop.byteswap() function to convert big-endian
Serhiy Storchaka <storchaka@gmail.com>
parents: 87305
diff changeset
420 data = audioop.byteswap(data, self._sampwidth)
fbebc90abcd1 Issue #19641: Added the audioop.byteswap() function to convert big-endian
Serhiy Storchaka <storchaka@gmail.com>
parents: 87305
diff changeset
421 self._file.write(data)
fbebc90abcd1 Issue #19641: Added the audioop.byteswap() function to convert big-endian
Serhiy Storchaka <storchaka@gmail.com>
parents: 87305
diff changeset
422 self._datawritten += len(data)
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
423 self._nframeswritten = self._nframeswritten + nframes
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
424
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
425 def writeframes(self, data):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
426 self.writeframesraw(data)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
427 if self._datalength != self._datawritten:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
428 self._patchheader()
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
429
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
430 def close(self):
15135
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
431 if self._file:
86245
b7eae747385c Issue #18919: If the close() method of a writer in the sunau or wave module
Serhiy Storchaka <storchaka@gmail.com>
parents: 80456
diff changeset
432 try:
b7eae747385c Issue #18919: If the close() method of a writer in the sunau or wave module
Serhiy Storchaka <storchaka@gmail.com>
parents: 80456
diff changeset
433 self._ensure_header_written(0)
b7eae747385c Issue #18919: If the close() method of a writer in the sunau or wave module
Serhiy Storchaka <storchaka@gmail.com>
parents: 80456
diff changeset
434 if self._datalength != self._datawritten:
b7eae747385c Issue #18919: If the close() method of a writer in the sunau or wave module
Serhiy Storchaka <storchaka@gmail.com>
parents: 80456
diff changeset
435 self._patchheader()
b7eae747385c Issue #18919: If the close() method of a writer in the sunau or wave module
Serhiy Storchaka <storchaka@gmail.com>
parents: 80456
diff changeset
436 self._file.flush()
b7eae747385c Issue #18919: If the close() method of a writer in the sunau or wave module
Serhiy Storchaka <storchaka@gmail.com>
parents: 80456
diff changeset
437 finally:
b7eae747385c Issue #18919: If the close() method of a writer in the sunau or wave module
Serhiy Storchaka <storchaka@gmail.com>
parents: 80456
diff changeset
438 self._file = None
15135
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
439 if self._i_opened_the_file:
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
440 self._i_opened_the_file.close()
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
441 self._i_opened_the_file = None
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
442
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
443 #
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
444 # Internal methods.
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
445 #
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
446
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
447 def _ensure_header_written(self, datasize):
66275
5d55c5bb8ab1 Merged revisions 85970 via svnmerge from
Georg Brandl <georg@python.org>
parents: 58286
diff changeset
448 if not self._headerwritten:
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
449 if not self._nchannels:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
450 raise Error('# channels not specified')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
451 if not self._sampwidth:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
452 raise Error('sample width not specified')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
453 if not self._framerate:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
454 raise Error('sampling rate not specified')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
455 self._write_header(datasize)
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
456
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
457 def _write_header(self, initlength):
66275
5d55c5bb8ab1 Merged revisions 85970 via svnmerge from
Georg Brandl <georg@python.org>
parents: 58286
diff changeset
458 assert not self._headerwritten
42911
cb28e14ee808 Changes in anticipation of stricter str vs. bytes enforcement.
Guido van Rossum <guido@python.org>
parents: 42354
diff changeset
459 self._file.write(b'RIFF')
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
460 if not self._nframes:
58286
a6bf68e6e824 use floor division where needed #7681
Benjamin Peterson <benjamin@python.org>
parents: 44098
diff changeset
461 self._nframes = initlength // (self._nchannels * self._sampwidth)
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
462 self._datalength = self._nframes * self._nchannels * self._sampwidth
87148
6a599249e8b7 Issue #5202: Added support for unseekable files in the wave module.
Serhiy Storchaka <storchaka@gmail.com>
parents: 87026
diff changeset
463 try:
6a599249e8b7 Issue #5202: Added support for unseekable files in the wave module.
Serhiy Storchaka <storchaka@gmail.com>
parents: 87026
diff changeset
464 self._form_length_pos = self._file.tell()
6a599249e8b7 Issue #5202: Added support for unseekable files in the wave module.
Serhiy Storchaka <storchaka@gmail.com>
parents: 87026
diff changeset
465 except (AttributeError, OSError):
6a599249e8b7 Issue #5202: Added support for unseekable files in the wave module.
Serhiy Storchaka <storchaka@gmail.com>
parents: 87026
diff changeset
466 self._form_length_pos = None
80456
542bf1c1f2e3 Closes #16461: Wave library should be able to deal with 4GB wav files, and sample rate of 44100 Hz.
Jesus Cea <jcea@jcea.es>
parents: 68257
diff changeset
467 self._file.write(struct.pack('<L4s4sLHHLLHH4s',
67181
b901da561cd1 Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65756
diff changeset
468 36 + self._datalength, b'WAVE', b'fmt ', 16,
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
469 WAVE_FORMAT_PCM, self._nchannels, self._framerate,
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
470 self._nchannels * self._framerate * self._sampwidth,
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
471 self._nchannels * self._sampwidth,
67181
b901da561cd1 Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65756
diff changeset
472 self._sampwidth * 8, b'data'))
87148
6a599249e8b7 Issue #5202: Added support for unseekable files in the wave module.
Serhiy Storchaka <storchaka@gmail.com>
parents: 87026
diff changeset
473 if self._form_length_pos is not None:
6a599249e8b7 Issue #5202: Added support for unseekable files in the wave module.
Serhiy Storchaka <storchaka@gmail.com>
parents: 87026
diff changeset
474 self._data_length_pos = self._file.tell()
80456
542bf1c1f2e3 Closes #16461: Wave library should be able to deal with 4GB wav files, and sample rate of 44100 Hz.
Jesus Cea <jcea@jcea.es>
parents: 68257
diff changeset
475 self._file.write(struct.pack('<L', self._datalength))
66275
5d55c5bb8ab1 Merged revisions 85970 via svnmerge from
Georg Brandl <georg@python.org>
parents: 58286
diff changeset
476 self._headerwritten = True
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
477
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
478 def _patchheader(self):
66275
5d55c5bb8ab1 Merged revisions 85970 via svnmerge from
Georg Brandl <georg@python.org>
parents: 58286
diff changeset
479 assert self._headerwritten
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
480 if self._datawritten == self._datalength:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
481 return
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
482 curpos = self._file.tell()
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
483 self._file.seek(self._form_length_pos, 0)
80456
542bf1c1f2e3 Closes #16461: Wave library should be able to deal with 4GB wav files, and sample rate of 44100 Hz.
Jesus Cea <jcea@jcea.es>
parents: 68257
diff changeset
484 self._file.write(struct.pack('<L', 36 + self._datawritten))
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
485 self._file.seek(self._data_length_pos, 0)
80456
542bf1c1f2e3 Closes #16461: Wave library should be able to deal with 4GB wav files, and sample rate of 44100 Hz.
Jesus Cea <jcea@jcea.es>
parents: 68257
diff changeset
486 self._file.write(struct.pack('<L', self._datawritten))
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
487 self._file.seek(curpos, 0)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
488 self._datalength = self._datawritten
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
489
10999
8a4fc4da768d open(): Make the mode parameter optional; if omitted or None, use the
Fred Drake <fdrake@acm.org>
parents: 10107
diff changeset
490 def open(f, mode=None):
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
491 if mode is None:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
492 if hasattr(f, 'mode'):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
493 mode = f.mode
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
494 else:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
495 mode = 'rb'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
496 if mode in ('r', 'rb'):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
497 return Wave_read(f)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
498 elif mode in ('w', 'wb'):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
499 return Wave_write(f)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
500 else:
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42992
diff changeset
501 raise Error("mode must be 'r', 'rb', 'w', or 'wb'")
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
502
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
503 openfp = open # B/W compatibility