17db96d56Sopenharmony_ci:mod:`ossaudiodev` --- Access to OSS-compatible audio devices 27db96d56Sopenharmony_ci============================================================= 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: ossaudiodev 57db96d56Sopenharmony_ci :platform: Linux, FreeBSD 67db96d56Sopenharmony_ci :synopsis: Access to OSS-compatible audio devices. 77db96d56Sopenharmony_ci :deprecated: 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ci.. deprecated-removed:: 3.11 3.13 107db96d56Sopenharmony_ci The :mod:`ossaudiodev` module is deprecated 117db96d56Sopenharmony_ci (see :pep:`PEP 594 <594#ossaudiodev>` for details). 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ci-------------- 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_ciThis module allows you to access the OSS (Open Sound System) audio interface. 167db96d56Sopenharmony_ciOSS is available for a wide range of open-source and commercial Unices, and is 177db96d56Sopenharmony_cithe standard audio interface for Linux and recent versions of FreeBSD. 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ci.. Things will get more complicated for future Linux versions, since 207db96d56Sopenharmony_ci ALSA is in the standard kernel as of 2.5.x. Presumably if you 217db96d56Sopenharmony_ci use ALSA, you'll have to make sure its OSS compatibility layer 227db96d56Sopenharmony_ci is active to use ossaudiodev, but you're going to need it for the vast 237db96d56Sopenharmony_ci majority of Linux audio apps anyway. 247db96d56Sopenharmony_ci 257db96d56Sopenharmony_ci Sounds like things are also complicated for other BSDs. In response 267db96d56Sopenharmony_ci to my python-dev query, Thomas Wouters said: 277db96d56Sopenharmony_ci 287db96d56Sopenharmony_ci > Likewise, googling shows OpenBSD also uses OSS/Free -- the commercial 297db96d56Sopenharmony_ci > OSS installation manual tells you to remove references to OSS/Free from the 307db96d56Sopenharmony_ci > kernel :) 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci but Aleksander Piotrowsk actually has an OpenBSD box, and he quotes 337db96d56Sopenharmony_ci from its <soundcard.h>: 347db96d56Sopenharmony_ci > * WARNING! WARNING! 357db96d56Sopenharmony_ci > * This is an OSS (Linux) audio emulator. 367db96d56Sopenharmony_ci > * Use the Native NetBSD API for developing new code, and this 377db96d56Sopenharmony_ci > * only for compiling Linux programs. 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_ci There's also an ossaudio manpage on OpenBSD that explains things 407db96d56Sopenharmony_ci further. Presumably NetBSD and OpenBSD have a different standard 417db96d56Sopenharmony_ci audio interface. That's the great thing about standards, there are so 427db96d56Sopenharmony_ci many to choose from ... ;-) 437db96d56Sopenharmony_ci 447db96d56Sopenharmony_ci This probably all warrants a footnote or two, but I don't understand 457db96d56Sopenharmony_ci things well enough right now to write it! --GPW 467db96d56Sopenharmony_ci 477db96d56Sopenharmony_ci.. versionchanged:: 3.3 487db96d56Sopenharmony_ci Operations in this module now raise :exc:`OSError` where :exc:`IOError` 497db96d56Sopenharmony_ci was raised. 507db96d56Sopenharmony_ci 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ci.. seealso:: 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ci `Open Sound System Programmer's Guide <http://www.opensound.com/pguide/oss.pdf>`_ 557db96d56Sopenharmony_ci the official documentation for the OSS C API 567db96d56Sopenharmony_ci 577db96d56Sopenharmony_ci The module defines a large number of constants supplied by the OSS device 587db96d56Sopenharmony_ci driver; see ``<sys/soundcard.h>`` on either Linux or FreeBSD for a listing. 597db96d56Sopenharmony_ci 607db96d56Sopenharmony_ci:mod:`ossaudiodev` defines the following variables and functions: 617db96d56Sopenharmony_ci 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci.. exception:: OSSAudioError 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ci This exception is raised on certain errors. The argument is a string describing 667db96d56Sopenharmony_ci what went wrong. 677db96d56Sopenharmony_ci 687db96d56Sopenharmony_ci (If :mod:`ossaudiodev` receives an error from a system call such as 697db96d56Sopenharmony_ci :c:func:`open`, :c:func:`write`, or :c:func:`ioctl`, it raises :exc:`OSError`. 707db96d56Sopenharmony_ci Errors detected directly by :mod:`ossaudiodev` result in :exc:`OSSAudioError`.) 717db96d56Sopenharmony_ci 727db96d56Sopenharmony_ci (For backwards compatibility, the exception class is also available as 737db96d56Sopenharmony_ci ``ossaudiodev.error``.) 747db96d56Sopenharmony_ci 757db96d56Sopenharmony_ci 767db96d56Sopenharmony_ci.. function:: open(mode) 777db96d56Sopenharmony_ci open(device, mode) 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci Open an audio device and return an OSS audio device object. This object 807db96d56Sopenharmony_ci supports many file-like methods, such as :meth:`read`, :meth:`write`, and 817db96d56Sopenharmony_ci :meth:`fileno` (although there are subtle differences between conventional Unix 827db96d56Sopenharmony_ci read/write semantics and those of OSS audio devices). It also supports a number 837db96d56Sopenharmony_ci of audio-specific methods; see below for the complete list of methods. 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ci *device* is the audio device filename to use. If it is not specified, this 867db96d56Sopenharmony_ci module first looks in the environment variable :envvar:`AUDIODEV` for a device 877db96d56Sopenharmony_ci to use. If not found, it falls back to :file:`/dev/dsp`. 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci *mode* is one of ``'r'`` for read-only (record) access, ``'w'`` for 907db96d56Sopenharmony_ci write-only (playback) access and ``'rw'`` for both. Since many sound cards 917db96d56Sopenharmony_ci only allow one process to have the recorder or player open at a time, it is a 927db96d56Sopenharmony_ci good idea to open the device only for the activity needed. Further, some 937db96d56Sopenharmony_ci sound cards are half-duplex: they can be opened for reading or writing, but 947db96d56Sopenharmony_ci not both at once. 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_ci Note the unusual calling syntax: the *first* argument is optional, and the 977db96d56Sopenharmony_ci second is required. This is a historical artifact for compatibility with the 987db96d56Sopenharmony_ci older :mod:`linuxaudiodev` module which :mod:`ossaudiodev` supersedes. 997db96d56Sopenharmony_ci 1007db96d56Sopenharmony_ci .. XXX it might also be motivated 1017db96d56Sopenharmony_ci by my unfounded-but-still-possibly-true belief that the default 1027db96d56Sopenharmony_ci audio device varies unpredictably across operating systems. -GW 1037db96d56Sopenharmony_ci 1047db96d56Sopenharmony_ci 1057db96d56Sopenharmony_ci.. function:: openmixer([device]) 1067db96d56Sopenharmony_ci 1077db96d56Sopenharmony_ci Open a mixer device and return an OSS mixer device object. *device* is the 1087db96d56Sopenharmony_ci mixer device filename to use. If it is not specified, this module first looks 1097db96d56Sopenharmony_ci in the environment variable :envvar:`MIXERDEV` for a device to use. If not 1107db96d56Sopenharmony_ci found, it falls back to :file:`/dev/mixer`. 1117db96d56Sopenharmony_ci 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_ci.. _ossaudio-device-objects: 1147db96d56Sopenharmony_ci 1157db96d56Sopenharmony_ciAudio Device Objects 1167db96d56Sopenharmony_ci-------------------- 1177db96d56Sopenharmony_ci 1187db96d56Sopenharmony_ciBefore you can write to or read from an audio device, you must call three 1197db96d56Sopenharmony_cimethods in the correct order: 1207db96d56Sopenharmony_ci 1217db96d56Sopenharmony_ci#. :meth:`setfmt` to set the output format 1227db96d56Sopenharmony_ci 1237db96d56Sopenharmony_ci#. :meth:`channels` to set the number of channels 1247db96d56Sopenharmony_ci 1257db96d56Sopenharmony_ci#. :meth:`speed` to set the sample rate 1267db96d56Sopenharmony_ci 1277db96d56Sopenharmony_ciAlternately, you can use the :meth:`setparameters` method to set all three audio 1287db96d56Sopenharmony_ciparameters at once. This is more convenient, but may not be as flexible in all 1297db96d56Sopenharmony_cicases. 1307db96d56Sopenharmony_ci 1317db96d56Sopenharmony_ciThe audio device objects returned by :func:`.open` define the following methods 1327db96d56Sopenharmony_ciand (read-only) attributes: 1337db96d56Sopenharmony_ci 1347db96d56Sopenharmony_ci 1357db96d56Sopenharmony_ci.. method:: oss_audio_device.close() 1367db96d56Sopenharmony_ci 1377db96d56Sopenharmony_ci Explicitly close the audio device. When you are done writing to or reading from 1387db96d56Sopenharmony_ci an audio device, you should explicitly close it. A closed device cannot be used 1397db96d56Sopenharmony_ci again. 1407db96d56Sopenharmony_ci 1417db96d56Sopenharmony_ci 1427db96d56Sopenharmony_ci.. method:: oss_audio_device.fileno() 1437db96d56Sopenharmony_ci 1447db96d56Sopenharmony_ci Return the file descriptor associated with the device. 1457db96d56Sopenharmony_ci 1467db96d56Sopenharmony_ci 1477db96d56Sopenharmony_ci.. method:: oss_audio_device.read(size) 1487db96d56Sopenharmony_ci 1497db96d56Sopenharmony_ci Read *size* bytes from the audio input and return them as a Python string. 1507db96d56Sopenharmony_ci Unlike most Unix device drivers, OSS audio devices in blocking mode (the 1517db96d56Sopenharmony_ci default) will block :func:`read` until the entire requested amount of data is 1527db96d56Sopenharmony_ci available. 1537db96d56Sopenharmony_ci 1547db96d56Sopenharmony_ci 1557db96d56Sopenharmony_ci.. method:: oss_audio_device.write(data) 1567db96d56Sopenharmony_ci 1577db96d56Sopenharmony_ci Write a :term:`bytes-like object` *data* to the audio device and return the 1587db96d56Sopenharmony_ci number of bytes written. If the audio device is in blocking mode (the 1597db96d56Sopenharmony_ci default), the entire data is always written (again, this is different from 1607db96d56Sopenharmony_ci usual Unix device semantics). If the device is in non-blocking mode, some 1617db96d56Sopenharmony_ci data may not be written---see :meth:`writeall`. 1627db96d56Sopenharmony_ci 1637db96d56Sopenharmony_ci .. versionchanged:: 3.5 1647db96d56Sopenharmony_ci Writable :term:`bytes-like object` is now accepted. 1657db96d56Sopenharmony_ci 1667db96d56Sopenharmony_ci 1677db96d56Sopenharmony_ci.. method:: oss_audio_device.writeall(data) 1687db96d56Sopenharmony_ci 1697db96d56Sopenharmony_ci Write a :term:`bytes-like object` *data* to the audio device: waits until 1707db96d56Sopenharmony_ci the audio device is able to accept data, writes as much data as it will 1717db96d56Sopenharmony_ci accept, and repeats until *data* has been completely written. If the device 1727db96d56Sopenharmony_ci is in blocking mode (the default), this has the same effect as 1737db96d56Sopenharmony_ci :meth:`write`; :meth:`writeall` is only useful in non-blocking mode. Has 1747db96d56Sopenharmony_ci no return value, since the amount of data written is always equal to the 1757db96d56Sopenharmony_ci amount of data supplied. 1767db96d56Sopenharmony_ci 1777db96d56Sopenharmony_ci .. versionchanged:: 3.5 1787db96d56Sopenharmony_ci Writable :term:`bytes-like object` is now accepted. 1797db96d56Sopenharmony_ci 1807db96d56Sopenharmony_ci 1817db96d56Sopenharmony_ci.. versionchanged:: 3.2 1827db96d56Sopenharmony_ci Audio device objects also support the context management protocol, i.e. they can 1837db96d56Sopenharmony_ci be used in a :keyword:`with` statement. 1847db96d56Sopenharmony_ci 1857db96d56Sopenharmony_ci 1867db96d56Sopenharmony_ciThe following methods each map to exactly one :c:func:`ioctl` system call. The 1877db96d56Sopenharmony_cicorrespondence is obvious: for example, :meth:`setfmt` corresponds to the 1887db96d56Sopenharmony_ci``SNDCTL_DSP_SETFMT`` ioctl, and :meth:`sync` to ``SNDCTL_DSP_SYNC`` (this can 1897db96d56Sopenharmony_cibe useful when consulting the OSS documentation). If the underlying 1907db96d56Sopenharmony_ci:c:func:`ioctl` fails, they all raise :exc:`OSError`. 1917db96d56Sopenharmony_ci 1927db96d56Sopenharmony_ci 1937db96d56Sopenharmony_ci.. method:: oss_audio_device.nonblock() 1947db96d56Sopenharmony_ci 1957db96d56Sopenharmony_ci Put the device into non-blocking mode. Once in non-blocking mode, there is no 1967db96d56Sopenharmony_ci way to return it to blocking mode. 1977db96d56Sopenharmony_ci 1987db96d56Sopenharmony_ci 1997db96d56Sopenharmony_ci.. method:: oss_audio_device.getfmts() 2007db96d56Sopenharmony_ci 2017db96d56Sopenharmony_ci Return a bitmask of the audio output formats supported by the soundcard. Some 2027db96d56Sopenharmony_ci of the formats supported by OSS are: 2037db96d56Sopenharmony_ci 2047db96d56Sopenharmony_ci +-------------------------+---------------------------------------------+ 2057db96d56Sopenharmony_ci | Format | Description | 2067db96d56Sopenharmony_ci +=========================+=============================================+ 2077db96d56Sopenharmony_ci | :const:`AFMT_MU_LAW` | a logarithmic encoding (used by Sun ``.au`` | 2087db96d56Sopenharmony_ci | | files and :file:`/dev/audio`) | 2097db96d56Sopenharmony_ci +-------------------------+---------------------------------------------+ 2107db96d56Sopenharmony_ci | :const:`AFMT_A_LAW` | a logarithmic encoding | 2117db96d56Sopenharmony_ci +-------------------------+---------------------------------------------+ 2127db96d56Sopenharmony_ci | :const:`AFMT_IMA_ADPCM` | a 4:1 compressed format defined by the | 2137db96d56Sopenharmony_ci | | Interactive Multimedia Association | 2147db96d56Sopenharmony_ci +-------------------------+---------------------------------------------+ 2157db96d56Sopenharmony_ci | :const:`AFMT_U8` | Unsigned, 8-bit audio | 2167db96d56Sopenharmony_ci +-------------------------+---------------------------------------------+ 2177db96d56Sopenharmony_ci | :const:`AFMT_S16_LE` | Signed, 16-bit audio, little-endian byte | 2187db96d56Sopenharmony_ci | | order (as used by Intel processors) | 2197db96d56Sopenharmony_ci +-------------------------+---------------------------------------------+ 2207db96d56Sopenharmony_ci | :const:`AFMT_S16_BE` | Signed, 16-bit audio, big-endian byte order | 2217db96d56Sopenharmony_ci | | (as used by 68k, PowerPC, Sparc) | 2227db96d56Sopenharmony_ci +-------------------------+---------------------------------------------+ 2237db96d56Sopenharmony_ci | :const:`AFMT_S8` | Signed, 8 bit audio | 2247db96d56Sopenharmony_ci +-------------------------+---------------------------------------------+ 2257db96d56Sopenharmony_ci | :const:`AFMT_U16_LE` | Unsigned, 16-bit little-endian audio | 2267db96d56Sopenharmony_ci +-------------------------+---------------------------------------------+ 2277db96d56Sopenharmony_ci | :const:`AFMT_U16_BE` | Unsigned, 16-bit big-endian audio | 2287db96d56Sopenharmony_ci +-------------------------+---------------------------------------------+ 2297db96d56Sopenharmony_ci 2307db96d56Sopenharmony_ci Consult the OSS documentation for a full list of audio formats, and note that 2317db96d56Sopenharmony_ci most devices support only a subset of these formats. Some older devices only 2327db96d56Sopenharmony_ci support :const:`AFMT_U8`; the most common format used today is 2337db96d56Sopenharmony_ci :const:`AFMT_S16_LE`. 2347db96d56Sopenharmony_ci 2357db96d56Sopenharmony_ci 2367db96d56Sopenharmony_ci.. method:: oss_audio_device.setfmt(format) 2377db96d56Sopenharmony_ci 2387db96d56Sopenharmony_ci Try to set the current audio format to *format*---see :meth:`getfmts` for a 2397db96d56Sopenharmony_ci list. Returns the audio format that the device was set to, which may not be the 2407db96d56Sopenharmony_ci requested format. May also be used to return the current audio format---do this 2417db96d56Sopenharmony_ci by passing an "audio format" of :const:`AFMT_QUERY`. 2427db96d56Sopenharmony_ci 2437db96d56Sopenharmony_ci 2447db96d56Sopenharmony_ci.. method:: oss_audio_device.channels(nchannels) 2457db96d56Sopenharmony_ci 2467db96d56Sopenharmony_ci Set the number of output channels to *nchannels*. A value of 1 indicates 2477db96d56Sopenharmony_ci monophonic sound, 2 stereophonic. Some devices may have more than 2 channels, 2487db96d56Sopenharmony_ci and some high-end devices may not support mono. Returns the number of channels 2497db96d56Sopenharmony_ci the device was set to. 2507db96d56Sopenharmony_ci 2517db96d56Sopenharmony_ci 2527db96d56Sopenharmony_ci.. method:: oss_audio_device.speed(samplerate) 2537db96d56Sopenharmony_ci 2547db96d56Sopenharmony_ci Try to set the audio sampling rate to *samplerate* samples per second. Returns 2557db96d56Sopenharmony_ci the rate actually set. Most sound devices don't support arbitrary sampling 2567db96d56Sopenharmony_ci rates. Common rates are: 2577db96d56Sopenharmony_ci 2587db96d56Sopenharmony_ci +-------+-------------------------------------------+ 2597db96d56Sopenharmony_ci | Rate | Description | 2607db96d56Sopenharmony_ci +=======+===========================================+ 2617db96d56Sopenharmony_ci | 8000 | default rate for :file:`/dev/audio` | 2627db96d56Sopenharmony_ci +-------+-------------------------------------------+ 2637db96d56Sopenharmony_ci | 11025 | speech recording | 2647db96d56Sopenharmony_ci +-------+-------------------------------------------+ 2657db96d56Sopenharmony_ci | 22050 | | 2667db96d56Sopenharmony_ci +-------+-------------------------------------------+ 2677db96d56Sopenharmony_ci | 44100 | CD quality audio (at 16 bits/sample and 2 | 2687db96d56Sopenharmony_ci | | channels) | 2697db96d56Sopenharmony_ci +-------+-------------------------------------------+ 2707db96d56Sopenharmony_ci | 96000 | DVD quality audio (at 24 bits/sample) | 2717db96d56Sopenharmony_ci +-------+-------------------------------------------+ 2727db96d56Sopenharmony_ci 2737db96d56Sopenharmony_ci 2747db96d56Sopenharmony_ci.. method:: oss_audio_device.sync() 2757db96d56Sopenharmony_ci 2767db96d56Sopenharmony_ci Wait until the sound device has played every byte in its buffer. (This happens 2777db96d56Sopenharmony_ci implicitly when the device is closed.) The OSS documentation recommends closing 2787db96d56Sopenharmony_ci and re-opening the device rather than using :meth:`sync`. 2797db96d56Sopenharmony_ci 2807db96d56Sopenharmony_ci 2817db96d56Sopenharmony_ci.. method:: oss_audio_device.reset() 2827db96d56Sopenharmony_ci 2837db96d56Sopenharmony_ci Immediately stop playing or recording and return the device to a state where it 2847db96d56Sopenharmony_ci can accept commands. The OSS documentation recommends closing and re-opening 2857db96d56Sopenharmony_ci the device after calling :meth:`reset`. 2867db96d56Sopenharmony_ci 2877db96d56Sopenharmony_ci 2887db96d56Sopenharmony_ci.. method:: oss_audio_device.post() 2897db96d56Sopenharmony_ci 2907db96d56Sopenharmony_ci Tell the driver that there is likely to be a pause in the output, making it 2917db96d56Sopenharmony_ci possible for the device to handle the pause more intelligently. You might use 2927db96d56Sopenharmony_ci this after playing a spot sound effect, before waiting for user input, or before 2937db96d56Sopenharmony_ci doing disk I/O. 2947db96d56Sopenharmony_ci 2957db96d56Sopenharmony_ciThe following convenience methods combine several ioctls, or one ioctl and some 2967db96d56Sopenharmony_cisimple calculations. 2977db96d56Sopenharmony_ci 2987db96d56Sopenharmony_ci 2997db96d56Sopenharmony_ci.. method:: oss_audio_device.setparameters(format, nchannels, samplerate[, strict=False]) 3007db96d56Sopenharmony_ci 3017db96d56Sopenharmony_ci Set the key audio sampling parameters---sample format, number of channels, and 3027db96d56Sopenharmony_ci sampling rate---in one method call. *format*, *nchannels*, and *samplerate* 3037db96d56Sopenharmony_ci should be as specified in the :meth:`setfmt`, :meth:`channels`, and 3047db96d56Sopenharmony_ci :meth:`speed` methods. If *strict* is true, :meth:`setparameters` checks to 3057db96d56Sopenharmony_ci see if each parameter was actually set to the requested value, and raises 3067db96d56Sopenharmony_ci :exc:`OSSAudioError` if not. Returns a tuple (*format*, *nchannels*, 3077db96d56Sopenharmony_ci *samplerate*) indicating the parameter values that were actually set by the 3087db96d56Sopenharmony_ci device driver (i.e., the same as the return values of :meth:`setfmt`, 3097db96d56Sopenharmony_ci :meth:`channels`, and :meth:`speed`). 3107db96d56Sopenharmony_ci 3117db96d56Sopenharmony_ci For example, :: 3127db96d56Sopenharmony_ci 3137db96d56Sopenharmony_ci (fmt, channels, rate) = dsp.setparameters(fmt, channels, rate) 3147db96d56Sopenharmony_ci 3157db96d56Sopenharmony_ci is equivalent to :: 3167db96d56Sopenharmony_ci 3177db96d56Sopenharmony_ci fmt = dsp.setfmt(fmt) 3187db96d56Sopenharmony_ci channels = dsp.channels(channels) 3197db96d56Sopenharmony_ci rate = dsp.rate(rate) 3207db96d56Sopenharmony_ci 3217db96d56Sopenharmony_ci 3227db96d56Sopenharmony_ci.. method:: oss_audio_device.bufsize() 3237db96d56Sopenharmony_ci 3247db96d56Sopenharmony_ci Returns the size of the hardware buffer, in samples. 3257db96d56Sopenharmony_ci 3267db96d56Sopenharmony_ci 3277db96d56Sopenharmony_ci.. method:: oss_audio_device.obufcount() 3287db96d56Sopenharmony_ci 3297db96d56Sopenharmony_ci Returns the number of samples that are in the hardware buffer yet to be played. 3307db96d56Sopenharmony_ci 3317db96d56Sopenharmony_ci 3327db96d56Sopenharmony_ci.. method:: oss_audio_device.obuffree() 3337db96d56Sopenharmony_ci 3347db96d56Sopenharmony_ci Returns the number of samples that could be queued into the hardware buffer to 3357db96d56Sopenharmony_ci be played without blocking. 3367db96d56Sopenharmony_ci 3377db96d56Sopenharmony_ciAudio device objects also support several read-only attributes: 3387db96d56Sopenharmony_ci 3397db96d56Sopenharmony_ci 3407db96d56Sopenharmony_ci.. attribute:: oss_audio_device.closed 3417db96d56Sopenharmony_ci 3427db96d56Sopenharmony_ci Boolean indicating whether the device has been closed. 3437db96d56Sopenharmony_ci 3447db96d56Sopenharmony_ci 3457db96d56Sopenharmony_ci.. attribute:: oss_audio_device.name 3467db96d56Sopenharmony_ci 3477db96d56Sopenharmony_ci String containing the name of the device file. 3487db96d56Sopenharmony_ci 3497db96d56Sopenharmony_ci 3507db96d56Sopenharmony_ci.. attribute:: oss_audio_device.mode 3517db96d56Sopenharmony_ci 3527db96d56Sopenharmony_ci The I/O mode for the file, either ``"r"``, ``"rw"``, or ``"w"``. 3537db96d56Sopenharmony_ci 3547db96d56Sopenharmony_ci 3557db96d56Sopenharmony_ci.. _mixer-device-objects: 3567db96d56Sopenharmony_ci 3577db96d56Sopenharmony_ciMixer Device Objects 3587db96d56Sopenharmony_ci-------------------- 3597db96d56Sopenharmony_ci 3607db96d56Sopenharmony_ciThe mixer object provides two file-like methods: 3617db96d56Sopenharmony_ci 3627db96d56Sopenharmony_ci 3637db96d56Sopenharmony_ci.. method:: oss_mixer_device.close() 3647db96d56Sopenharmony_ci 3657db96d56Sopenharmony_ci This method closes the open mixer device file. Any further attempts to use the 3667db96d56Sopenharmony_ci mixer after this file is closed will raise an :exc:`OSError`. 3677db96d56Sopenharmony_ci 3687db96d56Sopenharmony_ci 3697db96d56Sopenharmony_ci.. method:: oss_mixer_device.fileno() 3707db96d56Sopenharmony_ci 3717db96d56Sopenharmony_ci Returns the file handle number of the open mixer device file. 3727db96d56Sopenharmony_ci 3737db96d56Sopenharmony_ci.. versionchanged:: 3.2 3747db96d56Sopenharmony_ci Mixer objects also support the context management protocol. 3757db96d56Sopenharmony_ci 3767db96d56Sopenharmony_ci 3777db96d56Sopenharmony_ciThe remaining methods are specific to audio mixing: 3787db96d56Sopenharmony_ci 3797db96d56Sopenharmony_ci 3807db96d56Sopenharmony_ci.. method:: oss_mixer_device.controls() 3817db96d56Sopenharmony_ci 3827db96d56Sopenharmony_ci This method returns a bitmask specifying the available mixer controls ("Control" 3837db96d56Sopenharmony_ci being a specific mixable "channel", such as :const:`SOUND_MIXER_PCM` or 3847db96d56Sopenharmony_ci :const:`SOUND_MIXER_SYNTH`). This bitmask indicates a subset of all available 3857db96d56Sopenharmony_ci mixer controls---the :const:`SOUND_MIXER_\*` constants defined at module level. 3867db96d56Sopenharmony_ci To determine if, for example, the current mixer object supports a PCM mixer, use 3877db96d56Sopenharmony_ci the following Python code:: 3887db96d56Sopenharmony_ci 3897db96d56Sopenharmony_ci mixer=ossaudiodev.openmixer() 3907db96d56Sopenharmony_ci if mixer.controls() & (1 << ossaudiodev.SOUND_MIXER_PCM): 3917db96d56Sopenharmony_ci # PCM is supported 3927db96d56Sopenharmony_ci ... code ... 3937db96d56Sopenharmony_ci 3947db96d56Sopenharmony_ci For most purposes, the :const:`SOUND_MIXER_VOLUME` (master volume) and 3957db96d56Sopenharmony_ci :const:`SOUND_MIXER_PCM` controls should suffice---but code that uses the mixer 3967db96d56Sopenharmony_ci should be flexible when it comes to choosing mixer controls. On the Gravis 3977db96d56Sopenharmony_ci Ultrasound, for example, :const:`SOUND_MIXER_VOLUME` does not exist. 3987db96d56Sopenharmony_ci 3997db96d56Sopenharmony_ci 4007db96d56Sopenharmony_ci.. method:: oss_mixer_device.stereocontrols() 4017db96d56Sopenharmony_ci 4027db96d56Sopenharmony_ci Returns a bitmask indicating stereo mixer controls. If a bit is set, the 4037db96d56Sopenharmony_ci corresponding control is stereo; if it is unset, the control is either 4047db96d56Sopenharmony_ci monophonic or not supported by the mixer (use in combination with 4057db96d56Sopenharmony_ci :meth:`controls` to determine which). 4067db96d56Sopenharmony_ci 4077db96d56Sopenharmony_ci See the code example for the :meth:`controls` function for an example of getting 4087db96d56Sopenharmony_ci data from a bitmask. 4097db96d56Sopenharmony_ci 4107db96d56Sopenharmony_ci 4117db96d56Sopenharmony_ci.. method:: oss_mixer_device.reccontrols() 4127db96d56Sopenharmony_ci 4137db96d56Sopenharmony_ci Returns a bitmask specifying the mixer controls that may be used to record. See 4147db96d56Sopenharmony_ci the code example for :meth:`controls` for an example of reading from a bitmask. 4157db96d56Sopenharmony_ci 4167db96d56Sopenharmony_ci 4177db96d56Sopenharmony_ci.. method:: oss_mixer_device.get(control) 4187db96d56Sopenharmony_ci 4197db96d56Sopenharmony_ci Returns the volume of a given mixer control. The returned volume is a 2-tuple 4207db96d56Sopenharmony_ci ``(left_volume,right_volume)``. Volumes are specified as numbers from 0 4217db96d56Sopenharmony_ci (silent) to 100 (full volume). If the control is monophonic, a 2-tuple is still 4227db96d56Sopenharmony_ci returned, but both volumes are the same. 4237db96d56Sopenharmony_ci 4247db96d56Sopenharmony_ci Raises :exc:`OSSAudioError` if an invalid control is specified, or 4257db96d56Sopenharmony_ci :exc:`OSError` if an unsupported control is specified. 4267db96d56Sopenharmony_ci 4277db96d56Sopenharmony_ci 4287db96d56Sopenharmony_ci.. method:: oss_mixer_device.set(control, (left, right)) 4297db96d56Sopenharmony_ci 4307db96d56Sopenharmony_ci Sets the volume for a given mixer control to ``(left,right)``. ``left`` and 4317db96d56Sopenharmony_ci ``right`` must be ints and between 0 (silent) and 100 (full volume). On 4327db96d56Sopenharmony_ci success, the new volume is returned as a 2-tuple. Note that this may not be 4337db96d56Sopenharmony_ci exactly the same as the volume specified, because of the limited resolution of 4347db96d56Sopenharmony_ci some soundcard's mixers. 4357db96d56Sopenharmony_ci 4367db96d56Sopenharmony_ci Raises :exc:`OSSAudioError` if an invalid mixer control was specified, or if the 4377db96d56Sopenharmony_ci specified volumes were out-of-range. 4387db96d56Sopenharmony_ci 4397db96d56Sopenharmony_ci 4407db96d56Sopenharmony_ci.. method:: oss_mixer_device.get_recsrc() 4417db96d56Sopenharmony_ci 4427db96d56Sopenharmony_ci This method returns a bitmask indicating which control(s) are currently being 4437db96d56Sopenharmony_ci used as a recording source. 4447db96d56Sopenharmony_ci 4457db96d56Sopenharmony_ci 4467db96d56Sopenharmony_ci.. method:: oss_mixer_device.set_recsrc(bitmask) 4477db96d56Sopenharmony_ci 4487db96d56Sopenharmony_ci Call this function to specify a recording source. Returns a bitmask indicating 4497db96d56Sopenharmony_ci the new recording source (or sources) if successful; raises :exc:`OSError` if an 4507db96d56Sopenharmony_ci invalid source was specified. To set the current recording source to the 4517db96d56Sopenharmony_ci microphone input:: 4527db96d56Sopenharmony_ci 4537db96d56Sopenharmony_ci mixer.setrecsrc (1 << ossaudiodev.SOUND_MIXER_MIC) 454