summaryrefslogtreecommitdiffstats
path: root/Doc
diff options
context:
space:
mode:
authorGreg Ward <gward@python.net>2003-03-09 23:34:52 (GMT)
committerGreg Ward <gward@python.net>2003-03-09 23:34:52 (GMT)
commit620e343c0a7d2233256b5cebff86d17892917728 (patch)
tree09efa7a2d339c5b804502d40cf1aedd1c8ce9add /Doc
parent1fdb6335304551b79838523811525d3c59d901ae (diff)
downloadcpython-620e343c0a7d2233256b5cebff86d17892917728.zip
cpython-620e343c0a7d2233256b5cebff86d17892917728.tar.gz
cpython-620e343c0a7d2233256b5cebff86d17892917728.tar.bz2
Documentation for the ossaudiodev module.
Initial revision supplied by Nicholas FitzRoy-Dale <wzdd@lardcave.net> (emailed to me [gward@python.net] 2003-03-08 23:37 +1100).
Diffstat (limited to 'Doc')
-rw-r--r--Doc/lib/libossaudiodev.tex289
1 files changed, 289 insertions, 0 deletions
diff --git a/Doc/lib/libossaudiodev.tex b/Doc/lib/libossaudiodev.tex
new file mode 100644
index 0000000..2f89173
--- /dev/null
+++ b/Doc/lib/libossaudiodev.tex
@@ -0,0 +1,289 @@
+\section{\module{ossaudiodev} ---
+ Access to Open Sound System-compatible audio hardware}
+
+\declaremodule{builtin}{ossaudiodev}
+ \platform{OSS}
+\modulesynopsis{Access to OSS-compatible audio hardware.}
+
+% I know FreeBSD uses OSS - what about Net- and Open-?
+This module allows you to access the Open Sound System audio interface.
+The Open Sound System interface is present on Linux and FreeBSD.
+
+This module provides a very "bare bones" wrapper over the IOCTLs used 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
+documentation:
+
+\url{http://www.opensound.com/pguide/oss.pdf}
+
+The module defines a number of constants which may be used to program the
+device. These constants are the same as those defined in the C include file
+\code{<sys/soundcard.h>}.
+
+\code{ossaudiodev} defines the following variables and functions:
+
+\begin{excdesc}{error}
+This exception is raised on errors. The argument is a string
+describing what went wrong.
+\end{excdesc}
+
+\begin{funcdesc}{open}{\optional{device, }mode}
+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}
+parameter is the audio device filename to use. If it is not specified, this
+module first looks in the environment variable \code{AUDIODEV} for 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,
+\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
+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
+or writing, but not both at once.
+\end{funcdesc}
+
+\begin{funcdesc}{openmixer}{\optional{device\optional{, mode}}} This function
+opens the mixer device and returns an OSS mixer device object. The \var{device}
+parameter is the mixer device filename to use. If it is not specified, this
+module first looks in the environment variable \code{MIXERDEV} for a device to
+use. If not found, it falls back to \file{/dev/mixer}. You may specify
+\code{'r'}, \code{'rw'} or \code{'w'} for \var{mode}; the default is \code{'r'}.
+
+\end{funcdesc}
+
+\subsection{Audio Device Objects \label{ossaudio-device-objects}}
+
+Setting up the device
+
+To set up the device, three functions must be called in the correct sequence:
+
+\code{setfmt} to set the output format,
+\code{channels} to set the number of channels, and
+\code{speed} to set the sample rate.
+
+The audio device objects are returned by \function{open()} define the
+following methods:
+
+\begin{methoddesc}[audio device]{close}{}
+This method explicitly closes the device. It is useful in situations
+where deleting the object does not immediately close it since there
+are other references to it. A closed device should not be used again.
+\end{methoddesc}
+
+\begin{methoddesc}[audio device]{fileno}{}
+Returns the file descriptor associated with the device.
+\end{methoddesc}
+
+\begin{methoddesc}[audio device]{read}{size}
+Reads \var{size} samples from the audio input and returns
+them as a Python string. The function blocks until enough data is available.
+\end{methoddesc}
+
+\begin{methoddesc}[audio device]{write}{data}
+Writes Python string \var{data} to the audio device and returns the number of
+bytes written. If the audio device is opened in blocking mode, the entire
+string is always written. If the device is opened in nonblocking mode, some data
+may not be written - see \code{writeall}.
+\end{methoddesc}
+
+\begin{methoddesc}[audio device]{writeall}{data}
+Writes the entire Python string \var{data} to the audio device. If the device
+is opened in blocking mode, behaves identially to \code{write}; in nonblocking
+mode, waits until the device becomes available before feeding it more data.
+Returns None, since the amount of data written is always equal to the amount
+of data supplied.
+\end{methoddesc}
+
+Simple IOCTLs:
+
+\begin{methoddesc}[audio device]{nonblock}{}
+Attempts to put the device into nonblocking mode. Once in nonblocking mode there
+is no way to return to blocking mode.
+
+Raises \exception{IOError} if the IOCTL failed.
+\end{methoddesc}
+
+\begin{methoddesc}[audio device]{getfmts}{}
+Returns a bitmask of the audio output formats supported by the soundcard.
+On a typical Linux system, these formats are:
+
+AFMT_MU_LAW - a logarithmic encoding. This is the default format on /dev/audio
+and is the format used by Sun .au files.
+AFMT_A_LAW - a logarithmic encoding
+AFMT_IMA_ADPCM - a 4:1 compressed format defined by the Interactive Multimedia
+Association.
+AFMT_U8 - Unsigned, 8-bit audio.
+AFMT_S16_LE - Unsigned, 16-bit audio, little-endian byte order (as used by Intel
+processors)
+AFMT_S16_BE - Unsigned, 16-bit audio, big-endian byte order (as used by 68k,
+PowerPC, Sparc)
+AFMT_S8 - Signed, 8 bit audio.
+AFMT_U16_LE - Signed, 16-bit little-endian audio
+AFMT_U16_BE - Signed, 16-bit big-endian audio
+
+Most systems support only a subset of these formats. Many devices only support
+AFTM_U8; the most common format used today is AFMT_S16_LE.
+\end{methoddesc}
+
+\begin{methoddesc}[audio device]{setfmt}{format}
+Used to set the current audio format to \var{format} - see \code{getfmts} for a
+list. May also be used to return the current audio format - do this by passing
+an ``audio format'' of \code{AFMT_QUERY}. Returns the audio format that the
+device was set to, which may not be the requested format.
+\end{methoddesc}
+
+\begin{methoddesc}[audio device]{channels}{num_channels}
+Sets the number of output channels to \var{num_channels}. A value of 1 indicates
+monophonic sound, 2 stereophonic. Some devices may have more than 2 channels,
+and some high-end devices may not support mono. Returns the number of channels
+the device was set to.
+\end{methoddesc}
+
+\begin{methoddesc}[audio device]{speed}{samplerate}
+Sets the samplerate to \var{samplerate} samples per second and returns the rate
+actually set. Most sound devices don't support arbitrary sample rates. Common
+rates are:
+
+8000 - default rate
+11025 - speech recording
+22050
+44100 - Audio CD-quality (at 16 bits/sample and 2 channels)
+96000 - DVD-quality
+\end{methoddesc}
+
+\begin{methoddesc}[audio device]{sync}
+Waits until the sound device has played every byte in its buffer and returns.
+This also occurs when the sound device is closed. The OSS documentation
+recommends simply closing and re-opening the device rather than using
+\code{sync}.
+\end{methoddesc}
+
+\begin{methoddesc}[audio device]{reset}
+Immediately stops and playing or recording and returns the device to a state
+where it can accept commands. The OSS documentation recommends closing and
+re-opening the device after calling \code{reset}.
+\end{methoddesc}
+
+\begin{methoddesc}[audio device]{post}
+To be used like a lightweight \code{sync}, the \code{post} IOCTL informs the
+audio device that there is a likely to be a pause in the audio output - ie,
+after playing a spot sound effect, before waiting for user input, or before
+doing disk IO.
+\end{methoddesc}
+
+Convenience methods
+
+\begin{methoddesc}[audio device]{setparameters}{samplerate,num_channels,format,emulate}
+Initialise the sound device in one method. \var{samplerate}, \var{channels} and
+\var{format} should be as specified in the \code{speed}, \code{channels} and
+\code{setfmt} methods. If \var{emulate} is true, attempt to find the closest
+matching format instead, otherwise raise ValueError if the
+device does not support the format. The default is to raise ValueError on
+unsupported formats.
+\end{methoddesc}
+
+\begin{methoddesc}[audio device]{bufsize}{}
+Returns the size of the hardware buffer, in samples.
+\end{methoddesc}
+
+\begin{methoddesc}[audio device]{obufcount}{}
+Returns the number of samples that are in the hardware buffer yet to be played.
+\end{methoddesc}
+
+\begin{methoddesc}[audio device]{obuffree}{}
+Returns the number of samples that could be queued into the hardware buffer to
+be played without blocking.
+\end{methoddesc}
+
+\subsection{Mixer Device Objects \label{mixer-device-objects}}
+
+File-like interface
+
+\begin{methoddesc}[mixer device]{close}{}
+This method closes the open mixer device file. Any further attempts to use the
+mixer after this file is closed will raise an IOError.
+\end{methoddesc}
+
+\begin{methoddesc}[mixer device]{fileno}{}
+Returns the file handle number of the open mixer device file.
+\end{methoddesc}
+
+Mixer interface
+
+\begin{methoddesc}[mixer device]{controls}{}
+This method returns a bitmask specifying the available mixer controls
+(``Control'' being a specific mixable ``channel'', such as
+\code{SOUND_MIXER_PCM} or \code{SOUND_MIXER_SYNTH}). This
+bitmask indicates a subset of all available mixer channels - the
+\code{SOUND_MIXER_*} constants defined at module level. To determine if,
+for example, the current mixer object supports a PCM mixer, use the
+following Python code:
+
+\begin{verbatim}
+mixer=ossaudiodev.openmixer()
+if mixer.channels() & (1 << ossaudiodev.SOUND_MIXER_PCM):
+ # PCM is supported
+ <code>
+\end{verbatim}
+
+For most purposes, the \code{SOUND_MIXER_VOLUME} (Master volume) and
+\code{SOUND_MIXER_PCM} channels should suffice - but code that uses the mixer
+should be flexible when it comes to choosing sound channels. On the Gravis
+Ultrasound, for example, \code{SOUND_MIXER_VOLUME} does not exist.
+\end{methoddesc}
+
+\begin{methoddesc}[mixer device]{stereocontrols}{}
+Returns a bitmask indicating stereo mixer channels. If a bit is set, the
+corresponding channel is stereo; if it is unset, the channel is either
+monophonic or not supported by the mixer (use in combination with
+\function{channels} to determine which).
+
+See the code example for the \function{channels} function for an example of
+getting data from a bitmask.
+\end{methoddesc}
+
+\begin{methoddesc}[mixer device]{reccontrols}{}
+Returns a bitmask specifying the mixer controls that may be used to record.
+See the code example for \function{controls} for an example of reading from
+a bitmask.
+\end{methoddesc}
+
+\begin{methoddesc}[mixer device]{get}{channel}
+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
+numbers from 0 (silent) to 100 (full volume). If the channel is monophonic,
+a 2-tuple is still returned, but both channel volumes are the same.
+
+If an unknown channel is specified, \exception{error} is raised.
+\end{methoddesc}
+
+\begin{methoddesc}[mixer device]{set}{channel, (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
+(full volume). On success, the new volume is returned as a 2-tuple. Note
+that this may not be exactly the same as the volume specified, because of
+the limited resolution of some soundcard's mixers.
+
+Raises \exception{IOError} if an invalid mixer channel was specified;
+\exception{TypeError} if the argument format was incorrect, and
+\exception{error} if the specified volumes were out-of-range.
+\end{methoddesc}
+
+\begin{methoddesc}[mixer device]{get_recsrc}{}
+This method returns a bitmask indicating which channel or channels are
+currently being used as a recording source.
+\end{methoddesc}
+
+\begin{methoddesc}[mixer device]{set_recsrc}{bitmask}
+Call this function to specify a recording source. Returns a bitmask
+indicating the new recording source (or sources) if successful; raises
+\exception{IOError} if an invalid source was specified. To set the current
+recording source to the microphone input:
+
+\begin{verbatim}
+mixer.setrecsrc (1 << ossaudiodev.SOUND_MIXER_MIC)
+\end{verbatim}
+\end{methoddesc}
+
+
+