21.5. "wave" — Read and write WAV files *************************************** **Source code:** Lib/wave.py ====================================================================== The "wave" module provides a convenient interface to the WAV sound format. It does not support compression/decompression, but it does support mono/stereo. The "wave" module defines the following function and exception: wave.open(file[, mode]) If *file* is a string, open the file by that name, otherwise treat it as a seekable file-like object. *mode* can be any of "'r'", "'rb'" Read only mode. "'w'", "'wb'" Write only mode. Note that it does not allow read/write WAV files. A *mode* of "'r'" or "'rb'" returns a "Wave_read" object, while a *mode* of "'w'" or "'wb'" returns a "Wave_write" object. If *mode* is omitted and a file-like object is passed as *file*, "file.mode" is used as the default value for *mode* (the "'b'" flag is still added if necessary). If you pass in a file-like object, the wave object will not close it when its "close()" method is called; it is the caller’s responsibility to close the file object. wave.openfp(file, mode) A synonym for "open()", maintained for backwards compatibility. exception wave.Error An error raised when something is impossible because it violates the WAV specification or hits an implementation deficiency. 21.5.1. Wave_read Objects ========================= Wave_read objects, as returned by "open()", have the following methods: Wave_read.close() Close the stream if it was opened by "wave", and make the instance unusable. This is called automatically on object collection. Wave_read.getnchannels() Returns number of audio channels ("1" for mono, "2" for stereo). Wave_read.getsampwidth() Returns sample width in bytes. Wave_read.getframerate() Returns sampling frequency. Wave_read.getnframes() Returns number of audio frames. Wave_read.getcomptype() Returns compression type ("'NONE'" is the only supported type). Wave_read.getcompname() Human-readable version of "getcomptype()". Usually "'not compressed'" parallels "'NONE'". Wave_read.getparams() Returns a tuple "(nchannels, sampwidth, framerate, nframes, comptype, compname)", equivalent to output of the "get*()" methods. Wave_read.readframes(n) Reads and returns at most *n* frames of audio, as a string of bytes. Wave_read.rewind() Rewind the file pointer to the beginning of the audio stream. The following two methods are defined for compatibility with the "aifc" module, and don’t do anything interesting. Wave_read.getmarkers() Returns "None". Wave_read.getmark(id) Raise an error. The following two methods define a term “position” which is compatible between them, and is otherwise implementation dependent. Wave_read.setpos(pos) Set the file pointer to the specified position. Wave_read.tell() Return current file pointer position. 21.5.2. Wave_write Objects ========================== Wave_write objects, as returned by "open()", have the following methods: Wave_write.close() Make sure *nframes* is correct, and close the file if it was opened by "wave". This method is called upon object collection. Wave_write.setnchannels(n) Set the number of channels. Wave_write.setsampwidth(n) Set the sample width to *n* bytes. Wave_write.setframerate(n) Set the frame rate to *n*. Wave_write.setnframes(n) Set the number of frames to *n*. This will be changed later if more frames are written. Wave_write.setcomptype(type, name) Set the compression type and description. At the moment, only compression type "NONE" is supported, meaning no compression. Wave_write.setparams(tuple) The *tuple* should be "(nchannels, sampwidth, framerate, nframes, comptype, compname)", with values valid for the "set*()" methods. Sets all parameters. Wave_write.tell() Return current position in the file, with the same disclaimer for the "Wave_read.tell()" and "Wave_read.setpos()" methods. Wave_write.writeframesraw(data) Write audio frames, without correcting *nframes*. Wave_write.writeframes(data) Write audio frames and make sure *nframes* is correct. Note that it is invalid to set any parameters after calling "writeframes()" or "writeframesraw()", and any attempt to do so will raise "wave.Error".