3#include <ossia/detail/config.hpp>
5#include <ossia/detail/dylib_loader.hpp>
7#include <alsa/asoundlib.h>
13#define snd_alloca(ptr, lib, type) \
16 *ptr = (snd_##type##_t*)alloca(lib.type##_sizeof()); \
17 memset(*ptr, 0, lib.type##_sizeof()); \
23 decltype(&::snd_pcm_open) pcm_open{};
24 decltype(&::snd_pcm_avail_update) pcm_avail_update{};
25 decltype(&::snd_pcm_drop) pcm_drop{};
26 decltype(&::snd_pcm_link) pcm_link{};
27 decltype(&::snd_pcm_poll_descriptors) pcm_poll_descriptors{};
28 decltype(&::snd_pcm_poll_descriptors_revents) pcm_poll_descriptors_revents{};
29 decltype(&::snd_pcm_poll_descriptors_count) pcm_poll_descriptors_count{};
30 decltype(&::snd_pcm_mmap_begin) pcm_mmap_begin{};
31 decltype(&::snd_pcm_mmap_commit) pcm_mmap_commit{};
32 decltype(&::snd_pcm_format_name) pcm_format_name{};
33 decltype(&::snd_pcm_status) pcm_status{};
34 decltype(&::snd_pcm_status_sizeof) pcm_status_sizeof{};
35 decltype(&::snd_pcm_status_get_state) pcm_status_get_state{};
36 decltype(&::snd_pcm_status_get_tstamp) pcm_status_get_tstamp{};
37 decltype(&::snd_pcm_status_get_trigger_tstamp) pcm_status_get_trigger_tstamp{};
38 decltype(&::snd_pcm_hw_params_malloc) pcm_hw_params_malloc{};
39 decltype(&::snd_pcm_hw_params_get_access) pcm_hw_params_get_access{};
40 decltype(&::snd_pcm_hw_params_set_periods_min) pcm_hw_params_set_periods_min{};
41 decltype(&::snd_pcm_hw_params_set_rate) pcm_hw_params_set_rate{};
42 decltype(&::snd_pcm_hw_params_set_period_size_near) pcm_hw_params_set_period_size_near{};
43 decltype(&::snd_ctl_open) ctl_open{};
44 decltype(&::snd_ctl_close) ctl_close{};
45 decltype(&::snd_ctl_card_info) ctl_card_info{};
46 decltype(&::snd_ctl_card_info_sizeof) ctl_card_info_sizeof{};
47 decltype(&::snd_pcm_hw_params_any) pcm_hw_params_any{};
48 decltype(&::snd_pcm_hw_params_sizeof) pcm_hw_params_sizeof{};
49 decltype(&::snd_pcm_hw_params_set_access) pcm_hw_params_set_access{};
50 decltype(&::snd_pcm_hw_params_get_format) pcm_hw_params_get_format{};
51 decltype(&::snd_pcm_hw_params_set_format) pcm_hw_params_set_format{};
52 decltype(&::snd_pcm_hw_params_set_channels) pcm_hw_params_set_channels{};
53 decltype(&::snd_pcm_hw_params_set_period_size) pcm_hw_params_set_period_size{};
54 decltype(&::snd_pcm_hw_params_set_buffer_size) pcm_hw_params_set_buffer_size{};
55 decltype(&::snd_pcm_hw_params_set_periods) pcm_hw_params_set_periods{};
56 decltype(&::snd_pcm_hw_params_set_periods_near) pcm_hw_params_set_periods_near{};
57 decltype(&::snd_pcm_hw_params_set_periods_integer) pcm_hw_params_set_periods_integer{};
58 decltype(&::snd_pcm_hw_params_set_rate_near) pcm_hw_params_set_rate_near{};
59 decltype(&::snd_pcm_hw_params_get_channels) pcm_hw_params_get_channels{};
60 decltype(&::snd_pcm_hw_params_get_channels_min) pcm_hw_params_get_channels_min{};
61 decltype(&::snd_pcm_hw_params_get_channels_max) pcm_hw_params_get_channels_max{};
62 decltype(&::snd_pcm_hw_params_get_rate) pcm_hw_params_get_rate{};
63 decltype(&::snd_pcm_hw_params_get_rate_min) pcm_hw_params_get_rate_min{};
64 decltype(&::snd_pcm_hw_params_get_rate_max) pcm_hw_params_get_rate_max{};
65 decltype(&::snd_pcm_hw_params_get_buffer_size) pcm_hw_params_get_buffer_size{};
66 decltype(&::snd_pcm_hw_params_get_buffer_size_min) pcm_hw_params_get_buffer_size_min{};
67 decltype(&::snd_pcm_hw_params_get_buffer_size_max) pcm_hw_params_get_buffer_size_max{};
68 decltype(&::snd_pcm_hw_params_get_period_size) pcm_hw_params_get_period_size{};
69 decltype(&::snd_pcm_hw_params_get_period_size_min) pcm_hw_params_get_period_size_min{};
70 decltype(&::snd_pcm_hw_params_get_period_size_max) pcm_hw_params_get_period_size_max{};
71 decltype(&::snd_pcm_hw_params_get_periods) pcm_hw_params_get_periods{};
72 decltype(&::snd_pcm_hw_params) pcm_hw_params{};
73 decltype(&::snd_pcm_hw_params_free) pcm_hw_params_free{};
74 decltype(&::snd_pcm_sw_params_malloc) pcm_sw_params_malloc{};
75 decltype(&::snd_pcm_sw_params_current) pcm_sw_params_current{};
76 decltype(&::snd_pcm_sw_params_sizeof) pcm_sw_params_sizeof{};
77 decltype(&::snd_pcm_sw_params_set_start_threshold) pcm_sw_params_set_start_threshold{};
78 decltype(&::snd_pcm_sw_params_set_avail_min) pcm_sw_params_set_avail_min{};
79 decltype(&::snd_pcm_sw_params_set_tstamp_mode) pcm_sw_params_set_tstamp_mode{};
80 decltype(&::snd_pcm_sw_params) pcm_sw_params{};
81 decltype(&::snd_pcm_sw_params_free) pcm_sw_params_free{};
82 decltype(&::snd_pcm_name) pcm_name{};
83 decltype(&::snd_pcm_state) pcm_state{};
84 decltype(&::snd_pcm_state_name) pcm_state_name{};
85 decltype(&::snd_pcm_writei) pcm_writei{};
86 decltype(&::snd_pcm_writen) pcm_writen{};
87 decltype(&::snd_pcm_prepare) pcm_prepare{};
88 decltype(&::snd_pcm_start) pcm_start{};
89 decltype(&::snd_pcm_recover) pcm_recover{};
90 decltype(&::snd_pcm_drain) pcm_drain{};
91 decltype(&::snd_pcm_close) pcm_close{};
92 decltype(&::snd_pcm_wait) pcm_wait{};
93 decltype(&::snd_strerror) strerror{};
94 decltype(&::snd_device_name_hint) device_name_hint{};
95 decltype(&::snd_device_name_get_hint) device_name_get_hint{};
96 decltype(&::snd_device_name_free_hint) device_name_free_hint{};
97 decltype(&::snd_card_next) card_next{};
98 decltype(&::snd_ctl_pcm_next_device) ctl_pcm_next_device{};
99 decltype(&::snd_ctl_pcm_info) ctl_pcm_info{};
100 decltype(&::snd_ctl_card_info_get_id) ctl_card_info_get_id{};
101 decltype(&::snd_ctl_card_info_get_name) ctl_card_info_get_name{};
102 decltype(&::snd_ctl_card_info_get_longname) ctl_card_info_get_longname{};
103 decltype(&::snd_ctl_card_info_get_driver) ctl_card_info_get_driver{};
104 decltype(&::snd_pcm_info_sizeof) pcm_info_sizeof{};
105 decltype(&::snd_pcm_info_set_device) pcm_info_set_device{};
106 decltype(&::snd_pcm_info_set_subdevice) pcm_info_set_subdevice{};
107 decltype(&::snd_pcm_info_set_stream) pcm_info_set_stream{};
108 decltype(&::snd_pcm_info_get_name) pcm_info_get_name{};
109 decltype(&::snd_pcm_hw_params_copy) pcm_hw_params_copy{};
110 decltype(&::snd_pcm_hw_params_test_rate) pcm_hw_params_test_rate{};
111 decltype(&::snd_pcm_hw_params_test_period_size) pcm_hw_params_test_period_size{};
112 decltype(&::snd_pcm_hw_params_test_buffer_size) pcm_hw_params_test_buffer_size{};
113 decltype(&::snd_pcm_hw_params_test_format) pcm_hw_params_test_format{};
114 decltype(&::snd_pcm_hw_params_test_channels) pcm_hw_params_test_channels{};
115 decltype(&::snd_pcm_hw_params_set_channels_near) pcm_hw_params_set_channels_near{};
116 decltype(&::snd_pcm_delay) pcm_delay{};
117 decltype(&::snd_pcm_resume) pcm_resume{};
120 static const libasound& instance()
122 static const libasound self;
127 dylib_loader library;
130 : library(
"libasound.so.2")
135 pcm_open = library.symbol<
decltype(&::snd_pcm_open)>(
"snd_pcm_open");
137 = library.symbol<
decltype(&::snd_pcm_avail_update)>(
"snd_pcm_avail_update");
138 pcm_drop = library.symbol<
decltype(&::snd_pcm_drop)>(
"snd_pcm_drop");
139 pcm_link = library.symbol<
decltype(&::snd_pcm_link)>(
"snd_pcm_link");
140 pcm_poll_descriptors = library.symbol<
decltype(&::snd_pcm_poll_descriptors)>(
141 "snd_pcm_poll_descriptors");
142 pcm_poll_descriptors_revents
143 = library.symbol<
decltype(&::snd_pcm_poll_descriptors_revents)>(
144 "snd_pcm_poll_descriptors_revents");
145 pcm_poll_descriptors_count
146 = library.symbol<
decltype(&::snd_pcm_poll_descriptors_count)>(
147 "snd_pcm_poll_descriptors_count");
149 = library.symbol<
decltype(&::snd_pcm_mmap_begin)>(
"snd_pcm_mmap_begin");
151 = library.symbol<
decltype(&::snd_pcm_mmap_commit)>(
"snd_pcm_mmap_commit");
153 = library.symbol<
decltype(&::snd_pcm_format_name)>(
"snd_pcm_format_name");
154 pcm_status = library.symbol<
decltype(&::snd_pcm_status)>(
"snd_pcm_status");
156 = library.symbol<
decltype(&::snd_pcm_status_sizeof)>(
"snd_pcm_status_sizeof");
157 pcm_status_get_state = library.symbol<
decltype(&::snd_pcm_status_get_state)>(
158 "snd_pcm_status_get_state");
159 pcm_status_get_tstamp = library.symbol<
decltype(&::snd_pcm_status_get_tstamp)>(
160 "snd_pcm_status_get_tstamp");
161 pcm_status_get_trigger_tstamp
162 = library.symbol<
decltype(&::snd_pcm_status_get_trigger_tstamp)>(
163 "snd_pcm_status_get_trigger_tstamp");
164 pcm_hw_params_malloc = library.symbol<
decltype(&::snd_pcm_hw_params_malloc)>(
165 "snd_pcm_hw_params_malloc");
166 pcm_hw_params_get_access = library.symbol<
decltype(&::snd_pcm_hw_params_get_access)>(
167 "snd_pcm_hw_params_get_access");
168 pcm_hw_params_set_periods_min
169 = library.symbol<
decltype(&::snd_pcm_hw_params_set_periods_min)>(
170 "snd_pcm_hw_params_set_periods_min");
171 pcm_hw_params_set_rate = library.symbol<
decltype(&::snd_pcm_hw_params_set_rate)>(
172 "snd_pcm_hw_params_set_rate");
173 pcm_hw_params_set_period_size_near
174 = library.symbol<
decltype(&::snd_pcm_hw_params_set_period_size_near)>(
175 "snd_pcm_hw_params_set_period_size_near");
176 ctl_open = library.symbol<
decltype(&::snd_ctl_open)>(
"snd_ctl_open");
177 ctl_close = library.symbol<
decltype(&::snd_ctl_close)>(
"snd_ctl_close");
178 ctl_card_info = library.symbol<
decltype(&::snd_ctl_card_info)>(
"snd_ctl_card_info");
179 ctl_card_info_sizeof = library.symbol<
decltype(&::snd_ctl_card_info_sizeof)>(
180 "snd_ctl_card_info_sizeof");
182 = library.symbol<
decltype(&::snd_pcm_hw_params_any)>(
"snd_pcm_hw_params_any");
183 pcm_hw_params_sizeof = library.symbol<
decltype(&::snd_pcm_hw_params_sizeof)>(
184 "snd_pcm_hw_params_sizeof");
185 pcm_hw_params_set_access = library.symbol<
decltype(&::snd_pcm_hw_params_set_access)>(
186 "snd_pcm_hw_params_set_access");
187 pcm_hw_params_get_format = library.symbol<
decltype(&::snd_pcm_hw_params_get_format)>(
188 "snd_pcm_hw_params_get_format");
189 pcm_hw_params_set_format = library.symbol<
decltype(&::snd_pcm_hw_params_set_format)>(
190 "snd_pcm_hw_params_set_format");
191 pcm_hw_params_set_channels
192 = library.symbol<
decltype(&::snd_pcm_hw_params_set_channels)>(
193 "snd_pcm_hw_params_set_channels");
194 pcm_hw_params_set_period_size
195 = library.symbol<
decltype(&::snd_pcm_hw_params_set_period_size)>(
196 "snd_pcm_hw_params_set_period_size");
197 pcm_hw_params_set_buffer_size
198 = library.symbol<
decltype(&::snd_pcm_hw_params_set_buffer_size)>(
199 "snd_pcm_hw_params_set_buffer_size");
200 pcm_hw_params_set_periods
201 = library.symbol<
decltype(&::snd_pcm_hw_params_set_periods)>(
202 "snd_pcm_hw_params_set_periods");
203 pcm_hw_params_set_periods_near
204 = library.symbol<
decltype(&::snd_pcm_hw_params_set_periods_near)>(
205 "snd_pcm_hw_params_set_periods_near");
206 pcm_hw_params_set_periods_integer
207 = library.symbol<
decltype(&::snd_pcm_hw_params_set_periods_integer)>(
208 "snd_pcm_hw_params_set_periods_integer");
209 pcm_hw_params_set_rate_near
210 = library.symbol<
decltype(&::snd_pcm_hw_params_set_rate_near)>(
211 "snd_pcm_hw_params_set_rate_near");
212 pcm_hw_params_get_channels
213 = library.symbol<
decltype(&::snd_pcm_hw_params_get_channels)>(
214 "snd_pcm_hw_params_get_channels");
215 pcm_hw_params_get_channels_min
216 = library.symbol<
decltype(&::snd_pcm_hw_params_get_channels_min)>(
217 "snd_pcm_hw_params_get_channels_min");
218 pcm_hw_params_get_channels_max
219 = library.symbol<
decltype(&::snd_pcm_hw_params_get_channels_max)>(
220 "snd_pcm_hw_params_get_channels_max");
221 pcm_hw_params_get_rate = library.symbol<
decltype(&::snd_pcm_hw_params_get_rate)>(
222 "snd_pcm_hw_params_get_rate");
223 pcm_hw_params_get_rate_min
224 = library.symbol<
decltype(&::snd_pcm_hw_params_get_rate_min)>(
225 "snd_pcm_hw_params_get_rate_min");
226 pcm_hw_params_get_rate_max
227 = library.symbol<
decltype(&::snd_pcm_hw_params_get_rate_max)>(
228 "snd_pcm_hw_params_get_rate_max");
229 pcm_hw_params_get_buffer_size
230 = library.symbol<
decltype(&::snd_pcm_hw_params_get_buffer_size)>(
231 "snd_pcm_hw_params_get_buffer_size");
232 pcm_hw_params_get_buffer_size_min
233 = library.symbol<
decltype(&::snd_pcm_hw_params_get_buffer_size_min)>(
234 "snd_pcm_hw_params_get_buffer_size_min");
235 pcm_hw_params_get_buffer_size_max
236 = library.symbol<
decltype(&::snd_pcm_hw_params_get_buffer_size_max)>(
237 "snd_pcm_hw_params_get_buffer_size_max");
238 pcm_hw_params_get_period_size
239 = library.symbol<
decltype(&::snd_pcm_hw_params_get_period_size)>(
240 "snd_pcm_hw_params_get_period_size");
241 pcm_hw_params_get_period_size_min
242 = library.symbol<
decltype(&::snd_pcm_hw_params_get_period_size_min)>(
243 "snd_pcm_hw_params_get_period_size_min");
244 pcm_hw_params_get_period_size_max
245 = library.symbol<
decltype(&::snd_pcm_hw_params_get_period_size_max)>(
246 "snd_pcm_hw_params_get_period_size_max");
247 pcm_hw_params_get_periods
248 = library.symbol<
decltype(&::snd_pcm_hw_params_get_periods)>(
249 "snd_pcm_hw_params_get_periods");
250 pcm_hw_params = library.symbol<
decltype(&::snd_pcm_hw_params)>(
"snd_pcm_hw_params");
252 = library.symbol<
decltype(&::snd_pcm_hw_params_free)>(
"snd_pcm_hw_params_free");
253 pcm_sw_params_malloc = library.symbol<
decltype(&::snd_pcm_sw_params_malloc)>(
254 "snd_pcm_sw_params_malloc");
255 pcm_sw_params_current = library.symbol<
decltype(&::snd_pcm_sw_params_current)>(
256 "snd_pcm_sw_params_current");
257 pcm_sw_params_sizeof = library.symbol<
decltype(&::snd_pcm_sw_params_sizeof)>(
258 "snd_pcm_sw_params_sizeof");
259 pcm_sw_params_set_start_threshold
260 = library.symbol<
decltype(&::snd_pcm_sw_params_set_start_threshold)>(
261 "snd_pcm_sw_params_set_start_threshold");
262 pcm_sw_params_set_avail_min
263 = library.symbol<
decltype(&::snd_pcm_sw_params_set_avail_min)>(
264 "snd_pcm_sw_params_set_avail_min");
265 pcm_sw_params_set_tstamp_mode
266 = library.symbol<
decltype(&::snd_pcm_sw_params_set_tstamp_mode)>(
267 "snd_pcm_sw_params_set_tstamp_mode");
268 pcm_sw_params = library.symbol<
decltype(&::snd_pcm_sw_params)>(
"snd_pcm_sw_params");
270 = library.symbol<
decltype(&::snd_pcm_sw_params_free)>(
"snd_pcm_sw_params_free");
271 pcm_name = library.symbol<
decltype(&::snd_pcm_name)>(
"snd_pcm_name");
272 pcm_state = library.symbol<
decltype(&::snd_pcm_state)>(
"snd_pcm_state");
274 = library.symbol<
decltype(&::snd_pcm_state_name)>(
"snd_pcm_state_name");
275 pcm_writei = library.symbol<
decltype(&::snd_pcm_writei)>(
"snd_pcm_writei");
276 pcm_writen = library.symbol<
decltype(&::snd_pcm_writen)>(
"snd_pcm_writen");
277 pcm_prepare = library.symbol<
decltype(&::snd_pcm_prepare)>(
"snd_pcm_prepare");
278 pcm_start = library.symbol<
decltype(&::snd_pcm_start)>(
"snd_pcm_start");
279 pcm_recover = library.symbol<
decltype(&::snd_pcm_recover)>(
"snd_pcm_recover");
280 pcm_drain = library.symbol<
decltype(&::snd_pcm_drain)>(
"snd_pcm_drain");
281 pcm_close = library.symbol<
decltype(&::snd_pcm_close)>(
"snd_pcm_close");
282 pcm_wait = library.symbol<
decltype(&::snd_pcm_wait)>(
"snd_pcm_wait");
283 strerror = library.symbol<
decltype(&::snd_strerror)>(
"snd_strerror");
285 = library.symbol<
decltype(&::snd_device_name_hint)>(
"snd_device_name_hint");
286 device_name_get_hint = library.symbol<
decltype(&::snd_device_name_get_hint)>(
287 "snd_device_name_get_hint");
288 device_name_free_hint = library.symbol<
decltype(&::snd_device_name_free_hint)>(
289 "snd_device_name_free_hint");
290 card_next = library.symbol<
decltype(&::snd_card_next)>(
"snd_card_next");
291 ctl_pcm_next_device = library.symbol<
decltype(&::snd_ctl_pcm_next_device)>(
"snd_ctl_pcm_next_device");
292 ctl_pcm_info = library.symbol<
decltype(&::snd_ctl_pcm_info)>(
"snd_ctl_pcm_info");
293 ctl_card_info_get_id = library.symbol<
decltype(&::snd_ctl_card_info_get_id)>(
"snd_ctl_card_info_get_id");
294 ctl_card_info_get_name = library.symbol<
decltype(&::snd_ctl_card_info_get_name)>(
"snd_ctl_card_info_get_name");
295 ctl_card_info_get_longname = library.symbol<
decltype(&::snd_ctl_card_info_get_longname)>(
"snd_ctl_card_info_get_longname");
296 ctl_card_info_get_driver = library.symbol<
decltype(&::snd_ctl_card_info_get_driver)>(
"snd_ctl_card_info_get_driver");
297 pcm_info_sizeof = library.symbol<
decltype(&::snd_pcm_info_sizeof)>(
"snd_pcm_info_sizeof");
298 pcm_info_set_device = library.symbol<
decltype(&::snd_pcm_info_set_device)>(
"snd_pcm_info_set_device");
299 pcm_info_set_subdevice = library.symbol<
decltype(&::snd_pcm_info_set_subdevice)>(
"snd_pcm_info_set_subdevice");
300 pcm_info_set_stream = library.symbol<
decltype(&::snd_pcm_info_set_stream)>(
"snd_pcm_info_set_stream");
301 pcm_info_get_name = library.symbol<
decltype(&::snd_pcm_info_get_name)>(
"snd_pcm_info_get_name");
302 pcm_hw_params_copy = library.symbol<
decltype(&::snd_pcm_hw_params_copy)>(
"snd_pcm_hw_params_copy");
303 pcm_hw_params_test_rate = library.symbol<
decltype(&::snd_pcm_hw_params_test_rate)>(
"snd_pcm_hw_params_test_rate");
304 pcm_hw_params_test_period_size = library.symbol<
decltype(&::snd_pcm_hw_params_test_period_size)>(
"snd_pcm_hw_params_test_period_size");
305 pcm_hw_params_test_buffer_size = library.symbol<
decltype(&::snd_pcm_hw_params_test_buffer_size)>(
"snd_pcm_hw_params_test_buffer_size");
306 pcm_hw_params_test_format = library.symbol<
decltype(&::snd_pcm_hw_params_test_format)>(
"snd_pcm_hw_params_test_format");
307 pcm_hw_params_test_channels = library.symbol<
decltype(&::snd_pcm_hw_params_test_channels)>(
"snd_pcm_hw_params_test_channels");
308 pcm_hw_params_set_channels_near = library.symbol<
decltype(&::snd_pcm_hw_params_set_channels_near)>(
"snd_pcm_hw_params_set_channels_near");
309 pcm_delay = library.symbol<
decltype(&::snd_pcm_delay)>(
"snd_pcm_delay");
310 pcm_resume = library.symbol<
decltype(&::snd_pcm_resume)>(
"snd_pcm_resume");
315 assert(snd_pcm_open);
316 assert(snd_pcm_avail_update);
317 assert(snd_pcm_drop);
318 assert(snd_pcm_link);
319 assert(snd_pcm_poll_descriptors);
320 assert(snd_pcm_poll_descriptors_revents);
321 assert(snd_pcm_poll_descriptors_count);
322 assert(snd_pcm_mmap_begin);
323 assert(snd_pcm_mmap_commit);
324 assert(snd_pcm_format_name);
325 assert(snd_pcm_status);
326 assert(snd_pcm_status_sizeof);
327 assert(snd_pcm_status_get_state);
328 assert(snd_pcm_status_get_tstamp);
329 assert(snd_pcm_status_get_trigger_tstamp);
330 assert(snd_pcm_hw_params_malloc);
331 assert(snd_pcm_hw_params_get_access);
332 assert(snd_pcm_hw_params_set_periods_min);
333 assert(snd_pcm_hw_params_set_rate);
334 assert(snd_pcm_hw_params_set_period_size_near);
335 assert(snd_ctl_open);
336 assert(snd_ctl_close);
337 assert(snd_ctl_card_info);
338 assert(snd_ctl_card_info_sizeof);
339 assert(snd_pcm_hw_params_any);
340 assert(snd_pcm_hw_params_sizeof);
341 assert(snd_pcm_hw_params_set_access);
342 assert(snd_pcm_hw_params_get_format);
343 assert(snd_pcm_hw_params_set_format);
344 assert(snd_pcm_hw_params_set_channels);
345 assert(snd_pcm_hw_params_set_period_size);
346 assert(snd_pcm_hw_params_set_buffer_size);
347 assert(snd_pcm_hw_params_set_periods);
348 assert(snd_pcm_hw_params_set_periods_near);
349 assert(snd_pcm_hw_params_set_periods_integer);
350 assert(snd_pcm_hw_params_set_rate_near);
351 assert(snd_pcm_hw_params_get_channels);
352 assert(snd_pcm_hw_params_get_channels_min);
353 assert(snd_pcm_hw_params_get_channels_max);
354 assert(snd_pcm_hw_params_get_rate);
355 assert(snd_pcm_hw_params_get_rate_min);
356 assert(snd_pcm_hw_params_get_rate_max);
357 assert(snd_pcm_hw_params_get_buffer_size);
358 assert(snd_pcm_hw_params_get_buffer_size_min);
359 assert(snd_pcm_hw_params_get_buffer_size_max);
360 assert(snd_pcm_hw_params_get_period_size);
361 assert(snd_pcm_hw_params_get_period_size_min);
362 assert(snd_pcm_hw_params_get_period_size_max);
363 assert(snd_pcm_hw_params_get_periods);
364 assert(snd_pcm_hw_params);
365 assert(snd_pcm_hw_params_free);
366 assert(snd_pcm_sw_params_malloc);
367 assert(snd_pcm_sw_params_current);
368 assert(snd_pcm_sw_params_sizeof);
369 assert(snd_pcm_sw_params_set_start_threshold);
370 assert(snd_pcm_sw_params_set_avail_min);
371 assert(snd_pcm_sw_params_set_tstamp_mode);
372 assert(snd_pcm_sw_params);
373 assert(snd_pcm_sw_params_free);
374 assert(snd_pcm_name);
375 assert(snd_pcm_state);
376 assert(snd_pcm_state_name);
377 assert(snd_pcm_writei);
378 assert(snd_pcm_writen);
379 assert(snd_pcm_prepare);
380 assert(snd_pcm_start);
381 assert(snd_pcm_recover);
382 assert(snd_pcm_drain);
383 assert(snd_pcm_close);
384 assert(snd_pcm_wait);
385 assert(snd_strerror);
386 assert(snd_device_name_hint);
387 assert(snd_device_name_get_hint);
388 assert(snd_device_name_free_hint);