00001 00040 /* adin_mic_sp.c --- adin microphone library for spAudio 00041 * by Hideki Banno */ 00042 00043 #include <sp/spAudioLib.h> 00044 00045 #include <sent/stddefs.h> 00046 #include <sent/adin.h> 00047 00048 static spAudio audio = NULL; 00049 static long buffer_length = 256; 00050 00051 static float rate; 00052 00061 boolean 00062 adin_mic_standby(int sfreq, void *dummy) 00063 { 00064 rate = sfreq; 00065 if (adin_mic_start() == FALSE) return FALSE; 00066 if (adin_mic_stop() == FALSE) return FALSE; 00067 return TRUE; 00068 } 00069 00075 boolean 00076 adin_mic_start() 00077 { 00078 if (audio == NULL) { 00079 audio = spInitAudio(); 00080 } 00081 spSetAudioSampleRate(audio, rate); 00082 spSetAudioChannel(audio, 1); 00083 spSetAudioSampleBit(audio, 16); 00084 #ifdef SP_AUDIO_NONBLOCKING 00085 spSetAudioBlockingMode(audio, SP_AUDIO_NONBLOCKING); 00086 #endif 00087 00088 if (!spOpenAudioDevice(audio, "ro")) { 00089 j_printerr("Error: adin_mic_sp: spOpenAudioDevice\n"); 00090 return FALSE; 00091 } 00092 00093 return TRUE; 00094 } 00095 00101 boolean 00102 adin_mic_stop() 00103 { 00104 spCloseAudioDevice(audio); 00105 return TRUE; 00106 } 00107 00120 int 00121 adin_mic_read(SP16 *buf, int sampnum) 00122 { 00123 long nread; 00124 00125 #ifdef SP_AUDIO_NONBLOCKING 00126 nread = sampnum; 00127 #else 00128 if (sampnum <= buffer_length) { 00129 nread = sampnum; 00130 } else { 00131 nread = buffer_length; 00132 } 00133 #endif 00134 nread = spReadAudio(audio, (short *)buf, nread); 00135 00136 return nread; 00137 }