From 21c068f1916330e90f814bed461fe0821d1665ec Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Sun, 9 Oct 2011 16:36:37 +0000 Subject: checked in pd-0.43-0.src.tar.gz svn path=/trunk/; revision=15557 --- pd/src/s_audio_esd.c | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 pd/src/s_audio_esd.c (limited to 'pd/src/s_audio_esd.c') diff --git a/pd/src/s_audio_esd.c b/pd/src/s_audio_esd.c new file mode 100644 index 00000000..eb08815d --- /dev/null +++ b/pd/src/s_audio_esd.c @@ -0,0 +1,135 @@ +/* Copyright (c) 2006 Guenter Geiger, +* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */ + +#ifdef USEAPI_ESD + +#include +#include /* memset */ +#include +#include "m_pd.h" +#include "s_stuff.h" +#include "m_fixed.h" + +/* exported variables */ + +float sys_dacsr; + + +/* private data */ + +static int esd_socket_out; +static int esd_channels_out; + +static int esd_socket_in; +static int esd_channels_in; + + +int esd_open_audio(int nindev, int *indev, int nchin, int *chin, + int noutdev, int *outdev, int nchout, int *chout, int rate) +{ + + esd_format_t format = ESD_BITS16 | ESD_STEREO | ESD_STREAM | ESD_PLAY; + + indev[0] = 0; + nindev = 1; + + outdev[0] = 0; + noutdev = 1; + + rate = sys_dacsr = ESD_DEFAULT_RATE; + + if (*chout == 2) { + esd_socket_out = esd_play_stream_fallback(format, ESD_DEFAULT_RATE, NULL, "pd"); + if (esd_socket_out <= 0) { + fprintf (stderr, "Error at esd open: %d\n", esd_socket_out); + esd_channels_out = *chout = 0; + return 0; + } + esd_channels_out = *chout = 2; + } + + if (*chin == 2) { + esd_socket_in = esd_record_stream_fallback(format, ESD_DEFAULT_RATE, NULL, "pd-in"); + if (esd_socket_in <= 0) { + fprintf (stderr, "Error at esd open: %d\n", esd_socket_in); + esd_channels_in = *chin = 0; + return 0; + } + esd_channels_in = *chin = 2; + } + return (0); +} + +void esd_close_audio( void) +{ + close(esd_socket_out); + close(esd_socket_in); +} + + +#define DEFDACBLKSIZE 64 +#define MAXCHANS 2 + +static short buf[DEFDACBLKSIZE*MAXCHANS]; + +int esd_send_dacs(void) +{ + t_sample* fp1,*fp2; + short* sp; + int i,j; + + /* Do input */ + + if (esd_channels_in) { + read(esd_socket_in,buf,DEFDACBLKSIZE*esd_channels_out*2); + for (i = DEFDACBLKSIZE, fp1 = sys_soundin, + sp = (short *)buf; i--; fp1++, sp += esd_channels_in) { + for (j=0, fp2 = fp1; j 32767) s = 32767; + else if (s < -32767) s = -32767; + sp[j] = s; + } + } + + write(esd_socket_out,buf,DEFDACBLKSIZE*esd_channels_out*2); + } + + memset(sys_soundin,0,DEFDACBLKSIZE*esd_channels_out*2); + memset(sys_soundout,0,DEFDACBLKSIZE*esd_channels_out*4); + + return (SENDDACS_YES); +} + +void esd_listdevs( void) +{ + post("device listing not implemented for ESD yet\n"); +} + +void esd_getdevs(char *indevlist, int *nindevs, + char *outdevlist, int *noutdevs, int *canmulti, + int maxndev, int devdescsize) +{ + int i, ndev; + *canmulti = 1; /* supports multiple devices */ + sprintf(indevlist, "ESD device"); + sprintf(outdevlist, "ESD device"); + *nindevs = *noutdevs = 1; +} + +#endif -- cgit v1.2.1