1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
/*
* Purpose: A sample program for recording source selection
* Copyright (C) 4Front Technologies, 2002-2004. Released under GPLv2/CDDL.
*
* Description:
* This program demonstrates the new ioctl call interface used to
* control the recording source.
*
* The same program can be used for playback target selection simply by
* changing O_RDONLY to O_WRONLY in the open call and by replacing all
* "RECSRC" strings with "PLAYTGT" (see playtgt.c).
*
* The first command line argument is the audio device (/dev/dsp#). If there
* are no other arguments then the available choices will be printed. If the
* second argument is "-" then the current setting will be printed.
* Finally the source can be changed by giving it's name as the
* second argument.
*
* {!notice Please not that the change may stay in effect even after closing
* the device. However equally well it's possible that the device returns back
* to some default source. There is no way to predict how the device will
* behave and the application must not expect any particular behaviour.}
*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <soundcard.h>
#include <time.h>
int
main (int argc, char *argv[])
{
int fd, i, src;
oss_mixer_enuminfo ei;
if (argc < 2)
{
fprintf (stderr, "Usage: %s dspdev\n", argv[0]);
exit (-1);
}
if ((fd = open (argv[1], O_RDONLY, 0)) == -1)
{
perror (argv[1]);
exit (-1);
}
if (ioctl (fd, SNDCTL_DSP_GET_RECSRC_NAMES, &ei) == -1)
{
perror ("SNDCTL_DSP_GET_RECSRC_NAMES");
exit (-1);
}
if (argc == 2)
{
for (i = 0; i < ei.nvalues; i++)
printf ("Rec source #%d = '%s'\n", i, ei.strings + ei.strindex[i]);
exit (0);
}
if (strcmp (argv[2], "?") == 0 || strcmp (argv[2], "-") == 0)
{
if (ioctl (fd, SNDCTL_DSP_GET_RECSRC, &src) == -1)
{
perror ("SNDCTL_DSP_GET_RECSRC");
exit (-1);
}
printf ("Current recording source is #%d\n", src);
printf ("Current recording source is #%d (%s)\n",
src, ei.strings + ei.strindex[src]);
exit (0);
}
src = 0;
for (i = 0; i < ei.nvalues; i++)
{
if (strcmp (argv[2], ei.strings + ei.strindex[i]) == 0)
{
if (ioctl (fd, SNDCTL_DSP_SET_RECSRC, &src) == -1)
{
perror ("SNDCTL_DSP_SET_RECSRC");
exit (-1);
}
exit (0);
}
src++;
}
fprintf (stderr, "What?\n");
exit (-1);
}
|