Mercurial > hg > toybox
annotate toys/other/mix.c @ 1727:c0ef9b7976f0 draft
Use xsignal() instead of signal().
author | Rob Landley <rob@landley.net> |
---|---|
date | Tue, 10 Mar 2015 11:07:28 -0500 |
parents | 93c5e6163f9b |
children |
rev | line source |
---|---|
1412
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
1 /* mix.c - A very basic mixer. |
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
2 * |
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
3 * Copyright 2014 Brad Conroy, dedicated to the Public Domain. |
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
4 * |
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
5 |
1627 | 6 USE_MIX(NEWTOY(mix, "c:d:l#r#", TOYFLAG_USR|TOYFLAG_BIN)) |
7 | |
1412
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
8 config MIX |
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
9 bool "mix" |
1628 | 10 default y |
1412
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
11 help |
1635
93c5e6163f9b
Fix for mix from Isaac Dunham (who can actually test it). (I tweaked the curly brackets.)
Rob Landley <rob@landley.net>
parents:
1628
diff
changeset
|
12 usage: mix [-d DEV] [-c CHANNEL] [-l VOL] [-r RIGHT] |
1627 | 13 |
14 List OSS sound channels (module snd-mixer-oss), or set volume(s). | |
1412
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
15 |
1635
93c5e6163f9b
Fix for mix from Isaac Dunham (who can actually test it). (I tweaked the curly brackets.)
Rob Landley <rob@landley.net>
parents:
1628
diff
changeset
|
16 -c CHANNEL Set/show volume of CHANNEL (default first channel found) |
1627 | 17 -d DEV Device node (default /dev/mixer) |
18 -l VOL Volume level | |
19 -r RIGHT Volume of right stereo channel (with -r, -l sets left volume) | |
1412
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
20 */ |
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
21 |
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
22 #define FOR_mix |
1627 | 23 #include "toys.h" |
1412
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
24 #include <linux/soundcard.h> |
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
25 |
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
26 GLOBALS( |
1627 | 27 long right; |
28 long level; | |
29 char *dev; | |
30 char *chan; | |
1412
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
31 ) |
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
32 |
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
33 void mix_main(void) |
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
34 { |
1627 | 35 const char *channels[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES; |
36 int mask, channel = -1, level, fd; | |
1412
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
37 |
1627 | 38 if (!TT.dev) TT.dev = "/dev/mixer"; |
39 fd = xopen(TT.dev, O_RDWR|O_NONBLOCK); | |
40 xioctl(fd, SOUND_MIXER_READ_DEVMASK, &mask); | |
1412
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
41 |
1627 | 42 for (channel = 0; channel < SOUND_MIXER_NRDEVICES; channel++) { |
43 if ((1<<channel) & mask) { | |
1635
93c5e6163f9b
Fix for mix from Isaac Dunham (who can actually test it). (I tweaked the curly brackets.)
Rob Landley <rob@landley.net>
parents:
1628
diff
changeset
|
44 if (TT.chan) { |
93c5e6163f9b
Fix for mix from Isaac Dunham (who can actually test it). (I tweaked the curly brackets.)
Rob Landley <rob@landley.net>
parents:
1628
diff
changeset
|
45 if (!strcmp(channels[channel], TT.chan)) break; |
93c5e6163f9b
Fix for mix from Isaac Dunham (who can actually test it). (I tweaked the curly brackets.)
Rob Landley <rob@landley.net>
parents:
1628
diff
changeset
|
46 } else if (toys.optflags & FLAG_l) break; |
1627 | 47 else printf("%s\n", channels[channel]); |
1412
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
48 } |
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
49 } |
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
50 |
1627 | 51 if (!(toys.optflags & (FLAG_c|FLAG_l))) return; |
52 else if (channel == SOUND_MIXER_NRDEVICES) error_exit("bad -c '%s'", TT.chan); | |
53 | |
54 if (!(toys.optflags & FLAG_l)) { | |
55 xioctl(fd, MIXER_READ(channel), &level); | |
56 if (level > 0xFF) | |
57 xprintf("%s:%s = left:%d\t right:%d\n", | |
58 TT.dev, channels[channel], level>>8, level & 0xFF); | |
59 else xprintf("%s:%s = %d\n", TT.dev, channels[channel], level); | |
60 } else { | |
61 level = TT.level; | |
62 if (!(toys.optflags & FLAG_r)) level = TT.right | (level<<8); | |
63 | |
64 xioctl(fd, MIXER_WRITE(channel), &level); | |
1412
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
65 } |
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
66 |
1627 | 67 if (CFG_TOYBOX_FREE) close(fd); |
1412
b513c9c64c71
mix.c - A very basic mixer.
Bradley Conroy <bradley.conroy@gmail.com>
parents:
diff
changeset
|
68 } |