/**
* @file adin_mic_linux.c
*
*
* @brief マイク入力 (Linux) - デフォルトデバイス
*
* マイク入力のための低レベル関数です.
* インタフェースを明示指定しない (-input mic) 場合に呼ばれます.
* ALSA, PulesAudio, OSS, ESD の順で最初に見つかったものが使用されます.
* それぞれの API を明示的に指定したい場合は "-input" にそれぞれ
* "alsa", "oss", "pulseaudio", "esd" を指定してください。
*
*
* @brief Microphone input on Linux - default device
*
* Low level I/O functions for microphone input on Linux.
* This will be called when no device was explicitly specified ("-input mic").
* ALSA, PulseAudio, OSS, ESD will be chosen in this order at compilation time.
* "-input alsa", "-input oss", "-input pulseaudio" or "-input esd" to
* specify which API to use.
*
*
* @author Akinobu LEE
* @date Sun Feb 13 16:18:26 2005
*
* $Revision: 1.8 $
*
*/
/*
* Copyright (c) 1991-2012 Kawahara Lab., Kyoto University
* Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology
* Copyright (c) 2005-2012 Julius project team, Nagoya Institute of Technology
* All rights reserved
*/
#include
#include
/**
* Device initialization: check device capability and open for recording.
*
* @param sfreq [in] required sampling frequency.
* @param dummy [in] a dummy data
*
* @return TRUE on success, FALSE on failure.
*/
boolean
adin_mic_standby(int sfreq, void *dummy)
{
#if defined(HAS_ALSA)
return(adin_alsa_standby(sfreq, dummy));
#elif defined(HAS_OSS)
return(adin_oss_standby(sfreq, dummy));
#elif defined(HAS_PULSEAUDIO)
return(adin_pulseaudio_standby(sfreq, dummy));
#elif defined(HAS_ESD)
return(adin_esd_standby(sfreq, dummy));
#else /* other than Linux */
jlog("Error: neither of pulseaudio/alsa/oss/esd device is available\n");
return FALSE;
#endif
}
/**
* Start recording.
*
* @param pathname [in] path name to open or NULL for default
*
* @return TRUE on success, FALSE on failure.
*/
boolean
adin_mic_begin(char *pathname)
{
#if defined(HAS_ALSA)
return(adin_alsa_begin(pathname));
#elif defined(HAS_OSS)
return(adin_oss_begin(pathname));
#elif defined(HAS_PULSEAUDIO)
return(adin_pulseaudio_begin(pathname));
#elif defined(HAS_ESD)
return(adin_esd_begin(pathname));
#else /* other than Linux */
jlog("Error: neither of pulseaudio/alsa/oss/esd device is available\n");
return FALSE;
#endif
}
/**
* Stop recording.
*
* @return TRUE on success, FALSE on failure.
*/
boolean
adin_mic_end()
{
#if defined(HAS_ALSA)
return(adin_alsa_end());
#elif defined(HAS_OSS)
return(adin_oss_end());
#elif defined(HAS_PULSEAUDIO)
return(adin_pulseaudio_end());
#elif defined(HAS_ESD)
return(adin_esd_end());
#else /* other than Linux */
jlog("Error: neither of pulseaudio/alsa/oss/esd device is available\n");
return FALSE;
#endif
}
/**
* @brief Read samples from device
*
* Try to read @a sampnum samples and returns actual number of recorded
* samples currently available. This function will block until
* at least one sample can be obtained.
*
* @param buf [out] samples obtained in this function
* @param sampnum [in] wanted number of samples to be read
*
* @return actural number of read samples, -2 if an error occured.
*/
int
adin_mic_read(SP16 *buf, int sampnum)
{
#if defined(HAS_ALSA)
return(adin_alsa_read(buf, sampnum));
#elif defined(HAS_OSS)
return(adin_oss_read(buf, sampnum));
#elif defined(HAS_PULSEAUDIO)
return(adin_pulseaudio_read(buf, sampnum));
#elif defined(HAS_ESD)
return(adin_esd_read(buf, sampnum));
#else /* other than Linux */
jlog("Error: neither of pulseaudio/alsa/oss/esd device is available\n");
return -2;
#endif
}
/**
*
* Function to return current input source device name
*
* @return string of current input device name.
*
*/
char *
adin_mic_input_name()
{
#if defined(HAS_ALSA)
return(adin_alsa_input_name());
#elif defined(HAS_OSS)
return(adin_oss_input_name());
#elif defined(HAS_PULSEAUDIO)
return(adin_pulseaudio_input_name());
#elif defined(HAS_ESD)
return(adin_esd_input_name());
#else /* other than Linux */
return("Error: neither of pulseaudio/alsa/oss/esd device is available\n");
#endif
}