SF patch #489989 (Charles G Waldman) linuxaudiodev.c - fix initialization
The OSS Programmer's Reference (www.4front-tech.com)
states:
*Setting Sampling Parameters
There are three parameters which affect the sound
quality (and therefore memory and bandwidth
requirements) of sampled audio data. These are:
** sample format (sometimes called number of bits)
** number of channels (mono or stereo), and
** sampling rate (speed)
NOTE:
It is important to always set these parameters in the
above order. Setting sampling rate before the number
of channels doesn't work with all devices.
diff --git a/Modules/linuxaudiodev.c b/Modules/linuxaudiodev.c
index 37ad5ff..e0f144b 100644
--- a/Modules/linuxaudiodev.c
+++ b/Modules/linuxaudiodev.c
@@ -258,15 +258,6 @@
return NULL;
}
- if (ioctl(self->x_fd, SNDCTL_DSP_SPEED, &rate) == -1) {
- PyErr_SetFromErrno(LinuxAudioError);
- return NULL;
- }
- if (ioctl(self->x_fd, SNDCTL_DSP_CHANNELS, &nchannels) == -1) {
- PyErr_SetFromErrno(LinuxAudioError);
- return NULL;
- }
-
for (n = 0; n < n_audio_types; n++)
if (fmt == audio_types[n].a_fmt)
break;
@@ -294,6 +285,14 @@
PyErr_SetFromErrno(LinuxAudioError);
return NULL;
}
+ if (ioctl(self->x_fd, SNDCTL_DSP_CHANNELS, &nchannels) == -1) {
+ PyErr_SetFromErrno(LinuxAudioError);
+ return NULL;
+ }
+ if (ioctl(self->x_fd, SNDCTL_DSP_SPEED, &rate) == -1) {
+ PyErr_SetFromErrno(LinuxAudioError);
+ return NULL;
+ }
Py_INCREF(Py_None);
return Py_None;