Wrap all paragraphs to 72 columns.

Two spaces between sentences.
Fix em-dashes -- should be "---" not " - ".
Spelling fix.
This commit is contained in:
Greg Ward 2003-03-09 23:57:34 +00:00
parent 620e343c0a
commit 33bcd987dd
1 changed files with 121 additions and 115 deletions

View File

@ -5,49 +5,50 @@
\platform{OSS} \platform{OSS}
\modulesynopsis{Access to OSS-compatible audio hardware.} \modulesynopsis{Access to OSS-compatible audio hardware.}
% I know FreeBSD uses OSS - what about Net- and Open-? % I know FreeBSD uses OSS -- what about Net- and Open-?
This module allows you to access the Open Sound System audio interface. This module allows you to access the Open Sound System audio interface.
The Open Sound System interface is present on Linux and FreeBSD. The Open Sound System interface is present on Linux and FreeBSD.
This module provides a very "bare bones" wrapper over the IOCTLs used to This module provides a very "bare bones" wrapper over the IOCTLs used to
access the audio hardware. The best - albeit rather daunting - way to access the audio hardware. The best---albeit rather daunting---way to
get a feel for the interface is from the Open Sound System official get a feel for the interface is from the Open Sound System official
documentation: documentation:
\url{http://www.opensound.com/pguide/oss.pdf} \url{http://www.opensound.com/pguide/oss.pdf}
The module defines a number of constants which may be used to program the The module defines a number of constants which may be used to program
device. These constants are the same as those defined in the C include file the device. These constants are the same as those defined in the C
\code{<sys/soundcard.h>}. include file \code{<sys/soundcard.h>}.
\code{ossaudiodev} defines the following variables and functions: \code{ossaudiodev} defines the following variables and functions:
\begin{excdesc}{error} \begin{excdesc}{error}
This exception is raised on errors. The argument is a string This exception is raised on errors. The argument is a string describing
describing what went wrong. what went wrong.
\end{excdesc} \end{excdesc}
\begin{funcdesc}{open}{\optional{device, }mode} \begin{funcdesc}{open}{\optional{device, }mode}
This function opens the audio device and returns an OSS audio device This function opens the audio device and returns an OSS audio device
object. This object can then be used to do I/O on. The \var{device} object. This object can then be used to do I/O on. The \var{device}
parameter is the audio device filename to use. If it is not specified, this parameter is the audio device filename to use. If it is not specified,
module first looks in the environment variable \code{AUDIODEV} for a device this module first looks in the environment variable \code{AUDIODEV} for
to use. If not found, it falls back to \file{/dev/dsp}. a device to use. If not found, it falls back to \file{/dev/dsp}.
The \var{mode} parameter is one of \code{'r'} for record-only access, The \var{mode} parameter is one of \code{'r'} for record-only access,
\code{'w'} for play-only access and \code{'rw'} for both. Since many \code{'w'} for play-only access and \code{'rw'} for both. Since many
soundcards only allow one process to have the recorder or player open at soundcards only allow one process to have the recorder or player open at
a time it is a good idea to open the device only for the activity a time it is a good idea to open the device only for the activity
needed. Further, some soundcards are half-duplex: they can be opened for reading needed. Further, some soundcards are half-duplex: they can be opened
or writing, but not both at once. for reading or writing, but not both at once.
\end{funcdesc} \end{funcdesc}
\begin{funcdesc}{openmixer}{\optional{device\optional{, mode}}} This function \begin{funcdesc}{openmixer}{\optional{device\optional{, mode}}} This function
opens the mixer device and returns an OSS mixer device object. The \var{device} opens the mixer device and returns an OSS mixer device object. The
parameter is the mixer device filename to use. If it is not specified, this \var{device} parameter is the mixer device filename to use. If it is
module first looks in the environment variable \code{MIXERDEV} for a device to not specified, this module first looks in the environment variable
use. If not found, it falls back to \file{/dev/mixer}. You may specify \code{MIXERDEV} for a device to use. If not found, it falls back to
\code{'r'}, \code{'rw'} or \code{'w'} for \var{mode}; the default is \code{'r'}. \file{/dev/mixer}. You may specify \code{'r'}, \code{'rw'} or
\code{'w'} for \var{mode}; the default is \code{'r'}.
\end{funcdesc} \end{funcdesc}
@ -55,7 +56,8 @@ use. If not found, it falls back to \file{/dev/mixer}. You may specify
Setting up the device Setting up the device
To set up the device, three functions must be called in the correct sequence: To set up the device, three functions must be called in the correct
sequence:
\code{setfmt} to set the output format, \code{setfmt} to set the output format,
\code{channels} to set the number of channels, and \code{channels} to set the number of channels, and
@ -65,121 +67,122 @@ The audio device objects are returned by \function{open()} define the
following methods: following methods:
\begin{methoddesc}[audio device]{close}{} \begin{methoddesc}[audio device]{close}{}
This method explicitly closes the device. It is useful in situations This method explicitly closes the device. It is useful in situations
where deleting the object does not immediately close it since there where deleting the object does not immediately close it since there are
are other references to it. A closed device should not be used again. other references to it. A closed device should not be used again.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[audio device]{fileno}{} \begin{methoddesc}[audio device]{fileno}{}
Returns the file descriptor associated with the device. Returns the file descriptor associated with the device.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[audio device]{read}{size} \begin{methoddesc}[audio device]{read}{size}
Reads \var{size} samples from the audio input and returns Reads \var{size} samples from the audio input and returns them as a
them as a Python string. The function blocks until enough data is available. Python string. The function blocks until enough data is available.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[audio device]{write}{data} \begin{methoddesc}[audio device]{write}{data}
Writes Python string \var{data} to the audio device and returns the number of Writes Python string \var{data} to the audio device and returns the
bytes written. If the audio device is opened in blocking mode, the entire number of bytes written. If the audio device is opened in blocking
string is always written. If the device is opened in nonblocking mode, some data mode, the entire string is always written. If the device is opened in
may not be written - see \code{writeall}. nonblocking mode, some data may not be written---see \code{writeall}.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[audio device]{writeall}{data} \begin{methoddesc}[audio device]{writeall}{data}
Writes the entire Python string \var{data} to the audio device. If the device Writes the entire Python string \var{data} to the audio device. If the
is opened in blocking mode, behaves identially to \code{write}; in nonblocking device is opened in blocking mode, behaves identially to \code{write};
mode, waits until the device becomes available before feeding it more data. in nonblocking mode, waits until the device becomes available before
Returns None, since the amount of data written is always equal to the amount feeding it more data. Returns None, since the amount of data written is
of data supplied. always equal to the amount of data supplied.
\end{methoddesc} \end{methoddesc}
Simple IOCTLs: Simple IOCTLs:
\begin{methoddesc}[audio device]{nonblock}{} \begin{methoddesc}[audio device]{nonblock}{}
Attempts to put the device into nonblocking mode. Once in nonblocking mode there Attempts to put the device into nonblocking mode. Once in nonblocking
is no way to return to blocking mode. mode there is no way to return to blocking mode.
Raises \exception{IOError} if the IOCTL failed. Raises \exception{IOError} if the IOCTL failed.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[audio device]{getfmts}{} \begin{methoddesc}[audio device]{getfmts}{}
Returns a bitmask of the audio output formats supported by the soundcard. Returns a bitmask of the audio output formats supported by the
On a typical Linux system, these formats are: soundcard. On a typical Linux system, these formats are:
AFMT_MU_LAW - a logarithmic encoding. This is the default format on /dev/audio AFMT_MU_LAW---a logarithmic encoding. This is the default format on
and is the format used by Sun .au files. /dev/audio and is the format used by Sun .au files.
AFMT_A_LAW - a logarithmic encoding AFMT_A_LAW---a logarithmic encoding
AFMT_IMA_ADPCM - a 4:1 compressed format defined by the Interactive Multimedia AFMT_IMA_ADPCM---a 4:1 compressed format defined by the Interactive
Association. Multimedia Association.
AFMT_U8 - Unsigned, 8-bit audio. AFMT_U8---Unsigned, 8-bit audio.
AFMT_S16_LE - Unsigned, 16-bit audio, little-endian byte order (as used by Intel AFMT_S16_LE---Unsigned, 16-bit audio, little-endian byte order (as used
processors) by Intel processors)
AFMT_S16_BE - Unsigned, 16-bit audio, big-endian byte order (as used by 68k, AFMT_S16_BE---Unsigned, 16-bit audio, big-endian byte order (as used by
PowerPC, Sparc) 68k, PowerPC, Sparc)
AFMT_S8 - Signed, 8 bit audio. AFMT_S8---Signed, 8 bit audio.
AFMT_U16_LE - Signed, 16-bit little-endian audio AFMT_U16_LE---Signed, 16-bit little-endian audio
AFMT_U16_BE - Signed, 16-bit big-endian audio AFMT_U16_BE---Signed, 16-bit big-endian audio
Most systems support only a subset of these formats. Many devices only support Most systems support only a subset of these formats. Many devices only
AFTM_U8; the most common format used today is AFMT_S16_LE. support AFTM_U8; the most common format used today is AFMT_S16_LE.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[audio device]{setfmt}{format} \begin{methoddesc}[audio device]{setfmt}{format}
Used to set the current audio format to \var{format} - see \code{getfmts} for a Used to set the current audio format to \var{format}---see
list. May also be used to return the current audio format - do this by passing \code{getfmts} for a list. May also be used to return the current audio
an ``audio format'' of \code{AFMT_QUERY}. Returns the audio format that the format---do this by passing an ``audio format'' of \code{AFMT_QUERY}.
device was set to, which may not be the requested format. Returns the audio format that the device was set to, which may not be
the requested format.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[audio device]{channels}{num_channels} \begin{methoddesc}[audio device]{channels}{num_channels}
Sets the number of output channels to \var{num_channels}. A value of 1 indicates Sets the number of output channels to \var{num_channels}. A value of 1
monophonic sound, 2 stereophonic. Some devices may have more than 2 channels, indicates monophonic sound, 2 stereophonic. Some devices may have more
and some high-end devices may not support mono. Returns the number of channels than 2 channels, and some high-end devices may not support mono.
the device was set to. Returns the number of channels the device was set to.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[audio device]{speed}{samplerate} \begin{methoddesc}[audio device]{speed}{samplerate}
Sets the samplerate to \var{samplerate} samples per second and returns the rate Sets the samplerate to \var{samplerate} samples per second and returns
actually set. Most sound devices don't support arbitrary sample rates. Common the rate actually set. Most sound devices don't support arbitrary
rates are: sample rates. Common rates are:
8000 - default rate 8000---default rate
11025 - speech recording 11025---speech recording
22050 22050
44100 - Audio CD-quality (at 16 bits/sample and 2 channels) 44100---Audio CD-quality (at 16 bits/sample and 2 channels)
96000 - DVD-quality 96000---DVD-quality
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[audio device]{sync} \begin{methoddesc}[audio device]{sync}
Waits until the sound device has played every byte in its buffer and returns. Waits until the sound device has played every byte in its buffer and
This also occurs when the sound device is closed. The OSS documentation returns. This also occurs when the sound device is closed. The OSS
recommends simply closing and re-opening the device rather than using documentation recommends simply closing and re-opening the device rather
\code{sync}. than using \code{sync}.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[audio device]{reset} \begin{methoddesc}[audio device]{reset}
Immediately stops and playing or recording and returns the device to a state Immediately stops and playing or recording and returns the device to a
where it can accept commands. The OSS documentation recommends closing and state where it can accept commands. The OSS documentation recommends
re-opening the device after calling \code{reset}. closing and re-opening the device after calling \code{reset}.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[audio device]{post} \begin{methoddesc}[audio device]{post}
To be used like a lightweight \code{sync}, the \code{post} IOCTL informs the To be used like a lightweight \code{sync}, the \code{post} IOCTL informs
audio device that there is a likely to be a pause in the audio output - ie, the audio device that there is a likely to be a pause in the audio
after playing a spot sound effect, before waiting for user input, or before output---i.e., after playing a spot sound effect, before waiting for
doing disk IO. user input, or before doing disk IO.
\end{methoddesc} \end{methoddesc}
Convenience methods Convenience methods
\begin{methoddesc}[audio device]{setparameters}{samplerate,num_channels,format,emulate} \begin{methoddesc}[audio device]{setparameters}{samplerate,num_channels,format,emulate}
Initialise the sound device in one method. \var{samplerate}, \var{channels} and Initialise the sound device in one method. \var{samplerate},
\var{format} should be as specified in the \code{speed}, \code{channels} and \var{channels} and \var{format} should be as specified in the
\code{setfmt} methods. If \var{emulate} is true, attempt to find the closest \code{speed}, \code{channels} and \code{setfmt} methods. If
matching format instead, otherwise raise ValueError if the \var{emulate} is true, attempt to find the closest matching format
device does not support the format. The default is to raise ValueError on instead, otherwise raise ValueError if the device does not support the
unsupported formats. format. The default is to raise ValueError on unsupported formats.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[audio device]{bufsize}{} \begin{methoddesc}[audio device]{bufsize}{}
@ -187,12 +190,13 @@ Returns the size of the hardware buffer, in samples.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[audio device]{obufcount}{} \begin{methoddesc}[audio device]{obufcount}{}
Returns the number of samples that are in the hardware buffer yet to be played. Returns the number of samples that are in the hardware buffer yet to be
played.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[audio device]{obuffree}{} \begin{methoddesc}[audio device]{obuffree}{}
Returns the number of samples that could be queued into the hardware buffer to Returns the number of samples that could be queued into the hardware
be played without blocking. buffer to be played without blocking.
\end{methoddesc} \end{methoddesc}
\subsection{Mixer Device Objects \label{mixer-device-objects}} \subsection{Mixer Device Objects \label{mixer-device-objects}}
@ -200,8 +204,8 @@ be played without blocking.
File-like interface File-like interface
\begin{methoddesc}[mixer device]{close}{} \begin{methoddesc}[mixer device]{close}{}
This method closes the open mixer device file. Any further attempts to use the This method closes the open mixer device file. Any further attempts to
mixer after this file is closed will raise an IOError. use the mixer after this file is closed will raise an IOError.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[mixer device]{fileno}{} \begin{methoddesc}[mixer device]{fileno}{}
@ -213,9 +217,9 @@ Mixer interface
\begin{methoddesc}[mixer device]{controls}{} \begin{methoddesc}[mixer device]{controls}{}
This method returns a bitmask specifying the available mixer controls This method returns a bitmask specifying the available mixer controls
(``Control'' being a specific mixable ``channel'', such as (``Control'' being a specific mixable ``channel'', such as
\code{SOUND_MIXER_PCM} or \code{SOUND_MIXER_SYNTH}). This \code{SOUND_MIXER_PCM} or \code{SOUND_MIXER_SYNTH}). This
bitmask indicates a subset of all available mixer channels - the bitmask indicates a subset of all available mixer channels---the
\code{SOUND_MIXER_*} constants defined at module level. To determine if, \code{SOUND_MIXER_*} constants defined at module level. To determine if,
for example, the current mixer object supports a PCM mixer, use the for example, the current mixer object supports a PCM mixer, use the
following Python code: following Python code:
@ -227,32 +231,34 @@ if mixer.channels() & (1 << ossaudiodev.SOUND_MIXER_PCM):
\end{verbatim} \end{verbatim}
For most purposes, the \code{SOUND_MIXER_VOLUME} (Master volume) and For most purposes, the \code{SOUND_MIXER_VOLUME} (Master volume) and
\code{SOUND_MIXER_PCM} channels should suffice - but code that uses the mixer \code{SOUND_MIXER_PCM} channels should suffice---but code that uses the
should be flexible when it comes to choosing sound channels. On the Gravis mixer should be flexible when it comes to choosing sound channels. On
Ultrasound, for example, \code{SOUND_MIXER_VOLUME} does not exist. the Gravis Ultrasound, for example, \code{SOUND_MIXER_VOLUME} does not
exist.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[mixer device]{stereocontrols}{} \begin{methoddesc}[mixer device]{stereocontrols}{}
Returns a bitmask indicating stereo mixer channels. If a bit is set, the Returns a bitmask indicating stereo mixer channels. If a bit is set,
corresponding channel is stereo; if it is unset, the channel is either the corresponding channel is stereo; if it is unset, the channel is
monophonic or not supported by the mixer (use in combination with either monophonic or not supported by the mixer (use in combination with
\function{channels} to determine which). \function{channels} to determine which).
See the code example for the \function{channels} function for an example of See the code example for the \function{channels} function for an example
getting data from a bitmask. of getting data from a bitmask.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[mixer device]{reccontrols}{} \begin{methoddesc}[mixer device]{reccontrols}{}
Returns a bitmask specifying the mixer controls that may be used to record. Returns a bitmask specifying the mixer controls that may be used to
See the code example for \function{controls} for an example of reading from record. See the code example for \function{controls} for an example of
a bitmask. reading from a bitmask.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[mixer device]{get}{channel} \begin{methoddesc}[mixer device]{get}{channel}
Returns the volume of a given mixer channel. The returned volume is a Returns the volume of a given mixer channel. The returned volume is a
2-tuple of \code{left volume, right volume}. Volumes are specified as 2-tuple of \code{left volume, right volume}. Volumes are specified as
numbers from 0 (silent) to 100 (full volume). If the channel is monophonic, numbers from 0 (silent) to 100 (full volume). If the channel is
a 2-tuple is still returned, but both channel volumes are the same. monophonic, a 2-tuple is still returned, but both channel volumes are
the same.
If an unknown channel is specified, \exception{error} is raised. If an unknown channel is specified, \exception{error} is raised.
\end{methoddesc} \end{methoddesc}
@ -260,12 +266,12 @@ If an unknown channel is specified, \exception{error} is raised.
\begin{methoddesc}[mixer device]{set}{channel, (left, right)} \begin{methoddesc}[mixer device]{set}{channel, (left, right)}
Sets the volume for a given mixer channel to \code{(left, right)}. Sets the volume for a given mixer channel to \code{(left, right)}.
\code{left} and \code{right} must be ints and between 0 (silent) and 100 \code{left} and \code{right} must be ints and between 0 (silent) and 100
(full volume). On success, the new volume is returned as a 2-tuple. Note (full volume). On success, the new volume is returned as a 2-tuple.
that this may not be exactly the same as the volume specified, because of Note that this may not be exactly the same as the volume specified,
the limited resolution of some soundcard's mixers. because of the limited resolution of some soundcard's mixers.
Raises \exception{IOError} if an invalid mixer channel was specified; Raises \exception{IOError} if an invalid mixer channel was specified;
\exception{TypeError} if the argument format was incorrect, and \exception{TypeError} if the argument format was incorrect, and
\exception{error} if the specified volumes were out-of-range. \exception{error} if the specified volumes were out-of-range.
\end{methoddesc} \end{methoddesc}
@ -275,9 +281,9 @@ currently being used as a recording source.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}[mixer device]{set_recsrc}{bitmask} \begin{methoddesc}[mixer device]{set_recsrc}{bitmask}
Call this function to specify a recording source. Returns a bitmask Call this function to specify a recording source. Returns a bitmask
indicating the new recording source (or sources) if successful; raises indicating the new recording source (or sources) if successful; raises
\exception{IOError} if an invalid source was specified. To set the current \exception{IOError} if an invalid source was specified. To set the current
recording source to the microphone input: recording source to the microphone input:
\begin{verbatim} \begin{verbatim}