⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 audio-pcm.c

📁 网络时间协议NTP 源码 版本v4.2.0b 该源码用于linux平台下
💻 C
字号:
/* * audio-pcm.c - Scope out the PCM audio stuff */#ifdef HAVE_CONFIG_H# include <config.h>#endif#if defined(HAVE_MACHINE_SOUNDCARD_H) || defined(HAVE_SYS_SOUNDCARD_H)#include "audio.h"#include "ntp_stdlib.h"#include "ntp_syslog.h"#ifdef HAVE_UNISTD_H# include <unistd.h>#endif#include <stdio.h>#include "ntp_string.h"#ifdef HAVE_SYS_IOCTL_H#include <sys/ioctl.h>#endif /* HAVE_SYS_IOCTL_H */#include <fcntl.h>#ifdef HAVE_MACHINE_SOUNDCARD_H# include <machine/soundcard.h># define PCM_STYLE_SOUND#else# ifdef HAVE_SYS_SOUNDCARD_H#  include <sys/soundcard.h>#  define PCM_STYLE_SOUND# endif#endif/* * Global variables */static int ctl_fd;		/* audio control file descriptor */const char *m_names[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES ;voidd_fmt(      unsigned int format      ){  if (format & AFMT_MU_LAW)	printf("MU_LAW ");  if (format & AFMT_A_LAW)	printf("A_LAW ");  if (format & AFMT_IMA_ADPCM)	printf("IMA_ADPCM ");  if (format & AFMT_U8)		printf("U8 ");  if (format & AFMT_S16_LE)	printf("S16_LE ");  if (format & AFMT_S16_BE)	printf("S16_BE ");  if (format & AFMT_S8)		printf("S8 ");  if (format & AFMT_U16_LE)	printf("U16_LE ");  if (format & AFMT_U16_BE)	printf("U16_BE ");  if (format & AFMT_MPEG)	printf("MPEG ");  if (format & AFMT_AC3)	printf("AC3 ");  printf("\n");}voidd_mixer(	unsigned int mixer	){  int i;  int n = 0;  for (i = 0; i < SOUND_MIXER_NRDEVICES; ++i)    if ((1 << i) & mixer) {      if (n)	printf(", ");      printf("%s", m_names[i]);      n = 1;    }  printf("\n");}intmain( ){	int	unit = 0;	/* device unit (0-3) */# define AI_DEV		"/dev/audio%d"# define AC_DEV		"/dev/mixer%d"	char ai_dev[30];	char ac_dev[30];	struct snd_size s_size;	snd_chan_param s_c_p;	snd_capabilities s_c;	int fd;	int rval;	char *dname = ai_dev;		/* device name */	char *actl = ac_dev;	int devmask = 0, recmask = 0, recsrc = 0;	(void)sprintf(ai_dev, AI_DEV, unit);	(void)sprintf(ac_dev, AC_DEV, unit);	/*	 * Open audio device. Do not complain if not there.	 */	fd = open(dname, O_RDWR | O_NONBLOCK, 0777);	if (fd < 0)		return (fd);	/*	 * Open audio control device.	 */	ctl_fd = open(actl, O_RDWR);	if (ctl_fd < 0) {		fprintf(stderr, "invalid control device <%s>\n", actl);		close(fd);		return(ctl_fd);	}	printf("input:   <%s> %d\n", dname, fd);	printf("control: <%s> %d\n", actl, ctl_fd);	if (ioctl(ctl_fd, SOUND_MIXER_READ_DEVMASK, &devmask) == -1)	    printf("SOUND_MIXER_READ_DEVMASK: %s\n", strerror(errno));	if (ioctl(ctl_fd, SOUND_MIXER_READ_RECMASK, &recmask) == -1)	    printf("SOUND_MIXER_READ_RECMASK: %s\n", strerror(errno));	if (ioctl(ctl_fd, SOUND_MIXER_READ_RECSRC, &recsrc) == -1)	    printf("SOUND_MIXER_READ_RECSRC: %s\n", strerror(errno));	printf("devmask: %#x recmask: %#x recsrc: %#x\n",		devmask, recmask, recsrc);	printf("Devmask: "); d_mixer(devmask);	printf("Recmask: "); d_mixer(recmask);	printf("RecSrc:  "); d_mixer(recsrc);	/*	 * Set audio device parameters.	 */	rval = fd;	if (ioctl(fd, AIOGSIZE, &s_size) == -1)	    printf("AIOGSIZE: %s\n", strerror(errno));	else	    printf("play_size %d, rec_size %d\n",		s_size.play_size, s_size.rec_size);	if (ioctl(fd, AIOGFMT, &s_c_p) == -1)	    printf("AIOGFMT: %s\n", strerror(errno));	else {	  printf("play_rate %lu, rec_rate %lu, play_format %#lx, rec_format %#lx\n",		 s_c_p.play_rate, s_c_p.rec_rate, s_c_p.play_format, s_c_p.rec_format);	  printf("Play format: "); d_fmt(s_c_p.play_format);	  printf("Rec format:  "); d_fmt(s_c_p.rec_format);	}}#endif /* HAVE_{MACHINE_SOUNDCARD,SYS_SOUNDCARD}_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -