| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \section{\module{ossaudiodev} --- | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  |          Access to OSS-compatible audio devices} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \declaremodule{builtin}{ossaudiodev} | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | \platform{Linux, FreeBSD} | 
					
						
							|  |  |  | \modulesynopsis{Access to OSS-compatible audio devices.} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % XXX OSS is standard for Linux and FreeBSD -- what about NetBSD?
 | 
					
						
							|  |  |  | % OpenBSD?  others?
 | 
					
						
							|  |  |  | This module allows you to access the OSS (Open Sound System) audio | 
					
						
							|  |  |  | interface.  OSS is available for a wide range of open-source and | 
					
						
							|  |  |  | commercial Unices, and is the standard audio interface for Linux (up to | 
					
						
							|  |  |  | kernel 2.4) and FreeBSD. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{seealso} | 
					
						
							|  |  |  | \seetitle[http://www.opensound.com/pguide/oss.pdf] | 
					
						
							|  |  |  |          {Open Sound System Programmer's Guide} | 
					
						
							|  |  |  |          {the official documentation for the OSS C API} | 
					
						
							|  |  |  | \seetext{The module defines a large number of constants supplied by | 
					
						
							|  |  |  |          the OSS device driver; see \file{<sys/soundcard.h>} on either | 
					
						
							|  |  |  |          Linux or FreeBSD for a listing .} | 
					
						
							|  |  |  | \end{seealso} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \module{ossaudiodev} defines the following variables and functions: | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \begin{excdesc}{error} | 
					
						
							| 
									
										
										
										
											2003-03-10 03:05:21 +00:00
										 |  |  | This exception is raised on certain errors.  The argument is a string | 
					
						
							|  |  |  | describing what went wrong. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | (If \module{ossaudiodev} receives an error from a system call such as | 
					
						
							|  |  |  | \cfunction{open()}, \cfunction{write()}, or \cfunction{ioctl()}, it | 
					
						
							|  |  |  | raises \exception{IOError}.  Errors detected directly by | 
					
						
							|  |  |  | \module{ossaudiodev} result in \exception{ossaudiodev.error}.) | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{excdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{open}{\optional{device, }mode} | 
					
						
							| 
									
										
										
										
											2003-03-10 03:05:21 +00:00
										 |  |  | Open an audio device and return an OSS audio device object.  This | 
					
						
							|  |  |  | object supports many file-like methods, such as \method{read()}, | 
					
						
							|  |  |  | \method{write()}, and \method{fileno()} (although there are subtle | 
					
						
							|  |  |  | differences between conventional Unix read/write semantics and those of | 
					
						
							|  |  |  | OSS audio devices).  It also supports a number of audio-specific | 
					
						
							|  |  |  | methods; see below for the complete list of methods. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note the unusual calling syntax: the \emph{first} argument is optional, | 
					
						
							|  |  |  | and the second is required.  This is a historical artifact for | 
					
						
							|  |  |  | compatibility with the older \module{linuxaudiodev} module which | 
					
						
							|  |  |  | \module{ossaudiodev} supersedes.  % XXX it might also be motivated
 | 
					
						
							|  |  |  | % by my unfounded-but-still-possibly-true belief that the default
 | 
					
						
							|  |  |  | % audio device varies unpredictably across operating systems.  -GW
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \var{device} is the audio device filename to use.  If it is not | 
					
						
							|  |  |  | specified, this module first looks in the environment variable | 
					
						
							|  |  |  | \envvar{AUDIODEV} for a device to use.  If not found, it falls back to | 
					
						
							|  |  |  | \file{/dev/dsp}. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \var{mode} is one of \code{'r'} for read-only (record) access, | 
					
						
							|  |  |  | \code{'w'} for write-only (playback) 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. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-10 03:05:21 +00:00
										 |  |  | \begin{funcdesc}{openmixer}{\optional{device\optional{, mode}}} | 
					
						
							|  |  |  | Open a mixer device and return an OSS mixer device object.   | 
					
						
							|  |  |  | \var{device} is the mixer device filename to use.  If it is | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | not specified, this module first looks in the environment variable | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | \envvar{MIXERDEV} for a device to use.  If not found, it falls back to | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | \file{/dev/mixer}.  You may specify \code{'r'}, \code{'rw'} or | 
					
						
							|  |  |  | \code{'w'} for \var{mode}; the default is \code{'r'}. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-10 03:05:21 +00:00
										 |  |  | % XXX I suspect 'mode' is irrelevant, ie. that OSS doesn't care.
 | 
					
						
							|  |  |  | % If so this argument and the code that handles it should be ripped out.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \subsection{Audio Device Objects \label{ossaudio-device-objects}} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Setting up the device | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | To set up the device, three functions must be called in the correct | 
					
						
							|  |  |  | sequence: | 
					
						
							| 
									
										
										
										
											2003-03-10 00:24:42 +00:00
										 |  |  | \begin{enumerate} | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | \item \method{setfmt()} to set the output format, | 
					
						
							|  |  |  | \item \method{channels()} to set the number of channels, and | 
					
						
							|  |  |  | \item \method{speed()} to set the sample rate. | 
					
						
							| 
									
										
										
										
											2003-03-10 00:24:42 +00:00
										 |  |  | \end{enumerate} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | The audio device objects are returned by \function{open()} define the | 
					
						
							|  |  |  | following methods: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[audio device]{close}{} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | 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. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[audio device]{fileno}{} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | Returns the file descriptor associated with the device. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[audio device]{read}{size} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | Reads \var{size} samples from the audio input and returns them as a | 
					
						
							|  |  |  | Python string.  The function blocks until enough data is available. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[audio device]{write}{data} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | nonblocking mode, some data may not be written---see | 
					
						
							|  |  |  | \method{writeall()}. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[audio device]{writeall}{data} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | Writes the entire Python string \var{data} to the audio device.  If the | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | device is opened in blocking mode, behaves identially to | 
					
						
							|  |  |  | \method{write()}; in nonblocking mode, waits until the device becomes | 
					
						
							|  |  |  | available before feeding it more data.  Returns \code{None}, since the | 
					
						
							|  |  |  | amount of data written is always equal to the amount of data supplied. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Simple IOCTLs: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[audio device]{nonblock}{} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | Attempts to put the device into nonblocking mode.  Once in nonblocking | 
					
						
							|  |  |  | mode there is no way to return to blocking mode. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Raises \exception{IOError} if the IOCTL failed. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[audio device]{getfmts}{} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | Returns a bitmask of the audio output formats supported by the | 
					
						
							|  |  |  | soundcard.  On a typical Linux system, these formats are: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-10 00:24:42 +00:00
										 |  |  | \begin{tableii}{l|l}{constant}{Format}{Description} | 
					
						
							|  |  |  | \lineii{AFMT_MU_LAW} | 
					
						
							|  |  |  |        {a logarithmic encoding.  This is the default format on | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  |         \file{/dev/audio} and is the format used by Sun .au files.} | 
					
						
							| 
									
										
										
										
											2003-03-10 00:24:42 +00:00
										 |  |  | \lineii{AFMT_A_LAW} | 
					
						
							|  |  |  |        {a logarithmic encoding} | 
					
						
							|  |  |  | \lineii{AFMT_IMA_ADPCM} | 
					
						
							|  |  |  |        {a 4:1 compressed format defined by the Interactive Multimedia | 
					
						
							|  |  |  |         Association.}  | 
					
						
							|  |  |  | \lineii{AFMT_U8} | 
					
						
							|  |  |  |        {Unsigned, 8-bit audio.} | 
					
						
							|  |  |  | \lineii{AFMT_S16_LE} | 
					
						
							|  |  |  |        {Unsigned, 16-bit audio, little-endian byte order (as used by | 
					
						
							|  |  |  |         Intel processors)} | 
					
						
							|  |  |  | \lineii{AFMT_S16_BE} | 
					
						
							|  |  |  |        {Unsigned, 16-bit audio, big-endian byte order (as used by 68k, | 
					
						
							|  |  |  |         PowerPC, Sparc)} | 
					
						
							|  |  |  | \lineii{AFMT_S8} | 
					
						
							|  |  |  |        {Signed, 8 bit audio.} | 
					
						
							|  |  |  | \lineii{AFMT_U16_LE} | 
					
						
							|  |  |  |        {Signed, 16-bit little-endian audio} | 
					
						
							|  |  |  | \lineii{AFMT_U16_BE} | 
					
						
							|  |  |  |        {Signed, 16-bit big-endian audio} | 
					
						
							|  |  |  | \end{tableii} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | Most systems support only a subset of these formats.  Many devices only | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | support \constant{AFMT_U8}; the most common format used today is | 
					
						
							|  |  |  | \constant{AFMT_S16_LE}. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[audio device]{setfmt}{format} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | Used to set the current audio format to \var{format}---see | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | \method{getfmts()} for a list.  May also be used to return the current | 
					
						
							|  |  |  | audio format---do this by passing an ``audio format'' of | 
					
						
							|  |  |  | \constant{AFMT_QUERY}. Returns the audio format that the device was set | 
					
						
							|  |  |  | to, which may not be the requested format. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[audio device]{channels}{num_channels} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | 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. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[audio device]{speed}{samplerate} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | 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: | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | 8000---default rate | 
					
						
							|  |  |  | 11025---speech recording | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | 22050 | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | 44100---Audio CD-quality (at 16 bits/sample and 2 channels) | 
					
						
							|  |  |  | 96000---DVD-quality | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[audio device]{sync} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | than using \method{sync()}. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[audio device]{reset} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | Immediately stops and playing or recording and returns the device to a | 
					
						
							|  |  |  | state where it can accept commands.  The OSS documentation recommends | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | closing and re-opening the device after calling \method{reset()}. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[audio device]{post} | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | To be used like a lightweight \method{sync()}, the \method{post()} | 
					
						
							|  |  |  | IOCTL informs the audio device that there is a likely to be a pause in | 
					
						
							|  |  |  | the audio output---i.e., after playing a spot sound effect, before | 
					
						
							|  |  |  | waiting for user input, or before doing disk I/O. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Convenience methods | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[audio device]{setparameters}{samplerate,num_channels,format,emulate} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | Initialise the sound device in one method.  \var{samplerate}, | 
					
						
							|  |  |  | \var{channels} and \var{format} should be as specified in the | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | \method{speed()}, \method{channels()} and \method{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. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[audio device]{bufsize}{} | 
					
						
							|  |  |  | Returns the size of the hardware buffer, in samples. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[audio device]{obufcount}{} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | Returns the number of samples that are in the hardware buffer yet to be | 
					
						
							|  |  |  | played. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[audio device]{obuffree}{} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | Returns the number of samples that could be queued into the hardware | 
					
						
							|  |  |  | buffer to be played without blocking. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \subsection{Mixer Device Objects \label{mixer-device-objects}} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | File-like interface | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[mixer device]{close}{} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | This method closes the open mixer device file.  Any further attempts to | 
					
						
							|  |  |  | use the mixer after this file is closed will raise an IOError. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \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 | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | \constant{SOUND_MIXER_PCM} or \constant{SOUND_MIXER_SYNTH}).  This | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | bitmask indicates a subset of all available mixer channels---the | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | \constant{SOUND_MIXER_*} constants defined at module level.  To determine if, | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | 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} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | For most purposes, the \constant{SOUND_MIXER_VOLUME} (Master volume) and | 
					
						
							|  |  |  | \constant{SOUND_MIXER_PCM} channels should suffice---but code that uses the | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | mixer should be flexible when it comes to choosing sound channels.  On | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | the Gravis Ultrasound, for example, \constant{SOUND_MIXER_VOLUME} does not | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | exist. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[mixer device]{stereocontrols}{} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | \method{channels()} to determine which). | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | See the code example for the \method{channels()} function for an example | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | of getting data from a bitmask. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[mixer device]{reccontrols}{} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | Returns a bitmask specifying the mixer controls that may be used to | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | record.  See the code example for \method{controls()} for an example of | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | reading from a bitmask. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[mixer device]{get}{channel} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | Returns the volume of a given mixer channel.  The returned volume is a | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | 2-tuple \code{(left_volume,right_volume)}.  Volumes are specified as | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | 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. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | If an unknown channel is specified, \exception{error} is raised. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}[mixer device]{set}{channel, (left, right)} | 
					
						
							| 
									
										
										
										
											2003-03-10 02:09:51 +00:00
										 |  |  | Sets the volume for a given mixer channel to \code{(left,right)}. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \code{left} and \code{right} must be ints and between 0 (silent) and 100 | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | (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. | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Raises \exception{IOError} if an invalid mixer channel was specified; | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | \exception{TypeError} if the argument format was incorrect, and | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | \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} | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | Call this function to specify a recording source.  Returns a bitmask | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | indicating the new recording source (or sources) if successful; raises | 
					
						
							| 
									
										
										
										
											2003-03-09 23:57:34 +00:00
										 |  |  | \exception{IOError} if an invalid source was specified.  To set the current | 
					
						
							| 
									
										
										
										
											2003-03-09 23:34:52 +00:00
										 |  |  | recording source to the microphone input: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							|  |  |  | mixer.setrecsrc (1 << ossaudiodev.SOUND_MIXER_MIC) | 
					
						
							|  |  |  | \end{verbatim} | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 |