* MS_SND_CARD_CAP_CAPTURE
* MS_SND_CARD_CAP_PLAYBACK
* MS_SND_CARD_CAP_CAPTURE|MS_SND_CARD_CAP_PLAYBACK
* MS_SND_CARD_CAP_BUILTIN_ECHO_CANCELLER
*
*
* @param obj A sound card object.
*
* Returns: A unsigned int if successfull, 0 otherwise.
*/
MS2_PUBLIC unsigned int ms_snd_card_get_capabilities(const MSSndCard *obj);
/**
* Returns the sound card minimal latency (playback+record), in milliseconds.
* This value is to be used by the software echo cancellers to know where to search for the echo (optimization).
* Typically, an echo shall not be found before the value returned by this function.
* If this value is not known, then it should return 0.
* @param obj A sound card object.
**/
MS2_PUBLIC int ms_snd_card_get_minimal_latency(MSSndCard *obj);
/**
* Set some mixer level value.
*
*
* MS_SND_CARD_MASTER,
* MS_SND_CARD_PLAYBACK,
* MS_SND_CARD_CAPTURE
*
* Note: not implemented on all sound card filters.
*
* @param obj A sound card object.
* @param e A sound card mixer object.
* @param percent A volume level.
*
*/
MS2_PUBLIC void ms_snd_card_set_level(MSSndCard *obj, MSSndCardMixerElem e, int percent);
/**
* Get some mixer level value.
*
*
* MS_SND_CARD_MASTER,
* MS_SND_CARD_PLAYBACK,
* MS_SND_CARD_CAPTURE
*
* Note: not implemented on all sound card filters.
*
* @param obj A sound card object.
* @param e A sound card mixer object.
*
* Returns: A int if successfull, <0 otherwise.
*/
MS2_PUBLIC int ms_snd_card_get_level(MSSndCard *obj, MSSndCardMixerElem e);
/**
* Set some source for capture.
*
*
* MS_SND_CARD_MIC,
* MS_SND_CARD_LINE
*
* Note: not implemented on all sound card filters.
*
* @param obj A sound card object.
* @param c A sound card capture value.
*
* Returns: A int if successfull, 0 otherwise.
*/
MS2_PUBLIC void ms_snd_card_set_capture(MSSndCard *obj, MSSndCardCapture c);
/**
* Set some mixer control.
*
*
* MS_SND_CARD_MASTER_MUTE, -> 0: unmute, 1: mute
* MS_SND_CARD_PLAYBACK_MUTE, -> 0: unmute, 1: mute
* MS_SND_CARD_CAPTURE_MUTE -> 0: unmute, 1: mute
*
* Note: not implemented on all sound card filters.
*
* @param obj A sound card object.
* @param e A sound card control object.
* @param val A value for control.
*
* Returns: 0 if successfull, <0 otherwise.
*/
MS2_PUBLIC int ms_snd_card_set_control(MSSndCard *obj, MSSndCardControlElem e, int val);
/**
* Get some mixer control.
*
*
* MS_SND_CARD_MASTER_MUTE, -> return 0: unmute, 1: mute
* MS_SND_CARD_PLAYBACK_MUTE, -> return 0: unmute, 1: mute
* MS_SND_CARD_CAPTURE_MUTE -> return 0: unmute, 1: mute
*
* Note: not implemented on all sound card filters.
*
* @param obj A sound card object.
* @param e A sound card mixer object.
*
* Returns: A int if successfull, <0 otherwise.
*/
MS2_PUBLIC int ms_snd_card_get_control(MSSndCard *obj, MSSndCardControlElem e);
/**
* Get preferred sample rate
*
* @param obj A sound card object.
*
* Returns: return sample rate in khz
*/
MS2_PUBLIC int ms_snd_card_get_preferred_sample_rate(const MSSndCard *obj);
/**
* set preferred sample rate. The underlying card will try to avoid any resampling for this samplerate.
*
* @param obj A sound card object.
* @param rate sampling rate.
*
* Returns: 0 if successfull, <0 otherwise.
*/
MS2_PUBLIC int ms_snd_card_set_preferred_sample_rate(MSSndCard *obj,int rate);
/**
* Enable application to tell that the soundcard is going to be used or will cease to be used.
* This is recommended for cards which are known to be slow (see flag MS_SND_CARD_CAP_IS_SLOW ).
**/
MS2_PUBLIC void ms_snd_card_set_usage_hint(MSSndCard *obj, bool_t is_going_to_be_used);
/**
* Used by application to notify whether audio access is allowed for the process.
* On most platform this function is useless, but in an iOS application using Callkit, the system decides when audio (through the AVAudioSession singleton) is open or closed.
* Such application needs to explicitely notify mediastreamer2 with ms_snd_card_notify_audio_session_activated() about the state of the audio session.
*
* @param obj A sound card object.
* @param actived TRUE if audio session is activated, FALSE otherwise.
*/
MS2_PUBLIC void ms_snd_card_notify_audio_session_activated(MSSndCard *obj, bool_t activated);
/**
* Used by application to tell the MSSndCard if rely on notifications of activation of audio session.
* When yesno is set to FALSE, the MSSndCard will not rely on notifications of activation of audio session, and will assume that audio is always usable.
* If set to TRUE, the mediastreamer2 will require explicit calls to ms_snd_card_notify_audio_session_activated().
*
* @param obj A sound card object.
* @param yesno TRUE if app notifies is activated, FALSE otherwise. The default value is FALSE.
*/
MS2_PUBLIC void ms_snd_card_app_notifies_activation(MSSndCard *obj, bool_t yesno);
/**
* Sets the stream type for this soundcard, default is VOICE
**/
MS2_PUBLIC void ms_snd_card_set_stream_type(MSSndCard *obj, MSSndCardStreamType type);
/**
* Gets the stream type for this soundcard, default is VOICE
**/
MS2_PUBLIC MSSndCardStreamType ms_snd_card_get_stream_type(MSSndCard *obj);
/**
* Create a alsa card with user supplied pcm name and mixer name.
* @param pcmdev The pcm device name following alsa conventions (ex: plughw:0)
* @param mixdev The mixer device name following alsa conventions.
*
* Returns: a MSSndCard object, NULL if alsa support is not available.
*/
MS2_PUBLIC MSSndCard * ms_alsa_card_new_custom(const char *pcmdev, const char *mixdev);
/**
* Use supplied sample rate to open alsa devices (forced rate).
* Has no interest except workarouding driver bugs.
* Use -1 to revert to normal behavior.
**/
MS2_PUBLIC void ms_alsa_card_set_forced_sample_rate(int samplerate);
/** @} */
#ifdef __cplusplus
}
#endif
/** @} */
#endif