annotate Modules/linuxaudiodev.c @ 14984:ece6c19edcc1 legacy-trunk

Remove some debugging prints.
author Greg Ward <gward@python.net>
date Tue, 03 Oct 2000 03:32:37 +0000
parents ef978520085f
children 675748378c81
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /* Hey Emacs, this is -*-C-*-
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 ******************************************************************************
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 * linuxaudiodev.c -- Linux audio device for python.
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 *
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 * Author : Peter Bosch
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 * Created On : Thu Mar 2 21:10:33 2000
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 * Last Modified By: Peter Bosch
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 * Last Modified On: Fri Mar 24 11:27:00 2000
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 * Status : Unknown, Use with caution!
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 *
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 * Unless other notices are present in any part of this file
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 * explicitly claiming copyrights for other people and/or
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 * organizations, the contents of this file is fully copyright
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 * (C) 2000 Peter Bosch, all rights reserved.
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 ******************************************************************************
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 */
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
17
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 #include "Python.h"
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 #include "structmember.h"
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
20
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 #ifdef HAVE_UNISTD_H
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 #include <unistd.h>
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 #endif
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
24
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 #ifdef HAVE_FCNTL_H
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 #include <fcntl.h>
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 #endif
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
28
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 #include <sys/ioctl.h>
14306
62ec0bfd93f8 This module has a poor name, since it can be used under FreeBSD and
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 14057
diff changeset
30 #if defined(linux)
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 #include <linux/soundcard.h>
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
32
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 typedef unsigned long uint32_t;
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
34
14306
62ec0bfd93f8 This module has a poor name, since it can be used under FreeBSD and
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 14057
diff changeset
35 #elif defined(__FreeBSD__)
62ec0bfd93f8 This module has a poor name, since it can be used under FreeBSD and
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 14057
diff changeset
36 #include <machine/soundcard.h>
62ec0bfd93f8 This module has a poor name, since it can be used under FreeBSD and
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 14057
diff changeset
37
62ec0bfd93f8 This module has a poor name, since it can be used under FreeBSD and
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 14057
diff changeset
38 #ifndef SNDCTL_DSP_CHANNELS
62ec0bfd93f8 This module has a poor name, since it can be used under FreeBSD and
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 14057
diff changeset
39 #define SNDCTL_DSP_CHANNELS SOUND_PCM_WRITE_CHANNELS
62ec0bfd93f8 This module has a poor name, since it can be used under FreeBSD and
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 14057
diff changeset
40 #endif
62ec0bfd93f8 This module has a poor name, since it can be used under FreeBSD and
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 14057
diff changeset
41
62ec0bfd93f8 This module has a poor name, since it can be used under FreeBSD and
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 14057
diff changeset
42 #endif
62ec0bfd93f8 This module has a poor name, since it can be used under FreeBSD and
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 14057
diff changeset
43
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 typedef struct {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
45 PyObject_HEAD;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
46 int x_fd; /* The open file */
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
47 int x_icount; /* Input count */
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
48 int x_ocount; /* Output count */
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
49 uint32_t x_afmts; /* Supported audio formats */
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 } lad_t;
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
51
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 static struct {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
53 int a_bps;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
54 uint32_t a_fmt;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 } audio_types[] = {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
56 { 8, AFMT_MU_LAW },
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
57 { 8, AFMT_U8 },
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
58 { 8, AFMT_S8 },
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
59 { 16, AFMT_U16_BE },
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
60 { 16, AFMT_U16_LE },
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
61 { 16, AFMT_S16_BE },
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
62 { 16, AFMT_S16_LE },
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 };
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
64
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
65
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 staticforward PyTypeObject Ladtype;
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
67
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 static PyObject *LinuxAudioError;
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
69
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 static lad_t *
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 newladobject(PyObject *arg)
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
73 lad_t *xp;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
74 int fd, afmts, imode;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
75 char *mode;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
76 char *basedev;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
77
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
78 /* Check arg for r/w/rw */
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
79 if (!PyArg_ParseTuple(arg, "s:open", &mode)) return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
80 if (strcmp(mode, "r") == 0)
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
81 imode = 0;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
82 else if (strcmp(mode, "w") == 0)
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
83 imode = 1;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
84 else {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
85 PyErr_SetString(LinuxAudioError, "Mode should be one of 'r', or 'w'");
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
86 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
87 }
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
88
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
89 /* Open the correct device. The base device name comes from the
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
90 * AUDIODEV environment variable first, then /dev/audio. The
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
91 * control device tacks "ctl" onto the base device name.
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
92 */
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
93 basedev = getenv("AUDIODEV");
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
94 if (!basedev)
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
95 basedev = "/dev/dsp";
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
96
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
97 if ((fd = open(basedev, imode)) < 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
98 PyErr_SetFromErrnoWithFilename(LinuxAudioError, basedev);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
99 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
100 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
101 if (imode && ioctl(fd, SNDCTL_DSP_NONBLOCK, NULL) < 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
102 PyErr_SetFromErrnoWithFilename(LinuxAudioError, basedev);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
103 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
104 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
105 if (ioctl(fd, SNDCTL_DSP_GETFMTS, &afmts) < 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
106 PyErr_SetFromErrnoWithFilename(LinuxAudioError, basedev);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
107 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
108 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
109 /* Create and initialize the object */
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
110 if ((xp = PyObject_New(lad_t, &Ladtype)) == NULL) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
111 close(fd);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
112 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
113 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
114 xp->x_fd = fd;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
115 xp->x_icount = xp->x_ocount = 0;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
116 xp->x_afmts = afmts;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
117 return xp;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 }
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
119
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 static void
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 lad_dealloc(lad_t *xp)
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 {
14057
ca8dc1bae67d lad_dealloc(): if xp->x_fd == -1, it means the descriptor's already
Barry Warsaw <barry@python.org>
parents: 13651
diff changeset
123 /* if already closed, don't reclose it */
ca8dc1bae67d lad_dealloc(): if xp->x_fd == -1, it means the descriptor's already
Barry Warsaw <barry@python.org>
parents: 13651
diff changeset
124 if (xp->x_fd != -1)
ca8dc1bae67d lad_dealloc(): if xp->x_fd == -1, it means the descriptor's already
Barry Warsaw <barry@python.org>
parents: 13651
diff changeset
125 close(xp->x_fd);
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
126 PyObject_Del(xp);
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 }
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
128
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 static PyObject *
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 lad_read(lad_t *self, PyObject *args)
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
131 {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
132 int size, count;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
133 char *cp;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
134 PyObject *rv;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
135
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
136 if (!PyArg_ParseTuple(args, "i:read", &size))
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
137 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
138 rv = PyString_FromStringAndSize(NULL, size);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
139 if (rv == NULL)
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
140 return NULL;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
141
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
142 if (!(cp = PyString_AsString(rv))) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
143 Py_DECREF(rv);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
144 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
145 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
146 if ((count = read(self->x_fd, cp, size)) < 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
147 PyErr_SetFromErrno(LinuxAudioError);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
148 Py_DECREF(rv);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
149 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
150 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
151 self->x_icount += count;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
152 return rv;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 }
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
154
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
155 static PyObject *
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
156 lad_write(lad_t *self, PyObject *args)
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
157 {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
158 char *cp;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
159 int rv, size;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
160
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
161 if (!PyArg_ParseTuple(args, "s#:write", &cp, &size)) return NULL;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
162
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
163 while (size > 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
164 if ((rv = write(self->x_fd, cp, size)) < 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
165 PyErr_SetFromErrno(LinuxAudioError);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
166 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
167 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
168 self->x_ocount += rv;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
169 size -= rv;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
170 cp += rv;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
171 }
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
172 Py_INCREF(Py_None);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
173 return Py_None;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
174 }
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
175
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
176 static PyObject *
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
177 lad_close(lad_t *self, PyObject *args)
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
178 {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
179 if (!PyArg_ParseTuple(args, ":close")) return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
180 if (self->x_fd >= 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
181 close(self->x_fd);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
182 self->x_fd = -1;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
183 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
184 Py_INCREF(Py_None);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
185 return Py_None;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
186 }
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
187
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
188 static PyObject *
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 lad_fileno(lad_t *self, PyObject *args)
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
190 {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
191 if (!PyArg_ParseTuple(args, ":fileno")) return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
192 return PyInt_FromLong(self->x_fd);
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
193 }
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
194
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
195 static PyObject *
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
196 lad_setparameters(lad_t *self, PyObject *args)
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
197 {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
198 int rate, ssize, nchannels, stereo, n, fmt;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
199
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
200 if (!PyArg_ParseTuple(args, "iiii:setparameters",
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
201 &rate, &ssize, &nchannels, &fmt))
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
202 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
203
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
204 if (rate < 0 || ssize < 0 || (nchannels != 1 && nchannels != 2)) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
205 PyErr_SetFromErrno(LinuxAudioError);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
206 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
207 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
208 if (ioctl(self->x_fd, SOUND_PCM_WRITE_RATE, &rate) < 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
209 PyErr_SetFromErrno(LinuxAudioError);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
210 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
211 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
212 if (ioctl(self->x_fd, SNDCTL_DSP_SAMPLESIZE, &ssize) < 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
213 PyErr_SetFromErrno(LinuxAudioError);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
214 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
215 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
216 stereo = (nchannels == 1)? 0: (nchannels == 2)? 1: -1;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
217 if (ioctl(self->x_fd, SNDCTL_DSP_STEREO, &stereo) < 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
218 PyErr_SetFromErrno(LinuxAudioError);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
219 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
220 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
221 for (n = 0; n != sizeof(audio_types) / sizeof(audio_types[0]); n++)
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
222 if (fmt == audio_types[n].a_fmt)
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
223 break;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
224
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
225 if (n == sizeof(audio_types) / sizeof(audio_types[0]) ||
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
226 audio_types[n].a_bps != ssize ||
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
227 (self->x_afmts & audio_types[n].a_fmt) == 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
228 PyErr_SetFromErrno(LinuxAudioError);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
229 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
230 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
231 if (ioctl(self->x_fd, SNDCTL_DSP_SETFMT, &audio_types[n].a_fmt) < 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
232 PyErr_SetFromErrno(LinuxAudioError);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
233 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
234 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
235 Py_INCREF(Py_None);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
236 return Py_None;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
237 }
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
238
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
239 static int
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
240 _ssize(lad_t *self, int *nchannels, int *ssize)
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
241 {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
242 int fmt;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
243
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
244 fmt = 0;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
245 if (ioctl(self->x_fd, SNDCTL_DSP_SETFMT, &fmt) < 0)
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
246 return -errno;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
247
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
248 switch (fmt) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
249 case AFMT_MU_LAW:
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
250 case AFMT_A_LAW:
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
251 case AFMT_U8:
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
252 case AFMT_S8:
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
253 *ssize = sizeof(char);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
254 break;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
255 case AFMT_S16_LE:
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
256 case AFMT_S16_BE:
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
257 case AFMT_U16_LE:
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
258 case AFMT_U16_BE:
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
259 *ssize = sizeof(short);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
260 break;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
261 case AFMT_MPEG:
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
262 case AFMT_IMA_ADPCM:
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
263 default:
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
264 return -EOPNOTSUPP;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
265 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
266 *nchannels = 0;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
267 if (ioctl(self->x_fd, SNDCTL_DSP_CHANNELS, nchannels) < 0)
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
268 return -errno;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
269 return 0;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
270 }
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
271
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
272
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
273 /* bufsize returns the size of the hardware audio buffer in number
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
274 of samples */
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
275 static PyObject *
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
276 lad_bufsize(lad_t *self, PyObject *args)
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
277 {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
278 audio_buf_info ai;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
279 int nchannels, ssize;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
280
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
281 if (!PyArg_ParseTuple(args, ":bufsize")) return NULL;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
282
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
283 if (_ssize(self, &nchannels, &ssize) < 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
284 PyErr_SetFromErrno(LinuxAudioError);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
285 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
286 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
287 if (ioctl(self->x_fd, SNDCTL_DSP_GETOSPACE, &ai) < 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
288 PyErr_SetFromErrno(LinuxAudioError);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
289 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
290 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
291 return PyInt_FromLong((ai.fragstotal * ai.fragsize) / (nchannels * ssize));
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
292 }
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
293
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
294 /* obufcount returns the number of samples that are available in the
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
295 hardware for playing */
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
296 static PyObject *
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
297 lad_obufcount(lad_t *self, PyObject *args)
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
298 {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
299 audio_buf_info ai;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
300 int nchannels, ssize;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
301
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
302 if (!PyArg_ParseTuple(args, ":obufcount"))
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
303 return NULL;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
304
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
305 if (_ssize(self, &nchannels, &ssize) < 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
306 PyErr_SetFromErrno(LinuxAudioError);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
307 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
308 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
309 if (ioctl(self->x_fd, SNDCTL_DSP_GETOSPACE, &ai) < 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
310 PyErr_SetFromErrno(LinuxAudioError);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
311 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
312 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
313 return PyInt_FromLong((ai.fragstotal * ai.fragsize - ai.bytes) /
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
314 (ssize * nchannels));
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
315 }
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
316
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
317 /* obufcount returns the number of samples that can be played without
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
318 blocking */
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
319 static PyObject *
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
320 lad_obuffree(lad_t *self, PyObject *args)
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
321 {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
322 audio_buf_info ai;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
323 int nchannels, ssize;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
324
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
325 if (!PyArg_ParseTuple(args, ":obuffree"))
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
326 return NULL;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
327
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
328 if (_ssize(self, &nchannels, &ssize) < 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
329 PyErr_SetFromErrno(LinuxAudioError);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
330 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
331 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
332 if (ioctl(self->x_fd, SNDCTL_DSP_GETOSPACE, &ai) < 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
333 PyErr_SetFromErrno(LinuxAudioError);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
334 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
335 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
336 return PyInt_FromLong(ai.bytes / (ssize * nchannels));
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
337 }
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
338
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
339 /* Flush the device */
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
340 static PyObject *
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
341 lad_flush(lad_t *self, PyObject *args)
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
342 {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
343 if (!PyArg_ParseTuple(args, ":flush")) return NULL;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
344
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
345 if (ioctl(self->x_fd, SNDCTL_DSP_SYNC, NULL) < 0) {
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
346 PyErr_SetFromErrno(LinuxAudioError);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
347 return NULL;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
348 }
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
349 Py_INCREF(Py_None);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
350 return Py_None;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
351 }
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
352
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
353 static PyMethodDef lad_methods[] = {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
354 { "read", (PyCFunction)lad_read, METH_VARARGS },
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
355 { "write", (PyCFunction)lad_write, METH_VARARGS },
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
356 { "setparameters", (PyCFunction)lad_setparameters, METH_VARARGS },
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
357 { "bufsize", (PyCFunction)lad_bufsize, METH_VARARGS },
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
358 { "obufcount", (PyCFunction)lad_obufcount, METH_VARARGS },
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
359 { "obuffree", (PyCFunction)lad_obuffree, METH_VARARGS },
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
360 { "flush", (PyCFunction)lad_flush, METH_VARARGS },
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
361 { "close", (PyCFunction)lad_close, METH_VARARGS },
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
362 { "fileno", (PyCFunction)lad_fileno, METH_VARARGS },
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
363 { NULL, NULL} /* sentinel */
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
364 };
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
365
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
366 static PyObject *
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
367 lad_getattr(lad_t *xp, char *name)
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
368 {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
369 return Py_FindMethod(lad_methods, (PyObject *)xp, name);
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
370 }
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
371
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
372 static PyTypeObject Ladtype = {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
373 PyObject_HEAD_INIT(&PyType_Type)
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
374 0, /*ob_size*/
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
375 "linux_audio_device", /*tp_name*/
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
376 sizeof(lad_t), /*tp_size*/
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
377 0, /*tp_itemsize*/
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
378 /* methods */
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
379 (destructor)lad_dealloc, /*tp_dealloc*/
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
380 0, /*tp_print*/
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
381 (getattrfunc)lad_getattr, /*tp_getattr*/
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
382 0, /*tp_setattr*/
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
383 0, /*tp_compare*/
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
384 0, /*tp_repr*/
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
385 };
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
386
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
387 static PyObject *
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
388 ladopen(PyObject *self, PyObject *args)
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
389 {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
390 return (PyObject *)newladobject(args);
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
391 }
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
392
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
393 static PyMethodDef linuxaudiodev_methods[] = {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
394 { "open", ladopen, METH_VARARGS },
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
395 { 0, 0 },
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
396 };
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
397
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
398 void
13651
8a063423e0b7 Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents: 13543
diff changeset
399 initlinuxaudiodev(void)
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
400 {
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
401 PyObject *m, *d, *x;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
402
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
403 m = Py_InitModule("linuxaudiodev", linuxaudiodev_methods);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
404 d = PyModule_GetDict(m);
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
405
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
406 LinuxAudioError = PyErr_NewException("linuxaudiodev.error", NULL, NULL);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
407 if (LinuxAudioError)
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
408 PyDict_SetItemString(d, "error", LinuxAudioError);
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
409
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
410 x = PyInt_FromLong((long) AFMT_MU_LAW);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
411 if (x == NULL || PyDict_SetItemString(d, "AFMT_MU_LAW", x) < 0)
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
412 goto error;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
413 Py_DECREF(x);
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
414
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
415 x = PyInt_FromLong((long) AFMT_U8);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
416 if (x == NULL || PyDict_SetItemString(d, "AFMT_U8", x) < 0)
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
417 goto error;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
418 Py_DECREF(x);
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
419
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
420 x = PyInt_FromLong((long) AFMT_S8);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
421 if (x == NULL || PyDict_SetItemString(d, "AFMT_S8", x) < 0)
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
422 goto error;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
423 Py_DECREF(x);
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
424
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
425 x = PyInt_FromLong((long) AFMT_U16_BE);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
426 if (x == NULL || PyDict_SetItemString(d, "AFMT_U16_BE", x) < 0)
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
427 goto error;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
428 Py_DECREF(x);
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
429
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
430 x = PyInt_FromLong((long) AFMT_U16_LE);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
431 if (x == NULL || PyDict_SetItemString(d, "AFMT_U16_LE", x) < 0)
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
432 goto error;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
433 Py_DECREF(x);
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
434
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
435 x = PyInt_FromLong((long) AFMT_S16_BE);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
436 if (x == NULL || PyDict_SetItemString(d, "AFMT_S16_BE", x) < 0)
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
437 goto error;
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
438 Py_DECREF(x);
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
439
13427
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
440 x = PyInt_FromLong((long) AFMT_S16_LE);
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
441 if (x == NULL || PyDict_SetItemString(d, "AFMT_S16_LE", x) < 0)
618a7280f6be Add method names to PyArg_ParseTuple() calls for better error messages.
Fred Drake <fdrake@acm.org>
parents: 12576
diff changeset
442 goto error;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
443
14346
5397fdf88ec2 Do the absolute minimal amount of modifications to eradicate
Barry Warsaw <barry@python.org>
parents: 14306
diff changeset
444 error:
14351
ef978520085f Move the Py_DECREF(x) after the error: label so that we don't leak x
Guido van Rossum <guido@python.org>
parents: 14346
diff changeset
445 Py_DECREF(x);
14346
5397fdf88ec2 Do the absolute minimal amount of modifications to eradicate
Barry Warsaw <barry@python.org>
parents: 14306
diff changeset
446 return;
12191
e75ac292ef4c This module's name should be linuxaudio*dev*.c
Guido van Rossum <guido@python.org>
parents:
diff changeset
447 }