annotate src/esd.c @ 5518:3cc7470ea71c

gnuclient: if TMPDIR was set and connect failed, try again with /tmp 2011-06-03 Aidan Kehoe <kehoea@parhasard.net> * gnuslib.c (connect_to_unix_server): Retry with /tmp as a directory in which to search for Unix sockets if an attempt to connect with some other directory failed (which may be because gnuclient and gnuserv don't share an environment value for TMPDIR, or because gnuserv was compiled with USE_TMPDIR turned off).
author Aidan Kehoe <kehoea@parhasard.net>
date Fri, 03 Jun 2011 18:40:57 +0100
parents 90dcf2376909
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1 /* esd.c - play a sound over ESD
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
2
5477
90dcf2376909 Last minute notice fixups.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 5402
diff changeset
3 Copyright 1999 Robert Bihlmeyer <robbe@orcus.priv.at>
90dcf2376909 Last minute notice fixups.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 5402
diff changeset
4
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
5 This file is part of XEmacs.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
6
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2367
diff changeset
7 XEmacs is free software: you can redistribute it and/or modify it
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2367
diff changeset
9 Free Software Foundation, either version 3 of the License, or (at your
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2367
diff changeset
10 option) any later version.
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
11
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
15 for more details.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
16
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2367
diff changeset
18 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
19
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
20 /* Synched up with: Not in FSF. */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
21
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 398
diff changeset
22 /* This file Mule-ized by Ben Wing, 5-15-01. */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 398
diff changeset
23
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
24 #include <config.h>
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 398
diff changeset
25 #include "lisp.h"
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
26
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
27 #include "miscplay.h"
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 398
diff changeset
28 #include "sound.h"
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 398
diff changeset
29
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 398
diff changeset
30 #include "sysfile.h"
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
31
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
32 #include <esd.h>
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
33
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
34
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
35 /* the name given to ESD - I think this should identify ourselves */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
36 #define ESD_NAME "xemacs"
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
37
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 398
diff changeset
38 int esd_play_sound_file (Extbyte *file, int vol);
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 564
diff changeset
39 int
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1261
diff changeset
40 esd_play_sound_file (Extbyte *file, int UNUSED (vol))
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
41 { /* #### FIXME: vol is ignored */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
42 return esd_play_file(ESD_NAME, file, 0);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
43 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
44
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
45 int esd_play_sound_data (Binbyte *data, size_t length, int vol);
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 564
diff changeset
46 int
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
47 esd_play_sound_data (Binbyte *data, size_t length, int UNUSED (vol))
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
48 { /* #### FIXME: vol is ignored */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
49 size_t (*parsesndfile)(void **dayta,size_t *sz,void **outbuf);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
50 size_t (*sndcnv)(void **dayta,size_t *sz,void **);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
51 fmtType ffmt;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
52 int fmt,speed,tracks;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
53 unsigned char *pptr,*optr,*cptr,*sptr;
1261
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 609
diff changeset
54 Bytecount wrtn, crtn;
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
55 size_t prtn;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
56 int flags, sock;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
57
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
58 /* analyze_format needs at least this many bytes to work with */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
59 if (length < HEADERSZ)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
60 return 0;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
61
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
62 ffmt = analyze_format(data,&fmt,&speed,&tracks,&parsesndfile);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
63
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
64 if (ffmt != fmtRaw && ffmt != fmtSunAudio && ffmt != fmtWave) {
564
001628b7a5b3 [xemacs-hg @ 2001-05-24 09:37:25 by yoshiki]
yoshiki
parents: 563
diff changeset
65 sound_warn("Unsupported file format (neither RAW, nor Sun/DECAudio, nor WAVE)");
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
66 return 0;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
67 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
68
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
69 /* convert header information into ESD flags */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
70 flags = ESD_STREAM|ESD_PLAY;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
71 sndcnv = sndcnvnop;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
72 switch (fmt)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
73 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
74 case AFMT_MU_LAW:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
75 sndcnv = sndcnvULaw_2linear;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
76 flags |= ESD_BITS8;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
77 break;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
78 case AFMT_S8:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
79 sndcnv = sndcnv2unsigned; /* ESD needs unsigned bytes */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
80 case AFMT_U8:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
81 flags |= ESD_BITS8;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
82 break;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
83 case AFMT_S16_BE:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
84 sndcnv = sndcnv16swap; /* ESD wants little endian */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
85 case AFMT_S16_LE:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
86 flags |= ESD_BITS16;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
87 break;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
88 default:
564
001628b7a5b3 [xemacs-hg @ 2001-05-24 09:37:25 by yoshiki]
yoshiki
parents: 563
diff changeset
89 {
001628b7a5b3 [xemacs-hg @ 2001-05-24 09:37:25 by yoshiki]
yoshiki
parents: 563
diff changeset
90 Extbyte warn_buf[255];
001628b7a5b3 [xemacs-hg @ 2001-05-24 09:37:25 by yoshiki]
yoshiki
parents: 563
diff changeset
91 sprintf (warn_buf, "byte format %d unimplemented", fmt);
001628b7a5b3 [xemacs-hg @ 2001-05-24 09:37:25 by yoshiki]
yoshiki
parents: 563
diff changeset
92 sound_warn (warn_buf);
001628b7a5b3 [xemacs-hg @ 2001-05-24 09:37:25 by yoshiki]
yoshiki
parents: 563
diff changeset
93 return 0;
001628b7a5b3 [xemacs-hg @ 2001-05-24 09:37:25 by yoshiki]
yoshiki
parents: 563
diff changeset
94 }
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
95 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
96 switch (tracks)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
97 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
98 case 1: flags |= ESD_MONO; break;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
99 case 2: flags |= ESD_STEREO; break;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
100 default:
564
001628b7a5b3 [xemacs-hg @ 2001-05-24 09:37:25 by yoshiki]
yoshiki
parents: 563
diff changeset
101 {
001628b7a5b3 [xemacs-hg @ 2001-05-24 09:37:25 by yoshiki]
yoshiki
parents: 563
diff changeset
102 Extbyte warn_buf[255];
001628b7a5b3 [xemacs-hg @ 2001-05-24 09:37:25 by yoshiki]
yoshiki
parents: 563
diff changeset
103 sprintf (warn_buf, "%d channels - only 1 or 2 supported", tracks);
001628b7a5b3 [xemacs-hg @ 2001-05-24 09:37:25 by yoshiki]
yoshiki
parents: 563
diff changeset
104 sound_warn (warn_buf);
001628b7a5b3 [xemacs-hg @ 2001-05-24 09:37:25 by yoshiki]
yoshiki
parents: 563
diff changeset
105 return 0;
001628b7a5b3 [xemacs-hg @ 2001-05-24 09:37:25 by yoshiki]
yoshiki
parents: 563
diff changeset
106 }
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
107 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
108
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
109 sock = esd_play_stream(flags, speed, NULL, "xemacs");
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
110 if (sock < 0)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
111 return 0;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
112
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
113 reset_parsestate();
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
114
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
115 for (pptr = data; (prtn = parsesndfile((void **)&pptr,&length,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
116 (void **)&optr)) > 0; )
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
117 for (cptr = optr; (crtn = sndcnv((void **)&cptr,&prtn,
1261
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 609
diff changeset
118 (void **)&sptr)) > 0; )
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 609
diff changeset
119 {
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 609
diff changeset
120 if ((wrtn = write(sock,sptr,crtn)) < 0)
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 609
diff changeset
121 {
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 609
diff changeset
122 sound_perror ("write error");
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 609
diff changeset
123 goto END_OF_PLAY;
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 609
diff changeset
124 }
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 609
diff changeset
125 if (wrtn != crtn)
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 609
diff changeset
126 {
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 609
diff changeset
127 Extbyte warn_buf[255];
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 609
diff changeset
128 sprintf (warn_buf, "only wrote %ld of %ld bytes", wrtn, crtn);
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 609
diff changeset
129 sound_warn (warn_buf);
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 609
diff changeset
130 goto END_OF_PLAY;
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 609
diff changeset
131 }
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
132 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
133
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
134 if (ffmt == fmtWave)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
135 parse_wave_complete();
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
136
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
137 END_OF_PLAY:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
138 /* Now cleanup all used resources */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
139
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
140 close(sock);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
141 return 1;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
142 }