annotate toys/other/mix.c @ 1776:7bf68329eb3b draft default tip

Repository switched to git at https://github.com/landley/toybox
author Rob Landley <rob@landley.net>
date Thu, 09 Apr 2015 02:28:32 -0500
parents 93c5e6163f9b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
6 USE_MIX(NEWTOY(mix, "c:d:l#r#", TOYFLAG_USR|TOYFLAG_BIN))
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
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
59a02a1c9f77 Promote mix
Rob Landley <rob@landley.net>
parents: 1627
diff changeset
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
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
13
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
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
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
17 -d DEV Device node (default /dev/mixer)
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
18 -l VOL Volume level
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
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
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
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
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
27 long right;
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
28 long level;
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
29 char *dev;
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
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
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
35 const char *channels[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES;
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
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
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
38 if (!TT.dev) TT.dev = "/dev/mixer";
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
39 fd = xopen(TT.dev, O_RDWR|O_NONBLOCK);
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
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
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
42 for (channel = 0; channel < SOUND_MIXER_NRDEVICES; channel++) {
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
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
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
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
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
51 if (!(toys.optflags & (FLAG_c|FLAG_l))) return;
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
52 else if (channel == SOUND_MIXER_NRDEVICES) error_exit("bad -c '%s'", TT.chan);
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
53
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
54 if (!(toys.optflags & FLAG_l)) {
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
55 xioctl(fd, MIXER_READ(channel), &level);
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
56 if (level > 0xFF)
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
57 xprintf("%s:%s = left:%d\t right:%d\n",
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
58 TT.dev, channels[channel], level>>8, level & 0xFF);
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
59 else xprintf("%s:%s = %d\n", TT.dev, channels[channel], level);
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
60 } else {
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
61 level = TT.level;
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
62 if (!(toys.optflags & FLAG_r)) level = TT.right | (level<<8);
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
63
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
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
6c80a3b4e634 Cleanup mix.c.
Rob Landley <rob@landley.net>
parents: 1412
diff changeset
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 }