src/sound.c

Tue, 22 Aug 2000 00:37:01 +0000

author
Eric Warmenhoven <warmenhoven@yahoo.com>
date
Tue, 22 Aug 2000 00:37:01 +0000
changeset 736
0e380859da63
parent 668
ec2f81e3c95a
child 775
8950e039f4cf
permissions
-rw-r--r--

[gaim-migrate @ 746]
Eric the Lumberjack continues to hack away at the tree. When people ask
what kinds of trees Eric hacks, he simply replied "CVS trees. They're
mostly used for computer stuff". Then the ignorants go away, thinking
they have been enlightened into the world of computers, which unknowingly
they have been.

1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1 /*
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2 * gaim
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
5 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
9 * (at your option) any later version.
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
10 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
14 * GNU General Public License for more details.
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
15 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
19 *
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
20 */
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
21
349
6f7d28b0f98d [gaim-migrate @ 359]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 338
diff changeset
22 #ifdef HAVE_CONFIG_H
6f7d28b0f98d [gaim-migrate @ 359]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 338
diff changeset
23 #include "../config.h"
6f7d28b0f98d [gaim-migrate @ 359]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 338
diff changeset
24 #endif
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
25 #include <stdio.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
26 #include <string.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
27 #include <sys/time.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
28 #include <unistd.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
29 #include <gtk/gtk.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
30 #include <fcntl.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
31 #include <sys/wait.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
32 #include <sys/signal.h>
63
6235c767fa20 [gaim-migrate @ 73]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1
diff changeset
33 #include <unistd.h>
6235c767fa20 [gaim-migrate @ 73]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1
diff changeset
34 #include <sys/types.h>
6235c767fa20 [gaim-migrate @ 73]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1
diff changeset
35 #include <sys/stat.h>
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
36
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
37 #ifdef ESD_SOUND
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
38 #include <esd.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
39 #endif
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
40
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
41 #ifdef NAS_SOUND
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
42 #include <audio/audiolib.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
43 #endif
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
44
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
45 #include "gaim.h"
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
46 #include "sounds/BuddyArrive.h"
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
47 #include "sounds/BuddyLeave.h"
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
48 #include "sounds/Send.h"
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
49 #include "sounds/Receive.h"
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
50
655
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
51 static int check_dev(char *dev)
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
52 {
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
53 struct stat stat_buf;
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
54 uid_t user = getuid();
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
55 gid_t group = getgid();
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
56 if (stat(dev, &stat_buf))
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
57 return 0;
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
58 if (user == stat_buf.st_uid && stat_buf.st_mode & S_IWUSR)
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
59 return 1;
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
60 if (group == stat_buf.st_gid && stat_buf.st_mode & S_IWGRP)
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
61 return 1;
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
62 if (stat_buf.st_mode & S_IWOTH)
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
63 return 1;
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
64 return 0;
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
65 }
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
66
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
67
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
68 static void play_audio(char *data, int size)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
69 {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
70 int fd;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
71
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
72 fd = open("/dev/audio", O_WRONLY | O_EXCL);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
73 if (fd < 0)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
74 return;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
75 write(fd, data, size);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
76 close(fd);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
77 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
78
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
79 static int can_play_audio()
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
80 {
655
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
81 return check_dev("/dev/audio");
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
82 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
83
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
84
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
85 #ifdef ESD_SOUND
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
86 /*
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
87 ** This routine converts from ulaw to 16 bit linear.
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
88 **
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
89 ** Craig Reese: IDA/Supercomputing Research Center
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
90 ** 29 September 1989
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
91 **
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
92 ** References:
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
93 ** 1) CCITT Recommendation G.711 (very difficult to follow)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
94 ** 2) MIL-STD-188-113,"Interoperability and Performance Standards
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
95 ** for Analog-to_Digital Conversion Techniques,"
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
96 ** 17 February 1987
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
97 **
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
98 ** Input: 8 bit ulaw sample
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
99 ** Output: signed 16 bit linear sample
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
100 ** Z-note -- this is from libaudiofile. Thanks guys!
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
101 */
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
102
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
103 int _af_ulaw2linear (unsigned char ulawbyte)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
104 {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
105 static int exp_lut[8] = {0,132,396,924,1980,4092,8316,16764};
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
106 int sign, exponent, mantissa, sample;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
107
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
108 ulawbyte = ~ulawbyte;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
109 sign = (ulawbyte & 0x80);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
110 exponent = (ulawbyte >> 4) & 0x07;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
111 mantissa = ulawbyte & 0x0F;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
112 sample = exp_lut[exponent] + (mantissa << (exponent + 3));
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
113 if (sign != 0) sample = -sample;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
114
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
115 return(sample);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
116 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
117
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
118
354
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
119 int esd_fd;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
120
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
121 static int play_esd(unsigned char *data, int size)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
122 {
354
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
123 int i;
79
d0d0ecf6fc03 [gaim-migrate @ 89]
G Sumner Hayes
parents: 64
diff changeset
124 guint16 *lineardata;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
125
79
d0d0ecf6fc03 [gaim-migrate @ 89]
G Sumner Hayes
parents: 64
diff changeset
126 lineardata = g_malloc(size * 2);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
127
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
128 for (i=0; i<size; i++)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
129 lineardata[i] = _af_ulaw2linear(data[i]);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
130
354
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
131 write(esd_fd, lineardata, size * 2);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
132
354
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
133 close(esd_fd);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
134 g_free(lineardata);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
135
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
136 return 1;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
137
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
138 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
139
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
140 static int can_play_esd()
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
141 {
354
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
142 esd_format_t format = ESD_BITS16 | ESD_STREAM | ESD_PLAY | ESD_MONO;
655
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
143
354
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
144 esd_fd = esd_play_stream(format, 8012, NULL, "gaim");
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
145
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
146 if (esd_fd < 0) {
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
147 return 0;
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
148 }
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
149
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
150 return 1;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
151 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
152
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
153 #endif
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
154
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
155 #ifdef NAS_SOUND
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
156
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
157 char nas_server[] = "localhost";
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
158 AuServer *nas_serv = NULL;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
159
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
160 static AuBool
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
161 NasEventHandler(AuServer *aud, AuEvent *ev, AuEventHandlerRec *handler)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
162 {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
163 AuElementNotifyEvent *event = (AuElementNotifyEvent *) ev;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
164
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
165 if (ev->type == AuEventTypeElementNotify) {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
166 switch (event->kind) {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
167 case AuElementNotifyKindState:
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
168 switch (event->cur_state) {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
169 case AuStateStop:
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
170 _exit(0);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
171 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
172 break;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
173 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
174 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
175 return AuTrue;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
176 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
177
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
178
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
179 static int play_nas(unsigned char *data, int size)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
180 {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
181 AuDeviceID device = AuNone;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
182 AuFlowID flow;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
183 AuElement elements[3];
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
184 int i, n, w;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
185
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
186 /* look for an output device */
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
187 for (i = 0; i < AuServerNumDevices(nas_serv); i++) {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
188 if ((AuDeviceKind(AuServerDevice(nas_serv, i)) ==
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
189 AuComponentKindPhysicalOutput) &&
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
190 AuDeviceNumTracks(AuServerDevice(nas_serv, i)) == 1) {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
191 device = AuDeviceIdentifier(AuServerDevice(nas_serv, i));
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
192 break;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
193 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
194 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
195
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
196 if (device == AuNone)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
197 return 0;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
198
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
199 if (!(flow = AuCreateFlow(nas_serv, NULL)))
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
200 return 0;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
201
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
202
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
203 AuMakeElementImportClient(&elements[0], 8012, AuFormatULAW8,
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
204 1, AuTrue, size, size/2, 0, NULL);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
205 AuMakeElementExportDevice(&elements[1], 0, device, 8012,
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
206 AuUnlimitedSamples, 0, NULL);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
207 AuSetElements(nas_serv, flow, AuTrue, 2, elements, NULL);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
208
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
209 AuStartFlow(nas_serv, flow, NULL);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
210
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
211 AuWriteElement(nas_serv, flow, 0, size, data, AuTrue, NULL);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
212
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
213 AuRegisterEventHandler(nas_serv, AuEventHandlerIDMask, 0, flow,
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
214 NasEventHandler, NULL);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
215
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
216 while(1) {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
217 AuHandleEvents(nas_serv);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
218 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
219
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
220 return 1;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
221 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
222
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
223 static int can_play_nas()
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
224 {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
225 if ((nas_serv = AuOpenServer(NULL, 0, NULL, 0, NULL, NULL)))
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
226 return 1;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
227 return 0;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
228 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
229
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
230 #endif
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
231
133
418de720c20d [gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 108
diff changeset
232 void play(unsigned char *data, int size)
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
233 {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
234 int pid;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
235
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
236 #ifdef _WIN32
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
237 return;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
238 #endif
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
239
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
240 pid = fork();
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
241
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
242 if (pid < 0)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
243 return;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
244 else if (pid == 0) {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
245 #ifdef ESD_SOUND
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
246 /* ESD is our player of choice. Are we OK to
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
247 * go there? */
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
248 if (can_play_esd()) {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
249 if (play_esd(data, size))
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
250 _exit(0);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
251 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
252 #endif
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
253
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
254 #ifdef NAS_SOUND
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
255 /* NAS is our second choice setup. */
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
256 if (can_play_nas()) {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
257 if (play_nas(data, size))
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
258 _exit(0);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
259 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
260 #endif
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
261
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
262 /* Lastly, we can try just plain old /dev/audio */
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
263 if (can_play_audio()) {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
264 play_audio(data, size);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
265 _exit(0);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
266 }
668
ec2f81e3c95a [gaim-migrate @ 678]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 655
diff changeset
267
ec2f81e3c95a [gaim-migrate @ 678]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 655
diff changeset
268 _exit(0);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
269 } else {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
270 gtk_timeout_add(100, (GtkFunction)clean_pid, NULL);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
271 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
272 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
273
133
418de720c20d [gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 108
diff changeset
274 extern int logins_not_muted;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
275
606
2ec6b09d73c4 [gaim-migrate @ 616]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 451
diff changeset
276 #ifdef USE_GNOME
2ec6b09d73c4 [gaim-migrate @ 616]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 451
diff changeset
277 void gnome_play_sound(int sound)
451
0fc66b68a416 [gaim-migrate @ 461]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 354
diff changeset
278 #else
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
279 void play_sound(int sound)
451
0fc66b68a416 [gaim-migrate @ 461]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 354
diff changeset
280 #endif
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
281 {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
282
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
283 switch(sound) {
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
284 case BUDDY_ARRIVE:
133
418de720c20d [gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 108
diff changeset
285 if ((sound_options & OPT_SOUND_LOGIN) && logins_not_muted)
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
286 play(BuddyArrive, sizeof(BuddyArrive));
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
287 break;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
288 case BUDDY_LEAVE:
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
289 if (sound_options & OPT_SOUND_LOGOUT)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
290 play(BuddyLeave, sizeof(BuddyLeave));
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
291 break;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
292 case SEND:
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
293 if (sound_options & OPT_SOUND_SEND)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
294 play(Send, sizeof(Send));
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
295 break;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
296 case FIRST_RECEIVE:
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
297 if (sound_options & OPT_SOUND_FIRST_RCV)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
298 play(Receive, sizeof(Receive));
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
299 break;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
300 case RECEIVE:
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
301 if (sound_options & OPT_SOUND_RECV)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
302 play(Receive, sizeof(Receive));
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
303 break;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
304 case AWAY:
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
305 if (sound_options & OPT_SOUND_WHEN_AWAY)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
306 play(Receive, sizeof(Receive));
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
307 break;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
308 }
64
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
309 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
310
606
2ec6b09d73c4 [gaim-migrate @ 616]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 451
diff changeset
311 #ifdef USE_GNOME
64
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
312
82
33bc54b6c16a [gaim-migrate @ 92]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 79
diff changeset
313 #include <gnome.h>
451
0fc66b68a416 [gaim-migrate @ 461]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 354
diff changeset
314 void play_sound(int sound)
64
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
315 {
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
316
338
21c93bc7ae83 [gaim-migrate @ 348]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 178
diff changeset
317 if (!(sound_options & OPT_SOUND_THROUGH_GNOME)) {
606
2ec6b09d73c4 [gaim-migrate @ 616]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 451
diff changeset
318 gnome_play_sound(sound);
338
21c93bc7ae83 [gaim-migrate @ 348]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 178
diff changeset
319 return;
21c93bc7ae83 [gaim-migrate @ 348]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 178
diff changeset
320 }
21c93bc7ae83 [gaim-migrate @ 348]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 178
diff changeset
321
64
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
322 switch(sound) {
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
323 case BUDDY_ARRIVE:
133
418de720c20d [gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 108
diff changeset
324 if ((sound_options & OPT_SOUND_LOGIN) && logins_not_muted)
606
2ec6b09d73c4 [gaim-migrate @ 616]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 451
diff changeset
325 gnome_triggers_do("", "program", "gaim", "login", NULL);
64
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
326 break;
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
327 case BUDDY_LEAVE:
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
328 if (sound_options & OPT_SOUND_LOGOUT)
606
2ec6b09d73c4 [gaim-migrate @ 616]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 451
diff changeset
329 gnome_triggers_do("", "program", "gaim", "leave", NULL);
64
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
330 break;
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
331 case SEND:
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
332 if (sound_options & OPT_SOUND_SEND)
606
2ec6b09d73c4 [gaim-migrate @ 616]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 451
diff changeset
333 gnome_triggers_do("", "program", "gaim", "send", NULL);
64
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
334 break;
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
335 case FIRST_RECEIVE:
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
336 if (sound_options & OPT_SOUND_FIRST_RCV)
606
2ec6b09d73c4 [gaim-migrate @ 616]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 451
diff changeset
337 gnome_triggers_do("", "program", "gaim", "recv", NULL);
64
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
338 break;
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
339 case RECEIVE:
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
340 if (sound_options & OPT_SOUND_RECV)
606
2ec6b09d73c4 [gaim-migrate @ 616]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 451
diff changeset
341 gnome_triggers_do("", "program", "gaim", "recv", NULL);
64
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
342 break;
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
343 case AWAY:
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
344 if (sound_options & OPT_SOUND_WHEN_AWAY)
606
2ec6b09d73c4 [gaim-migrate @ 616]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 451
diff changeset
345 gnome_triggers_do("", "program", "gaim", "recv", NULL);
64
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
346 break;
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
347 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
348 }
64
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
349
606
2ec6b09d73c4 [gaim-migrate @ 616]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 451
diff changeset
350 #endif /* USE_GNOME */

mercurial