Back to index

python3.2  3.2.2
Classes | Functions | Variables
sunau Namespace Reference

Classes

class  Error
class  Au_read
class  Au_write

Functions

def _read_u32
def _write_u32
def open

Variables

int AUDIO_FILE_MAGIC = 0x2e736e64
int AUDIO_FILE_ENCODING_MULAW_8 = 1
int AUDIO_FILE_ENCODING_LINEAR_8 = 2
int AUDIO_FILE_ENCODING_LINEAR_16 = 3
int AUDIO_FILE_ENCODING_LINEAR_24 = 4
int AUDIO_FILE_ENCODING_LINEAR_32 = 5
int AUDIO_FILE_ENCODING_FLOAT = 6
int AUDIO_FILE_ENCODING_DOUBLE = 7
int AUDIO_FILE_ENCODING_ADPCM_G721 = 23
int AUDIO_FILE_ENCODING_ADPCM_G722 = 24
int AUDIO_FILE_ENCODING_ADPCM_G723_3 = 25
int AUDIO_FILE_ENCODING_ADPCM_G723_5 = 26
int AUDIO_FILE_ENCODING_ALAW_8 = 27
int AUDIO_UNKNOWN_SIZE = 0xFFFFFFFF
list _simple_encodings
 openfp = open

Detailed Description

Stuff to parse Sun and NeXT audio files.

An audio file consists of a header followed by the data.  The structure
of the header is as follows.

        +---------------+
        | magic word    |
        +---------------+
        | header size   |
        +---------------+
        | data size     |
        +---------------+
        | encoding      |
        +---------------+
        | sample rate   |
        +---------------+
        | # of channels |
        +---------------+
        | info          |
        |               |
        +---------------+

The magic word consists of the 4 characters '.snd'.  Apart from the
info field, all header fields are 4 bytes in size.  They are all
32-bit unsigned integers encoded in big-endian byte order.

The header size really gives the start of the data.
The data size is the physical size of the data.  From the other
parameters the number of frames can be calculated.
The encoding gives the way in which audio samples are encoded.
Possible values are listed below.
The info field currently consists of an ASCII string giving a
human-readable description of the audio file.  The info field is
padded with NUL bytes to the header size.

Usage.

Reading audio files:
        f = sunau.open(file, 'r')
where file is either the name of a file or an open file pointer.
The open file pointer must have methods read(), seek(), and close().
When the setpos() and rewind() methods are not used, the seek()
method is not  necessary.

This returns an instance of a class with the following public methods:
        getnchannels()  -- returns number of audio channels (1 for
               mono, 2 for stereo)
        getsampwidth()  -- returns sample width in bytes
        getframerate()  -- returns sampling frequency
        getnframes()    -- returns number of audio frames
        getcomptype()   -- returns compression type ('NONE' or 'ULAW')
        getcompname()   -- returns human-readable version of
               compression type ('not compressed' matches 'NONE')
        getparams()     -- returns a tuple consisting of all of the
               above in the above order
        getmarkers()    -- returns None (for compatibility with the
               aifc module)
        getmark(id)     -- raises an error since the mark does not
               exist (for compatibility with the aifc module)
        readframes(n)   -- returns at most n frames of audio
        rewind()        -- rewind to the beginning of the audio stream
        setpos(pos)     -- seek to the specified position
        tell()          -- return the current position
        close()         -- close the instance (make it unusable)
The position returned by tell() and the position given to setpos()
are compatible and have nothing to do with the actual position in the
file.
The close() method is called automatically when the class instance
is destroyed.

Writing audio files:
        f = sunau.open(file, 'w')
where file is either the name of a file or an open file pointer.
The open file pointer must have methods write(), tell(), seek(), and
close().

This returns an instance of a class with the following public methods:
        setnchannels(n) -- set the number of channels
        setsampwidth(n) -- set the sample width
        setframerate(n) -- set the frame rate
        setnframes(n)   -- set the number of frames
        setcomptype(type, name)
            -- set the compression type and the
               human-readable compression type
        setparams(tuple)-- set all parameters at once
        tell()          -- return current position in output file
        writeframesraw(data)
            -- write audio frames without pathing up the
               file header
        writeframes(data)
            -- write audio frames and patch up the file header
        close()         -- patch up the file header and close the
               output file
You should set the parameters before the first writeframesraw or
writeframes.  The total number of frames does not need to be set,
but when it is set to the correct value, the header does not have to
be patched up.
It is best to first set all parameters, perhaps possibly the
compression type, and then write audio frames using writeframesraw.
When all frames have been written, either call writeframes('') or
close() to patch up the sizes in the header.
The close() method is called automatically when the class instance
is destroyed.

Function Documentation

def sunau._read_u32 (   file) [private]

Definition at line 134 of file sunau.py.

00134 
00135 def _read_u32(file):
00136     x = 0
00137     for i in range(4):
00138         byte = file.read(1)
00139         if not byte:
00140             raise EOFError
00141         x = x*256 + ord(byte)
00142     return x

Here is the call graph for this function:

def sunau._write_u32 (   file,
  x 
) [private]

Definition at line 143 of file sunau.py.

00143 
00144 def _write_u32(file, x):
00145     data = []
00146     for i in range(4):
00147         d, m = divmod(x, 256)
00148         data.insert(0, int(m))
00149         x = d
00150     file.write(bytes(data))

Here is the call graph for this function:

def sunau.open (   f,
  mode = None 
)

Definition at line 472 of file sunau.py.

00472 
00473 def open(f, mode=None):
00474     if mode is None:
00475         if hasattr(f, 'mode'):
00476             mode = f.mode
00477         else:
00478             mode = 'rb'
00479     if mode in ('r', 'rb'):
00480         return Au_read(f)
00481     elif mode in ('w', 'wb'):
00482         return Au_write(f)
00483     else:
00484         raise Error("mode must be 'r', 'rb', 'w', or 'wb'")

Here is the caller graph for this function:


Variable Documentation

Initial value:
00001 [AUDIO_FILE_ENCODING_MULAW_8,
00002                      AUDIO_FILE_ENCODING_LINEAR_8,
00003                      AUDIO_FILE_ENCODING_LINEAR_16,
00004                      AUDIO_FILE_ENCODING_LINEAR_24,
00005                      AUDIO_FILE_ENCODING_LINEAR_32,
00006                      AUDIO_FILE_ENCODING_ALAW_8]

Definition at line 124 of file sunau.py.

Definition at line 115 of file sunau.py.

Definition at line 116 of file sunau.py.

Definition at line 117 of file sunau.py.

Definition at line 118 of file sunau.py.

Definition at line 119 of file sunau.py.

Definition at line 114 of file sunau.py.

Definition at line 113 of file sunau.py.

Definition at line 110 of file sunau.py.

Definition at line 111 of file sunau.py.

Definition at line 112 of file sunau.py.

Definition at line 109 of file sunau.py.

Definition at line 108 of file sunau.py.

Definition at line 107 of file sunau.py.

Definition at line 122 of file sunau.py.

Definition at line 485 of file sunau.py.