| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 1 | :mod:`aifc` --- Read and write AIFF and AIFC files | 
 | 2 | ================================================== | 
 | 3 |  | 
 | 4 | .. module:: aifc | 
 | 5 |    :synopsis: Read and write audio files in AIFF or AIFC format. | 
 | 6 |  | 
 | 7 |  | 
 | 8 | .. index:: | 
 | 9 |    single: Audio Interchange File Format | 
 | 10 |    single: AIFF | 
 | 11 |    single: AIFF-C | 
 | 12 |  | 
| Raymond Hettinger | ead4975 | 2011-01-24 16:28:06 +0000 | [diff] [blame] | 13 | **Source code:** :source:`Lib/aifc.py` | 
 | 14 |  | 
 | 15 | -------------- | 
 | 16 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 17 | This module provides support for reading and writing AIFF and AIFF-C files. | 
 | 18 | AIFF is Audio Interchange File Format, a format for storing digital audio | 
 | 19 | samples in a file.  AIFF-C is a newer version of the format that includes the | 
 | 20 | ability to compress the audio data. | 
 | 21 |  | 
| Georg Brandl | e720c0a | 2009-04-27 16:20:50 +0000 | [diff] [blame] | 22 | .. note:: | 
| Georg Brandl | 48310cd | 2009-01-03 21:18:54 +0000 | [diff] [blame] | 23 |  | 
| Guido van Rossum | da27fd2 | 2007-08-17 00:24:54 +0000 | [diff] [blame] | 24 |    Some operations may only work under IRIX; these will raise :exc:`ImportError` | 
| Georg Brandl | e720c0a | 2009-04-27 16:20:50 +0000 | [diff] [blame] | 25 |    when attempting to import the :mod:`cl` module, which is only available on | 
 | 26 |    IRIX. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 27 |  | 
 | 28 | Audio files have a number of parameters that describe the audio data. The | 
 | 29 | sampling rate or frame rate is the number of times per second the sound is | 
 | 30 | sampled.  The number of channels indicate if the audio is mono, stereo, or | 
 | 31 | quadro.  Each frame consists of one sample per channel.  The sample size is the | 
 | 32 | size in bytes of each sample.  Thus a frame consists of | 
 | 33 | *nchannels*\**samplesize* bytes, and a second's worth of audio consists of | 
 | 34 | *nchannels*\**samplesize*\**framerate* bytes. | 
 | 35 |  | 
 | 36 | For example, CD quality audio has a sample size of two bytes (16 bits), uses two | 
 | 37 | channels (stereo) and has a frame rate of 44,100 frames/second.  This gives a | 
 | 38 | frame size of 4 bytes (2\*2), and a second's worth occupies 2\*2\*44100 bytes | 
 | 39 | (176,400 bytes). | 
 | 40 |  | 
 | 41 | Module :mod:`aifc` defines the following function: | 
 | 42 |  | 
 | 43 |  | 
| Georg Brandl | b868a66 | 2009-04-02 02:56:10 +0000 | [diff] [blame] | 44 | .. function:: open(file, mode=None) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 45 |  | 
 | 46 |    Open an AIFF or AIFF-C file and return an object instance with methods that are | 
| Antoine Pitrou | 11cb961 | 2010-09-15 11:11:28 +0000 | [diff] [blame] | 47 |    described below.  The argument *file* is either a string naming a file or a | 
 | 48 |    :term:`file object`.  *mode* must be ``'r'`` or ``'rb'`` when the file must be | 
 | 49 |    opened for reading, or ``'w'``  or ``'wb'`` when the file must be opened for writing. | 
 | 50 |    If omitted, ``file.mode`` is used if it exists, otherwise ``'rb'`` is used.  When | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 51 |    used for writing, the file object should be seekable, unless you know ahead of | 
 | 52 |    time how many samples you are going to write in total and use | 
 | 53 |    :meth:`writeframesraw` and :meth:`setnframes`. | 
 | 54 |  | 
| Georg Brandl | 502d9a5 | 2009-07-26 15:02:41 +0000 | [diff] [blame] | 55 | Objects returned by :func:`.open` when a file is opened for reading have the | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 56 | following methods: | 
 | 57 |  | 
 | 58 |  | 
 | 59 | .. method:: aifc.getnchannels() | 
 | 60 |  | 
 | 61 |    Return the number of audio channels (1 for mono, 2 for stereo). | 
 | 62 |  | 
 | 63 |  | 
 | 64 | .. method:: aifc.getsampwidth() | 
 | 65 |  | 
 | 66 |    Return the size in bytes of individual samples. | 
 | 67 |  | 
 | 68 |  | 
 | 69 | .. method:: aifc.getframerate() | 
 | 70 |  | 
 | 71 |    Return the sampling rate (number of audio frames per second). | 
 | 72 |  | 
 | 73 |  | 
 | 74 | .. method:: aifc.getnframes() | 
 | 75 |  | 
 | 76 |    Return the number of audio frames in the file. | 
 | 77 |  | 
 | 78 |  | 
 | 79 | .. method:: aifc.getcomptype() | 
 | 80 |  | 
| R. David Murray | e08a66a | 2009-04-29 21:50:39 +0000 | [diff] [blame] | 81 |    Return a bytes array of length 4 describing the type of compression | 
 | 82 |    used in the audio file.  For AIFF files, the returned value is | 
 | 83 |    ``b'NONE'``. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 84 |  | 
 | 85 |  | 
 | 86 | .. method:: aifc.getcompname() | 
 | 87 |  | 
| R. David Murray | e08a66a | 2009-04-29 21:50:39 +0000 | [diff] [blame] | 88 |    Return a bytes array convertible to a human-readable description | 
 | 89 |    of the type of compression used in the audio file.  For AIFF files, | 
 | 90 |    the returned value is ``b'not compressed'``. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 91 |  | 
 | 92 |  | 
 | 93 | .. method:: aifc.getparams() | 
 | 94 |  | 
 | 95 |    Return a tuple consisting of all of the above values in the above order. | 
 | 96 |  | 
 | 97 |  | 
 | 98 | .. method:: aifc.getmarkers() | 
 | 99 |  | 
 | 100 |    Return a list of markers in the audio file.  A marker consists of a tuple of | 
 | 101 |    three elements.  The first is the mark ID (an integer), the second is the mark | 
 | 102 |    position in frames from the beginning of the data (an integer), the third is the | 
 | 103 |    name of the mark (a string). | 
 | 104 |  | 
 | 105 |  | 
 | 106 | .. method:: aifc.getmark(id) | 
 | 107 |  | 
 | 108 |    Return the tuple as described in :meth:`getmarkers` for the mark with the given | 
 | 109 |    *id*. | 
 | 110 |  | 
 | 111 |  | 
 | 112 | .. method:: aifc.readframes(nframes) | 
 | 113 |  | 
 | 114 |    Read and return the next *nframes* frames from the audio file.  The returned | 
 | 115 |    data is a string containing for each frame the uncompressed samples of all | 
 | 116 |    channels. | 
 | 117 |  | 
 | 118 |  | 
 | 119 | .. method:: aifc.rewind() | 
 | 120 |  | 
 | 121 |    Rewind the read pointer.  The next :meth:`readframes` will start from the | 
 | 122 |    beginning. | 
 | 123 |  | 
 | 124 |  | 
 | 125 | .. method:: aifc.setpos(pos) | 
 | 126 |  | 
 | 127 |    Seek to the specified frame number. | 
 | 128 |  | 
 | 129 |  | 
 | 130 | .. method:: aifc.tell() | 
 | 131 |  | 
 | 132 |    Return the current frame number. | 
 | 133 |  | 
 | 134 |  | 
 | 135 | .. method:: aifc.close() | 
 | 136 |  | 
 | 137 |    Close the AIFF file.  After calling this method, the object can no longer be | 
 | 138 |    used. | 
 | 139 |  | 
| Georg Brandl | 502d9a5 | 2009-07-26 15:02:41 +0000 | [diff] [blame] | 140 | Objects returned by :func:`.open` when a file is opened for writing have all the | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 141 | above methods, except for :meth:`readframes` and :meth:`setpos`.  In addition | 
 | 142 | the following methods exist.  The :meth:`get\*` methods can only be called after | 
 | 143 | the corresponding :meth:`set\*` methods have been called.  Before the first | 
 | 144 | :meth:`writeframes` or :meth:`writeframesraw`, all parameters except for the | 
 | 145 | number of frames must be filled in. | 
 | 146 |  | 
 | 147 |  | 
 | 148 | .. method:: aifc.aiff() | 
 | 149 |  | 
 | 150 |    Create an AIFF file.  The default is that an AIFF-C file is created, unless the | 
 | 151 |    name of the file ends in ``'.aiff'`` in which case the default is an AIFF file. | 
 | 152 |  | 
 | 153 |  | 
 | 154 | .. method:: aifc.aifc() | 
 | 155 |  | 
 | 156 |    Create an AIFF-C file.  The default is that an AIFF-C file is created, unless | 
 | 157 |    the name of the file ends in ``'.aiff'`` in which case the default is an AIFF | 
 | 158 |    file. | 
 | 159 |  | 
 | 160 |  | 
 | 161 | .. method:: aifc.setnchannels(nchannels) | 
 | 162 |  | 
 | 163 |    Specify the number of channels in the audio file. | 
 | 164 |  | 
 | 165 |  | 
 | 166 | .. method:: aifc.setsampwidth(width) | 
 | 167 |  | 
 | 168 |    Specify the size in bytes of audio samples. | 
 | 169 |  | 
 | 170 |  | 
 | 171 | .. method:: aifc.setframerate(rate) | 
 | 172 |  | 
 | 173 |    Specify the sampling frequency in frames per second. | 
 | 174 |  | 
 | 175 |  | 
 | 176 | .. method:: aifc.setnframes(nframes) | 
 | 177 |  | 
 | 178 |    Specify the number of frames that are to be written to the audio file. If this | 
 | 179 |    parameter is not set, or not set correctly, the file needs to support seeking. | 
 | 180 |  | 
 | 181 |  | 
 | 182 | .. method:: aifc.setcomptype(type, name) | 
 | 183 |  | 
 | 184 |    .. index:: | 
 | 185 |       single: u-LAW | 
 | 186 |       single: A-LAW | 
 | 187 |       single: G.722 | 
 | 188 |  | 
| R. David Murray | e08a66a | 2009-04-29 21:50:39 +0000 | [diff] [blame] | 189 |    Specify the compression type.  If not specified, the audio data will | 
 | 190 |    not be compressed.  In AIFF files, compression is not possible. | 
 | 191 |    The name parameter should be a human-readable description of the | 
 | 192 |    compression type as a bytes array, the type parameter should be a | 
 | 193 |    bytes array of length 4.  Currently the following compression types | 
 | 194 |    are supported: ``b'NONE'``, ``b'ULAW'``, ``b'ALAW'``, ``b'G722'``. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 195 |  | 
 | 196 |  | 
 | 197 | .. method:: aifc.setparams(nchannels, sampwidth, framerate, comptype, compname) | 
 | 198 |  | 
 | 199 |    Set all the above parameters at once.  The argument is a tuple consisting of the | 
 | 200 |    various parameters.  This means that it is possible to use the result of a | 
 | 201 |    :meth:`getparams` call as argument to :meth:`setparams`. | 
 | 202 |  | 
 | 203 |  | 
 | 204 | .. method:: aifc.setmark(id, pos, name) | 
 | 205 |  | 
 | 206 |    Add a mark with the given id (larger than 0), and the given name at the given | 
 | 207 |    position.  This method can be called at any time before :meth:`close`. | 
 | 208 |  | 
 | 209 |  | 
 | 210 | .. method:: aifc.tell() | 
 | 211 |  | 
 | 212 |    Return the current write position in the output file.  Useful in combination | 
 | 213 |    with :meth:`setmark`. | 
 | 214 |  | 
 | 215 |  | 
 | 216 | .. method:: aifc.writeframes(data) | 
 | 217 |  | 
 | 218 |    Write data to the output file.  This method can only be called after the audio | 
 | 219 |    file parameters have been set. | 
 | 220 |  | 
 | 221 |  | 
 | 222 | .. method:: aifc.writeframesraw(data) | 
 | 223 |  | 
 | 224 |    Like :meth:`writeframes`, except that the header of the audio file is not | 
 | 225 |    updated. | 
 | 226 |  | 
 | 227 |  | 
 | 228 | .. method:: aifc.close() | 
 | 229 |  | 
 | 230 |    Close the AIFF file.  The header of the file is updated to reflect the actual | 
 | 231 |    size of the audio data. After calling this method, the object can no longer be | 
 | 232 |    used. | 
 | 233 |  |