libsent/src/adin/adin_mic_sol2.c

説明を見る。
00001 
00043 /*
00044  * Copyright (c) 1991-2006 Kawahara Lab., Kyoto University
00045  * Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology
00046  * Copyright (c) 2005-2006 Julius project team, Nagoya Institute of Technology
00047  * All rights reserved
00048  */
00049 
00050 #include <sent/stddefs.h>
00051 #include <sent/adin.h>
00052 
00053 #include <sys/types.h>
00054 #include <sys/stat.h>
00055 #include <fcntl.h>
00056 #include <errno.h>
00057 #include <sys/stropts.h>
00058 
00059 /* sound header */
00060 #include <sys/audioio.h>
00061 static int afd;                 
00062 static struct audio_info ainfo; 
00063 
00065 #define DEFAULT_DEVICE "/dev/audio"
00066 
00075 boolean
00076 adin_mic_standby(int sfreq, void *arg)
00077 {
00078   char *defaultdev = DEFAULT_DEVICE;
00079   char *devname;
00080 
00081   /* get device name if specified in $AUDIODEV */
00082   if ((devname = getenv("AUDIODEV")) == NULL) {
00083     devname = defaultdev;
00084   }
00085 
00086   /* open the device */
00087   if ((afd = open(devname, O_RDONLY)) == -1) {
00088     perror("adin_mic_standby: open audio device");
00089     return(FALSE);
00090   }
00091 
00092 #if 0
00093   {
00094     /* output hardware info (debug) */
00095     struct audio_device adev;
00096     if (ioctl(afd, AUDIO_GETDEV, &adev)== -1) {
00097       perror("adin_mic_standby: AUDIO_GETDEV");
00098       return(FALSE);
00099     }
00100     j_printf("Hardware name: %s\n",adev.name);
00101     j_printf("Hardware version: %s\n", adev.version);
00102     j_printf("Properties: %s\n", adev.config);
00103   }
00104 #endif
00105 
00106   /* get current setting */
00107   if (ioctl(afd, AUDIO_GETINFO, &ainfo) == -1) {
00108     perror("adin_mic_standby: AUDIO_GETINFO");
00109     return(FALSE);
00110   }
00111   /* pause for changing setting */
00112   ainfo.record.pause = 1;
00113   if (ioctl(afd, AUDIO_SETINFO, &ainfo) == -1) {
00114     perror("adin_mic_standby: AUDIO_SETINFO");
00115     return(FALSE);
00116   }
00117   /* flush current input buffer (in old format) */
00118   if((ioctl(afd , I_FLUSH , FLUSHR)) == -1) {
00119     perror("adin_mic_standby: I_FLUSH");
00120     return(FALSE);
00121   }
00122   /* set record setting */
00123   ainfo.record.sample_rate = sfreq;
00124   ainfo.record.channels = 1;
00125   ainfo.record.precision = 16;
00126   ainfo.record.encoding = AUDIO_ENCODING_LINEAR;
00127   /* ainfo.record.gain = J_DEF_VOLUME * (AUDIO_MAX_GAIN - AUDIO_MIN_GAIN) / 100 + AUDIO_MIN_GAIN; */
00128   ainfo.record.port = AUDIO_MICROPHONE;
00129   /* recording should be paused when initialized */
00130   ainfo.record.pause = 1;
00131 
00132   /* set audio setting, remain pause */
00133   if (ioctl(afd, AUDIO_SETINFO, &ainfo) == -1) {
00134     perror("adin_mic_standby: AUDIO_SETINFO");
00135     return(FALSE);
00136   }
00137 
00138   return(TRUE);
00139 
00140 }
00141 
00147 boolean
00148 adin_mic_start()
00149 {
00150   if (ioctl(afd, AUDIO_GETINFO, &ainfo) == -1) {
00151     perror("adin_mic_start: AUDIO_GETINFO");
00152     return(FALSE);
00153   }
00154   ainfo.record.pause = 0;
00155   if (ioctl(afd, AUDIO_SETINFO, &ainfo) == -1) {
00156     perror("adin_mic_start: AUDIO_SETINFO");
00157     return(FALSE);
00158   }
00159 
00160   return(TRUE);
00161 }
00162 
00168 boolean
00169 adin_mic_stop()
00170 {
00171   if (ioctl(afd, AUDIO_GETINFO, &ainfo) == -1) {
00172     perror("adin_mic_stop: AUDIO_GETINFO");
00173     return(FALSE);
00174   }
00175   ainfo.record.pause = 1;
00176   if (ioctl(afd, AUDIO_SETINFO, &ainfo) == -1) {
00177     perror("adin_mic_stop: AUDIO_SETINFO");
00178     return(FALSE);
00179   }
00180   return(TRUE);
00181 }
00182 
00195 int
00196 adin_mic_read(SP16 *buf, int sampnum)
00197 {
00198   int cnt;
00199   cnt = read(afd, buf, sampnum * sizeof(SP16)) / sizeof(SP16);
00200   if (cnt < 0) {
00201     perror("adin_mic_read: failed to read sample\n");
00202     return(-2);
00203   }
00204   return(cnt);
00205 }

Juliusに対してTue Dec 26 16:19:28 2006に生成されました。  doxygen 1.5.0