From 70f428f7fee28b1876e905de4c6336ec012f1740 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Fri, 20 Feb 2009 22:38:56 +0000 Subject: adjustment to pt svgs --- (limited to 'arch_src/pyalsaaudio-0.2') diff --git a/arch_src/pyalsaaudio-0.2/.svn/README.txt b/arch_src/pyalsaaudio-0.2/.svn/README.txt deleted file mode 100644 index 271a8ce..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/README.txt +++ /dev/null @@ -1,2 +0,0 @@ -This is a Subversion working copy administrative directory. -Visit http://subversion.tigris.org/ for more information. diff --git a/arch_src/pyalsaaudio-0.2/.svn/dir-wcprops b/arch_src/pyalsaaudio-0.2/.svn/dir-wcprops deleted file mode 100644 index 3a0f0d0..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/dir-wcprops +++ /dev/null @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 49 -/svn/Shtoom/!svn/ver/1322/trunk/audio/pyalsaaudio -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/empty-file b/arch_src/pyalsaaudio-0.2/.svn/empty-file deleted file mode 100644 index e69de29..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/empty-file +++ /dev/null diff --git a/arch_src/pyalsaaudio-0.2/.svn/entries b/arch_src/pyalsaaudio-0.2/.svn/entries deleted file mode 100644 index d3f4356..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/entries +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - diff --git a/arch_src/pyalsaaudio-0.2/.svn/format b/arch_src/pyalsaaudio-0.2/.svn/format deleted file mode 100644 index b8626c4..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/format +++ /dev/null @@ -1 +0,0 @@ -4 diff --git a/arch_src/pyalsaaudio-0.2/.svn/prop-base/README.svn-base b/arch_src/pyalsaaudio-0.2/.svn/prop-base/README.svn-base deleted file mode 100644 index dce2c1d..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/prop-base/README.svn-base +++ /dev/null @@ -1 +0,0 @@ -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/prop-base/TODO.svn-base b/arch_src/pyalsaaudio-0.2/.svn/prop-base/TODO.svn-base deleted file mode 100644 index dce2c1d..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/prop-base/TODO.svn-base +++ /dev/null @@ -1 +0,0 @@ -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/prop-base/alsaaudio.c.svn-base b/arch_src/pyalsaaudio-0.2/.svn/prop-base/alsaaudio.c.svn-base deleted file mode 100644 index dce2c1d..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/prop-base/alsaaudio.c.svn-base +++ /dev/null @@ -1 +0,0 @@ -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/prop-base/playbacktest.py.svn-base b/arch_src/pyalsaaudio-0.2/.svn/prop-base/playbacktest.py.svn-base deleted file mode 100644 index dce2c1d..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/prop-base/playbacktest.py.svn-base +++ /dev/null @@ -1 +0,0 @@ -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/prop-base/recordtest.py.svn-base b/arch_src/pyalsaaudio-0.2/.svn/prop-base/recordtest.py.svn-base deleted file mode 100644 index dce2c1d..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/prop-base/recordtest.py.svn-base +++ /dev/null @@ -1 +0,0 @@ -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/prop-base/setup.py.svn-base b/arch_src/pyalsaaudio-0.2/.svn/prop-base/setup.py.svn-base deleted file mode 100644 index dce2c1d..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/prop-base/setup.py.svn-base +++ /dev/null @@ -1 +0,0 @@ -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/props/README.svn-work b/arch_src/pyalsaaudio-0.2/.svn/props/README.svn-work deleted file mode 100644 index dce2c1d..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/props/README.svn-work +++ /dev/null @@ -1 +0,0 @@ -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/props/TODO.svn-work b/arch_src/pyalsaaudio-0.2/.svn/props/TODO.svn-work deleted file mode 100644 index dce2c1d..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/props/TODO.svn-work +++ /dev/null @@ -1 +0,0 @@ -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/props/alsaaudio.c.svn-work b/arch_src/pyalsaaudio-0.2/.svn/props/alsaaudio.c.svn-work deleted file mode 100644 index dce2c1d..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/props/alsaaudio.c.svn-work +++ /dev/null @@ -1 +0,0 @@ -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/props/playbacktest.py.svn-work b/arch_src/pyalsaaudio-0.2/.svn/props/playbacktest.py.svn-work deleted file mode 100644 index dce2c1d..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/props/playbacktest.py.svn-work +++ /dev/null @@ -1 +0,0 @@ -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/props/recordtest.py.svn-work b/arch_src/pyalsaaudio-0.2/.svn/props/recordtest.py.svn-work deleted file mode 100644 index dce2c1d..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/props/recordtest.py.svn-work +++ /dev/null @@ -1 +0,0 @@ -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/props/setup.py.svn-work b/arch_src/pyalsaaudio-0.2/.svn/props/setup.py.svn-work deleted file mode 100644 index dce2c1d..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/props/setup.py.svn-work +++ /dev/null @@ -1 +0,0 @@ -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/text-base/CHANGES.svn-base b/arch_src/pyalsaaudio-0.2/.svn/text-base/CHANGES.svn-base deleted file mode 100644 index 6ce8463..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/text-base/CHANGES.svn-base +++ /dev/null @@ -1,8 +0,0 @@ -VERSION 0.1 -- Initial version - - -VERSION 0.2 -- Many bugfixes related to playback in particular -- Module documentation in the doc subdirectory - diff --git a/arch_src/pyalsaaudio-0.2/.svn/text-base/LICENSE.svn-base b/arch_src/pyalsaaudio-0.2/.svn/text-base/LICENSE.svn-base deleted file mode 100644 index 8aa69f7..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/text-base/LICENSE.svn-base +++ /dev/null @@ -1,54 +0,0 @@ -PyAlsaAudio is released under the same conditions as Python itself. -The original wording of this license can be found below. - - -PSF LICENSE AGREEMENT FOR PYTHON 2.4 ------------------------------------- - -1. This LICENSE AGREEMENT is between the Python Software Foundation -("PSF"), and the Individual or Organization ("Licensee") accessing and -otherwise using Python 2.4 software in source or binary form and its -associated documentation. - -2. Subject to the terms and conditions of this License Agreement, PSF -hereby grants Licensee a nonexclusive, royalty-free, world-wide -license to reproduce, analyze, test, perform and/or display publicly, -prepare derivative works, distribute, and otherwise use Python 2.4 -alone or in any derivative version, provided, however, that PSF's -License Agreement and PSF's notice of copyright, i.e., "Copyright (c) -2001, 2002, 2003, 2004 Python Software Foundation; All Rights Reserved" -are retained in Python 2.4 alone or in any derivative version prepared -by Licensee. - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python 2.4 or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python 2.4. - -4. PSF is making Python 2.4 available to Licensee on an "AS IS" -basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 2.4 WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -2.4 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.4, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any -relationship of agency, partnership, or joint venture between PSF and -Licensee. This License Agreement does not grant permission to use PSF -trademarks or trade name in a trademark sense to endorse or promote -products or services of Licensee, or any third party. - -8. By copying, installing or otherwise using Python 2.4, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - - diff --git a/arch_src/pyalsaaudio-0.2/.svn/text-base/README.svn-base b/arch_src/pyalsaaudio-0.2/.svn/text-base/README.svn-base deleted file mode 100644 index 179cb79..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/text-base/README.svn-base +++ /dev/null @@ -1,55 +0,0 @@ -PyAlsaAudio -=========== - -Author: Casper Wilstrup (cwi@unispeed.dk) - -This package contains wrappers for accessing the ALSA api from Python. It -is currently fairly complete for PCM devices. My next goal is to have -complete mixer supports as well. MIDI sequencer support is low on my -priority list, but volunteers are welcome. - -If you find bugs in the wrappers please notify me on email. Please -don't send bug reports regarding ALSA specifically. There are several -bugs in this api, and those should be reported to the ALSA team - not -me. - -This software is licensed under the PSF license - the same one used -by the majority of the python distribution. Basically you can use it -for anything you wish (even commercial purposes). There is no warranty -whatsoever. - - -Installation -============ - -Note: the wrappers link with the alsasound library alsa (from the alsa-lib -package). Verify that this is installed by looking for /usr/lib/libasound.so -before building. The libasound development files are also neccesary. On debian -and derivatives, this is achieved by installing the alsalib-dev package. - -Naturally you also need to use a kernel with proper ALSA -support. This is the default in Linux kernel 2.6 and later. If you are using -kernel version 2.4 you may need to install the ALSA patches yourself - although -most distributions ship with ALSA kernels. - -To install, execute the following: - $ python setup.py build - -And then as root: - # python setup.py install - - -Using the API -============= -There is a reasonably usefull API documentation included in the module -documentation, which can be found in the doc subdirectory of the source -distribution. - -There are also three example programs included with the source: -'playbacktest.py' which plays back raw sound data read from -stdin - -'recordtest.py' which captures sound from the microphone at writes -it raw to stdout. - -'mixertest.py' which can be used to manipulate the mixers diff --git a/arch_src/pyalsaaudio-0.2/.svn/text-base/TODO.svn-base b/arch_src/pyalsaaudio-0.2/.svn/text-base/TODO.svn-base deleted file mode 100644 index 710a8a3..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/text-base/TODO.svn-base +++ /dev/null @@ -1,3 +0,0 @@ -- Better example code (aplay,arecord,amixer workalike for example) -- Implement MIDI/sequencer support. - diff --git a/arch_src/pyalsaaudio-0.2/.svn/text-base/alsaaudio.c.svn-base b/arch_src/pyalsaaudio-0.2/.svn/text-base/alsaaudio.c.svn-base deleted file mode 100644 index 1828148..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/text-base/alsaaudio.c.svn-base +++ /dev/null @@ -1,1013 +0,0 @@ -/* - * alsaaudio -- Python interface to ALSA (Advanced Linux Sound Architecture). - * The standard audio API for Linux since kernel 2.6 - * - * Contributed by Unispeed A/S (http://www.unispeed.com) - * Author: Casper Wilstup (cwi@unispeed.dk) - * - * License: Python Software Foundation License - * - */ - -#include "Python.h" -#include -#include - -PyDoc_STRVAR(alsaaudio_module_doc, - "This modules provides support for the ALSA audio API.\n" - "\n" - "To control the PCM device, use the PCM class, Mixers\n" - "are controlled using the Mixer class.\n" - "\n" - "The following functions are also provided:\n" - "mixers() -- Return a list of available mixer names\n" - ); - -typedef struct { - PyObject_HEAD; - int pcmtype; - int pcmmode; - char *cardname; - - snd_pcm_t *handle; - - // Configurable parameters - int channels; - int rate; - int format; - snd_pcm_uframes_t periodsize; - int framesize; - -} alsapcm_t; - -typedef struct { - PyObject_HEAD; - - /* Mixer identification */ - char *cardname; - char *controlname; - int controlid; - - /* Capabilities */ - unsigned int volume_cap; - unsigned int switch_cap; - unsigned int pchannels; - unsigned int cchannels; - - /* min and max values for playback and capture volumes */ - long pmin; - long pmax; - long cmin; - long cmax; - snd_mixer_t *handle; - -} alsamixer_t; - -static PyObject *ALSAAudioError; - - -/******************************************/ -/* PCM object wrapper */ -/******************************************/ - -static PyTypeObject ALSAPCMType; - -static int alsapcm_setup(alsapcm_t *self) { - int res,dir; - unsigned int val; - snd_pcm_uframes_t frames; - snd_pcm_hw_params_t *hwparams; - - if (self->handle) { - snd_pcm_close(self->handle); - self->handle = 0; - } - res = snd_pcm_open(&(self->handle),self->cardname,self->pcmtype,self->pcmmode); - if (res < 0) return res; - - /* Allocate a hwparam structure, and fill it in with configuration space */ - snd_pcm_hw_params_alloca(&hwparams); - res = snd_pcm_hw_params_any(self->handle, hwparams); - if (res < 0) return res; - - /* Fill it in with default values. */ - snd_pcm_hw_params_any(self->handle, hwparams); - snd_pcm_hw_params_set_access(self->handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED); - snd_pcm_hw_params_set_format(self->handle, hwparams, self->format); - snd_pcm_hw_params_set_channels(self->handle, hwparams, self->channels); - dir = 0; - snd_pcm_hw_params_set_rate(self->handle, hwparams, self->rate, dir); - snd_pcm_hw_params_set_period_size(self->handle, hwparams, self->periodsize, dir); - snd_pcm_hw_params_set_periods(self->handle,hwparams,4,0); - - /* Write it to the device */ - res = snd_pcm_hw_params(self->handle, hwparams); - if (res) return res; - - /* Query current settings. These may differ from the requested values, - which should therefore be sync'ed with actual values */ - snd_pcm_hw_params_current(self->handle,hwparams); - - snd_pcm_hw_params_get_format(hwparams,&val); self->format = val; - snd_pcm_hw_params_get_channels(hwparams,&val); self->channels = val; - snd_pcm_hw_params_get_rate(hwparams,&val,&dir); self->rate = val; - snd_pcm_hw_params_get_period_size(hwparams,&frames,&dir); self->periodsize = (int) frames; - - self->framesize = self->channels * snd_pcm_hw_params_get_sbits(hwparams)/8; - return res; -} - -static PyObject * -alsapcm_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { - int res; - alsapcm_t *self; - int pcmtype=0; - int pcmmode=0; - char *cardname = "default"; - if (!PyArg_ParseTuple(args,"|iis",&pcmtype,&pcmmode,&cardname)) return NULL; - if (!(self = (alsapcm_t *)PyObject_New(alsapcm_t, &ALSAPCMType))) return NULL; - - if (pcmtype != SND_PCM_STREAM_PLAYBACK && pcmtype != SND_PCM_STREAM_CAPTURE) { - PyErr_SetString(ALSAAudioError, "PCM type must be PCM_PLAYBACK (0) or PCM_CAPTUPE (1)"); - return NULL; - } - if (pcmmode < 0 || pcmmode > SND_PCM_ASYNC) { - PyErr_SetString(ALSAAudioError, "Invalid PCM mode"); - return NULL; - } - self->pcmtype = pcmtype; - self->pcmmode = pcmmode; - self->cardname = strdup(cardname); - - self->channels = 2; - self->rate = 44100; - self->format = SND_PCM_FORMAT_S16_LE; - self->periodsize = 32; - - self->handle = 0; - res = alsapcm_setup(self); - - if (res < 0) { - if (self->handle) { - snd_pcm_close(self->handle); - self->handle = 0; - } - PyErr_SetString(ALSAAudioError, snd_strerror(res)); - return NULL; - } - return (PyObject *)self; -} - -static void alsapcm_dealloc(alsapcm_t *self) { - if (self->handle) { - snd_pcm_drain(self->handle); - snd_pcm_close(self->handle); - } - free(self->cardname); - PyObject_Del(self); -} - -static PyObject * -alsapcm_dumpinfo(alsapcm_t *self, PyObject *args) { - unsigned int val,val2; - int dir; - snd_pcm_uframes_t frames; - snd_pcm_hw_params_t *hwparams; - snd_pcm_hw_params_alloca(&hwparams); - snd_pcm_hw_params_current(self->handle,hwparams); - - - if (!PyArg_ParseTuple(args,"")) return NULL; - - printf("PCM handle name = '%s'\n", snd_pcm_name(self->handle)); - printf("PCM state = %s\n", snd_pcm_state_name(snd_pcm_state(self->handle))); - - snd_pcm_hw_params_get_access(hwparams, (snd_pcm_access_t *) &val); - printf("access type = %s\n", snd_pcm_access_name((snd_pcm_access_t)val)); - - snd_pcm_hw_params_get_format(hwparams, &val); - printf("format = '%s' (%s)\n", - snd_pcm_format_name((snd_pcm_format_t)val), - snd_pcm_format_description((snd_pcm_format_t)val)); - - snd_pcm_hw_params_get_subformat(hwparams, (snd_pcm_subformat_t *)&val); - printf("subformat = '%s' (%s)\n", - snd_pcm_subformat_name((snd_pcm_subformat_t)val), - snd_pcm_subformat_description((snd_pcm_subformat_t)val)); - - snd_pcm_hw_params_get_channels(hwparams, &val); - printf("channels = %d\n", val); - - snd_pcm_hw_params_get_rate(hwparams, &val, &dir); - printf("rate = %d bps\n", val); - - snd_pcm_hw_params_get_period_time(hwparams, &val, &dir); - printf("period time = %d us\n", val); - - snd_pcm_hw_params_get_period_size(hwparams, &frames, &dir); - printf("period size = %d frames\n", (int)frames); - - snd_pcm_hw_params_get_buffer_time(hwparams, &val, &dir); - printf("buffer time = %d us\n", val); - - snd_pcm_hw_params_get_buffer_size(hwparams, (snd_pcm_uframes_t *) &val); - printf("buffer size = %d frames\n", val); - - snd_pcm_hw_params_get_periods(hwparams, &val, &dir); - printf("periods per buffer = %d frames\n", val); - - snd_pcm_hw_params_get_rate_numden(hwparams, &val, &val2); - printf("exact rate = %d/%d bps\n", val, val2); - - val = snd_pcm_hw_params_get_sbits(hwparams); - printf("significant bits = %d\n", val); - - snd_pcm_hw_params_get_tick_time(hwparams, &val, &dir); - printf("tick time = %d us\n", val); - - val = snd_pcm_hw_params_is_batch(hwparams); - printf("is batch = %d\n", val); - - val = snd_pcm_hw_params_is_block_transfer(hwparams); - printf("is block transfer = %d\n", val); - - val = snd_pcm_hw_params_is_double(hwparams); - printf("is double = %d\n", val); - - val = snd_pcm_hw_params_is_half_duplex(hwparams); - printf("is half duplex = %d\n", val); - - val = snd_pcm_hw_params_is_joint_duplex(hwparams); - printf("is joint duplex = %d\n", val); - - val = snd_pcm_hw_params_can_overrange(hwparams); - printf("can overrange = %d\n", val); - - val = snd_pcm_hw_params_can_mmap_sample_resolution(hwparams); - printf("can mmap = %d\n", val); - - val = snd_pcm_hw_params_can_pause(hwparams); - printf("can pause = %d\n", val); - - val = snd_pcm_hw_params_can_resume(hwparams); - printf("can resume = %d\n", val); - - val = snd_pcm_hw_params_can_sync_start(hwparams); - printf("can sync start = %d\n", val); - - Py_INCREF(Py_None); - return Py_None; - -} - -static PyObject * -alsapcm_pcmtype(alsapcm_t *self, PyObject *args) { - if (!PyArg_ParseTuple(args,"")) return NULL; - return PyInt_FromLong(self->pcmtype); -} - -static PyObject * -alsapcm_pcmmode(alsapcm_t *self, PyObject *args) { - if (!PyArg_ParseTuple(args,"")) return NULL; - return PyInt_FromLong(self->pcmmode); -} - -static PyObject * -alsapcm_cardname(alsapcm_t *self, PyObject *args) { - if (!PyArg_ParseTuple(args,"")) return NULL; - return PyString_FromString(self->cardname); -} - -static PyObject * -alsapcm_setchannels(alsapcm_t *self, PyObject *args) { - int channels; - int res; - if (!PyArg_ParseTuple(args,"i",&channels)) return NULL; - self->channels = channels; - res = alsapcm_setup(self); - if (res < 0) { - PyErr_SetString(ALSAAudioError, snd_strerror(res)); - return NULL; - } - return PyInt_FromLong(self->channels); -} - -static PyObject * -alsapcm_setrate(alsapcm_t *self, PyObject *args) { - int rate; - int res; - if (!PyArg_ParseTuple(args,"i",&rate)) return NULL; - self->rate = rate; - res = alsapcm_setup(self); - if (res < 0) { - PyErr_SetString(ALSAAudioError, snd_strerror(res)); - return NULL; - } - return PyInt_FromLong(self->rate); -} - -static PyObject * -alsapcm_setformat(alsapcm_t *self, PyObject *args) { - int format; - int res; - if (!PyArg_ParseTuple(args,"i",&format)) return NULL; - self->format = format; - res = alsapcm_setup(self); - if (res < 0) { - PyErr_SetString(ALSAAudioError, snd_strerror(res)); - return NULL; - } - return PyInt_FromLong(self->format); -} - -static PyObject * -alsapcm_setperiodsize(alsapcm_t *self, PyObject *args) { - int periodsize; - int res; - if (!PyArg_ParseTuple(args,"i",&periodsize)) return NULL; - self->periodsize = periodsize; - res = alsapcm_setup(self); - if (res < 0) { - PyErr_SetString(ALSAAudioError, snd_strerror(res)); - return NULL; - } - return PyInt_FromLong(self->periodsize); -} - - -static PyObject * -alsapcm_read(alsapcm_t *self, PyObject *args) { - int res; - char buffer[8000]; - - if (self->framesize * self->periodsize > 8000) { - PyErr_SetString(ALSAAudioError,"Capture data too large. Try decreasing period size"); - return NULL; - } - - if (!PyArg_ParseTuple(args,"")) return NULL; - if (self->pcmtype != SND_PCM_STREAM_CAPTURE) { - PyErr_SetString(ALSAAudioError,"Cannot read from playback PCM"); - return NULL; - } - - res = snd_pcm_readi(self->handle, buffer, self->periodsize); - if (res == -EPIPE) { - /* EPIPE means overrun */ - snd_pcm_prepare(self->handle); - } - else if (res == -EAGAIN) { - res = 0; - } - else if (res < 0) { - PyErr_SetString(ALSAAudioError,snd_strerror(res)); - return NULL; - } - - return Py_BuildValue("is#",res,buffer,res*self->framesize); -} - -static PyObject *alsapcm_write(alsapcm_t *self, PyObject *args) { - char *data; - int datalen; - int res; - if (!PyArg_ParseTuple(args,"s#",&data,&datalen)) return NULL; - if (datalen%self->framesize) { - PyErr_SetString(ALSAAudioError,"Data size must be a multiple of framesize"); - return NULL; - } - res = snd_pcm_writei(self->handle, data, datalen/self->framesize); - if (res == -EPIPE) { - /* EPIPE means underrun */ - snd_pcm_prepare(self->handle); - snd_pcm_writei(self->handle, data, datalen/self->framesize); - snd_pcm_writei(self->handle, data, datalen/self->framesize); - } - else if (res == -EAGAIN) { - return PyInt_FromLong(0); - } - else if (res < 0) { - PyErr_SetString(ALSAAudioError,snd_strerror(res)); - return NULL; - } - return PyInt_FromLong(res); -} - - -/* ALSA PCM Object Bureaucracy */ - -static PyMethodDef alsapcm_methods[] = { - {"pcmtype", (PyCFunction)alsapcm_pcmtype, METH_VARARGS}, - {"pcmmode", (PyCFunction)alsapcm_pcmmode, METH_VARARGS}, - {"cardname", (PyCFunction)alsapcm_cardname, METH_VARARGS}, - {"setchannels", (PyCFunction)alsapcm_setchannels, METH_VARARGS}, - {"setrate", (PyCFunction)alsapcm_setrate, METH_VARARGS}, - {"setformat", (PyCFunction)alsapcm_setformat, METH_VARARGS}, - {"setperiodsize", (PyCFunction)alsapcm_setperiodsize, METH_VARARGS}, - - {"dumpinfo", (PyCFunction)alsapcm_dumpinfo, METH_VARARGS}, - - {"read", (PyCFunction)alsapcm_read, METH_VARARGS}, - {"write", (PyCFunction)alsapcm_write, METH_VARARGS}, - - {NULL, NULL} -}; - -static PyObject * -alsapcm_getattr(alsapcm_t *self, char *name) { - return Py_FindMethod(alsapcm_methods, (PyObject *)self, name); -} - -static PyTypeObject ALSAPCMType = { - PyObject_HEAD_INIT(&PyType_Type) - 0, /*ob_size*/ - "alsaaudio.pcm", /*tp_name*/ - sizeof(alsapcm_t), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - (destructor) alsapcm_dealloc, /*tp_dealloc*/ - 0, /*print*/ - (getattrfunc)alsapcm_getattr, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - "ALSA PCM device", /*tp_doc*/ -}; - - -/******************************************/ -/* Mixer object wrapper */ -/******************************************/ - -static PyTypeObject ALSAMixerType; - -#define MIXER_CAP_VOLUME 0x0001 -#define MIXER_CAP_VOLUME_JOINED 0x0002 -#define MIXER_CAP_PVOLUME 0x0004 -#define MIXER_CAP_PVOLUME_JOINED 0x0008 -#define MIXER_CAP_CVOLUME 0x0010 -#define MIXER_CAP_CVOLUME_JOINED 0x0020 - -#define MIXER_CAP_SWITCH 0x0001 -#define MIXER_CAP_SWITCH_JOINED 0x0002 -#define MIXER_CAP_PSWITCH 0x0004 -#define MIXER_CAP_PSWITCH_JOINED 0x0008 -#define MIXER_CAP_CSWITCH 0x0010 -#define MIXER_CAP_CSWITCH_JOINED 0x0020 -#define MIXER_CAP_CSWITCH_EXCLUSIVE 0x0040 - -#define MIXER_CHANNEL_ALL -1 - -int -alsamixer_gethandle(char *cardname, snd_mixer_t **handle) { - int err; - if ((err = snd_mixer_open(handle, 0)) < 0) return err; - if ((err = snd_mixer_attach(*handle, cardname)) < 0) return err; - if ((err = snd_mixer_selem_register(*handle, NULL, NULL)) < 0) return err; - if ((err = snd_mixer_load(*handle)) < 0) return err; - - return 0; -} - -static PyObject * -alsamixer_list(PyObject *self, PyObject *args) { - snd_mixer_t *handle; - snd_mixer_selem_id_t *sid; - snd_mixer_elem_t *elem; - int err; - char *cardname = "default"; - PyObject *result = PyList_New(0); - - if (!PyArg_ParseTuple(args,"|s",&cardname)) return NULL; - - snd_mixer_selem_id_alloca(&sid); - err = alsamixer_gethandle(cardname,&handle); - if (err < 0) { - PyErr_SetString(ALSAAudioError,snd_strerror(err)); - snd_mixer_close(handle); - return NULL; - } - for (elem = snd_mixer_first_elem(handle); elem; elem = snd_mixer_elem_next(elem)) { - PyObject *mixer; - snd_mixer_selem_get_id(elem, sid); - mixer = PyString_FromString(snd_mixer_selem_id_get_name(sid)); - PyList_Append(result,mixer); - Py_DECREF(mixer); - } - snd_mixer_close(handle); - - return result; -} - -static snd_mixer_elem_t * -alsamixer_find_elem(snd_mixer_t *handle, char *control, int id) { - snd_mixer_selem_id_t *sid; - - snd_mixer_selem_id_alloca(&sid); - snd_mixer_selem_id_set_index(sid, id); - snd_mixer_selem_id_set_name(sid, control); - return snd_mixer_find_selem(handle, sid); -} - -static PyObject * -alsamixer_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { - alsamixer_t *self; - int err; - char *cardname = "default"; - char *control = "Master"; - int id = 0; - snd_mixer_elem_t *elem; - int channel; - - if (!PyArg_ParseTuple(args,"|sis",&control,&id,&cardname)) return NULL; - if (!(self = (alsamixer_t *)PyObject_New(alsamixer_t, &ALSAMixerType))) return NULL; - - err = alsamixer_gethandle(cardname,&self->handle); - if (err<0) { - PyErr_SetString(ALSAAudioError,snd_strerror(err)); - return NULL; - } - self->cardname = strdup(cardname); - self->controlname = strdup(control); - self->controlid = id; - - elem = alsamixer_find_elem(self->handle,control,id); - if (!elem) { - char errtext[128]; - sprintf(errtext,"Unable to find mixer control '%s',%i",self->controlname,self->controlid); - snd_mixer_close(self->handle); - PyErr_SetString(ALSAAudioError,errtext); - return NULL; - } - /* Determine mixer capabilities */ - self->volume_cap = self->switch_cap = 0; - if (snd_mixer_selem_has_common_volume(elem)) { - self->volume_cap |= MIXER_CAP_VOLUME; - if (snd_mixer_selem_has_playback_volume_joined(elem)) self->volume_cap |= MIXER_CAP_VOLUME_JOINED; - } - else { - if (snd_mixer_selem_has_playback_volume(elem)) { - self->volume_cap |= MIXER_CAP_PVOLUME; - if (snd_mixer_selem_has_playback_volume_joined(elem)) self->volume_cap |= MIXER_CAP_PVOLUME_JOINED; - } - if (snd_mixer_selem_has_capture_volume(elem)) { - self->volume_cap |= MIXER_CAP_CVOLUME; - if (snd_mixer_selem_has_capture_volume_joined(elem)) self->volume_cap |= MIXER_CAP_CVOLUME_JOINED; - } - } - - if (snd_mixer_selem_has_common_switch(elem)) { - self->switch_cap |= MIXER_CAP_SWITCH; - if (snd_mixer_selem_has_playback_switch_joined(elem)) self->switch_cap |= MIXER_CAP_SWITCH_JOINED; - } - else { - if (snd_mixer_selem_has_playback_switch(elem)) { - self->switch_cap |= MIXER_CAP_PSWITCH; - if (snd_mixer_selem_has_playback_switch_joined(elem)) self->switch_cap |= MIXER_CAP_PSWITCH_JOINED; - } - if (snd_mixer_selem_has_capture_switch(elem)) { - self->switch_cap |= MIXER_CAP_CSWITCH; - if (snd_mixer_selem_has_capture_switch_joined(elem)) self->switch_cap |= MIXER_CAP_CSWITCH_JOINED; - if (snd_mixer_selem_has_capture_switch_exclusive(elem)) self->switch_cap |= MIXER_CAP_CSWITCH_EXCLUSIVE; - } - } - self->pchannels = 0; - if (self->volume_cap | MIXER_CAP_PVOLUME || self->switch_cap | MIXER_CAP_PSWITCH) { - if (snd_mixer_selem_is_playback_mono(elem)) self->pchannels = 1; - else { - for (channel=0; channel <= SND_MIXER_SCHN_LAST; channel++) { - if (snd_mixer_selem_has_playback_channel(elem, channel)) self->pchannels++; - else break; - } - } - } - self->cchannels = 0; - if (self->volume_cap | MIXER_CAP_CVOLUME || self->switch_cap | MIXER_CAP_CSWITCH) { - if (snd_mixer_selem_is_capture_mono(elem)) self->cchannels = 1; - else { - for (channel=0; channel <= SND_MIXER_SCHN_LAST; channel++) { - if (snd_mixer_selem_has_capture_channel(elem, channel)) self->cchannels++; - else break; - } - } - } - snd_mixer_selem_get_playback_volume_range(elem, &self->pmin, &self->pmax); - snd_mixer_selem_get_capture_volume_range(elem, &self->cmin, &self->cmax); - return (PyObject *)self; -} - -static void alsamixer_dealloc(alsamixer_t *self) { - if (self->handle) { - snd_mixer_close(self->handle); - free(self->cardname); - free(self->controlname); - self->handle = 0; - } - PyObject_Del(self); -} - -static PyObject * -alsamixer_cardname(alsamixer_t *self, PyObject *args) { - if (!PyArg_ParseTuple(args,"")) return NULL; - return PyString_FromString(self->cardname); -} - -static PyObject * -alsamixer_mixer(alsamixer_t *self, PyObject *args) { - if (!PyArg_ParseTuple(args,"")) return NULL; - return PyString_FromString(self->controlname); -} - -static PyObject * -alsamixer_mixerid(alsamixer_t *self, PyObject *args) { - if (!PyArg_ParseTuple(args,"")) return NULL; - return PyInt_FromLong(self->controlid); -} - -static PyObject * -alsamixer_volumecap(alsamixer_t *self, PyObject *args) { - PyObject *result; - if (!PyArg_ParseTuple(args,"")) return NULL; - result = PyList_New(0); - if (self->volume_cap&MIXER_CAP_VOLUME) - PyList_Append(result,PyString_FromString("Volume")); - if (self->volume_cap&MIXER_CAP_VOLUME_JOINED) - PyList_Append(result,PyString_FromString("Joined Volume")); - if (self->volume_cap&MIXER_CAP_PVOLUME) - PyList_Append(result,PyString_FromString("Playback Volume")); - if (self->volume_cap&MIXER_CAP_PVOLUME_JOINED) - PyList_Append(result,PyString_FromString("Joined Playback Volume")); - if (self->volume_cap&MIXER_CAP_CVOLUME) - PyList_Append(result,PyString_FromString("Capture Volume")); - if (self->volume_cap&MIXER_CAP_CVOLUME_JOINED) - PyList_Append(result,PyString_FromString("Joined Capture Volume")); - - return result; -} -static PyObject * -alsamixer_switchcap(alsamixer_t *self, PyObject *args) { - PyObject *result; - if (!PyArg_ParseTuple(args,"")) return NULL; - result = PyList_New(0); - if (self->volume_cap&MIXER_CAP_SWITCH) - PyList_Append(result,PyString_FromString("Mute")); - if (self->volume_cap&MIXER_CAP_SWITCH_JOINED) - PyList_Append(result,PyString_FromString("Joined Mute")); - if (self->volume_cap&MIXER_CAP_PSWITCH) - PyList_Append(result,PyString_FromString("Playback Mute")); - if (self->volume_cap&MIXER_CAP_PSWITCH_JOINED) - PyList_Append(result,PyString_FromString("Joined Playback Mute")); - if (self->volume_cap&MIXER_CAP_CSWITCH) - PyList_Append(result,PyString_FromString("Capture Mute")); - if (self->volume_cap&MIXER_CAP_CSWITCH_JOINED) - PyList_Append(result,PyString_FromString("Joined Capture Mute")); - if (self->volume_cap&MIXER_CAP_CSWITCH_EXCLUSIVE) - PyList_Append(result,PyString_FromString("Capture Exclusive")); - return result; -} - -static int alsamixer_getpercentage(long min, long max, long value) { - /* Convert from number in range to percentage */ - int range = max - min; - int tmp; - - if (range == 0) return 0; - value -= min; - tmp = rint((double)value/(double)range * 100); - return tmp; - -} - -static long alsamixer_getphysvolume(long min, long max, int percentage) { - /* Convert from percentage to number in range */ - int range = max - min; - int tmp; - - if (range == 0) return 0; - tmp = rint((double)range * ((double)percentage*.01)) + min; - return tmp; -} - -static PyObject * -alsamixer_getvolume(alsamixer_t *self, PyObject *args) { - snd_mixer_elem_t *elem; - int direction; - int channel; - long ival; - char *dirstr = 0; - PyObject *result; - - if (!PyArg_ParseTuple(args,"|s",&dirstr)) return NULL; - - elem = alsamixer_find_elem(self->handle,self->controlname,self->controlid); - - if (!dirstr) { - if (self->pchannels) direction = 0; - else direction = 1; - } - else if (strcasecmp(dirstr,"playback")==0) direction = 0; - else if (strcasecmp(dirstr,"capture")==0) direction = 1; - else { - PyErr_SetString(ALSAAudioError,"Invalid direction argument for mixer"); - return NULL; - } - result = PyList_New(0); - for (channel = 0; channel <= SND_MIXER_SCHN_LAST; channel++) { - if (direction == 0 && snd_mixer_selem_has_playback_channel(elem, channel)) { - snd_mixer_selem_get_playback_volume(elem, channel, &ival); - PyList_Append(result,PyInt_FromLong(alsamixer_getpercentage(self->pmin,self->pmax,ival))); - } - else if (direction == 1 && snd_mixer_selem_has_capture_channel(elem, channel) - && snd_mixer_selem_has_capture_volume(elem)) { - snd_mixer_selem_get_capture_volume(elem, channel, &ival); - PyList_Append(result,PyInt_FromLong(alsamixer_getpercentage(self->cmin,self->cmax,ival))); - } - } - return result; -} - -static PyObject * -alsamixer_getmute(alsamixer_t *self, PyObject *args) { - snd_mixer_elem_t *elem; - int i; - int ival; - PyObject *result; - if (!PyArg_ParseTuple(args,"")) return NULL; - - elem = alsamixer_find_elem(self->handle,self->controlname,self->controlid); - if (!snd_mixer_selem_has_playback_switch(elem)) { - PyErr_SetString(ALSAAudioError,"Mixer has no mute switch"); - return NULL; - } - result = PyList_New(0); - for (i = 0; i <= SND_MIXER_SCHN_LAST; i++) { - if (snd_mixer_selem_has_playback_channel(elem, i)) { - snd_mixer_selem_get_playback_switch(elem, i, &ival); - PyList_Append(result,PyInt_FromLong(!ival)); - } - } - return result; -} - -static PyObject * -alsamixer_getrec(alsamixer_t *self, PyObject *args) { - snd_mixer_elem_t *elem; - int i; - int ival; - PyObject *result; - if (!PyArg_ParseTuple(args,"")) return NULL; - - elem = alsamixer_find_elem(self->handle,self->controlname,self->controlid); - if (!snd_mixer_selem_has_capture_switch(elem)) { - PyErr_SetString(ALSAAudioError,"Mixer has no record switch"); - return NULL; - } - result = PyList_New(0); - for (i = 0; i <= SND_MIXER_SCHN_LAST; i++) { - if (snd_mixer_selem_has_capture_channel(elem, i)) { - snd_mixer_selem_get_capture_switch(elem, i, &ival); - PyList_Append(result,PyInt_FromLong(!ival)); - } - } - return result; -} - -static PyObject * -alsamixer_setvolume(alsamixer_t *self, PyObject *args) { - snd_mixer_elem_t *elem; - int direction; - int i; - long volume; - int physvolume; - char *dirstr = 0; - int channel = MIXER_CHANNEL_ALL; - int done = 0; - - if (!PyArg_ParseTuple(args,"l|is",&volume,&channel,&dirstr)) return NULL; - if (volume < 0 || volume > 100) { - PyErr_SetString(ALSAAudioError,"Volume must be between 0 and 100"); - return NULL; - } - - elem = alsamixer_find_elem(self->handle,self->controlname,self->controlid); - - if (!dirstr) { - if (self->pchannels) direction = 0; - else direction = 1; - } - else if (strcasecmp(dirstr,"playback")==0) direction = 0; - else if (strcasecmp(dirstr,"capture")==0) direction = 1; - else { - PyErr_SetString(ALSAAudioError,"Invalid direction argument. Use 'playback' or 'capture'"); - return NULL; - } - for (i = 0; i <= SND_MIXER_SCHN_LAST; i++) { - if (channel == -1 || channel == i) { - if (direction == 0 && snd_mixer_selem_has_playback_channel(elem, i)) { - physvolume = alsamixer_getphysvolume(self->pmin,self->pmax,volume); - snd_mixer_selem_set_playback_volume(elem, i, physvolume); - done++; - } - else if (direction == 1 && snd_mixer_selem_has_capture_channel(elem, channel) - && snd_mixer_selem_has_capture_volume(elem)) { - physvolume = alsamixer_getphysvolume(self->cmin,self->cmax,volume); - snd_mixer_selem_set_capture_volume(elem, i, physvolume); - done++; - } - } - } - if(!done) { - PyErr_SetString(ALSAAudioError,"No such channel"); - return NULL; - } - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -alsamixer_setmute(alsamixer_t *self, PyObject *args) { - snd_mixer_elem_t *elem; - int i; - int mute = 0; - int done = 0; - int channel = MIXER_CHANNEL_ALL; - if (!PyArg_ParseTuple(args,"i|i",&mute,&channel)) return NULL; - - elem = alsamixer_find_elem(self->handle,self->controlname,self->controlid); - if (!snd_mixer_selem_has_playback_switch(elem)) { - PyErr_SetString(ALSAAudioError,"Mixer has no mute switch"); - return NULL; - } - for (i = 0; i <= SND_MIXER_SCHN_LAST; i++) { - if (channel == MIXER_CHANNEL_ALL || channel == i) { - if (snd_mixer_selem_has_playback_channel(elem, i)) { - snd_mixer_selem_set_playback_switch(elem, i, !mute); - done++; - } - } - } - if (!done) { - PyErr_SetString(ALSAAudioError,"Invalid channel number"); - return NULL; - } - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject * -alsamixer_setrec(alsamixer_t *self, PyObject *args) { - snd_mixer_elem_t *elem; - int i; - int rec = 0; - int done = 0; - int channel = MIXER_CHANNEL_ALL; - if (!PyArg_ParseTuple(args,"i|i",&rec,&channel)) return NULL; - - elem = alsamixer_find_elem(self->handle,self->controlname,self->controlid); - if (!snd_mixer_selem_has_capture_switch(elem)) { - PyErr_SetString(ALSAAudioError,"Mixer has no record switch"); - return NULL; - } - for (i = 0; i <= SND_MIXER_SCHN_LAST; i++) { - if (channel == MIXER_CHANNEL_ALL || channel == i) { - if (snd_mixer_selem_has_capture_channel(elem, i)) { - snd_mixer_selem_set_playback_switch(elem, i, rec); - done++; - } - } - } - if (!done) { - PyErr_SetString(ALSAAudioError,"Invalid channel number"); - return NULL; - } - Py_INCREF(Py_None); - return Py_None; -} - -static PyMethodDef alsamixer_methods[] = { - {"cardname", (PyCFunction)alsamixer_cardname, METH_VARARGS}, - {"mixer", (PyCFunction)alsamixer_mixer, METH_VARARGS}, - {"mixerid", (PyCFunction)alsamixer_mixerid, METH_VARARGS}, - {"switchcap", (PyCFunction)alsamixer_switchcap, METH_VARARGS}, - {"volumecap", (PyCFunction)alsamixer_volumecap, METH_VARARGS}, - {"getvolume", (PyCFunction)alsamixer_getvolume, METH_VARARGS}, - {"getmute", (PyCFunction)alsamixer_getmute, METH_VARARGS}, - {"getrec", (PyCFunction)alsamixer_getrec, METH_VARARGS}, - {"setvolume", (PyCFunction)alsamixer_setvolume, METH_VARARGS}, - {"setmute", (PyCFunction)alsamixer_setmute, METH_VARARGS}, - {"setrec", (PyCFunction)alsamixer_setrec, METH_VARARGS}, - {NULL, NULL} -}; - - -static PyObject * -alsamixer_getattr(alsapcm_t *self, char *name) { - return Py_FindMethod(alsamixer_methods, (PyObject *)self, name); -} - -static PyTypeObject ALSAMixerType = { - PyObject_HEAD_INIT(&PyType_Type) - 0, /*ob_size*/ - "alsaaudio.mixer", /*tp_name*/ - sizeof(alsamixer_t), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - (destructor) alsamixer_dealloc, /*tp_dealloc*/ - 0, /*print*/ - (getattrfunc)alsamixer_getattr, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - "ALSA Mixer Control", /*tp_doc*/ -}; - - -/******************************************/ -/* Module initialization */ -/******************************************/ - -static PyMethodDef alsaaudio_methods[] = { - { "mixers", alsamixer_list, METH_VARARGS }, - { 0, 0 }, -}; - -#define _EXPORT_INT(mod, name, value) \ - if (PyModule_AddIntConstant(mod, name, (long) value) == -1) return; - -void initalsaaudio(void) { - PyObject *m; - ALSAPCMType.tp_new = alsapcm_new; - ALSAMixerType.tp_new = alsamixer_new; - m = Py_InitModule3("alsaaudio",alsaaudio_methods,alsaaudio_module_doc); - - ALSAAudioError = PyErr_NewException("alsaaudio.ALSAAudioError", NULL, NULL); - if (ALSAAudioError) { - /* Each call to PyModule_AddObject decrefs it; compensate: */ - - Py_INCREF(&ALSAPCMType); - PyModule_AddObject(m,"PCM",(PyObject *)&ALSAPCMType); - - Py_INCREF(&ALSAMixerType); - PyModule_AddObject(m,"Mixer",(PyObject *)&ALSAMixerType); - - Py_INCREF(ALSAAudioError); - PyModule_AddObject(m, "ALSAAudioError", ALSAAudioError); - } - - - _EXPORT_INT(m,"PCM_PLAYBACK",SND_PCM_STREAM_PLAYBACK); - _EXPORT_INT(m,"PCM_CAPTURE",SND_PCM_STREAM_CAPTURE); - - _EXPORT_INT(m,"PCM_NORMAL",0); - _EXPORT_INT(m,"PCM_NONBLOCK",SND_PCM_NONBLOCK); - _EXPORT_INT(m,"PCM_ASYNC",SND_PCM_ASYNC); - - /* PCM Formats */ - _EXPORT_INT(m,"PCM_FORMAT_S8",SND_PCM_FORMAT_S8); - _EXPORT_INT(m,"PCM_FORMAT_U8",SND_PCM_FORMAT_U8); - _EXPORT_INT(m,"PCM_FORMAT_S16_LE",SND_PCM_FORMAT_S16_LE); - _EXPORT_INT(m,"PCM_FORMAT_S16_BE",SND_PCM_FORMAT_S16_BE); - _EXPORT_INT(m,"PCM_FORMAT_U16_LE",SND_PCM_FORMAT_U16_LE); - _EXPORT_INT(m,"PCM_FORMAT_U16_BE",SND_PCM_FORMAT_U16_BE); - _EXPORT_INT(m,"PCM_FORMAT_S24_LE",SND_PCM_FORMAT_S24_LE); - _EXPORT_INT(m,"PCM_FORMAT_S24_BE",SND_PCM_FORMAT_S24_BE); - _EXPORT_INT(m,"PCM_FORMAT_U24_LE",SND_PCM_FORMAT_U24_LE); - _EXPORT_INT(m,"PCM_FORMAT_U24_BE",SND_PCM_FORMAT_U24_BE); - _EXPORT_INT(m,"PCM_FORMAT_S32_LE",SND_PCM_FORMAT_S32_LE); - _EXPORT_INT(m,"PCM_FORMAT_S32_BE",SND_PCM_FORMAT_S32_BE); - _EXPORT_INT(m,"PCM_FORMAT_U32_LE",SND_PCM_FORMAT_U32_LE); - _EXPORT_INT(m,"PCM_FORMAT_U32_BE",SND_PCM_FORMAT_U32_BE); - _EXPORT_INT(m,"PCM_FORMAT_FLOAT_LE",SND_PCM_FORMAT_FLOAT_LE); - _EXPORT_INT(m,"PCM_FORMAT_FLOAT_BE",SND_PCM_FORMAT_FLOAT_BE); - _EXPORT_INT(m,"PCM_FORMAT_FLOAT64_LE",SND_PCM_FORMAT_FLOAT64_LE); - _EXPORT_INT(m,"PCM_FORMAT_FLOAT64_BE",SND_PCM_FORMAT_FLOAT64_BE); - _EXPORT_INT(m,"PCM_FORMAT_MU_LAW",SND_PCM_FORMAT_MU_LAW); - _EXPORT_INT(m,"PCM_FORMAT_A_LAW",SND_PCM_FORMAT_A_LAW); - _EXPORT_INT(m,"PCM_FORMAT_IMA_ADPCM",SND_PCM_FORMAT_IMA_ADPCM); - _EXPORT_INT(m,"PCM_FORMAT_MPEG",SND_PCM_FORMAT_MPEG); - _EXPORT_INT(m,"PCM_FORMAT_GSM",SND_PCM_FORMAT_GSM); - - /* Mixer stuff */ - _EXPORT_INT(m,"MIXER_CHANNEL_ALL",MIXER_CHANNEL_ALL); - -} diff --git a/arch_src/pyalsaaudio-0.2/.svn/text-base/mixertest.py.svn-base b/arch_src/pyalsaaudio-0.2/.svn/text-base/mixertest.py.svn-base deleted file mode 100644 index 642ae10..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/text-base/mixertest.py.svn-base +++ /dev/null @@ -1,88 +0,0 @@ -## mixertest.py -## -## This is an example of using the ALSA mixer API -## -## The script will set the volume or mute switch of the specified Mixer -## depending on command line options. -## -## Examples: -## python mixertest.py # list available mixers -## python mixertest.py Master # show Master mixer settings -## python mixertest.py Master 80 # set the master volume to 80% -## python mixertest.py Master 1,90 # set channel 1 volume to 90% -## python mixertest.py Master mute # mute the master mixer -## python mixertest.py Master unmute # unmute the master mixer - -import alsaaudio -import sys - -if len(sys.argv) == 1: - # Demonstrates how to read the available mixers - print "Available mixer controls:" - for m in alsaaudio.mixers(): - print " '%s'" % m - -if len(sys.argv) == 2: - # Demonstrates how mixer settings are queried. - name = sys.argv[1] - try: - mixer = alsaaudio.Mixer(name) - except alsaaudio.ALSAAudioError: - print "No such mixer" - sys.exit(1) - - print "Mixer name: '%s'"%mixer.mixer() - print "Capabilities",mixer.volumecap()+mixer.switchcap() - volumes = mixer.getvolume() - for i in range(len(volumes)): - print "Channel %i volume: %i%%"%(i,volumes[i]) - - try: - mutes = mixer.getmute() - for i in range(len(mutes)): - if mutes[i]: print "Channel %i is muted"%i - except alsaaudio.ALSAAudioError: - # May not support muting - pass - - try: - recs = mixer.getrec() - for i in range(len(recs)): - if recs[i]: print "Channel %i is recording"%i - except alsaaudio.ALSAAudioError: - # May not support recording - pass - -if (len(sys.argv)) == 3: - # Demonstrates how to set mixer settings - name = sys.argv[1] - try: - mixer = alsaaudio.Mixer(name) - except alsaaudio.ALSAAudioError: - print "No such mixer" - sys.exit(1) - - args = sys.argv[2] - if args in ['mute','unmute']: - # Mute/unmute the mixer - if args == 'mute': mixer.setmute(1) - else: mixer.setmute(0) - sys.exit(0) - if args in ['rec','unrec']: - # Enable/disable recording - if args == 'rec': mixer.setrec(1) - else: mixer.setrec(0) - sys.exit(0) - - - if args.find(',')!=-1: - channel,volume = map(int,args.split(',')) - else: - channel = alsaaudio.MIXER_CHANNEL_ALL - volume = int(args) - # Set volume for specified channel. MIXER_CHANNEL_ALL means set - # volume for all channels - mixer.setvolume(volume,channel) - - - diff --git a/arch_src/pyalsaaudio-0.2/.svn/text-base/playbacktest.py.svn-base b/arch_src/pyalsaaudio-0.2/.svn/text-base/playbacktest.py.svn-base deleted file mode 100644 index 06e0fe9..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/text-base/playbacktest.py.svn-base +++ /dev/null @@ -1,36 +0,0 @@ -## recordtest.py -## -## This is an example of a simple sound playback script. -## -## The script opens an ALSA pcm for sound playback. Set -## various attributes of the device. It then reads data -## from stdin and writes it to the device. -## -## To test it out do the following: -## python recordtest.py > out.raw # talk to the microphone -## python playbacktest.py < out.raw -## -## If you have Gnome, you could also just test by doing something like: -## python playbacktest.py < /usr/share/sounds/gnibbles/laughter.wav -import alsaaudio -import sys -import time - -# Open the device in playback mode. -out = alsaaudio.PCM(alsaaudio.PCM_PLAYBACK) - -# Set attributes: Mono, 8000 Hz, 16 bit little endian frames -out.setchannels(1) -out.setrate(8000) -out.setformat(alsaaudio.PCM_FORMAT_S16_LE) - -# The period size controls the internal number of frames per period. -# The significance of this parameter is documented in the ALSA api. -out.setperiodsize(160) - -loops = 10000 -while loops > 0: - loops -= 1 - # Read data from stdin - data = sys.stdin.read(320) - out.write(data) diff --git a/arch_src/pyalsaaudio-0.2/.svn/text-base/recordtest.py.svn-base b/arch_src/pyalsaaudio-0.2/.svn/text-base/recordtest.py.svn-base deleted file mode 100644 index 216d627..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/text-base/recordtest.py.svn-base +++ /dev/null @@ -1,45 +0,0 @@ -## recordtest.py -## -## This is an example of a simple sound capture script. -## -## The script opens an ALSA pcm forsound capture. Set -## various attributes of the capture, and reads in a loop, -## writing the data to standard out. -## -## To test it out do the following: -## python recordtest.py > out.raw # talk to the microphone -## aplay -r 8000 -f S16_LE -c 1 out.raw - -import alsaaudio -import sys -import time - -# Open the device in nonblocking capture mode. The last argument could -# just as well have been zero for blocking mode. Then we could have -# left out the sleep call in the bottom of the loop -inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE,alsaaudio.PCM_NONBLOCK) - -# Set attributes: Mono, 8000 Hz, 16 bit little endian samples -inp.setchannels(1) -inp.setrate(8000) -inp.setformat(alsaaudio.PCM_FORMAT_S16_LE) - -# The period size controls the internal number of frames per period. -# The significance of this parameter is documented in the ALSA api. -# For our purposes, it is suficcient to know that reads from the device -# will return this many frames. Each frame being 2 bytes long. -# This means that the reads below will return either 320 bytes of data -# or 0 bytes of data. The latter is possible because we are in nonblocking -# mode. -inp.setperiodsize(160) - -loops = 1000000 -while loops > 0: - loops -= 1 - # Read data from device - l,data = inp.read() - - if l: - # actual data read. Write it to stdout - sys.stdout.write(data) - time.sleep(.001) diff --git a/arch_src/pyalsaaudio-0.2/.svn/text-base/setup.py.svn-base b/arch_src/pyalsaaudio-0.2/.svn/text-base/setup.py.svn-base deleted file mode 100644 index d2534a7..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/text-base/setup.py.svn-base +++ /dev/null @@ -1,14 +0,0 @@ -from distutils.core import setup -from distutils.extension import Extension - -setup( - name = "alsaaudio", - version = "0.1", - description = "alsa bindings", - author = "Casper Wilstrup", - author_email="cwi@unispeed.com", - ext_modules=[Extension("alsaaudio",["alsaaudio.c"],libraries=['asound']) - ] - ) - - diff --git a/arch_src/pyalsaaudio-0.2/.svn/wcprops/CHANGES.svn-work b/arch_src/pyalsaaudio-0.2/.svn/wcprops/CHANGES.svn-work deleted file mode 100644 index 6859ec8..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/wcprops/CHANGES.svn-work +++ /dev/null @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/Shtoom/!svn/ver/1585/trunk/audio/pyalsaaudio/CHANGES -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/wcprops/LICENSE.svn-work b/arch_src/pyalsaaudio-0.2/.svn/wcprops/LICENSE.svn-work deleted file mode 100644 index ca474ba..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/wcprops/LICENSE.svn-work +++ /dev/null @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/Shtoom/!svn/ver/1585/trunk/audio/pyalsaaudio/LICENSE -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/wcprops/README.svn-work b/arch_src/pyalsaaudio-0.2/.svn/wcprops/README.svn-work deleted file mode 100644 index 31f6d9b..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/wcprops/README.svn-work +++ /dev/null @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/Shtoom/!svn/ver/1585/trunk/audio/pyalsaaudio/README -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/wcprops/TODO.svn-work b/arch_src/pyalsaaudio-0.2/.svn/wcprops/TODO.svn-work deleted file mode 100644 index 5182281..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/wcprops/TODO.svn-work +++ /dev/null @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/Shtoom/!svn/ver/1585/trunk/audio/pyalsaaudio/TODO -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/wcprops/alsaaudio.c.svn-work b/arch_src/pyalsaaudio-0.2/.svn/wcprops/alsaaudio.c.svn-work deleted file mode 100644 index 00079a1..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/wcprops/alsaaudio.c.svn-work +++ /dev/null @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/Shtoom/!svn/ver/1585/trunk/audio/pyalsaaudio/alsaaudio.c -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/wcprops/mixertest.py.svn-work b/arch_src/pyalsaaudio-0.2/.svn/wcprops/mixertest.py.svn-work deleted file mode 100644 index 45321b3..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/wcprops/mixertest.py.svn-work +++ /dev/null @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/Shtoom/!svn/ver/835/trunk/audio/pyalsaaudio/mixertest.py -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/wcprops/playbacktest.py.svn-work b/arch_src/pyalsaaudio-0.2/.svn/wcprops/playbacktest.py.svn-work deleted file mode 100644 index 5ca8d71..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/wcprops/playbacktest.py.svn-work +++ /dev/null @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/Shtoom/!svn/ver/1585/trunk/audio/pyalsaaudio/playbacktest.py -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/wcprops/recordtest.py.svn-work b/arch_src/pyalsaaudio-0.2/.svn/wcprops/recordtest.py.svn-work deleted file mode 100644 index 53db42e..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/wcprops/recordtest.py.svn-work +++ /dev/null @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/Shtoom/!svn/ver/1585/trunk/audio/pyalsaaudio/recordtest.py -END diff --git a/arch_src/pyalsaaudio-0.2/.svn/wcprops/setup.py.svn-work b/arch_src/pyalsaaudio-0.2/.svn/wcprops/setup.py.svn-work deleted file mode 100644 index f428267..0000000 --- a/arch_src/pyalsaaudio-0.2/.svn/wcprops/setup.py.svn-work +++ /dev/null @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/Shtoom/!svn/ver/820/trunk/audio/pyalsaaudio/setup.py -END diff --git a/arch_src/pyalsaaudio-0.2/debian/changelog b/arch_src/pyalsaaudio-0.2/debian/changelog deleted file mode 100644 index 3d68d40..0000000 --- a/arch_src/pyalsaaudio-0.2/debian/changelog +++ /dev/null @@ -1,44 +0,0 @@ -pyalsaaudio (0.2-1ubuntu1) feisty; urgency=low - - [ Cesare Tirabassi ] - * Include documentation in package (LP: #81347) - - [ Michael Bienia ] - * debian/control: Change Maintainer/XSBC-Original-Maintainer field. - - -- Michael Bienia Fri, 23 Mar 2007 00:18:10 +0100 - -pyalsaaudio (0.2-1build1) edgy; urgency=low - - * Rebuild to add support for python2.5. - - -- Matthias Klose Fri, 8 Sep 2006 18:26:30 +0000 - -pyalsaaudio (0.2-1) unstable; urgency=low - - * New upstream release - * Add a watch file - * Use debian/examples and debian/docs - * Merge changelog with ubuntu - * Add myself to uploaders field - * Upload to debian (closes: #382796) - - -- Paul Brossier Sun, 13 Aug 2006 17:08:01 +0200 - -pyalsaaudio (0.1-1) unstable; urgency=low - - * Initial release. - - -- Florian Ragwitz Wed, 9 Aug 2006 00:18:33 +0200 - -pyalsaaudio (0.1-1ubuntu1) hoary; urgency=low - - * Upload to hoary with python2.4 support - - -- Thom May Sat, 29 Jan 2005 12:47:04 +0000 - -pyalsaaudio (0.1-1) unstable; urgency=low - - * First upload. - - -- Thom May Fri, 07 Jan 2005 19:19:49 +0000 diff --git a/arch_src/pyalsaaudio-0.2/debian/compat b/arch_src/pyalsaaudio-0.2/debian/compat deleted file mode 100644 index 7ed6ff8..0000000 --- a/arch_src/pyalsaaudio-0.2/debian/compat +++ /dev/null @@ -1 +0,0 @@ -5 diff --git a/arch_src/pyalsaaudio-0.2/debian/control b/arch_src/pyalsaaudio-0.2/debian/control deleted file mode 100644 index 4472b72..0000000 --- a/arch_src/pyalsaaudio-0.2/debian/control +++ /dev/null @@ -1,16 +0,0 @@ -Source: pyalsaaudio -Section: sound -Priority: optional -Maintainer: Ubuntu MOTU Developers -XSBC-Original-Maintainer: Florian Ragwitz -Uploaders: Paul Brossier -Build-Depends: debhelper (>= 5.0.37.2), python-all-dev (>= 2.3.5-11), python-support (>= 0.3), libasound2-dev -XS-Python-Version: all -Standards-Version: 3.7.2 - -Package: python-alsaaudio -Architecture: any -Depends: ${python:Depends}, ${shlibs:Depends}, ${misc:Depends} -XB-Python-Version: ${python:Versions} -Description: Alsa bindings for Python - The PyAlsaAudio package contains bindings for the ALSA sound api. diff --git a/arch_src/pyalsaaudio-0.2/debian/copyright b/arch_src/pyalsaaudio-0.2/debian/copyright deleted file mode 100644 index d4459e9..0000000 --- a/arch_src/pyalsaaudio-0.2/debian/copyright +++ /dev/null @@ -1,67 +0,0 @@ -This package was first debianized by Thom May on Fri, 07 Jan -2005 19:19:49 +0000. - -This package was refactored to the new python policy by Florian Ragwitz - on Wed, 09 Aug 2006 01:00:49 +0200. - -Copyright holder: Casper Wilstrup - -Upstream author: Casper Wilstrup - -License: - -From the README: -This software is licensed under the PSF license - the same one used -by the majority of the python distribution. Basically you can use it -for anything you wish (even commercial purposes). There is no warranty -whatsoever. - -PSF LICENSE AGREEMENT FOR PYTHON 2.3 ------------------------------------- - -1. This LICENSE AGREEMENT is between the Python Software Foundation -("PSF"), and the Individual or Organization ("Licensee") accessing and -otherwise using Python 2.3 software in source or binary form and its -associated documentation. - -2. Subject to the terms and conditions of this License Agreement, PSF -hereby grants Licensee a nonexclusive, royalty-free, world-wide -license to reproduce, analyze, test, perform and/or display publicly, -prepare derivative works, distribute, and otherwise use Python 2.3 -alone or in any derivative version, provided, however, that PSF's -License Agreement and PSF's notice of copyright, i.e., "Copyright (c) -2001, 2002 Python Software Foundation; All Rights Reserved" are -retained in Python 2.3 alone or in any derivative version prepared by -Licensee. - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python 2.3 or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python 2.3. - -4. PSF is making Python 2.3 available to Licensee on an "AS IS" -basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 2.3 WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -2.3 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.3, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any -relationship of agency, partnership, or joint venture between PSF and -Licensee. This License Agreement does not grant permission to use PSF -trademarks or trade name in a trademark sense to endorse or promote -products or services of Licensee, or any third party. - -8. By copying, installing or otherwise using Python 2.3, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - diff --git a/arch_src/pyalsaaudio-0.2/debian/docs b/arch_src/pyalsaaudio-0.2/debian/docs deleted file mode 100644 index dc83c22..0000000 --- a/arch_src/pyalsaaudio-0.2/debian/docs +++ /dev/null @@ -1,33 +0,0 @@ -README -TODO -doc/about.html -doc/blank.gif -doc/blank.png -doc/contents.gif -doc/contents.html -doc/contents.png -doc/front.html -doc/index.dat -doc/index.gif -doc/index.html -doc/index.png -doc/mixer-objects.html -doc/module-alsaaudio.html -doc/modules.gif -doc/modules.png -doc/next.gif -doc/next.png -doc/node3.html -doc/node4.html -doc/node5.html -doc/node7.html -doc/pcm-example.html -doc/pcm-objects.html -doc/previous.gif -doc/previous.png -doc/pyalsaaudio.css -doc/pyalsaaudio.html -doc/pyfav.gif -doc/pyfav.png -doc/up.gif -doc/up.png diff --git a/arch_src/pyalsaaudio-0.2/debian/examples b/arch_src/pyalsaaudio-0.2/debian/examples deleted file mode 100644 index 2cc55bb..0000000 --- a/arch_src/pyalsaaudio-0.2/debian/examples +++ /dev/null @@ -1,4 +0,0 @@ -mixertest.py -playbacktest.py -recordtest.py -test.py diff --git a/arch_src/pyalsaaudio-0.2/debian/pycompat b/arch_src/pyalsaaudio-0.2/debian/pycompat deleted file mode 100644 index 0cfbf08..0000000 --- a/arch_src/pyalsaaudio-0.2/debian/pycompat +++ /dev/null @@ -1 +0,0 @@ -2 diff --git a/arch_src/pyalsaaudio-0.2/debian/rules b/arch_src/pyalsaaudio-0.2/debian/rules deleted file mode 100755 index e7c42c8..0000000 --- a/arch_src/pyalsaaudio-0.2/debian/rules +++ /dev/null @@ -1,55 +0,0 @@ -#! /usr/bin/make -f - -PYDEF=$(shell pyversions -d) -PYVERS=$(shell pyversions -r) - -build: build-stamp -build-stamp: - dh_testdir - set -e; \ - for python in $(PYVERS); do \ - python=$$(echo $$python | sed "s/$(PYDEF)/python/"); \ - $$python setup.py build; \ - done - touch build-stamp - -clean: - dh_testdir - for python in $(PYVERS); do \ - python=$$(echo $$python | sed "s/$(PYDEF)/python/"); \ - $$python setup.py clean; \ - done - rm -rf build build-stamp - dh_clean - -install: build - dh_testdir - dh_testroot - dh_clean -k - set -e; \ - for python in $(PYVERS); do \ - python=$$(echo $$python | sed "s/$(PYDEF)/python/"); \ - $$python setup.py install --root=$(CURDIR)/debian/python-alsaaudio --no-compile; \ - done - -binary-indep: build install - # nothing to do here - -binary-arch: build install - dh_testdir - dh_testroot - dh_installdocs - dh_installchangelogs - dh_installexamples - dh_strip - dh_compress - dh_fixperms - dh_pysupport - dh_python - dh_installdeb - dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb - -binary: binary-arch binary-indep diff --git a/arch_src/pyalsaaudio-0.2/debian/watch b/arch_src/pyalsaaudio-0.2/debian/watch deleted file mode 100644 index 63fdc1d..0000000 --- a/arch_src/pyalsaaudio-0.2/debian/watch +++ /dev/null @@ -1,2 +0,0 @@ -version=3 -http://sf.net/pyalsaaudio/pyalsaaudio-(.*)\.tgz debian uupdate -- cgit v0.9.1