diff options
author | Greg Ward <gward@python.net> | 2003-03-09 23:34:52 (GMT) |
---|---|---|
committer | Greg Ward <gward@python.net> | 2003-03-09 23:34:52 (GMT) |
commit | 620e343c0a7d2233256b5cebff86d17892917728 (patch) | |
tree | 09efa7a2d339c5b804502d40cf1aedd1c8ce9add /Doc/lib | |
parent | 1fdb6335304551b79838523811525d3c59d901ae (diff) | |
download | cpython-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/lib')
-rw-r--r-- | Doc/lib/libossaudiodev.tex | 289 |
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} + + + |