annotate Lib/wave.py @ 15842:f6cd36498a50 legacy-trunk

Document extensions to .pth files.
author Martin v. Löwis <martin@v.loewis.de>
date Sat, 13 Jan 2001 09:54:41 +0000
parents 91201de25f36
children 4c01ee0a8073
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)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
21 getparams() -- returns a tuple consisting of all of the
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
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 import __builtin__
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
75
14021
5b34b70ecf22 Convert some old-style string exceptions to class exceptions.
Fred Drake <fdrake@acm.org>
parents: 13620
diff changeset
76 class Error(Exception):
5b34b70ecf22 Convert some old-style string exceptions to class exceptions.
Fred Drake <fdrake@acm.org>
parents: 13620
diff changeset
77 pass
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
78
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 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
80
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 _array_fmts = None, 'b', 'h', None, 'l'
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
82
10106
16aa73588d93 Two important fixes:
Guido van Rossum <guido@python.org>
parents: 8131
diff changeset
83 # Determine endian-ness
16aa73588d93 Two important fixes:
Guido van Rossum <guido@python.org>
parents: 8131
diff changeset
84 import struct
16aa73588d93 Two important fixes:
Guido van Rossum <guido@python.org>
parents: 8131
diff changeset
85 if struct.pack("h", 1) == "\000\001":
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
86 big_endian = 1
10106
16aa73588d93 Two important fixes:
Guido van Rossum <guido@python.org>
parents: 8131
diff changeset
87 else:
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
88 big_endian = 0
10106
16aa73588d93 Two important fixes:
Guido van Rossum <guido@python.org>
parents: 8131
diff changeset
89
11227
e773d2f0741d Sjoerd Mullender writes:
Guido van Rossum <guido@python.org>
parents: 10999
diff changeset
90 from chunk import Chunk
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
91
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 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
93 """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
94
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
95 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
96 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
97 _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
98 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
99 _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
100 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
101 _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
102 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
103 _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
104 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
105 _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
106 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
107 _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
108 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
109 _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
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 _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
112 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
113 setpos() method
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
114
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
115 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
116 _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
117 _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
118 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
119 _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
120 _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
121 """
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
122
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
123 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
124 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
125 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
126 self._file = Chunk(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
127 if self._file.getname() != 'RIFF':
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
128 raise Error, 'file does not start with RIFF id'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
129 if self._file.read(4) != 'WAVE':
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
130 raise Error, 'not a WAVE file'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
131 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
132 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
133 while 1:
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_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
135 try:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
136 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
137 except EOFError:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
138 break
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
139 chunkname = chunk.getname()
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
140 if chunkname == 'fmt ':
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
141 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
142 self._fmt_chunk_read = 1
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
143 elif chunkname == 'data':
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
144 if not self._fmt_chunk_read:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
145 raise Error, 'data chunk before fmt chunk'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
146 self._data_chunk = chunk
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
147 self._nframes = chunk.chunksize / self._framesize
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_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
149 break
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
150 chunk.skip()
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
151 if not self._fmt_chunk_read or not self._data_chunk:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
152 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
153
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
154 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
155 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
156 if type(f) == type(''):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
157 f = __builtin__.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
158 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
159 # else, assume it is an open file object already
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
160 self.initfp(f)
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
161
15135
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
162 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
163 self.close()
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
164 #
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
165 # 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
166 #
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
167 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
168 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
169
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
170 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
171 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
172 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
173
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
174 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
175 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
176 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
177 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
178 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
179
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
180 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
181 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
182
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
183 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
184 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
185
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
186 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
187 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
188
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
189 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
190 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
191
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
192 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
193 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
194
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
195 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
196 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
197
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
198 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
199 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
200
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
201 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
202 return self.getnchannels(), self.getsampwidth(), \
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
203 self.getframerate(), self.getnframes(), \
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
204 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
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 getmarkers(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 None
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 getmark(self, id):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
210 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
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 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
213 if pos < 0 or pos > self._nframes:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
214 raise Error, 'position not in range'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
215 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
216 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
217
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
218 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
219 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
220 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
221 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
222 if pos:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
223 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
224 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
225 if nframes == 0:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
226 return ''
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
227 if self._sampwidth > 1 and big_endian:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
228 # unfortunately the fromfile() method does not take
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
229 # something that only looks like a file object, so
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
230 # we have to reach into the innards of the chunk object
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
231 import array
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
232 chunk = self._data_chunk
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
233 data = array.array(_array_fmts[self._sampwidth])
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
234 nitems = nframes * self._nchannels
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
235 if nitems * self._sampwidth > chunk.chunksize - chunk.size_read:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
236 nitems = (chunk.chunksize - chunk.size_read) / self._sampwidth
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
237 data.fromfile(chunk.file.file, nitems)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
238 # "tell" data chunk how much was read
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
239 chunk.size_read = chunk.size_read + nitems * self._sampwidth
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
240 # do the same for the outermost chunk
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
241 chunk = chunk.file
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
242 chunk.size_read = chunk.size_read + nitems * self._sampwidth
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
243 data.byteswap()
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
244 data = data.tostring()
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
245 else:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
246 data = self._data_chunk.read(nframes * self._framesize)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
247 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
248 data = self._convert(data)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
249 self._soundpos = self._soundpos + len(data) / (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
250 return data
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
251
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
252 #
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
253 # Internal methods.
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
254 #
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
255
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
256 def _read_fmt_chunk(self, chunk):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
257 wFormatTag, self._nchannels, self._framerate, dwAvgBytesPerSec, wBlockAlign = struct.unpack('<hhllh', chunk.read(14))
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
258 if wFormatTag == WAVE_FORMAT_PCM:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
259 sampwidth = struct.unpack('<h', chunk.read(2))[0]
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
260 self._sampwidth = (sampwidth + 7) / 8
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
261 else:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
262 raise Error, 'unknown format: ' + `wFormatTag`
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
263 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
264 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
265 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
266
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
267 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
268 """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
269
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
270 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
271 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
272 _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
273 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
274 _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
275 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
276 _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
277 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
278 _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
279 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
280 _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
281 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
282 _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
283 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
284 _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
285 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
286
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
287 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
288 _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
289 _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
290 _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
291 """
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
292
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
293 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
294 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
295 if type(f) == type(''):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
296 f = __builtin__.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
297 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
298 self.initfp(f)
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
299
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
300 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
301 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
302 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
303 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
304 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
305 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
306 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
307 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
308 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
309 self._datalength = 0
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
310
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
311 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
312 self.close()
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 #
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
315 # 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
316 #
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
317 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
318 if self._datawritten:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
319 raise Error, 'cannot change parameters after starting to write'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
320 if nchannels < 1:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
321 raise Error, 'bad # of channels'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
322 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
323
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
324 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
325 if not self._nchannels:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
326 raise Error, 'number of channels not set'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
327 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
328
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
329 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
330 if self._datawritten:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
331 raise Error, 'cannot change parameters after starting to write'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
332 if sampwidth < 1 or sampwidth > 4:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
333 raise Error, 'bad sample width'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
334 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
335
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
336 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
337 if not self._sampwidth:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
338 raise Error, 'sample width not set'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
339 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
340
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
341 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
342 if self._datawritten:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
343 raise Error, 'cannot change parameters after starting to write'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
344 if framerate <= 0:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
345 raise Error, 'bad frame rate'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
346 self._framerate = framerate
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
347
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
348 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
349 if not self._framerate:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
350 raise Error, 'frame rate not set'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
351 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
352
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
353 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
354 if self._datawritten:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
355 raise Error, 'cannot change parameters after starting to write'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
356 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
357
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
358 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
359 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
360
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
361 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
362 if self._datawritten:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
363 raise Error, 'cannot change parameters after starting to write'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
364 if comptype not in ('NONE',):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
365 raise Error, 'unsupported compression type'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
366 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
367 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
368
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
369 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
370 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
371
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
372 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
373 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
374
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
375 def setparams(self, (nchannels, sampwidth, framerate, nframes, comptype, compname)):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
376 if self._datawritten:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
377 raise Error, 'cannot change parameters after starting to write'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
378 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
379 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
380 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
381 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
382 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
383
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
384 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
385 if not self._nchannels or not self._sampwidth or not self._framerate:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
386 raise Error, 'not all parameters set'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
387 return self._nchannels, self._sampwidth, self._framerate, \
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
388 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
389
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
390 def setmark(self, id, pos, name):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
391 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
392
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
393 def getmark(self, id):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
394 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
395
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
396 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
397 return None
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
398
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
399 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
400 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
401
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
402 def writeframesraw(self, data):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
403 self._ensure_header_written(len(data))
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
404 nframes = len(data) / (self._sampwidth * self._nchannels)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
405 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
406 data = self._convert(data)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
407 if self._sampwidth > 1 and big_endian:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
408 import array
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
409 data = array.array(_array_fmts[self._sampwidth], data)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
410 data.byteswap()
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
411 data.tofile(self._file)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
412 self._datawritten = self._datawritten + len(data) * self._sampwidth
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
413 else:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
414 self._file.write(data)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
415 self._datawritten = self._datawritten + len(data)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
416 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
417
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
418 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
419 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
420 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
421 self._patchheader()
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
422
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
423 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
424 if self._file:
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
425 self._ensure_header_written(0)
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
426 if self._datalength != self._datawritten:
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
427 self._patchheader()
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
428 self._file.flush()
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
429 self._file = None
91201de25f36 When the classes in wave.py opened files themselves, their .close() methods
Tim Peters <tim.peters@gmail.com>
parents: 15122
diff changeset
430 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
431 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
432 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
433
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
434 #
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
435 # Internal methods.
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
436 #
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
437
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
438 def _ensure_header_written(self, datasize):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
439 if not self._datawritten:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
440 if not self._nchannels:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
441 raise Error, '# channels not specified'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
442 if not self._sampwidth:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
443 raise Error, 'sample width not specified'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
444 if not self._framerate:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
445 raise Error, 'sampling rate not specified'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
446 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
447
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
448 def _write_header(self, initlength):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
449 self._file.write('RIFF')
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
450 if not self._nframes:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
451 self._nframes = initlength / (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
452 self._datalength = self._nframes * 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
453 self._form_length_pos = self._file.tell()
15122
ef1f473aaeeb Fix by Jean-Claude Rimbault [ Bug #116271 ] -- the WAVE header was
Guido van Rossum <guido@python.org>
parents: 14021
diff changeset
454 self._file.write(struct.pack('<l4s4slhhllhh4s',
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
455 36 + self._datalength, 'WAVE', 'fmt ', 16,
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
456 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
457 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
458 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
459 self._sampwidth * 8, 'data'))
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
460 self._data_length_pos = 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
461 self._file.write(struct.pack('<l', self._datalength))
1549
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
462
11707
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
463 def _patchheader(self):
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
464 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
465 return
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
466 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
467 self._file.seek(self._form_length_pos, 0)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
468 self._file.write(struct.pack('<l', 36 + self._datawritten))
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
469 self._file.seek(self._data_length_pos, 0)
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
470 self._file.write(struct.pack('<l', self._datawritten))
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
471 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
472 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
473
10999
8a4fc4da768d open(): Make the mode parameter optional; if omitted or None, use the
Fred Drake <fdrake@acm.org>
parents: 10107
diff changeset
474 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
475 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
476 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
477 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
478 else:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
479 mode = 'rb'
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
480 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
481 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
482 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
483 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
484 else:
6f4146846337 The third and final doc-string sweep by Ka-Ping Yee.
Guido van Rossum <guido@python.org>
parents: 11227
diff changeset
485 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
486
81f26bf1178f aifc, sunau: make rate an int; os: restruct; ospath: obsolete; rfc822:
Guido van Rossum <guido@python.org>
parents:
diff changeset
487 openfp = open # B/W compatibility