~ubuntu-branches/debian/squeeze/ntp/squeeze-201010051545

« back to all changes in this revision

Viewing changes to util/audio-pcm.c

  • Committer: Bazaar Package Importer
  • Author(s): Matt Zimmerman
  • Date: 2004-10-11 16:10:27 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20041011161027-icyjbji8ujym633o
Tags: 1:4.2.0a-10ubuntu2
Use ntp.ubuntulinux.org instead of pool.ntp.org

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * audio-pcm.c - Scope out the PCM audio stuff
 
3
 */
 
4
#ifdef HAVE_CONFIG_H
 
5
# include <config.h>
 
6
#endif
 
7
 
 
8
#if defined(HAVE_MACHINE_SOUNDCARD_H) || defined(HAVE_SYS_SOUNDCARD_H)
 
9
 
 
10
#include "audio.h"
 
11
#include "ntp_stdlib.h"
 
12
#include "ntp_syslog.h"
 
13
#ifdef HAVE_UNISTD_H
 
14
# include <unistd.h>
 
15
#endif
 
16
#include <stdio.h>
 
17
#include "ntp_string.h"
 
18
 
 
19
#ifdef HAVE_SYS_IOCTL_H
 
20
#include <sys/ioctl.h>
 
21
#endif /* HAVE_SYS_IOCTL_H */
 
22
 
 
23
#include <fcntl.h>
 
24
 
 
25
#ifdef HAVE_MACHINE_SOUNDCARD_H
 
26
# include <machine/soundcard.h>
 
27
# define PCM_STYLE_SOUND
 
28
#else
 
29
# ifdef HAVE_SYS_SOUNDCARD_H
 
30
#  include <sys/soundcard.h>
 
31
#  define PCM_STYLE_SOUND
 
32
# endif
 
33
#endif
 
34
 
 
35
/*
 
36
 * Global variables
 
37
 */
 
38
static int ctl_fd;              /* audio control file descriptor */
 
39
 
 
40
const char *m_names[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES ;
 
41
 
 
42
void
 
43
d_fmt(
 
44
      unsigned int format
 
45
      )
 
46
{
 
47
 
 
48
  if (format & AFMT_MU_LAW)     printf("MU_LAW ");
 
49
  if (format & AFMT_A_LAW)      printf("A_LAW ");
 
50
  if (format & AFMT_IMA_ADPCM)  printf("IMA_ADPCM ");
 
51
  if (format & AFMT_U8)         printf("U8 ");
 
52
  if (format & AFMT_S16_LE)     printf("S16_LE ");
 
53
  if (format & AFMT_S16_BE)     printf("S16_BE ");
 
54
  if (format & AFMT_S8)         printf("S8 ");
 
55
  if (format & AFMT_U16_LE)     printf("U16_LE ");
 
56
  if (format & AFMT_U16_BE)     printf("U16_BE ");
 
57
  if (format & AFMT_MPEG)       printf("MPEG ");
 
58
  if (format & AFMT_AC3)        printf("AC3 ");
 
59
  printf("\n");
 
60
}
 
61
 
 
62
void
 
63
d_mixer(
 
64
        unsigned int mixer
 
65
        )
 
66
{
 
67
  int i;
 
68
  int n = 0;
 
69
 
 
70
  for (i = 0; i < SOUND_MIXER_NRDEVICES; ++i)
 
71
    if ((1 << i) & mixer) {
 
72
      if (n)
 
73
        printf(", ");
 
74
      printf("%s", m_names[i]);
 
75
      n = 1;
 
76
    }
 
77
  printf("\n");
 
78
}
 
79
 
 
80
int
 
81
main( )
 
82
{
 
83
        int     unit = 0;       /* device unit (0-3) */
 
84
# define AI_DEV         "/dev/audio%d"
 
85
# define AC_DEV         "/dev/mixer%d"
 
86
        char ai_dev[30];
 
87
        char ac_dev[30];
 
88
        struct snd_size s_size;
 
89
        snd_chan_param s_c_p;
 
90
        snd_capabilities s_c;
 
91
        int fd;
 
92
        int rval;
 
93
        char *dname = ai_dev;           /* device name */
 
94
        char *actl = ac_dev;
 
95
        int devmask = 0, recmask = 0, recsrc = 0;
 
96
 
 
97
        (void)sprintf(ai_dev, AI_DEV, unit);
 
98
        (void)sprintf(ac_dev, AC_DEV, unit);
 
99
 
 
100
        /*
 
101
         * Open audio device. Do not complain if not there.
 
102
         */
 
103
        fd = open(dname, O_RDWR | O_NONBLOCK, 0777);
 
104
        if (fd < 0)
 
105
                return (fd);
 
106
 
 
107
        /*
 
108
         * Open audio control device.
 
109
         */
 
110
        ctl_fd = open(actl, O_RDWR);
 
111
        if (ctl_fd < 0) {
 
112
                fprintf(stderr, "invalid control device <%s>\n", actl);
 
113
                close(fd);
 
114
                return(ctl_fd);
 
115
        }
 
116
 
 
117
        printf("input:   <%s> %d\n", dname, fd);
 
118
        printf("control: <%s> %d\n", actl, ctl_fd);
 
119
 
 
120
        if (ioctl(ctl_fd, SOUND_MIXER_READ_DEVMASK, &devmask) == -1)
 
121
            printf("SOUND_MIXER_READ_DEVMASK: %s\n", strerror(errno));
 
122
        if (ioctl(ctl_fd, SOUND_MIXER_READ_RECMASK, &recmask) == -1)
 
123
            printf("SOUND_MIXER_READ_RECMASK: %s\n", strerror(errno));
 
124
        if (ioctl(ctl_fd, SOUND_MIXER_READ_RECSRC, &recsrc) == -1)
 
125
            printf("SOUND_MIXER_READ_RECSRC: %s\n", strerror(errno));
 
126
 
 
127
        printf("devmask: %#x recmask: %#x recsrc: %#x\n",
 
128
                devmask, recmask, recsrc);
 
129
        printf("Devmask: "); d_mixer(devmask);
 
130
        printf("Recmask: "); d_mixer(recmask);
 
131
        printf("RecSrc:  "); d_mixer(recsrc);
 
132
 
 
133
        /*
 
134
         * Set audio device parameters.
 
135
         */
 
136
        rval = fd;
 
137
 
 
138
        if (ioctl(fd, AIOGSIZE, &s_size) == -1)
 
139
            printf("AIOGSIZE: %s\n", strerror(errno));
 
140
        else
 
141
            printf("play_size %d, rec_size %d\n",
 
142
                s_size.play_size, s_size.rec_size);
 
143
 
 
144
        if (ioctl(fd, AIOGFMT, &s_c_p) == -1)
 
145
            printf("AIOGFMT: %s\n", strerror(errno));
 
146
        else {
 
147
          printf("play_rate %lu, rec_rate %lu, play_format %#lx, rec_format %#lx\n",
 
148
                 s_c_p.play_rate, s_c_p.rec_rate, s_c_p.play_format, s_c_p.rec_format);
 
149
          printf("Play format: "); d_fmt(s_c_p.play_format);
 
150
          printf("Rec format:  "); d_fmt(s_c_p.rec_format);
 
151
        }
 
152
 
 
153
}
 
154
#endif /* HAVE_{MACHINE_SOUNDCARD,SYS_SOUNDCARD}_H */