mirror of
https://github.com/python/cpython.git
synced 2025-07-23 03:05:38 +00:00
gh-104773: PEP 594: Remove the ossaudiodev module (#104862)
* Remove ossaudiodev extension in configure.ac and regenerate the configure script. * Remove ossaudiodev in Modules/Setup and Modules/Setup.stdlib.in.
This commit is contained in:
parent
a4b7e9d1f8
commit
fc07fe4e37
18 changed files with 12 additions and 2119 deletions
|
@ -1,453 +0,0 @@
|
||||||
:mod:`ossaudiodev` --- Access to OSS-compatible audio devices
|
|
||||||
=============================================================
|
|
||||||
|
|
||||||
.. module:: ossaudiodev
|
|
||||||
:platform: Linux, FreeBSD
|
|
||||||
:synopsis: Access to OSS-compatible audio devices.
|
|
||||||
:deprecated:
|
|
||||||
|
|
||||||
.. deprecated-removed:: 3.11 3.13
|
|
||||||
The :mod:`ossaudiodev` module is deprecated
|
|
||||||
(see :pep:`PEP 594 <594#ossaudiodev>` for details).
|
|
||||||
|
|
||||||
--------------
|
|
||||||
|
|
||||||
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 and recent versions of FreeBSD.
|
|
||||||
|
|
||||||
.. Things will get more complicated for future Linux versions, since
|
|
||||||
ALSA is in the standard kernel as of 2.5.x. Presumably if you
|
|
||||||
use ALSA, you'll have to make sure its OSS compatibility layer
|
|
||||||
is active to use ossaudiodev, but you're going to need it for the vast
|
|
||||||
majority of Linux audio apps anyway.
|
|
||||||
|
|
||||||
Sounds like things are also complicated for other BSDs. In response
|
|
||||||
to my python-dev query, Thomas Wouters said:
|
|
||||||
|
|
||||||
> Likewise, googling shows OpenBSD also uses OSS/Free -- the commercial
|
|
||||||
> OSS installation manual tells you to remove references to OSS/Free from the
|
|
||||||
> kernel :)
|
|
||||||
|
|
||||||
but Aleksander Piotrowsk actually has an OpenBSD box, and he quotes
|
|
||||||
from its <soundcard.h>:
|
|
||||||
> * WARNING! WARNING!
|
|
||||||
> * This is an OSS (Linux) audio emulator.
|
|
||||||
> * Use the Native NetBSD API for developing new code, and this
|
|
||||||
> * only for compiling Linux programs.
|
|
||||||
|
|
||||||
There's also an ossaudio manpage on OpenBSD that explains things
|
|
||||||
further. Presumably NetBSD and OpenBSD have a different standard
|
|
||||||
audio interface. That's the great thing about standards, there are so
|
|
||||||
many to choose from ... ;-)
|
|
||||||
|
|
||||||
This probably all warrants a footnote or two, but I don't understand
|
|
||||||
things well enough right now to write it! --GPW
|
|
||||||
|
|
||||||
.. versionchanged:: 3.3
|
|
||||||
Operations in this module now raise :exc:`OSError` where :exc:`IOError`
|
|
||||||
was raised.
|
|
||||||
|
|
||||||
|
|
||||||
.. seealso::
|
|
||||||
|
|
||||||
`Open Sound System Programmer's Guide <http://www.opensound.com/pguide/oss.pdf>`_
|
|
||||||
the official documentation for the OSS C API
|
|
||||||
|
|
||||||
The module defines a large number of constants supplied by the OSS device
|
|
||||||
driver; see ``<sys/soundcard.h>`` on either Linux or FreeBSD for a listing.
|
|
||||||
|
|
||||||
:mod:`ossaudiodev` defines the following variables and functions:
|
|
||||||
|
|
||||||
|
|
||||||
.. exception:: OSSAudioError
|
|
||||||
|
|
||||||
This exception is raised on certain errors. The argument is a string describing
|
|
||||||
what went wrong.
|
|
||||||
|
|
||||||
(If :mod:`ossaudiodev` receives an error from a system call such as
|
|
||||||
:c:func:`open`, :c:func:`write`, or :c:func:`ioctl`, it raises :exc:`OSError`.
|
|
||||||
Errors detected directly by :mod:`ossaudiodev` result in :exc:`OSSAudioError`.)
|
|
||||||
|
|
||||||
(For backwards compatibility, the exception class is also available as
|
|
||||||
``ossaudiodev.error``.)
|
|
||||||
|
|
||||||
|
|
||||||
.. function:: open(mode)
|
|
||||||
open(device, mode)
|
|
||||||
|
|
||||||
Open an audio device and return an OSS audio device object. This object
|
|
||||||
supports many file-like methods, such as :meth:`read`, :meth:`write`, and
|
|
||||||
:meth:`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.
|
|
||||||
|
|
||||||
*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`.
|
|
||||||
|
|
||||||
*mode* is one of ``'r'`` for read-only (record) access, ``'w'`` for
|
|
||||||
write-only (playback) access and ``'rw'`` for both. Since many sound cards
|
|
||||||
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
|
|
||||||
sound cards are half-duplex: they can be opened for reading or writing, but
|
|
||||||
not both at once.
|
|
||||||
|
|
||||||
Note the unusual calling syntax: the *first* argument is optional, and the
|
|
||||||
second is required. This is a historical artifact for compatibility with the
|
|
||||||
older :mod:`linuxaudiodev` module which :mod:`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
|
|
||||||
|
|
||||||
|
|
||||||
.. function:: openmixer([device])
|
|
||||||
|
|
||||||
Open a mixer device and return an OSS mixer device object. *device* is the
|
|
||||||
mixer device filename to use. If it is not specified, this module first looks
|
|
||||||
in the environment variable :envvar:`MIXERDEV` for a device to use. If not
|
|
||||||
found, it falls back to :file:`/dev/mixer`.
|
|
||||||
|
|
||||||
|
|
||||||
.. _ossaudio-device-objects:
|
|
||||||
|
|
||||||
Audio Device Objects
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
Before you can write to or read from an audio device, you must call three
|
|
||||||
methods in the correct order:
|
|
||||||
|
|
||||||
#. :meth:`setfmt` to set the output format
|
|
||||||
|
|
||||||
#. :meth:`channels` to set the number of channels
|
|
||||||
|
|
||||||
#. :meth:`speed` to set the sample rate
|
|
||||||
|
|
||||||
Alternately, you can use the :meth:`setparameters` method to set all three audio
|
|
||||||
parameters at once. This is more convenient, but may not be as flexible in all
|
|
||||||
cases.
|
|
||||||
|
|
||||||
The audio device objects returned by :func:`.open` define the following methods
|
|
||||||
and (read-only) attributes:
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_audio_device.close()
|
|
||||||
|
|
||||||
Explicitly close the audio device. When you are done writing to or reading from
|
|
||||||
an audio device, you should explicitly close it. A closed device cannot be used
|
|
||||||
again.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_audio_device.fileno()
|
|
||||||
|
|
||||||
Return the file descriptor associated with the device.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_audio_device.read(size)
|
|
||||||
|
|
||||||
Read *size* bytes from the audio input and return them as a Python string.
|
|
||||||
Unlike most Unix device drivers, OSS audio devices in blocking mode (the
|
|
||||||
default) will block :func:`read` until the entire requested amount of data is
|
|
||||||
available.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_audio_device.write(data)
|
|
||||||
|
|
||||||
Write a :term:`bytes-like object` *data* to the audio device and return the
|
|
||||||
number of bytes written. If the audio device is in blocking mode (the
|
|
||||||
default), the entire data is always written (again, this is different from
|
|
||||||
usual Unix device semantics). If the device is in non-blocking mode, some
|
|
||||||
data may not be written---see :meth:`writeall`.
|
|
||||||
|
|
||||||
.. versionchanged:: 3.5
|
|
||||||
Writable :term:`bytes-like object` is now accepted.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_audio_device.writeall(data)
|
|
||||||
|
|
||||||
Write a :term:`bytes-like object` *data* to the audio device: waits until
|
|
||||||
the audio device is able to accept data, writes as much data as it will
|
|
||||||
accept, and repeats until *data* has been completely written. If the device
|
|
||||||
is in blocking mode (the default), this has the same effect as
|
|
||||||
:meth:`write`; :meth:`writeall` is only useful in non-blocking mode. Has
|
|
||||||
no return value, since the amount of data written is always equal to the
|
|
||||||
amount of data supplied.
|
|
||||||
|
|
||||||
.. versionchanged:: 3.5
|
|
||||||
Writable :term:`bytes-like object` is now accepted.
|
|
||||||
|
|
||||||
|
|
||||||
.. versionchanged:: 3.2
|
|
||||||
Audio device objects also support the context management protocol, i.e. they can
|
|
||||||
be used in a :keyword:`with` statement.
|
|
||||||
|
|
||||||
|
|
||||||
The following methods each map to exactly one :c:func:`ioctl` system call. The
|
|
||||||
correspondence is obvious: for example, :meth:`setfmt` corresponds to the
|
|
||||||
``SNDCTL_DSP_SETFMT`` ioctl, and :meth:`sync` to ``SNDCTL_DSP_SYNC`` (this can
|
|
||||||
be useful when consulting the OSS documentation). If the underlying
|
|
||||||
:c:func:`ioctl` fails, they all raise :exc:`OSError`.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_audio_device.nonblock()
|
|
||||||
|
|
||||||
Put the device into non-blocking mode. Once in non-blocking mode, there is no
|
|
||||||
way to return it to blocking mode.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_audio_device.getfmts()
|
|
||||||
|
|
||||||
Return a bitmask of the audio output formats supported by the soundcard. Some
|
|
||||||
of the formats supported by OSS are:
|
|
||||||
|
|
||||||
+-------------------------+---------------------------------------------+
|
|
||||||
| Format | Description |
|
|
||||||
+=========================+=============================================+
|
|
||||||
| :const:`AFMT_MU_LAW` | a logarithmic encoding (used by Sun ``.au`` |
|
|
||||||
| | files and :file:`/dev/audio`) |
|
|
||||||
+-------------------------+---------------------------------------------+
|
|
||||||
| :const:`AFMT_A_LAW` | a logarithmic encoding |
|
|
||||||
+-------------------------+---------------------------------------------+
|
|
||||||
| :const:`AFMT_IMA_ADPCM` | a 4:1 compressed format defined by the |
|
|
||||||
| | Interactive Multimedia Association |
|
|
||||||
+-------------------------+---------------------------------------------+
|
|
||||||
| :const:`AFMT_U8` | Unsigned, 8-bit audio |
|
|
||||||
+-------------------------+---------------------------------------------+
|
|
||||||
| :const:`AFMT_S16_LE` | Signed, 16-bit audio, little-endian byte |
|
|
||||||
| | order (as used by Intel processors) |
|
|
||||||
+-------------------------+---------------------------------------------+
|
|
||||||
| :const:`AFMT_S16_BE` | Signed, 16-bit audio, big-endian byte order |
|
|
||||||
| | (as used by 68k, PowerPC, Sparc) |
|
|
||||||
+-------------------------+---------------------------------------------+
|
|
||||||
| :const:`AFMT_S8` | Signed, 8 bit audio |
|
|
||||||
+-------------------------+---------------------------------------------+
|
|
||||||
| :const:`AFMT_U16_LE` | Unsigned, 16-bit little-endian audio |
|
|
||||||
+-------------------------+---------------------------------------------+
|
|
||||||
| :const:`AFMT_U16_BE` | Unsigned, 16-bit big-endian audio |
|
|
||||||
+-------------------------+---------------------------------------------+
|
|
||||||
|
|
||||||
Consult the OSS documentation for a full list of audio formats, and note that
|
|
||||||
most devices support only a subset of these formats. Some older devices only
|
|
||||||
support :const:`AFMT_U8`; the most common format used today is
|
|
||||||
:const:`AFMT_S16_LE`.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_audio_device.setfmt(format)
|
|
||||||
|
|
||||||
Try to set the current audio format to *format*---see :meth:`getfmts` for a
|
|
||||||
list. Returns the audio format that the device was set to, which may not be the
|
|
||||||
requested format. May also be used to return the current audio format---do this
|
|
||||||
by passing an "audio format" of :const:`AFMT_QUERY`.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_audio_device.channels(nchannels)
|
|
||||||
|
|
||||||
Set the number of output channels to *nchannels*. 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.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_audio_device.speed(samplerate)
|
|
||||||
|
|
||||||
Try to set the audio sampling rate to *samplerate* samples per second. Returns
|
|
||||||
the rate actually set. Most sound devices don't support arbitrary sampling
|
|
||||||
rates. Common rates are:
|
|
||||||
|
|
||||||
+-------+-------------------------------------------+
|
|
||||||
| Rate | Description |
|
|
||||||
+=======+===========================================+
|
|
||||||
| 8000 | default rate for :file:`/dev/audio` |
|
|
||||||
+-------+-------------------------------------------+
|
|
||||||
| 11025 | speech recording |
|
|
||||||
+-------+-------------------------------------------+
|
|
||||||
| 22050 | |
|
|
||||||
+-------+-------------------------------------------+
|
|
||||||
| 44100 | CD quality audio (at 16 bits/sample and 2 |
|
|
||||||
| | channels) |
|
|
||||||
+-------+-------------------------------------------+
|
|
||||||
| 96000 | DVD quality audio (at 24 bits/sample) |
|
|
||||||
+-------+-------------------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_audio_device.sync()
|
|
||||||
|
|
||||||
Wait until the sound device has played every byte in its buffer. (This happens
|
|
||||||
implicitly when the device is closed.) The OSS documentation recommends closing
|
|
||||||
and re-opening the device rather than using :meth:`sync`.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_audio_device.reset()
|
|
||||||
|
|
||||||
Immediately stop playing or recording and return the device to a state where it
|
|
||||||
can accept commands. The OSS documentation recommends closing and re-opening
|
|
||||||
the device after calling :meth:`reset`.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_audio_device.post()
|
|
||||||
|
|
||||||
Tell the driver that there is likely to be a pause in the output, making it
|
|
||||||
possible for the device to handle the pause more intelligently. You might use
|
|
||||||
this after playing a spot sound effect, before waiting for user input, or before
|
|
||||||
doing disk I/O.
|
|
||||||
|
|
||||||
The following convenience methods combine several ioctls, or one ioctl and some
|
|
||||||
simple calculations.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_audio_device.setparameters(format, nchannels, samplerate[, strict=False])
|
|
||||||
|
|
||||||
Set the key audio sampling parameters---sample format, number of channels, and
|
|
||||||
sampling rate---in one method call. *format*, *nchannels*, and *samplerate*
|
|
||||||
should be as specified in the :meth:`setfmt`, :meth:`channels`, and
|
|
||||||
:meth:`speed` methods. If *strict* is true, :meth:`setparameters` checks to
|
|
||||||
see if each parameter was actually set to the requested value, and raises
|
|
||||||
:exc:`OSSAudioError` if not. Returns a tuple (*format*, *nchannels*,
|
|
||||||
*samplerate*) indicating the parameter values that were actually set by the
|
|
||||||
device driver (i.e., the same as the return values of :meth:`setfmt`,
|
|
||||||
:meth:`channels`, and :meth:`speed`).
|
|
||||||
|
|
||||||
For example, ::
|
|
||||||
|
|
||||||
(fmt, channels, rate) = dsp.setparameters(fmt, channels, rate)
|
|
||||||
|
|
||||||
is equivalent to ::
|
|
||||||
|
|
||||||
fmt = dsp.setfmt(fmt)
|
|
||||||
channels = dsp.channels(channels)
|
|
||||||
rate = dsp.rate(rate)
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_audio_device.bufsize()
|
|
||||||
|
|
||||||
Returns the size of the hardware buffer, in samples.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_audio_device.obufcount()
|
|
||||||
|
|
||||||
Returns the number of samples that are in the hardware buffer yet to be played.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_audio_device.obuffree()
|
|
||||||
|
|
||||||
Returns the number of samples that could be queued into the hardware buffer to
|
|
||||||
be played without blocking.
|
|
||||||
|
|
||||||
Audio device objects also support several read-only attributes:
|
|
||||||
|
|
||||||
|
|
||||||
.. attribute:: oss_audio_device.closed
|
|
||||||
|
|
||||||
Boolean indicating whether the device has been closed.
|
|
||||||
|
|
||||||
|
|
||||||
.. attribute:: oss_audio_device.name
|
|
||||||
|
|
||||||
String containing the name of the device file.
|
|
||||||
|
|
||||||
|
|
||||||
.. attribute:: oss_audio_device.mode
|
|
||||||
|
|
||||||
The I/O mode for the file, either ``"r"``, ``"rw"``, or ``"w"``.
|
|
||||||
|
|
||||||
|
|
||||||
.. _mixer-device-objects:
|
|
||||||
|
|
||||||
Mixer Device Objects
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
The mixer object provides two file-like methods:
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_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 :exc:`OSError`.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_mixer_device.fileno()
|
|
||||||
|
|
||||||
Returns the file handle number of the open mixer device file.
|
|
||||||
|
|
||||||
.. versionchanged:: 3.2
|
|
||||||
Mixer objects also support the context management protocol.
|
|
||||||
|
|
||||||
|
|
||||||
The remaining methods are specific to audio mixing:
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_mixer_device.controls()
|
|
||||||
|
|
||||||
This method returns a bitmask specifying the available mixer controls ("Control"
|
|
||||||
being a specific mixable "channel", such as :const:`SOUND_MIXER_PCM` or
|
|
||||||
:const:`SOUND_MIXER_SYNTH`). This bitmask indicates a subset of all available
|
|
||||||
mixer controls---the :const:`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::
|
|
||||||
|
|
||||||
mixer=ossaudiodev.openmixer()
|
|
||||||
if mixer.controls() & (1 << ossaudiodev.SOUND_MIXER_PCM):
|
|
||||||
# PCM is supported
|
|
||||||
... code ...
|
|
||||||
|
|
||||||
For most purposes, the :const:`SOUND_MIXER_VOLUME` (master volume) and
|
|
||||||
:const:`SOUND_MIXER_PCM` controls should suffice---but code that uses the mixer
|
|
||||||
should be flexible when it comes to choosing mixer controls. On the Gravis
|
|
||||||
Ultrasound, for example, :const:`SOUND_MIXER_VOLUME` does not exist.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_mixer_device.stereocontrols()
|
|
||||||
|
|
||||||
Returns a bitmask indicating stereo mixer controls. If a bit is set, the
|
|
||||||
corresponding control is stereo; if it is unset, the control is either
|
|
||||||
monophonic or not supported by the mixer (use in combination with
|
|
||||||
:meth:`controls` to determine which).
|
|
||||||
|
|
||||||
See the code example for the :meth:`controls` function for an example of getting
|
|
||||||
data from a bitmask.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_mixer_device.reccontrols()
|
|
||||||
|
|
||||||
Returns a bitmask specifying the mixer controls that may be used to record. See
|
|
||||||
the code example for :meth:`controls` for an example of reading from a bitmask.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_mixer_device.get(control)
|
|
||||||
|
|
||||||
Returns the volume of a given mixer control. The returned volume is a 2-tuple
|
|
||||||
``(left_volume,right_volume)``. Volumes are specified as numbers from 0
|
|
||||||
(silent) to 100 (full volume). If the control is monophonic, a 2-tuple is still
|
|
||||||
returned, but both volumes are the same.
|
|
||||||
|
|
||||||
Raises :exc:`OSSAudioError` if an invalid control is specified, or
|
|
||||||
:exc:`OSError` if an unsupported control is specified.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_mixer_device.set(control, (left, right))
|
|
||||||
|
|
||||||
Sets the volume for a given mixer control to ``(left,right)``. ``left`` and
|
|
||||||
``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 :exc:`OSSAudioError` if an invalid mixer control was specified, or if the
|
|
||||||
specified volumes were out-of-range.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_mixer_device.get_recsrc()
|
|
||||||
|
|
||||||
This method returns a bitmask indicating which control(s) are currently being
|
|
||||||
used as a recording source.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: oss_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 :exc:`OSError` if an
|
|
||||||
invalid source was specified. To set the current recording source to the
|
|
||||||
microphone input::
|
|
||||||
|
|
||||||
mixer.setrecsrc (1 << ossaudiodev.SOUND_MIXER_MIC)
|
|
|
@ -20,7 +20,6 @@ backwards compatibility. They have been superseded by other modules.
|
||||||
nis.rst
|
nis.rst
|
||||||
nntplib.rst
|
nntplib.rst
|
||||||
optparse.rst
|
optparse.rst
|
||||||
ossaudiodev.rst
|
|
||||||
spwd.rst
|
spwd.rst
|
||||||
sunau.rst
|
sunau.rst
|
||||||
uu.rst
|
uu.rst
|
||||||
|
|
|
@ -172,7 +172,6 @@ Doc/library/operator.rst
|
||||||
Doc/library/optparse.rst
|
Doc/library/optparse.rst
|
||||||
Doc/library/os.path.rst
|
Doc/library/os.path.rst
|
||||||
Doc/library/os.rst
|
Doc/library/os.rst
|
||||||
Doc/library/ossaudiodev.rst
|
|
||||||
Doc/library/pickle.rst
|
Doc/library/pickle.rst
|
||||||
Doc/library/pickletools.rst
|
Doc/library/pickletools.rst
|
||||||
Doc/library/platform.rst
|
Doc/library/platform.rst
|
||||||
|
|
|
@ -1392,7 +1392,7 @@ complete list of changes, or look through the CVS logs for all the details.
|
||||||
details.
|
details.
|
||||||
|
|
||||||
* The old and never-documented :mod:`linuxaudiodev` module has been deprecated,
|
* The old and never-documented :mod:`linuxaudiodev` module has been deprecated,
|
||||||
and a new version named :mod:`ossaudiodev` has been added. The module was
|
and a new version named :mod:`!ossaudiodev` has been added. The module was
|
||||||
renamed because the OSS sound drivers can be used on platforms other than Linux,
|
renamed because the OSS sound drivers can be used on platforms other than Linux,
|
||||||
and the interface has also been tidied and brought up to date in various ways.
|
and the interface has also been tidied and brought up to date in various ways.
|
||||||
(Contributed by Greg Ward and Nicholas FitzRoy-Dale.)
|
(Contributed by Greg Ward and Nicholas FitzRoy-Dale.)
|
||||||
|
|
|
@ -1737,7 +1737,7 @@ Modules
|
||||||
+---------------------+---------------------+---------------------+---------------------+---------------------+
|
+---------------------+---------------------+---------------------+---------------------+---------------------+
|
||||||
| :mod:`!cgi` | :mod:`imghdr` | :mod:`nntplib` | :mod:`spwd` | :mod:`xdrlib` |
|
| :mod:`!cgi` | :mod:`imghdr` | :mod:`nntplib` | :mod:`spwd` | :mod:`xdrlib` |
|
||||||
+---------------------+---------------------+---------------------+---------------------+---------------------+
|
+---------------------+---------------------+---------------------+---------------------+---------------------+
|
||||||
| :mod:`!cgitb` | :mod:`mailcap` | :mod:`ossaudiodev` | :mod:`sunau` | |
|
| :mod:`!cgitb` | :mod:`mailcap` | :mod:`!ossaudiodev` | :mod:`sunau` | |
|
||||||
+---------------------+---------------------+---------------------+---------------------+---------------------+
|
+---------------------+---------------------+---------------------+---------------------+---------------------+
|
||||||
|
|
||||||
(Contributed by Brett Cannon in :issue:`47061` and Victor Stinner in
|
(Contributed by Brett Cannon in :issue:`47061` and Victor Stinner in
|
||||||
|
|
|
@ -897,7 +897,7 @@ Modules (see :pep:`594`):
|
||||||
* :mod:`msilib`
|
* :mod:`msilib`
|
||||||
* :mod:`nis`
|
* :mod:`nis`
|
||||||
* :mod:`nntplib`
|
* :mod:`nntplib`
|
||||||
* :mod:`ossaudiodev`
|
* :mod:`!ossaudiodev`
|
||||||
* :mod:`!pipes`
|
* :mod:`!pipes`
|
||||||
* :mod:`!sndhdr`
|
* :mod:`!sndhdr`
|
||||||
* :mod:`spwd`
|
* :mod:`spwd`
|
||||||
|
|
|
@ -157,6 +157,10 @@ Removed
|
||||||
use the :mod:`subprocess` module instead.
|
use the :mod:`subprocess` module instead.
|
||||||
(Contributed by Victor Stinner in :gh:`104773`.)
|
(Contributed by Victor Stinner in :gh:`104773`.)
|
||||||
|
|
||||||
|
* :pep:`594`: Remove the :mod:`!ossaudiodev` module, deprecated in Python 3.11:
|
||||||
|
use the `pygame project <https://www.pygame.org/>`_ for audio playback.
|
||||||
|
(Contributed by Victor Stinner in :gh:`104780`.)
|
||||||
|
|
||||||
|
|
||||||
Porting to Python 3.13
|
Porting to Python 3.13
|
||||||
======================
|
======================
|
||||||
|
|
|
@ -2095,7 +2095,7 @@ accepts ``"x"`` to request exclusive creation.
|
||||||
Other module-level changes
|
Other module-level changes
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
Many functions in the :mod:`mmap`, :mod:`ossaudiodev`, :mod:`socket`,
|
Many functions in the :mod:`mmap`, :mod:`!ossaudiodev`, :mod:`socket`,
|
||||||
:mod:`ssl`, and :mod:`codecs` modules now accept writable
|
:mod:`ssl`, and :mod:`codecs` modules now accept writable
|
||||||
:term:`bytes-like objects <bytes-like object>`.
|
:term:`bytes-like objects <bytes-like object>`.
|
||||||
(Contributed by Serhiy Storchaka in :issue:`23001`.)
|
(Contributed by Serhiy Storchaka in :issue:`23001`.)
|
||||||
|
|
|
@ -1,205 +0,0 @@
|
||||||
from test import support
|
|
||||||
from test.support import import_helper, warnings_helper
|
|
||||||
import warnings
|
|
||||||
support.requires('audio')
|
|
||||||
|
|
||||||
from test.support import findfile
|
|
||||||
|
|
||||||
with warnings.catch_warnings():
|
|
||||||
warnings.simplefilter("ignore", DeprecationWarning)
|
|
||||||
ossaudiodev = import_helper.import_module('ossaudiodev')
|
|
||||||
audioop = warnings_helper.import_deprecated('audioop')
|
|
||||||
sunau = warnings_helper.import_deprecated('sunau')
|
|
||||||
|
|
||||||
import errno
|
|
||||||
import sys
|
|
||||||
import time
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
# Arggh, AFMT_S16_NE not defined on all platforms -- seems to be a
|
|
||||||
# fairly recent addition to OSS.
|
|
||||||
try:
|
|
||||||
from ossaudiodev import AFMT_S16_NE
|
|
||||||
except ImportError:
|
|
||||||
if sys.byteorder == "little":
|
|
||||||
AFMT_S16_NE = ossaudiodev.AFMT_S16_LE
|
|
||||||
else:
|
|
||||||
AFMT_S16_NE = ossaudiodev.AFMT_S16_BE
|
|
||||||
|
|
||||||
|
|
||||||
def read_sound_file(path):
|
|
||||||
with open(path, 'rb') as fp:
|
|
||||||
au = sunau.open(fp)
|
|
||||||
rate = au.getframerate()
|
|
||||||
nchannels = au.getnchannels()
|
|
||||||
encoding = au._encoding
|
|
||||||
fp.seek(0)
|
|
||||||
data = fp.read()
|
|
||||||
|
|
||||||
if encoding != sunau.AUDIO_FILE_ENCODING_MULAW_8:
|
|
||||||
raise RuntimeError("Expect .au file with 8-bit mu-law samples")
|
|
||||||
|
|
||||||
# Convert the data to 16-bit signed.
|
|
||||||
data = audioop.ulaw2lin(data, 2)
|
|
||||||
return (data, rate, 16, nchannels)
|
|
||||||
|
|
||||||
class OSSAudioDevTests(unittest.TestCase):
|
|
||||||
|
|
||||||
def play_sound_file(self, data, rate, ssize, nchannels):
|
|
||||||
try:
|
|
||||||
dsp = ossaudiodev.open('w')
|
|
||||||
except OSError as msg:
|
|
||||||
if msg.args[0] in (errno.EACCES, errno.ENOENT,
|
|
||||||
errno.ENODEV, errno.EBUSY):
|
|
||||||
raise unittest.SkipTest(msg)
|
|
||||||
raise
|
|
||||||
|
|
||||||
# at least check that these methods can be invoked
|
|
||||||
dsp.bufsize()
|
|
||||||
dsp.obufcount()
|
|
||||||
dsp.obuffree()
|
|
||||||
dsp.getptr()
|
|
||||||
dsp.fileno()
|
|
||||||
|
|
||||||
# Make sure the read-only attributes work.
|
|
||||||
self.assertFalse(dsp.closed)
|
|
||||||
self.assertEqual(dsp.name, "/dev/dsp")
|
|
||||||
self.assertEqual(dsp.mode, "w", "bad dsp.mode: %r" % dsp.mode)
|
|
||||||
|
|
||||||
# And make sure they're really read-only.
|
|
||||||
for attr in ('closed', 'name', 'mode'):
|
|
||||||
try:
|
|
||||||
setattr(dsp, attr, 42)
|
|
||||||
except (TypeError, AttributeError):
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
self.fail("dsp.%s not read-only" % attr)
|
|
||||||
|
|
||||||
# Compute expected running time of sound sample (in seconds).
|
|
||||||
expected_time = float(len(data)) / (ssize/8) / nchannels / rate
|
|
||||||
|
|
||||||
# set parameters based on .au file headers
|
|
||||||
dsp.setparameters(AFMT_S16_NE, nchannels, rate)
|
|
||||||
self.assertTrue(abs(expected_time - 3.51) < 1e-2, expected_time)
|
|
||||||
t1 = time.monotonic()
|
|
||||||
dsp.write(data)
|
|
||||||
dsp.close()
|
|
||||||
t2 = time.monotonic()
|
|
||||||
elapsed_time = t2 - t1
|
|
||||||
|
|
||||||
percent_diff = (abs(elapsed_time - expected_time) / expected_time) * 100
|
|
||||||
self.assertTrue(percent_diff <= 10.0,
|
|
||||||
"elapsed time (%s) > 10%% off of expected time (%s)" %
|
|
||||||
(elapsed_time, expected_time))
|
|
||||||
|
|
||||||
def set_parameters(self, dsp):
|
|
||||||
# Two configurations for testing:
|
|
||||||
# config1 (8-bit, mono, 8 kHz) should work on even the most
|
|
||||||
# ancient and crufty sound card, but maybe not on special-
|
|
||||||
# purpose high-end hardware
|
|
||||||
# config2 (16-bit, stereo, 44.1kHz) should work on all but the
|
|
||||||
# most ancient and crufty hardware
|
|
||||||
config1 = (ossaudiodev.AFMT_U8, 1, 8000)
|
|
||||||
config2 = (AFMT_S16_NE, 2, 44100)
|
|
||||||
|
|
||||||
for config in [config1, config2]:
|
|
||||||
(fmt, channels, rate) = config
|
|
||||||
if (dsp.setfmt(fmt) == fmt and
|
|
||||||
dsp.channels(channels) == channels and
|
|
||||||
dsp.speed(rate) == rate):
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
raise RuntimeError("unable to set audio sampling parameters: "
|
|
||||||
"you must have really weird audio hardware")
|
|
||||||
|
|
||||||
# setparameters() should be able to set this configuration in
|
|
||||||
# either strict or non-strict mode.
|
|
||||||
result = dsp.setparameters(fmt, channels, rate, False)
|
|
||||||
self.assertEqual(result, (fmt, channels, rate),
|
|
||||||
"setparameters%r: returned %r" % (config, result))
|
|
||||||
|
|
||||||
result = dsp.setparameters(fmt, channels, rate, True)
|
|
||||||
self.assertEqual(result, (fmt, channels, rate),
|
|
||||||
"setparameters%r: returned %r" % (config, result))
|
|
||||||
|
|
||||||
def set_bad_parameters(self, dsp):
|
|
||||||
# Now try some configurations that are presumably bogus: eg. 300
|
|
||||||
# channels currently exceeds even Hollywood's ambitions, and
|
|
||||||
# negative sampling rate is utter nonsense. setparameters() should
|
|
||||||
# accept these in non-strict mode, returning something other than
|
|
||||||
# was requested, but should barf in strict mode.
|
|
||||||
fmt = AFMT_S16_NE
|
|
||||||
rate = 44100
|
|
||||||
channels = 2
|
|
||||||
for config in [(fmt, 300, rate), # ridiculous nchannels
|
|
||||||
(fmt, -5, rate), # impossible nchannels
|
|
||||||
(fmt, channels, -50), # impossible rate
|
|
||||||
]:
|
|
||||||
(fmt, channels, rate) = config
|
|
||||||
result = dsp.setparameters(fmt, channels, rate, False)
|
|
||||||
self.assertNotEqual(result, config,
|
|
||||||
"unexpectedly got requested configuration")
|
|
||||||
|
|
||||||
try:
|
|
||||||
result = dsp.setparameters(fmt, channels, rate, True)
|
|
||||||
except ossaudiodev.OSSAudioError as err:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
self.fail("expected OSSAudioError")
|
|
||||||
|
|
||||||
def test_playback(self):
|
|
||||||
sound_info = read_sound_file(findfile('audiotest.au'))
|
|
||||||
self.play_sound_file(*sound_info)
|
|
||||||
|
|
||||||
def test_set_parameters(self):
|
|
||||||
dsp = ossaudiodev.open("w")
|
|
||||||
try:
|
|
||||||
self.set_parameters(dsp)
|
|
||||||
|
|
||||||
# Disabled because it fails under Linux 2.6 with ALSA's OSS
|
|
||||||
# emulation layer.
|
|
||||||
#self.set_bad_parameters(dsp)
|
|
||||||
finally:
|
|
||||||
dsp.close()
|
|
||||||
self.assertTrue(dsp.closed)
|
|
||||||
|
|
||||||
def test_mixer_methods(self):
|
|
||||||
# Issue #8139: ossaudiodev didn't initialize its types properly,
|
|
||||||
# therefore some methods were unavailable.
|
|
||||||
with ossaudiodev.openmixer() as mixer:
|
|
||||||
self.assertGreaterEqual(mixer.fileno(), 0)
|
|
||||||
|
|
||||||
def test_with(self):
|
|
||||||
with ossaudiodev.open('w') as dsp:
|
|
||||||
pass
|
|
||||||
self.assertTrue(dsp.closed)
|
|
||||||
|
|
||||||
def test_on_closed(self):
|
|
||||||
dsp = ossaudiodev.open('w')
|
|
||||||
dsp.close()
|
|
||||||
self.assertRaises(ValueError, dsp.fileno)
|
|
||||||
self.assertRaises(ValueError, dsp.read, 1)
|
|
||||||
self.assertRaises(ValueError, dsp.write, b'x')
|
|
||||||
self.assertRaises(ValueError, dsp.writeall, b'x')
|
|
||||||
self.assertRaises(ValueError, dsp.bufsize)
|
|
||||||
self.assertRaises(ValueError, dsp.obufcount)
|
|
||||||
self.assertRaises(ValueError, dsp.obufcount)
|
|
||||||
self.assertRaises(ValueError, dsp.obuffree)
|
|
||||||
self.assertRaises(ValueError, dsp.getptr)
|
|
||||||
|
|
||||||
mixer = ossaudiodev.openmixer()
|
|
||||||
mixer.close()
|
|
||||||
self.assertRaises(ValueError, mixer.fileno)
|
|
||||||
|
|
||||||
def setUpModule():
|
|
||||||
try:
|
|
||||||
dsp = ossaudiodev.open('w')
|
|
||||||
except (ossaudiodev.error, OSError) as msg:
|
|
||||||
if msg.args[0] in (errno.EACCES, errno.ENOENT,
|
|
||||||
errno.ENODEV, errno.EBUSY):
|
|
||||||
raise unittest.SkipTest(msg)
|
|
||||||
raise
|
|
||||||
dsp.close()
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
unittest.main()
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
:pep:`594`: Remove the :mod:`!ossaudiodev` module, deprecated in Python 3.11.
|
||||||
|
Patch Victor Stinner.
|
|
@ -184,7 +184,6 @@ PYTHONPATH=$(COREPYTHONPATH)
|
||||||
#_posixshmem -I$(srcdir)/Modules/_multiprocessing _multiprocessing/posixshmem.c -lrt
|
#_posixshmem -I$(srcdir)/Modules/_multiprocessing _multiprocessing/posixshmem.c -lrt
|
||||||
#fcntl fcntlmodule.c
|
#fcntl fcntlmodule.c
|
||||||
#grp grpmodule.c
|
#grp grpmodule.c
|
||||||
#ossaudiodev ossaudiodev.c
|
|
||||||
#resource resource.c
|
#resource resource.c
|
||||||
#spwd spwdmodule.c
|
#spwd spwdmodule.c
|
||||||
#syslog syslogmodule.c
|
#syslog syslogmodule.c
|
||||||
|
|
|
@ -115,7 +115,6 @@
|
||||||
# Linux: glibc has deprecated SUN RPC, APIs are in libnsl and libtirpc (bpo-32521)
|
# Linux: glibc has deprecated SUN RPC, APIs are in libnsl and libtirpc (bpo-32521)
|
||||||
@MODULE_NIS_TRUE@nis nismodule.c
|
@MODULE_NIS_TRUE@nis nismodule.c
|
||||||
# needs sys/soundcard.h or linux/soundcard.h (Linux, FreeBSD)
|
# needs sys/soundcard.h or linux/soundcard.h (Linux, FreeBSD)
|
||||||
@MODULE_OSSAUDIODEV_TRUE@ossaudiodev ossaudiodev.c
|
|
||||||
@MODULE__POSIXSUBPROCESS_TRUE@_posixsubprocess _posixsubprocess.c
|
@MODULE__POSIXSUBPROCESS_TRUE@_posixsubprocess _posixsubprocess.c
|
||||||
@MODULE_RESOURCE_TRUE@resource resource.c
|
@MODULE_RESOURCE_TRUE@resource resource.c
|
||||||
@MODULE_SELECT_TRUE@select selectmodule.c
|
@MODULE_SELECT_TRUE@select selectmodule.c
|
||||||
|
|
File diff suppressed because it is too large
Load diff
1
Python/stdlib_module_names.h
generated
1
Python/stdlib_module_names.h
generated
|
@ -195,7 +195,6 @@ static const char* _Py_stdlib_module_names[] = {
|
||||||
"operator",
|
"operator",
|
||||||
"optparse",
|
"optparse",
|
||||||
"os",
|
"os",
|
||||||
"ossaudiodev",
|
|
||||||
"pathlib",
|
"pathlib",
|
||||||
"pdb",
|
"pdb",
|
||||||
"pickle",
|
"pickle",
|
||||||
|
|
|
@ -379,8 +379,6 @@ Modules/_decimal/_decimal.c - PyDecContextManager_Type -
|
||||||
Modules/_decimal/_decimal.c - PyDecContext_Type -
|
Modules/_decimal/_decimal.c - PyDecContext_Type -
|
||||||
Modules/_decimal/_decimal.c - PyDecSignalDictMixin_Type -
|
Modules/_decimal/_decimal.c - PyDecSignalDictMixin_Type -
|
||||||
Modules/_decimal/_decimal.c - PyDec_Type -
|
Modules/_decimal/_decimal.c - PyDec_Type -
|
||||||
Modules/ossaudiodev.c - OSSAudioType -
|
|
||||||
Modules/ossaudiodev.c - OSSMixerType -
|
|
||||||
Modules/xxmodule.c - Null_Type -
|
Modules/xxmodule.c - Null_Type -
|
||||||
Modules/xxmodule.c - Str_Type -
|
Modules/xxmodule.c - Str_Type -
|
||||||
Modules/xxmodule.c - Xxo_Type -
|
Modules/xxmodule.c - Xxo_Type -
|
||||||
|
@ -403,7 +401,6 @@ Modules/_ctypes/_ctypes.c - PyExc_ArgError -
|
||||||
Modules/_cursesmodule.c - PyCursesError -
|
Modules/_cursesmodule.c - PyCursesError -
|
||||||
Modules/_decimal/_decimal.c - DecimalException -
|
Modules/_decimal/_decimal.c - DecimalException -
|
||||||
Modules/_tkinter.c - Tkinter_TclError -
|
Modules/_tkinter.c - Tkinter_TclError -
|
||||||
Modules/ossaudiodev.c - OSSAudioError -
|
|
||||||
Modules/xxlimited_35.c - ErrorObject -
|
Modules/xxlimited_35.c - ErrorObject -
|
||||||
Modules/xxmodule.c - ErrorObject -
|
Modules/xxmodule.c - ErrorObject -
|
||||||
|
|
||||||
|
|
Can't render this file because it has a wrong number of fields in line 4.
|
|
@ -284,8 +284,6 @@ Modules/faulthandler.c - faulthandler_handlers -
|
||||||
Modules/getnameinfo.c - gni_afdl -
|
Modules/getnameinfo.c - gni_afdl -
|
||||||
Modules/nismodule.c - TIMEOUT -
|
Modules/nismodule.c - TIMEOUT -
|
||||||
Modules/nismodule.c - aliases -
|
Modules/nismodule.c - aliases -
|
||||||
Modules/ossaudiodev.c - control_labels -
|
|
||||||
Modules/ossaudiodev.c - control_names -
|
|
||||||
Modules/posixmodule.c os_getxattr_impl buffer_sizes -
|
Modules/posixmodule.c os_getxattr_impl buffer_sizes -
|
||||||
Modules/posixmodule.c os_listxattr_impl buffer_sizes -
|
Modules/posixmodule.c os_listxattr_impl buffer_sizes -
|
||||||
Modules/posixmodule.c - posix_constants_confstr -
|
Modules/posixmodule.c - posix_constants_confstr -
|
||||||
|
|
Can't render this file because it has a wrong number of fields in line 4.
|
42
configure
generated
vendored
42
configure
generated
vendored
|
@ -724,8 +724,6 @@ MODULE_RESOURCE_FALSE
|
||||||
MODULE_RESOURCE_TRUE
|
MODULE_RESOURCE_TRUE
|
||||||
MODULE_PWD_FALSE
|
MODULE_PWD_FALSE
|
||||||
MODULE_PWD_TRUE
|
MODULE_PWD_TRUE
|
||||||
MODULE_OSSAUDIODEV_FALSE
|
|
||||||
MODULE_OSSAUDIODEV_TRUE
|
|
||||||
MODULE_GRP_FALSE
|
MODULE_GRP_FALSE
|
||||||
MODULE_GRP_TRUE
|
MODULE_GRP_TRUE
|
||||||
MODULE__SOCKET_FALSE
|
MODULE__SOCKET_FALSE
|
||||||
|
@ -25674,7 +25672,6 @@ case $ac_sys_system in #(
|
||||||
Darwin) :
|
Darwin) :
|
||||||
|
|
||||||
|
|
||||||
py_cv_module_ossaudiodev=n/a
|
|
||||||
py_cv_module_spwd=n/a
|
py_cv_module_spwd=n/a
|
||||||
;; #(
|
;; #(
|
||||||
CYGWIN*) :
|
CYGWIN*) :
|
||||||
|
@ -25712,7 +25709,6 @@ case $ac_sys_system in #(
|
||||||
py_cv_module__xxinterpchannels=n/a
|
py_cv_module__xxinterpchannels=n/a
|
||||||
py_cv_module_grp=n/a
|
py_cv_module_grp=n/a
|
||||||
py_cv_module_nis=n/a
|
py_cv_module_nis=n/a
|
||||||
py_cv_module_ossaudiodev=n/a
|
|
||||||
py_cv_module_pwd=n/a
|
py_cv_module_pwd=n/a
|
||||||
py_cv_module_resource=n/a
|
py_cv_module_resource=n/a
|
||||||
py_cv_module_spwd=n/a
|
py_cv_module_spwd=n/a
|
||||||
|
@ -26504,40 +26500,6 @@ fi
|
||||||
$as_echo "$py_cv_module_grp" >&6; }
|
$as_echo "$py_cv_module_grp" >&6; }
|
||||||
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdlib extension module ossaudiodev" >&5
|
|
||||||
$as_echo_n "checking for stdlib extension module ossaudiodev... " >&6; }
|
|
||||||
if test "$py_cv_module_ossaudiodev" != "n/a"; then :
|
|
||||||
|
|
||||||
if true; then :
|
|
||||||
if test "$ac_cv_header_linux_soundcard_h" = yes -o "$ac_cv_header_sys_soundcard_h" = yes; then :
|
|
||||||
py_cv_module_ossaudiodev=yes
|
|
||||||
else
|
|
||||||
py_cv_module_ossaudiodev=missing
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
py_cv_module_ossaudiodev=disabled
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
as_fn_append MODULE_BLOCK "MODULE_OSSAUDIODEV_STATE=$py_cv_module_ossaudiodev$as_nl"
|
|
||||||
if test "x$py_cv_module_ossaudiodev" = xyes; then :
|
|
||||||
|
|
||||||
|
|
||||||
as_fn_append MODULE_BLOCK "MODULE_OSSAUDIODEV_LDFLAGS=$OSSAUDIODEV_LIBS$as_nl"
|
|
||||||
|
|
||||||
fi
|
|
||||||
if test "$py_cv_module_ossaudiodev" = yes; then
|
|
||||||
MODULE_OSSAUDIODEV_TRUE=
|
|
||||||
MODULE_OSSAUDIODEV_FALSE='#'
|
|
||||||
else
|
|
||||||
MODULE_OSSAUDIODEV_TRUE='#'
|
|
||||||
MODULE_OSSAUDIODEV_FALSE=
|
|
||||||
fi
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $py_cv_module_ossaudiodev" >&5
|
|
||||||
$as_echo "$py_cv_module_ossaudiodev" >&6; }
|
|
||||||
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdlib extension module pwd" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdlib extension module pwd" >&5
|
||||||
$as_echo_n "checking for stdlib extension module pwd... " >&6; }
|
$as_echo_n "checking for stdlib extension module pwd... " >&6; }
|
||||||
if test "$py_cv_module_pwd" != "n/a"; then :
|
if test "$py_cv_module_pwd" != "n/a"; then :
|
||||||
|
@ -28369,10 +28331,6 @@ if test -z "${MODULE_GRP_TRUE}" && test -z "${MODULE_GRP_FALSE}"; then
|
||||||
as_fn_error $? "conditional \"MODULE_GRP\" was never defined.
|
as_fn_error $? "conditional \"MODULE_GRP\" was never defined.
|
||||||
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
||||||
fi
|
fi
|
||||||
if test -z "${MODULE_OSSAUDIODEV_TRUE}" && test -z "${MODULE_OSSAUDIODEV_FALSE}"; then
|
|
||||||
as_fn_error $? "conditional \"MODULE_OSSAUDIODEV\" was never defined.
|
|
||||||
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
||||||
fi
|
|
||||||
if test -z "${MODULE_PWD_TRUE}" && test -z "${MODULE_PWD_FALSE}"; then
|
if test -z "${MODULE_PWD_TRUE}" && test -z "${MODULE_PWD_FALSE}"; then
|
||||||
as_fn_error $? "conditional \"MODULE_PWD\" was never defined.
|
as_fn_error $? "conditional \"MODULE_PWD\" was never defined.
|
||||||
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
||||||
|
|
|
@ -7093,7 +7093,7 @@ dnl VxWorks does not provide crypt() function
|
||||||
AS_CASE([$ac_sys_system],
|
AS_CASE([$ac_sys_system],
|
||||||
[AIX], [PY_STDLIB_MOD_SET_NA([_scproxy], [spwd])],
|
[AIX], [PY_STDLIB_MOD_SET_NA([_scproxy], [spwd])],
|
||||||
[VxWorks*], [PY_STDLIB_MOD_SET_NA([_scproxy], [_crypt], [termios], [grp])],
|
[VxWorks*], [PY_STDLIB_MOD_SET_NA([_scproxy], [_crypt], [termios], [grp])],
|
||||||
[Darwin], [PY_STDLIB_MOD_SET_NA([ossaudiodev], [spwd])],
|
[Darwin], [PY_STDLIB_MOD_SET_NA([spwd])],
|
||||||
[CYGWIN*], [PY_STDLIB_MOD_SET_NA([_scproxy], [nis])],
|
[CYGWIN*], [PY_STDLIB_MOD_SET_NA([_scproxy], [nis])],
|
||||||
[QNX*], [PY_STDLIB_MOD_SET_NA([_scproxy], [nis])],
|
[QNX*], [PY_STDLIB_MOD_SET_NA([_scproxy], [nis])],
|
||||||
[FreeBSD*], [PY_STDLIB_MOD_SET_NA([_scproxy], [spwd])],
|
[FreeBSD*], [PY_STDLIB_MOD_SET_NA([_scproxy], [spwd])],
|
||||||
|
@ -7117,7 +7117,6 @@ AS_CASE([$ac_sys_system],
|
||||||
[_xxinterpchannels],
|
[_xxinterpchannels],
|
||||||
[grp],
|
[grp],
|
||||||
[nis],
|
[nis],
|
||||||
[ossaudiodev],
|
|
||||||
[pwd],
|
[pwd],
|
||||||
[resource],
|
[resource],
|
||||||
[spwd],
|
[spwd],
|
||||||
|
@ -7266,9 +7265,6 @@ PY_STDLIB_MOD([_socket],
|
||||||
|
|
||||||
dnl platform specific extensions
|
dnl platform specific extensions
|
||||||
PY_STDLIB_MOD([grp], [], [test "$ac_cv_func_getgrgid" = yes -o "$ac_cv_func_getgrgid_r" = yes])
|
PY_STDLIB_MOD([grp], [], [test "$ac_cv_func_getgrgid" = yes -o "$ac_cv_func_getgrgid_r" = yes])
|
||||||
PY_STDLIB_MOD([ossaudiodev],
|
|
||||||
[], [test "$ac_cv_header_linux_soundcard_h" = yes -o "$ac_cv_header_sys_soundcard_h" = yes],
|
|
||||||
[], [$OSSAUDIODEV_LIBS])
|
|
||||||
PY_STDLIB_MOD([pwd], [], [test "$ac_cv_func_getpwuid" = yes -o "$ac_cv_func_getpwuid_r" = yes])
|
PY_STDLIB_MOD([pwd], [], [test "$ac_cv_func_getpwuid" = yes -o "$ac_cv_func_getpwuid_r" = yes])
|
||||||
PY_STDLIB_MOD([resource], [], [test "$ac_cv_header_sys_resource_h" = yes])
|
PY_STDLIB_MOD([resource], [], [test "$ac_cv_header_sys_resource_h" = yes])
|
||||||
PY_STDLIB_MOD([_scproxy],
|
PY_STDLIB_MOD([_scproxy],
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue