src/sound.c

Mon, 30 Sep 2002 01:05:18 +0000

author
Sean Egan <seanegan@pidgin.im>
date
Mon, 30 Sep 2002 01:05:18 +0000
changeset 3572
d07e14aa6f26
parent 3367
cb32334700d2
child 3630
caa952062dc2
permissions
-rw-r--r--

[gaim-migrate @ 3670]
Phase II. No longer do you have to worry about protocol plugins. When
Gaim probes plugins on load, it will detect protocol plugins and add them
to the list of available protocols. When you try to log an account on with
one of them, Gaim will automatically load the plugin--when no more accounts
need the protocol--Gaim will automatically unload it. Protocol plugins are
no longer available in the plugins ui, and no protocols are compiled statically
by default.

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
2090
bab8b7e309db [gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2048
diff changeset
23 #include <config.h>
349
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>
1057
0161606a8549 [gaim-migrate @ 1067]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1006
diff changeset
26 #include <stdlib.h>
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
27 #include <string.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
28 #include <sys/time.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
29 #include <unistd.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>
63
6235c767fa20 [gaim-migrate @ 73]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1
diff changeset
32 #include <unistd.h>
6235c767fa20 [gaim-migrate @ 73]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1
diff changeset
33 #include <sys/types.h>
6235c767fa20 [gaim-migrate @ 73]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1
diff changeset
34 #include <sys/stat.h>
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
35
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
36 #ifdef ESD_SOUND
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
37 #include <esd.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
38 #endif
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
39
2179
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
40 #ifdef ARTSC_SOUND
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
41 #include <artsc.h>
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
42 #endif
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
43
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
44 #ifdef NAS_SOUND
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
45 #include <audio/audiolib.h>
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
46 #endif
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
47
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
48 #include "gaim.h"
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
49 #include "sounds/BuddyArrive.h"
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
50 #include "sounds/BuddyLeave.h"
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
51 #include "sounds/Send.h"
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
52 #include "sounds/Receive.h"
1694
e5d98f92deca [gaim-migrate @ 1704]
Rob Flynn <gaim@robflynn.com>
parents: 1517
diff changeset
53 #include "sounds/RedAlert.h"
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
54
3319
620cde89665a [gaim-migrate @ 3337]
Sean Egan <seanegan@pidgin.im>
parents: 3284
diff changeset
55 gboolean mute_sounds = 0;
620cde89665a [gaim-migrate @ 3337]
Sean Egan <seanegan@pidgin.im>
parents: 3284
diff changeset
56
3326
0f6a30288c89 [gaim-migrate @ 3344]
Robert McQueen <robot101@debian.org>
parents: 3319
diff changeset
57 /* description, option bit, default sound array, and it's size. *
0f6a30288c89 [gaim-migrate @ 3344]
Robert McQueen <robot101@debian.org>
parents: 3319
diff changeset
58 * if you want it to get displayed in the prefs dialog, it needs *
0f6a30288c89 [gaim-migrate @ 3344]
Robert McQueen <robot101@debian.org>
parents: 3319
diff changeset
59 * to be added to the sound_order array in prefs.c, if not, and *
0f6a30288c89 [gaim-migrate @ 3344]
Robert McQueen <robot101@debian.org>
parents: 3319
diff changeset
60 * it has no option bit, set it to 0. the order here has to match *
0f6a30288c89 [gaim-migrate @ 3344]
Robert McQueen <robot101@debian.org>
parents: 3319
diff changeset
61 * the defines in gaim.h. -Robot101 */
3060
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
62 struct sound_struct sounds[NUM_SOUNDS] = {
3279
60aa1a4f9128 [gaim-migrate @ 3297]
Ari Pollak <ari@debian.org>
parents: 3222
diff changeset
63 {N_("Buddy logs in"), OPT_SOUND_LOGIN, BuddyArrive, sizeof(BuddyArrive)},
60aa1a4f9128 [gaim-migrate @ 3297]
Ari Pollak <ari@debian.org>
parents: 3222
diff changeset
64 {N_("Buddy logs out"), OPT_SOUND_LOGOUT, BuddyLeave, sizeof(BuddyLeave)},
60aa1a4f9128 [gaim-migrate @ 3297]
Ari Pollak <ari@debian.org>
parents: 3222
diff changeset
65 {N_("Message received"), OPT_SOUND_RECV, Receive, sizeof(Receive)},
60aa1a4f9128 [gaim-migrate @ 3297]
Ari Pollak <ari@debian.org>
parents: 3222
diff changeset
66 {N_("Message received begins conversation"), OPT_SOUND_FIRST_RCV, Receive, sizeof(Receive)},
60aa1a4f9128 [gaim-migrate @ 3297]
Ari Pollak <ari@debian.org>
parents: 3222
diff changeset
67 {N_("Message sent"), OPT_SOUND_SEND, Send, sizeof(Send)},
60aa1a4f9128 [gaim-migrate @ 3297]
Ari Pollak <ari@debian.org>
parents: 3222
diff changeset
68 {N_("Person enters chat"), OPT_SOUND_CHAT_JOIN, BuddyArrive, sizeof(BuddyArrive)},
60aa1a4f9128 [gaim-migrate @ 3297]
Ari Pollak <ari@debian.org>
parents: 3222
diff changeset
69 {N_("Person leaves chat"), OPT_SOUND_CHAT_PART, BuddyLeave, sizeof(BuddyLeave)},
60aa1a4f9128 [gaim-migrate @ 3297]
Ari Pollak <ari@debian.org>
parents: 3222
diff changeset
70 {N_("You talk in chat"), OPT_SOUND_CHAT_YOU_SAY, Send, sizeof(Send)},
60aa1a4f9128 [gaim-migrate @ 3297]
Ari Pollak <ari@debian.org>
parents: 3222
diff changeset
71 {N_("Others talk in chat"), OPT_SOUND_CHAT_SAY, Receive, sizeof(Receive)},
3326
0f6a30288c89 [gaim-migrate @ 3344]
Robert McQueen <robot101@debian.org>
parents: 3319
diff changeset
72 /* this isn't a terminator, it's the buddy pounce default sound event ;-) */
3279
60aa1a4f9128 [gaim-migrate @ 3297]
Ari Pollak <ari@debian.org>
parents: 3222
diff changeset
73 {NULL, 0, RedAlert, sizeof(RedAlert)},
60aa1a4f9128 [gaim-migrate @ 3297]
Ari Pollak <ari@debian.org>
parents: 3222
diff changeset
74 {N_("Someone says your name in chat"), OPT_SOUND_CHAT_NICK, Receive, sizeof(Receive)}
3060
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
75 };
3367
cb32334700d2 [gaim-migrate @ 3386]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
76 int sound_order[] = {
cb32334700d2 [gaim-migrate @ 3386]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
77 SND_BUDDY_ARRIVE, SND_BUDDY_LEAVE,
cb32334700d2 [gaim-migrate @ 3386]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
78 SND_FIRST_RECEIVE, SND_RECEIVE, SND_SEND,
cb32334700d2 [gaim-migrate @ 3386]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
79 SND_CHAT_JOIN, SND_CHAT_LEAVE,
cb32334700d2 [gaim-migrate @ 3386]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
80 SND_CHAT_YOU_SAY, SND_CHAT_SAY, SND_CHAT_NICK, 0
cb32334700d2 [gaim-migrate @ 3386]
Sean Egan <seanegan@pidgin.im>
parents: 3326
diff changeset
81 };
3060
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
82
655
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
83 static int check_dev(char *dev)
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
84 {
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
85 struct stat stat_buf;
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
86 uid_t user = getuid();
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
87 gid_t group = getgid(), other_groups[32];
899
89dbab81c618 [gaim-migrate @ 909]
Ben Miller <millebe@cs.earlham.edu>
parents: 778
diff changeset
88 int i, numgroups;
89dbab81c618 [gaim-migrate @ 909]
Ben Miller <millebe@cs.earlham.edu>
parents: 778
diff changeset
89
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
90 if ((numgroups = getgroups(32, other_groups)) == -1)
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
91 return 0;
655
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
92 if (stat(dev, &stat_buf))
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
93 return 0;
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
94 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
95 return 1;
899
89dbab81c618 [gaim-migrate @ 909]
Ben Miller <millebe@cs.earlham.edu>
parents: 778
diff changeset
96 if (stat_buf.st_mode & S_IWGRP) {
89dbab81c618 [gaim-migrate @ 909]
Ben Miller <millebe@cs.earlham.edu>
parents: 778
diff changeset
97 if (group == stat_buf.st_gid)
89dbab81c618 [gaim-migrate @ 909]
Ben Miller <millebe@cs.earlham.edu>
parents: 778
diff changeset
98 return 1;
89dbab81c618 [gaim-migrate @ 909]
Ben Miller <millebe@cs.earlham.edu>
parents: 778
diff changeset
99 for (i = 0; i < numgroups; i++)
89dbab81c618 [gaim-migrate @ 909]
Ben Miller <millebe@cs.earlham.edu>
parents: 778
diff changeset
100 if (other_groups[i] == stat_buf.st_gid)
89dbab81c618 [gaim-migrate @ 909]
Ben Miller <millebe@cs.earlham.edu>
parents: 778
diff changeset
101 return 1;
89dbab81c618 [gaim-migrate @ 909]
Ben Miller <millebe@cs.earlham.edu>
parents: 778
diff changeset
102 }
655
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
103 if (stat_buf.st_mode & S_IWOTH)
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
104 return 1;
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
105 return 0;
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
106 }
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
107
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
108
2048
4ac8b9622c9e [gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1805
diff changeset
109 static void play_audio(unsigned char *data, int size)
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
110 {
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
111 int fd;
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
112
2467
c32172dcc34e [gaim-migrate @ 2480]
Ben Miller <millebe@cs.earlham.edu>
parents: 2372
diff changeset
113 fd = open("/dev/audio", O_WRONLY | O_EXCL | O_NDELAY);
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
114 if (fd < 0)
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
115 return;
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
116 write(fd, data, size);
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
117 close(fd);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
118 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
119
1006
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
120 static void play_audio_file(char *file)
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
121 {
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
122 /* here we can assume that we can write to /dev/audio */
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
123 char *buf;
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
124 struct stat info;
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
125 int fd = open(file, O_RDONLY);
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
126 if (fd <= 0) {
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
127 return;
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
128 }
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
129 fstat(fd, &info);
1109
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
130 if (info.st_size < 24)
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
131 return;
1006
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
132 buf = malloc(info.st_size + 1);
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
133 read(fd, buf, 24);
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
134 read(fd, buf, info.st_size - 24);
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
135 close(fd);
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
136
2467
c32172dcc34e [gaim-migrate @ 2480]
Ben Miller <millebe@cs.earlham.edu>
parents: 2372
diff changeset
137 fd = open("/dev/audio", O_WRONLY | O_EXCL | O_NDELAY);
1109
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
138 if (fd < 0) {
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
139 free(buf);
1006
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
140 return;
1109
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
141 }
1006
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
142 write(fd, buf, info.st_size - 24);
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
143 free(buf);
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
144 close(fd);
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
145 }
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
146
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
147 static int can_play_audio()
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
148 {
655
5f1cffc65856 [gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 606
diff changeset
149 return check_dev("/dev/audio");
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
150 }
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
2179
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
153 #if defined(ESD_SOUND) || defined(ARTSC_SOUND)
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
154
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
155 /*
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
156 ** This routine converts from ulaw to 16 bit linear.
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
157 **
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
158 ** Craig Reese: IDA/Supercomputing Research Center
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
159 ** 29 September 1989
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
160 **
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
161 ** References:
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
162 ** 1) CCITT Recommendation G.711 (very difficult to follow)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
163 ** 2) MIL-STD-188-113,"Interoperability and Performance Standards
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
164 ** for Analog-to_Digital Conversion Techniques,"
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
165 ** 17 February 1987
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
166 **
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
167 ** Input: 8 bit ulaw sample
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
168 ** Output: signed 16 bit linear sample
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
169 ** Z-note -- this is from libaudiofile. Thanks guys!
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
170 */
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
171
2158
76fdbca877a0 [gaim-migrate @ 2168]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2090
diff changeset
172 static int _af_ulaw2linear(unsigned char ulawbyte)
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
173 {
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
174 static int exp_lut[8] = { 0, 132, 396, 924, 1980, 4092, 8316, 16764 };
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
175 int sign, exponent, mantissa, sample;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
176
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
177 ulawbyte = ~ulawbyte;
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
178 sign = (ulawbyte & 0x80);
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
179 exponent = (ulawbyte >> 4) & 0x07;
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
180 mantissa = ulawbyte & 0x0F;
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
181 sample = exp_lut[exponent] + (mantissa << (exponent + 3));
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
182 if (sign != 0)
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
183 sample = -sample;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
184
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
185 return (sample);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
186 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
187
2179
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
188 #endif
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
189
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
190 #ifdef ESD_SOUND
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
191
354
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
192 int esd_fd;
1
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 static int play_esd(unsigned char *data, int size)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
195 {
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
196 int i;
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
197 guint16 *lineardata;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
198
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
199 lineardata = g_malloc(size * 2);
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
200
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
201 for (i = 0; i < size; i++)
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
202 lineardata[i] = _af_ulaw2linear(data[i]);
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
203
354
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
204 write(esd_fd, lineardata, size * 2);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
205
354
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
206 close(esd_fd);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
207 g_free(lineardata);
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
208
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
209 return 1;
1
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 }
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 static int can_play_esd()
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
214 {
354
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
215 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
216
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
217 esd_fd = esd_play_stream(format, 8012, NULL, "gaim");
354
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
218
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
219 if (esd_fd < 0) {
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
220 return 0;
354
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
221 }
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
222
617f05e0e800 [gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 349
diff changeset
223 return 1;
1
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
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
226 #endif
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
227
2179
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
228 #ifdef ARTSC_SOUND
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
229
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
230 static int play_artsc(unsigned char *data, int size)
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
231 {
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
232 arts_stream_t stream;
2372
c24942700dfd [gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2370
diff changeset
233 guint16 *lineardata;
2179
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
234 int result = 1;
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
235 int error;
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
236 int i;
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
237
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
238 lineardata = g_malloc(size * 2);
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
239
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
240 for (i = 0; i < size; i++) {
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
241 lineardata[i] = _af_ulaw2linear(data[i]);
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
242 }
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
243
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
244 stream = arts_play_stream(8012, 16, 1, "gaim");
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
245
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
246 error = arts_write(stream, lineardata, size);
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
247 if (error < 0) {
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
248 result = 0;
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
249 }
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
250
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
251 arts_close_stream(stream);
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
252
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
253 g_free(lineardata);
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
254
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
255 arts_free();
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
256
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
257 return result;
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
258 }
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
259
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
260 static int can_play_artsc()
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
261 {
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
262 int error;
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
263
2183
8b16ee759b38 [gaim-migrate @ 2193]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2179
diff changeset
264 error = arts_init();
2179
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
265 if (error < 0)
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
266 return 0;
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
267
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
268 return 1;
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
269 }
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
270
2186
9579014b7a49 [gaim-migrate @ 2196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2183
diff changeset
271 static int artsc_play_file(char *file)
2179
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
272 {
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
273 struct stat stat_buf;
2372
c24942700dfd [gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2370
diff changeset
274 unsigned char *buf = NULL;
2179
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
275 int result = 0;
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
276 int fd = -1;
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
277
2680
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
278 if (!can_play_artsc())
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
279 return 0;
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
280
2179
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
281 fd = open(file, O_RDONLY);
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
282 if (fd < 0)
2680
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
283 return 0;
2179
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
284
2680
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
285 if (fstat(fd, &stat_buf)) {
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
286 close(fd);
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
287 return 0;
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
288 }
2179
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
289
2680
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
290 if (!stat_buf.st_size) {
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
291 close(fd);
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
292 return 0;
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
293 }
2179
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
294
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
295 buf = g_malloc(stat_buf.st_size);
2680
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
296 if (!buf) {
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
297 close(fd);
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
298 return 0;
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
299 }
2372
c24942700dfd [gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2370
diff changeset
300
2680
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
301 if (read(fd, buf, stat_buf.st_size) < 0) {
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
302 g_free(buf);
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
303 close(fd);
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
304 return 0;
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
305 }
2179
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
306
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
307 result = play_artsc(buf, stat_buf.st_size);
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
308
2680
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
309 g_free(buf);
07b9104a394c [gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2601
diff changeset
310 close(fd);
2179
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
311 return result;
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
312 }
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
313
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
314 #endif /* ARTSC_SOUND */
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
315
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
316 #ifdef NAS_SOUND
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
317
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
318 char nas_server[] = "localhost";
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
319 AuServer *nas_serv = NULL;
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
320
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
321 static AuBool NasEventHandler(AuServer * aud, AuEvent * ev, AuEventHandlerRec * handler)
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
322 {
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
323 AuElementNotifyEvent *event = (AuElementNotifyEvent *) ev;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
324
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
325 if (ev->type == AuEventTypeElementNotify) {
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
326 switch (event->kind) {
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
327 case AuElementNotifyKindState:
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
328 switch (event->cur_state) {
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
329 case AuStateStop:
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
330 _exit(0);
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
331 }
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
332 break;
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
333 }
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
334 }
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
335 return AuTrue;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
336 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
337
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
338
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
339 static int play_nas(unsigned char *data, int size)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
340 {
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
341 AuDeviceID device = AuNone;
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
342 AuFlowID flow;
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
343 AuElement elements[3];
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
344 int i, n, w;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
345
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
346 /* look for an output device */
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
347 for (i = 0; i < AuServerNumDevices(nas_serv); i++) {
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
348 if ((AuDeviceKind(AuServerDevice(nas_serv, i)) ==
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
349 AuComponentKindPhysicalOutput) &&
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
350 AuDeviceNumTracks(AuServerDevice(nas_serv, i)) == 1) {
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
351 device = AuDeviceIdentifier(AuServerDevice(nas_serv, i));
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
352 break;
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
353 }
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
354 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
355
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
356 if (device == AuNone)
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
357 return 0;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
358
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
359 if (!(flow = AuCreateFlow(nas_serv, NULL)))
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
360 return 0;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
361
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
362
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
363 AuMakeElementImportClient(&elements[0], 8012, AuFormatULAW8, 1, AuTrue, size, size / 2, 0, NULL);
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
364 AuMakeElementExportDevice(&elements[1], 0, device, 8012, AuUnlimitedSamples, 0, NULL);
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
365 AuSetElements(nas_serv, flow, AuTrue, 2, elements, NULL);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
366
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
367 AuStartFlow(nas_serv, flow, NULL);
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
368
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
369 AuWriteElement(nas_serv, flow, 0, size, data, AuTrue, NULL);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
370
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
371 AuRegisterEventHandler(nas_serv, AuEventHandlerIDMask, 0, flow, NasEventHandler, NULL);
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
372
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
373 while (1) {
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
374 AuHandleEvents(nas_serv);
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
375 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
376
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
377 return 1;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
378 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
379
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
380 static int can_play_nas()
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
381 {
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
382 if ((nas_serv = AuOpenServer(NULL, 0, NULL, 0, NULL, NULL)))
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
383 return 1;
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
384 return 0;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
385 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
386
1109
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
387 static int play_nas_file(char *file)
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
388 {
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
389 struct stat stat_buf;
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
390 char *buf;
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
391 int ret;
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
392 int fd = open(file, O_RDONLY);
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
393 if (fd <= 0)
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
394 return 0;
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
395
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
396 if (!can_play_nas())
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
397 return 0;
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
398
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
399 if (stat(file, &stat_buf))
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
400 return 0;
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
401
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
402 if (!stat_buf.st_size)
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
403 return 0;
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
404
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
405 buf = malloc(stat_buf.st_size);
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
406 read(fd, buf, stat_buf.st_size);
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
407 ret = play_nas(buf, stat_buf.st_size);
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
408 free(buf);
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
409 return ret;
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
410 }
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
411
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
412 #endif
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
413
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
414 void play_file(char *filename)
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
415 {
1006
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
416 int pid;
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
417
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
418 #ifdef _WIN32
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
419 return;
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
420 #endif
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
421
3004
4fc45282aab6 [gaim-migrate @ 3017]
Sean Egan <seanegan@pidgin.im>
parents: 2995
diff changeset
422 if (sound_options & OPT_SOUND_BEEP) {
4fc45282aab6 [gaim-migrate @ 3017]
Sean Egan <seanegan@pidgin.im>
parents: 2995
diff changeset
423 gdk_beep();
4fc45282aab6 [gaim-migrate @ 3017]
Sean Egan <seanegan@pidgin.im>
parents: 2995
diff changeset
424 return;
4fc45282aab6 [gaim-migrate @ 3017]
Sean Egan <seanegan@pidgin.im>
parents: 2995
diff changeset
425 }
4fc45282aab6 [gaim-migrate @ 3017]
Sean Egan <seanegan@pidgin.im>
parents: 2995
diff changeset
426
3060
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
427 else if (sound_options & OPT_SOUND_NORMAL) {
3072
c1404ba009f5 [gaim-migrate @ 3086]
Robert McQueen <robot101@debian.org>
parents: 3060
diff changeset
428 debug_printf("attempting to play audio file with internal method -- this is unlikely to work\n");
3060
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
429 }
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
430
1006
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
431 pid = fork();
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
432
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
433 if (pid < 0)
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
434 return;
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
435 else if (pid == 0) {
2601
e071e397e55e [gaim-migrate @ 2614]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2580
diff changeset
436 alarm(30);
3004
4fc45282aab6 [gaim-migrate @ 3017]
Sean Egan <seanegan@pidgin.im>
parents: 2995
diff changeset
437
3025
1cc919eae2eb [gaim-migrate @ 3038]
Robert McQueen <robot101@debian.org>
parents: 3006
diff changeset
438 if ((sound_options & OPT_SOUND_CMD) && sound_cmd[0]) {
1214
dccd13b431d5 [gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1109
diff changeset
439 char *args[4];
dccd13b431d5 [gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1109
diff changeset
440 char command[4096];
2777
f6dd295a0174 [gaim-migrate @ 2790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2680
diff changeset
441
f6dd295a0174 [gaim-migrate @ 2790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2680
diff changeset
442 g_snprintf(command, sizeof(command), sound_cmd, filename);
f6dd295a0174 [gaim-migrate @ 2790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2680
diff changeset
443
1214
dccd13b431d5 [gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1109
diff changeset
444 args[0] = "sh";
dccd13b431d5 [gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1109
diff changeset
445 args[1] = "-c";
dccd13b431d5 [gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1109
diff changeset
446 args[2] = command;
dccd13b431d5 [gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1109
diff changeset
447 args[3] = NULL;
dccd13b431d5 [gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1109
diff changeset
448 execvp(args[0], args);
dccd13b431d5 [gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1109
diff changeset
449 _exit(0);
dccd13b431d5 [gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1109
diff changeset
450 }
1006
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
451 #ifdef ESD_SOUND
2580
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
452 else if (sound_options & OPT_SOUND_ESD) {
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
453 if (esd_play_file(NULL, filename, 1))
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
454 _exit(0);
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
455 }
1006
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
456 #endif
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
457
2186
9579014b7a49 [gaim-migrate @ 2196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2183
diff changeset
458 #ifdef ARTSC_SOUND
2580
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
459 else if (sound_options & OPT_SOUND_ARTSC) {
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
460 if (artsc_play_file(filename))
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
461 _exit(0);
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
462 }
2186
9579014b7a49 [gaim-migrate @ 2196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2183
diff changeset
463 #endif
9579014b7a49 [gaim-migrate @ 2196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2183
diff changeset
464
1109
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
465 #ifdef NAS_SOUND
2580
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
466 else if (sound_options & OPT_SOUND_NAS) {
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
467 if (play_nas_file(filename))
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
468 _exit(0);
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
469 }
1109
c15973749312 [gaim-migrate @ 1119]
Ben Miller <millebe@cs.earlham.edu>
parents: 1057
diff changeset
470 #endif
2580
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
471 else if ((sound_options & OPT_SOUND_NORMAL) &&
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
472 can_play_audio()) {
1006
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
473 play_audio_file(filename);
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
474 _exit(0);
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
475 }
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
476
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
477 _exit(0);
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
478 }
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
479 }
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
480
133
418de720c20d [gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 108
diff changeset
481 void play(unsigned char *data, int size)
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
482 {
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
483 int pid;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
484
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
485 #ifdef _WIN32
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
486 return;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
487 #endif
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
488
3004
4fc45282aab6 [gaim-migrate @ 3017]
Sean Egan <seanegan@pidgin.im>
parents: 2995
diff changeset
489 if (sound_options & OPT_SOUND_BEEP) {
4fc45282aab6 [gaim-migrate @ 3017]
Sean Egan <seanegan@pidgin.im>
parents: 2995
diff changeset
490 gdk_beep();
4fc45282aab6 [gaim-migrate @ 3017]
Sean Egan <seanegan@pidgin.im>
parents: 2995
diff changeset
491 return;
4fc45282aab6 [gaim-migrate @ 3017]
Sean Egan <seanegan@pidgin.im>
parents: 2995
diff changeset
492 }
3025
1cc919eae2eb [gaim-migrate @ 3038]
Robert McQueen <robot101@debian.org>
parents: 3006
diff changeset
493
1cc919eae2eb [gaim-migrate @ 3038]
Robert McQueen <robot101@debian.org>
parents: 3006
diff changeset
494 else if ((sound_options & OPT_SOUND_CMD) && sound_cmd[0]) {
3284
26f0d82970e2 [gaim-migrate @ 3302]
Lex Spoon
parents: 3279
diff changeset
495 char command[4096];
26f0d82970e2 [gaim-migrate @ 3302]
Lex Spoon
parents: 3279
diff changeset
496 FILE *child;
26f0d82970e2 [gaim-migrate @ 3302]
Lex Spoon
parents: 3279
diff changeset
497
26f0d82970e2 [gaim-migrate @ 3302]
Lex Spoon
parents: 3279
diff changeset
498 g_snprintf(command, sizeof(command), sound_cmd, "-");
26f0d82970e2 [gaim-migrate @ 3302]
Lex Spoon
parents: 3279
diff changeset
499
26f0d82970e2 [gaim-migrate @ 3302]
Lex Spoon
parents: 3279
diff changeset
500 child=popen(command, "w");
26f0d82970e2 [gaim-migrate @ 3302]
Lex Spoon
parents: 3279
diff changeset
501 if(child == NULL) {
26f0d82970e2 [gaim-migrate @ 3302]
Lex Spoon
parents: 3279
diff changeset
502 perror("popen");
26f0d82970e2 [gaim-migrate @ 3302]
Lex Spoon
parents: 3279
diff changeset
503 return;
26f0d82970e2 [gaim-migrate @ 3302]
Lex Spoon
parents: 3279
diff changeset
504 }
26f0d82970e2 [gaim-migrate @ 3302]
Lex Spoon
parents: 3279
diff changeset
505
26f0d82970e2 [gaim-migrate @ 3302]
Lex Spoon
parents: 3279
diff changeset
506 fwrite(data, size, 1, child);
26f0d82970e2 [gaim-migrate @ 3302]
Lex Spoon
parents: 3279
diff changeset
507 pclose(child);
3025
1cc919eae2eb [gaim-migrate @ 3038]
Robert McQueen <robot101@debian.org>
parents: 3006
diff changeset
508 return;
1cc919eae2eb [gaim-migrate @ 3038]
Robert McQueen <robot101@debian.org>
parents: 3006
diff changeset
509 }
1cc919eae2eb [gaim-migrate @ 3038]
Robert McQueen <robot101@debian.org>
parents: 3006
diff changeset
510
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
511 pid = fork();
3004
4fc45282aab6 [gaim-migrate @ 3017]
Sean Egan <seanegan@pidgin.im>
parents: 2995
diff changeset
512
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
513 if (pid < 0)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
514 return;
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
515 else if (pid == 0) {
2601
e071e397e55e [gaim-migrate @ 2614]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2580
diff changeset
516 alarm(30);
3004
4fc45282aab6 [gaim-migrate @ 3017]
Sean Egan <seanegan@pidgin.im>
parents: 2995
diff changeset
517
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
518 #ifdef ESD_SOUND
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
519 /* ESD is our player of choice. Are we OK to
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
520 * go there? */
3004
4fc45282aab6 [gaim-migrate @ 3017]
Sean Egan <seanegan@pidgin.im>
parents: 2995
diff changeset
521 if (sound_options & OPT_SOUND_ESD) {
2580
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
522 if (can_play_esd()) {
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
523 if (play_esd(data, size))
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
524 _exit(0);
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
525 }
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
526 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
527 #endif
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
528
2179
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
529 #ifdef ARTSC_SOUND
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
530 /* ArtsC is the new second choice. */
3006
ba7474adbce9 [gaim-migrate @ 3019]
Sean Egan <seanegan@pidgin.im>
parents: 3005
diff changeset
531 if (sound_options & OPT_SOUND_ARTSC) {
2580
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
532 if (can_play_artsc()) {
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
533 if (play_artsc(data, size))
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
534 _exit(0);
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
535 }
2179
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
536 }
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
537 #endif
27b003c6830f [gaim-migrate @ 2189]
Tom Dyas
parents: 2158
diff changeset
538
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
539 #ifdef NAS_SOUND
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
540 /* NAS is our second choice setup. */
3006
ba7474adbce9 [gaim-migrate @ 3019]
Sean Egan <seanegan@pidgin.im>
parents: 3005
diff changeset
541 if (sound_options & OPT_SOUND_NAS) {
2580
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
542 if (can_play_nas()) {
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
543 if (play_nas(data, size))
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
544 _exit(0);
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
545 }
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
546 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
547 #endif
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
548
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
549 /* Lastly, we can try just plain old /dev/audio */
3005
a08ae79dcbaf [gaim-migrate @ 3018]
Sean Egan <seanegan@pidgin.im>
parents: 3004
diff changeset
550 if (sound_options & OPT_SOUND_NORMAL) {
2580
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
551 if (can_play_audio()) {
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
552 play_audio(data, size);
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
553 _exit(0);
b6e87f6ad217 [gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2478
diff changeset
554 }
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
555 }
668
ec2f81e3c95a [gaim-migrate @ 678]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 655
diff changeset
556
ec2f81e3c95a [gaim-migrate @ 678]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 655
diff changeset
557 _exit(0);
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
558 }
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
559 }
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
560
133
418de720c20d [gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 108
diff changeset
561 extern int logins_not_muted;
1
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
562
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
563 void play_sound(int sound)
efe077a7e70d [gaim-migrate @ 10]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
564 {
3319
620cde89665a [gaim-migrate @ 3337]
Sean Egan <seanegan@pidgin.im>
parents: 3284
diff changeset
565
620cde89665a [gaim-migrate @ 3337]
Sean Egan <seanegan@pidgin.im>
parents: 3284
diff changeset
566 if (mute_sounds)
620cde89665a [gaim-migrate @ 3337]
Sean Egan <seanegan@pidgin.im>
parents: 3284
diff changeset
567 return;
620cde89665a [gaim-migrate @ 3337]
Sean Egan <seanegan@pidgin.im>
parents: 3284
diff changeset
568
1235
c8d6eef4edce [gaim-migrate @ 1245]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1214
diff changeset
569 if (awaymessage && !(sound_options & OPT_SOUND_WHEN_AWAY))
c8d6eef4edce [gaim-migrate @ 1245]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1214
diff changeset
570 return;
c8d6eef4edce [gaim-migrate @ 1245]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1214
diff changeset
571
3060
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
572 if ((sound == SND_BUDDY_ARRIVE) && !logins_not_muted)
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
573 return;
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
574
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
575 if (sound >= NUM_SOUNDS) {
3072
c1404ba009f5 [gaim-migrate @ 3086]
Robert McQueen <robot101@debian.org>
parents: 3060
diff changeset
576 debug_printf("sorry old fruit... can't say I know that sound: ", sound, "\n");
3060
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
577 return;
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
578 }
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
579
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
580 /* check NULL for sounds that don't have an option, ie buddy pounce */
3072
c1404ba009f5 [gaim-migrate @ 3086]
Robert McQueen <robot101@debian.org>
parents: 3060
diff changeset
581 if ((sound_options & sounds[sound].opt) || (sounds[sound].opt == 0)) {
3060
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
582 if (sound_file[sound]) {
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
583 play_file(sound_file[sound]);
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
584 } else {
ec62758f47b3 [gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents: 3025
diff changeset
585 play(sounds[sound].snd, sounds[sound].snd_size);
1006
fb2f2a403962 [gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 899
diff changeset
586 }
1252
94fbface2d84 [gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1235
diff changeset
587 }
64
cb32d6c8353c [gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 63
diff changeset
588 }

mercurial