libsent/src/adin/adin_mic_sol2.c

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

Generated on Tue Dec 18 15:59:54 2007 for Julius by  doxygen 1.5.4