ALSA:コントロール(要素リスト)

snd_ctl_elem_list要素のリストを取得
snd_ctl_elem_list_get_countデバイスの項目の数を取得
snd_ctl_elem_list_get_used実際に使用されている項目の数を取得
操作
snd_ctl_elem_list_sizeofsnd_ctl_elem_list_t のサイズを取得
snd_ctl_elem_list_mallocsnd_ctl_elem_list_t を確保する
snd_ctl_elem_list_freesnd_ctl_elem_list_t を解放
snd_ctl_elem_list_clearクリア
snd_ctl_elem_list_copy複製
snd_ctl_elem_list_alloc_space要素リストのスペースを確保
snd_ctl_elem_list_free_space要素リストのスペースを解放
情報
snd_ctl_elem_list_set_offset最初の要素のインデックスをセット
snd_ctl_elem_list_get_id要素の識別子を取得
snd_ctl_elem_list_get_numid要素の numid を取得
snd_ctl_elem_list_get_interface要素のインターフェイスを取得
snd_ctl_elem_list_get_device要素のデバイスを取得
snd_ctl_elem_list_get_subdevice要素のサブデバイスを取得
snd_ctl_elem_list_get_name要素の名前を取得
snd_ctl_elem_list_get_index要素のインデックスを取得
要素の識別子のリスト
int snd_ctl_elem_list(snd_ctl_t *ctl, snd_ctl_elem_list_t *list);
サウンドカード・ドライバからデータを取得し、要素のリストをセットする。

実際にデータを読み込むには、あらかじめ項目分のスペースを確保する必要がある。
スペースが少なすぎる場合は、要素の一部がセットされる。
スペースが多すぎる場合は、一部が未使用のままになる。

まずは、snd_ctl_elem_list_malloc() を使用して、snd_ctl_elem_list_t を確保しておく。
次に、項目に必要な個数の情報を取得するため、この関数を実行する。
この時点では、スペースが確保されていないので、実際のデータは読み込まれない。
その後、snd_ctl_elem_list_get_count() を使って、必要な個数を取得し、snd_ctl_elem_list_alloc_space() で、必要な数のスペースを確保する。
この状態でもう一度この関数を実行すれば、実際にデータがセットされる。
戻り値
0 で成功、負の値でエラーコード
unsigned int snd_ctl_elem_list_get_count(const snd_ctl_elem_list_t *obj);
CTL デバイスに存在する要素の、合計数を取得する。

この情報は、snd_ctl_elem_list() が呼び出された後に存在する。
unsigned int snd_ctl_elem_list_get_used(const snd_ctl_elem_list_t *obj);
実際に情報がセットされた数を取得する。
操作
size_t snd_ctl_elem_list_sizeof(void);
snd_ctl_elem_list_t のサイズを取得
int snd_ctl_elem_list_malloc(snd_ctl_elem_list_t **ptr);
snd_ctl_elem_list_t を確保する
戻り値
0 で成功、負の値でエラーコード
void snd_ctl_elem_list_free(snd_ctl_elem_list_t *obj);
snd_ctl_elem_list_t を解放する。
snd_ctl_elem_list_alloc_space() を使用した場合は、この関数を呼び出す前に snd_ctl_elem_list_free_space() を使用する必要がある。
void snd_ctl_elem_list_clear(snd_ctl_elem_list_t *obj);
クリアする。
この関数を呼び出した後は、確保済みのスペースを解放できないため、事前に snd_ctl_elem_list_free_space() を呼び出す必要がある。
void snd_ctl_elem_list_copy(snd_ctl_elem_list_t *dst, const snd_ctl_elem_list_t *src);
浅い複製を実行する。
つまり、両方のリストは、要素に対して同じスペースを共有し、要素はコピーされない。
int snd_ctl_elem_list_alloc_space(snd_ctl_elem_list_t *obj, unsigned int entries);
各要素のスペースを確保する。
entries
割り当てる項目の数。
戻り値
0 で成功、負の値でエラーコード
void snd_ctl_elem_list_free_space(snd_ctl_elem_list_t *obj);
要素リストのスペースを解放
情報
void snd_ctl_elem_list_set_offset(snd_ctl_elem_list_t *obj, unsigned int val);
最初の要素のインデックスをセット
void snd_ctl_elem_list_get_id(const snd_ctl_elem_list_t *obj, unsigned int idx, snd_ctl_elem_id_t *ptr);
要素の識別子を取得
idx
項目のインデックス
unsigned int snd_ctl_elem_list_get_numid(const snd_ctl_elem_list_t *obj, unsigned int idx);
要素の numid を取得
snd_ctl_elem_iface_t snd_ctl_elem_list_get_interface(const snd_ctl_elem_list_t *obj, unsigned int idx);
要素のインターフェイスを取得
unsigned int snd_ctl_elem_list_get_device(const snd_ctl_elem_list_t *obj, unsigned int idx);
要素のデバイスを取得
unsigned int snd_ctl_elem_list_get_subdevice(const snd_ctl_elem_list_t *obj, unsigned int idx);
要素のサブデバイスを取得
const char *snd_ctl_elem_list_get_name(const snd_ctl_elem_list_t *obj, unsigned int idx);
要素の名前を取得
unsigned int snd_ctl_elem_list_get_index(const snd_ctl_elem_list_t *obj, unsigned int idx);
要素のインデックスを取得