#define SND_CTL_NONBLOCK 0x0001 #define SND_CTL_ASYNC 0x0002
開く時のモード
SND_CTL_NONBLOCK
非ブロッキングモード
SND_CTL_ASYNC
非同期通知
サウンドカード
int snd_card_next(int *card);
物理サウンドカードを反復処理して列挙する。
※仮想サウンドカードでは機能しない。
たとえば、サウンドカードが2枚 (index: 0, 1) ある場合、card 引数の設定値と、戻った時の値は、次のようになる。
-1 -> 0 / 0 -> 1 / 1 -> -1
※仮想サウンドカードでは機能しない。
たとえば、サウンドカードが2枚 (index: 0, 1) ある場合、card 引数の設定値と、戻った時の値は、次のようになる。
-1 -> 0 / 0 -> 1 / 1 -> -1
card
現在のインデックスを指定しておく。関数が戻ると、次のインデックスが返る。
-1 を設定した場合、最初のカードのインデックスが返る。
-1 が返った場合、終端。
-1 を設定した場合、最初のカードのインデックスが返る。
-1 が返った場合、終端。
戻り値
0 で成功、負の値でエラーコード
int snd_card_get_index(const char *name);
カードの文字列から、カードのインデックスを取得する。
物理サウンドカードでのみ機能し、仮想カードでは機能しない。
物理サウンドカードでのみ機能し、仮想カードでは機能しない。
name
指定できる値は、以下の通り。
カードのインデックスを、文字列として指定。
カードの ID 文字列。
制御デバイス名 (/dev/snd/controlC0 など)。
カードのインデックスを、文字列として指定。
カードの ID 文字列。
制御デバイス名 (/dev/snd/controlC0 など)。
戻り値
成功時、インデックス。負の値でエラーコード
int snd_card_get_name(int card, char **name);
インデックスからカード名を取得
card
カードのインデックス
name
strdup で複製された文字列のポインタが返る。使用後は解放すること。
戻り値
0 で成功、負の値でエラーコード
サウンドカード操作
int snd_ctl_open(snd_ctl_t **ctl, const char *name, int mode);
サウンドカードを開く
ctl
ハンドルが返る
name
カードの名前。
デフォルトのカードは "default"。
カードインデックスで指定する場合、"hw:<index>" または "hw:CARD=<ID>" で指定する。
デフォルトのカードは "default"。
カードインデックスで指定する場合、"hw:<index>" または "hw:CARD=<ID>" で指定する。
mode
開くモード
戻り値
0 で成功、負の値でエラーコード
int snd_ctl_open_lconf(snd_ctl_t **ctl, const char *name, int mode, snd_config_t *lconf);
ローカル設定を使用して CTL を開く
name
ASCII 定義名
lconf
ローカル設定
int snd_ctl_open_fallback(snd_ctl_t **ctl, snd_config_t *root, const char *name, const char *orig_name, int mode);
フォールバック CTL を開く
root
設定のルート
name
ASCII 識別子
orig_name
オリジナル ASCII 名
int snd_ctl_nonblock(snd_ctl_t *ctl, int nonblock);
非ブロックモードにセット
nonblock
0 = block, 1 = nonblock mode, 2 = abort
戻り値
0 で成功、負の値でエラーコード
snd_ctl_type_t snd_ctl_type(snd_ctl_t *ctl);
コントロールのタイプを取得
戻り値
SND_CTL_TYPE_HW | カーネルレベル CTL |
---|---|
SND_CTL_TYPE_SHM | 共有メモリクライアント CTL |
SND_CTL_TYPE_INET | INET クライアント CTL (まだ実装されていない) |
SND_CTL_TYPE_EXT | 外部制御プラグイン |
SND_CTL_TYPE_REMAP | 制御機能の再マッピング |
電源
int snd_ctl_set_power_state(snd_ctl_t *ctl, unsigned int state);
電源状態を、指定された SND_CTL_POWER_* 値に設定し、電源管理を実行する。
state
SND_CTL_POWER_D0
SND_CTL_POWER_D1
SND_CTL_POWER_D2
SND_CTL_POWER_D3
SND_CTL_POWER_D3cold
SND_CTL_POWER_D3hot
SND_CTL_POWER_D1
SND_CTL_POWER_D2
SND_CTL_POWER_D3
SND_CTL_POWER_D3cold
SND_CTL_POWER_D3hot
戻り値
0 で成功、負の値でエラーコード
非同期
int snd_async_add_ctl_handler(snd_async_handler_t **handler, snd_ctl_t *ctl, snd_async_callback_t callback, void *private_data); typedef void (*snd_async_callback_t)(snd_async_handler_t *handler);
非同期ハンドラを追加
handler
ハンドラが返る
private_data
コールバックに渡されるデータ
戻り値
0 で成功、負の値でエラーコード
poll
int snd_ctl_poll_descriptors(snd_ctl_t *ctl, struct pollfd *pfds, unsigned int space);
pollfd に、イベントを待つのに必要な情報をセットする。
pfds
この配列にデータがセットされる
space
配列の数
戻り値
実際にセットされた数
int snd_ctl_poll_descriptors_revents(snd_ctl_t *ctl, struct pollfd *pfds, unsigned int nfds, unsigned short *revents);
pollfd のデータの中から、ALSA イベントの revents の値を返す (pollfd の revents の値)。
nfds
pfds 配列の数
revents
値が返る
戻り値
0 で成功、負の値でエラーコード
イベント
int snd_ctl_subscribe_events(snd_ctl_t *ctl, int subscribe);
イベントの通知を設定。
(poll、snd_async_add_ctl_handler、snd_ctl_read)
(poll、snd_async_add_ctl_handler、snd_ctl_read)
subscribe
0 = 登録解除, 1 = 登録, -1 = 登録されているか確認
戻り値
0 で成功、負の値でエラーコード
int snd_ctl_wait(snd_ctl_t *ctl, int timeout);
少なくとも1つのイベントが保留中になるまで待つ。
timeout
待機する最大時間 (ミリ秒)
戻り値
0 で成功、負の値でエラーコード
snd_ctl_event_t
snd_ctl_event_type_t snd_ctl_event_get_type(const snd_ctl_event_t *obj);
イベントタイプを取得
戻り値
SND_CTL_EVENT_ELEM : 要素関連イベント
unsigned int snd_ctl_event_elem_get_mask(const snd_ctl_event_t *obj);
イベントのイベントマスクを取得
戻り値
イベントマスク。
SND_CTL_EVENT_MASK_REMOVE | 要素が削除された。 すべてのビットが ON のため、最初にこの値をチェックし、その後は他のマスクをチェックしないこと。 |
---|---|
SND_CTL_EVENT_MASK_VALUE | 値の変更 |
SND_CTL_EVENT_MASK_INFO | 情報の変更 |
SND_CTL_EVENT_MASK_ADD | 要素の追加 |
SND_CTL_EVENT_MASK_TLV | TLVの値が変更 |
イベントの要素識別子の情報取得
snd_ctl_elem_iface_t snd_ctl_event_elem_get_interface(const snd_ctl_event_t *obj);
イベントの要素のインターフェースを取得
PCM