From: Ralph Ronnquist Date: Mon, 24 Apr 2023 06:43:20 +0000 (+1000) Subject: restructuring X-Git-Url: https://git.rrq.au/?a=commitdiff_plain;h=12b8b31df1918875f91a1830743a23004f373466;p=rrq%2Flsp-utils.git restructuring --- diff --git a/Makefile b/Makefile index c9f3cef..d7bb8d8 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,31 @@ -# Building archives and the test0 app +# Building archives and the test? apps -PACKNL = ${HOME}/src/borta/packnl/packnl +default: .archives + +#################### +SUBDIR = $(dir $(wildcard */Makefile)) -LSPSRC = lsp-dbus-test.lsp -ARCHIVES = lsp-misc.a lsp-dbus.a -DOCS = lsp-dbus.a.8 lsp-misc.a.8 +.PHONY: .archives +.archives: + for D in ${SUBDIR} ; do $(MAKE) -C $$D ; done -default: test0 docs +.PHONY: .clean +.clean: + for D in ${SUBDIR} ; do $(MAKE) -C $$D clean ; done -include manpage.mk -include lsplib.mk +#################### +PACKNL = ${HOME}/src/borta/packnl/packnl +define PACKNLACTION +${PACKNL} -w $@ $< $(addprefix -A ,$(wordlist 2,1000,$^)) +endef -.PHONY: docs -docs: ${DOCS} +test0: lsp-dbus-test.lsp +test0: lsp-misc/lsp-misc.a lsp-dbus/lsp-dbus.a + ${PACKNLACTION} -test0: lsp-dbus-test.lsp ${ARCHIVES} - ${PACKNL} -w $@ $< $(addprefix -A ,${ARCHIVES}) +test1: lsp-alsa-test.lsp +test1: lsp-alsa/pcm-dispatch.a lsp-alsa/libasound.a lsp-alsa/lib-utils.a + ${PACKNLACTION} -clean: - rm -f test0 ${CLEAN} +clean: .clean + rm -f test0 test1 diff --git a/archive.mk b/archive.mk new file mode 100644 index 0000000..557281a --- /dev/null +++ b/archive.mk @@ -0,0 +1,18 @@ +# This Makfile include file provides default setup for archive +# subdiratory, which typically would start with the follwing lines: +# +# ARCHIVES = .... # some .a files +# include ../archive.mk + +DOCS = ${ARCHIVES:=.8.adoc} + +default: ${ARCHIVES} ${DOCS} + +%.8.adoc: + echo "== ${@:.8.adoc=(8)}" >> $@ + +%.8: %.8.adoc + asciidoctor -b manpage $< + +clean: + rm -f ${ARCHIVES} ${DOCS} diff --git a/lsp-alsa/API b/lsp-alsa/API new file mode 100644 index 0000000..4c83726 --- /dev/null +++ b/lsp-alsa/API @@ -0,0 +1,182 @@ +=== libasound_module_conf_pulse.so === +conf_pulse_hook_load_if_running +=== libasound_module_ctl_arcam_av.so === +arcam_av_client +arcam_av_connect +arcam_av_send +arcam_av_server_start +arcam_av_server_stop +arcam_av_state_attach +arcam_av_state_detach +_snd_ctl_arcam_av_open +=== libasound_module_ctl_oss.so === +_snd_ctl_oss_open +=== libasound_module_ctl_pulse.so === +pulse_check_connection +pulse_connect +pulse_context_success_cb +pulse_free +pulse_new +pulse_poll_activate +pulse_poll_deactivate +pulse_wait_operation +_snd_ctl_pulse_open +=== libasound_module_pcm_a52.so === +_snd_pcm_a52_open +=== libasound_module_pcm_jack.so === +_snd_pcm_jack_open +=== libasound_module_pcm_oss.so === +_snd_pcm_oss_open +=== libasound_module_pcm_pulse.so === +pulse_check_connection +pulse_connect +pulse_context_success_cb +pulse_free +pulse_new +pulse_poll_activate +pulse_poll_deactivate +pulse_wait_operation +_snd_pcm_pulse_open +=== libasound_module_pcm_upmix.so === +_snd_pcm_upmix_open +=== libasound_module_pcm_usb_stream.so === +_snd_pcm_usb_stream_open +=== libasound_module_pcm_vdownmix.so === +_snd_pcm_vdownmix_open +=== libasound_module_rate_lavrate_faster.so === +pcm_src_open +_snd_pcm_rate_lavrate_faster_open +_snd_pcm_rate_lavrate_fast_open +_snd_pcm_rate_lavrate_higher_open +_snd_pcm_rate_lavrate_high_open +_snd_pcm_rate_lavrate_open +=== libasound_module_rate_lavrate_fast.so === +pcm_src_open +_snd_pcm_rate_lavrate_faster_open +_snd_pcm_rate_lavrate_fast_open +_snd_pcm_rate_lavrate_higher_open +_snd_pcm_rate_lavrate_high_open +_snd_pcm_rate_lavrate_open +=== libasound_module_rate_lavrate_higher.so === +pcm_src_open +_snd_pcm_rate_lavrate_faster_open +_snd_pcm_rate_lavrate_fast_open +_snd_pcm_rate_lavrate_higher_open +_snd_pcm_rate_lavrate_high_open +_snd_pcm_rate_lavrate_open +=== libasound_module_rate_lavrate_high.so === +pcm_src_open +_snd_pcm_rate_lavrate_faster_open +_snd_pcm_rate_lavrate_fast_open +_snd_pcm_rate_lavrate_higher_open +_snd_pcm_rate_lavrate_high_open +_snd_pcm_rate_lavrate_open +=== libasound_module_rate_lavrate.so === +pcm_src_open +_snd_pcm_rate_lavrate_faster_open +_snd_pcm_rate_lavrate_fast_open +_snd_pcm_rate_lavrate_higher_open +_snd_pcm_rate_lavrate_high_open +_snd_pcm_rate_lavrate_open +=== libasound_module_rate_samplerate_best.so === +_snd_pcm_rate_samplerate_best_open +_snd_pcm_rate_samplerate_linear_open +_snd_pcm_rate_samplerate_medium_open +_snd_pcm_rate_samplerate_open +_snd_pcm_rate_samplerate_order_open +=== libasound_module_rate_samplerate_linear.so === +_snd_pcm_rate_samplerate_best_open +_snd_pcm_rate_samplerate_linear_open +_snd_pcm_rate_samplerate_medium_open +_snd_pcm_rate_samplerate_open +_snd_pcm_rate_samplerate_order_open +=== libasound_module_rate_samplerate_medium.so === +_snd_pcm_rate_samplerate_best_open +_snd_pcm_rate_samplerate_linear_open +_snd_pcm_rate_samplerate_medium_open +_snd_pcm_rate_samplerate_open +_snd_pcm_rate_samplerate_order_open +=== libasound_module_rate_samplerate_order.so === +_snd_pcm_rate_samplerate_best_open +_snd_pcm_rate_samplerate_linear_open +_snd_pcm_rate_samplerate_medium_open +_snd_pcm_rate_samplerate_open +_snd_pcm_rate_samplerate_order_open +=== libasound_module_rate_samplerate.so === +_snd_pcm_rate_samplerate_best_open +_snd_pcm_rate_samplerate_linear_open +_snd_pcm_rate_samplerate_medium_open +_snd_pcm_rate_samplerate_open +_snd_pcm_rate_samplerate_order_open +=== libasound_module_rate_speexrate_best.so === +alsa_lib_resampler_destroy +alsa_lib_resampler_get_input_stride +alsa_lib_resampler_get_output_stride +alsa_lib_resampler_get_quality +alsa_lib_resampler_get_rate +alsa_lib_resampler_get_ratio +alsa_lib_resampler_init +alsa_lib_resampler_init_frac +alsa_lib_resampler_process_float +alsa_lib_resampler_process_int +alsa_lib_resampler_process_interleaved_float +alsa_lib_resampler_process_interleaved_int +alsa_lib_resampler_reset_mem +alsa_lib_resampler_set_input_stride +alsa_lib_resampler_set_output_stride +alsa_lib_resampler_set_quality +alsa_lib_resampler_set_rate +alsa_lib_resampler_set_rate_frac +alsa_lib_resampler_skip_zeros +alsa_lib_resampler_strerror +_snd_pcm_rate_speexrate_best_open +_snd_pcm_rate_speexrate_medium_open +_snd_pcm_rate_speexrate_open +=== libasound_module_rate_speexrate_medium.so === +alsa_lib_resampler_destroy +alsa_lib_resampler_get_input_stride +alsa_lib_resampler_get_output_stride +alsa_lib_resampler_get_quality +alsa_lib_resampler_get_rate +alsa_lib_resampler_get_ratio +alsa_lib_resampler_init +alsa_lib_resampler_init_frac +alsa_lib_resampler_process_float +alsa_lib_resampler_process_int +alsa_lib_resampler_process_interleaved_float +alsa_lib_resampler_process_interleaved_int +alsa_lib_resampler_reset_mem +alsa_lib_resampler_set_input_stride +alsa_lib_resampler_set_output_stride +alsa_lib_resampler_set_quality +alsa_lib_resampler_set_rate +alsa_lib_resampler_set_rate_frac +alsa_lib_resampler_skip_zeros +alsa_lib_resampler_strerror +_snd_pcm_rate_speexrate_best_open +_snd_pcm_rate_speexrate_medium_open +_snd_pcm_rate_speexrate_open +=== libasound_module_rate_speexrate.so === +alsa_lib_resampler_destroy +alsa_lib_resampler_get_input_stride +alsa_lib_resampler_get_output_stride +alsa_lib_resampler_get_quality +alsa_lib_resampler_get_rate +alsa_lib_resampler_get_ratio +alsa_lib_resampler_init +alsa_lib_resampler_init_frac +alsa_lib_resampler_process_float +alsa_lib_resampler_process_int +alsa_lib_resampler_process_interleaved_float +alsa_lib_resampler_process_interleaved_int +alsa_lib_resampler_reset_mem +alsa_lib_resampler_set_input_stride +alsa_lib_resampler_set_output_stride +alsa_lib_resampler_set_quality +alsa_lib_resampler_set_rate +alsa_lib_resampler_set_rate_frac +alsa_lib_resampler_skip_zeros +alsa_lib_resampler_strerror +_snd_pcm_rate_speexrate_best_open +_snd_pcm_rate_speexrate_medium_open +_snd_pcm_rate_speexrate_open diff --git a/lsp-alsa/ASOUND b/lsp-alsa/ASOUND new file mode 100644 index 0000000..deacb9c --- /dev/null +++ b/lsp-alsa/ASOUND @@ -0,0 +1,1619 @@ +snd_asoundlib_version@@ALSA_0.9 +snd_async_add_ctl_handler@@ALSA_0.9 +snd_async_add_handler@@ALSA_0.9 +snd_async_add_pcm_handler@@ALSA_0.9 +snd_async_add_timer_handler@@ALSA_0.9 +snd_async_del_handler@@ALSA_0.9 +snd_async_handler_get_callback_private@@ALSA_0.9 +snd_async_handler_get_ctl@@ALSA_0.9 +snd_async_handler_get_fd@@ALSA_0.9 +snd_async_handler_get_pcm@@ALSA_0.9 +snd_async_handler_get_signo@@ALSA_0.9 +snd_async_handler_get_timer@@ALSA_0.9 +snd_card_get_index@@ALSA_0.9 +snd_card_get_longname@@ALSA_0.9 +snd_card_get_name@@ALSA_0.9 +snd_card_load@@ALSA_0.9 +snd_card_next@@ALSA_0.9 +snd_config_add_after@@ALSA_0.9 +snd_config_add@@ALSA_0.9 +snd_config_add_before@@ALSA_0.9 +snd_config_copy@@ALSA_0.9 +snd_config_delete@@ALSA_0.9 +snd_config_delete_compound_members@@ALSA_0.9 +snd_config_evaluate@@ALSA_0.9 +snd_config_expand@@ALSA_0.9 +snd_config_get_ascii@@ALSA_0.9 +snd_config_get_bool@@ALSA_0.9 +snd_config_get_bool_ascii@@ALSA_0.9 +snd_config_get_ctl_iface@@ALSA_0.9 +snd_config_get_ctl_iface_ascii@@ALSA_0.9 +snd_config_get_id@@ALSA_0.9 +snd_config_get_integer64@@ALSA_0.9 +snd_config_get_integer@@ALSA_0.9 +snd_config_get_ireal@@ALSA_0.9 +snd_config_get_pointer@@ALSA_0.9 +snd_config_get_real@@ALSA_0.9 +snd_config_get_string@@ALSA_0.9 +snd_config_get_type@@ALSA_0.9 +snd_config_get_type_ascii@@ALSA_0.9 +snd_config_hook_load@@ALSA_0.9 +snd_config_hook_load_for_all_cards@@ALSA_0.9 +snd_config_imake_integer64@@ALSA_0.9 +snd_config_imake_integer@@ALSA_0.9 +snd_config_imake_pointer@@ALSA_0.9 +snd_config_imake_real@@ALSA_0.9 +snd_config_imake_safe_string@@ALSA_0.9 +snd_config_imake_string@@ALSA_0.9 +snd_config_is_array@@ALSA_0.9 +snd_config_iterator_end@@ALSA_0.9 +snd_config_iterator_entry@@ALSA_0.9 +snd_config_iterator_first@@ALSA_0.9 +snd_config_iterator_next@@ALSA_0.9 +snd_config_load@@ALSA_0.9 +snd_config_load_override@@ALSA_0.9 +snd_config_make@@ALSA_0.9 +snd_config_make_compound@@ALSA_0.9 +snd_config_make_integer64@@ALSA_0.9 +snd_config_make_integer@@ALSA_0.9 +snd_config_make_pointer@@ALSA_0.9 +snd_config_make_real@@ALSA_0.9 +snd_config_make_string@@ALSA_0.9 +snd_config_ref@@ALSA_0.9 +snd_config_remove@@ALSA_0.9 +snd_config_save@@ALSA_0.9 +snd_config_searcha@@ALSA_0.9 +snd_config_searcha_hooks@@ALSA_0.9 +snd_config_search_alias@@ALSA_0.9 +snd_config_search@@ALSA_0.9 +snd_config_search_definition@@ALSA_0.9 +snd_config_search_hooks@@ALSA_0.9 +snd_config_searchva@@ALSA_0.9 +snd_config_searchva_hooks@@ALSA_0.9 +snd_config_searchv@@ALSA_0.9 +snd_config_set_ascii@@ALSA_0.9 +snd_config_set_id@@ALSA_0.9 +snd_config_set_integer64@@ALSA_0.9 +snd_config_set_integer@@ALSA_0.9 +snd_config_set_pointer@@ALSA_0.9 +snd_config_set_real@@ALSA_0.9 +snd_config_set_string@@ALSA_0.9 +snd_config_substitute@@ALSA_0.9 +snd_config_test_id@@ALSA_0.9 +snd_config_top@@ALSA_0.9 +snd_config_topdir@@ALSA_0.9 +snd_config_unref@@ALSA_0.9 +snd_config_update@@ALSA_0.9 +snd_config_update_free@@ALSA_0.9 +snd_config_update_free_global@@ALSA_0.9 +snd_config_update_r@@ALSA_0.9 +snd_config_update_ref@@ALSA_0.9 +snd_ctl_add_boolean_elem_set@@ALSA_0.9 +snd_ctl_add_bytes_elem_set@@ALSA_0.9 +snd_ctl_add_enumerated_elem_set@@ALSA_0.9 +snd_ctl_add_integer64_elem_set@@ALSA_0.9 +snd_ctl_add_integer_elem_set@@ALSA_0.9 +snd_ctl_ascii_elem_id_get@@ALSA_0.9 +snd_ctl_ascii_elem_id_parse@@ALSA_0.9 +snd_ctl_ascii_value_parse@@ALSA_0.9 +snd_ctl_async@@ALSA_0.9 +snd_ctl_card_info@@ALSA_0.9 +snd_ctl_card_info_clear@@ALSA_0.9 +snd_ctl_card_info_copy@@ALSA_0.9 +snd_ctl_card_info_free@@ALSA_0.9 +snd_ctl_card_info_get_card@@ALSA_0.9 +snd_ctl_card_info_get_components@@ALSA_0.9 +snd_ctl_card_info_get_driver@@ALSA_0.9 +snd_ctl_card_info_get_id@@ALSA_0.9 +snd_ctl_card_info_get_longname@@ALSA_0.9 +snd_ctl_card_info_get_mixername@@ALSA_0.9 +snd_ctl_card_info_get_name@@ALSA_0.9 +snd_ctl_card_info_malloc@@ALSA_0.9 +snd_ctl_card_info_sizeof@@ALSA_0.9 +snd_ctl_close@@ALSA_0.9 +snd_ctl_convert_from_dB@@ALSA_0.9 +snd_ctl_convert_to_dB@@ALSA_0.9 +snd_ctl_elem_add_boolean@@ALSA_0.9 +snd_ctl_elem_add_enumerated@@ALSA_0.9 +snd_ctl_elem_add_iec958@@ALSA_0.9 +snd_ctl_elem_add_integer64@@ALSA_0.9 +snd_ctl_elem_add_integer@@ALSA_0.9 +snd_ctl_elem_id_clear@@ALSA_0.9 +snd_ctl_elem_id_copy@@ALSA_0.9 +snd_ctl_elem_id_free@@ALSA_0.9 +snd_ctl_elem_id_get_device@@ALSA_0.9 +snd_ctl_elem_id_get_index@@ALSA_0.9 +snd_ctl_elem_id_get_interface@@ALSA_0.9 +snd_ctl_elem_id_get_name@@ALSA_0.9 +snd_ctl_elem_id_get_numid@@ALSA_0.9 +snd_ctl_elem_id_get_subdevice@@ALSA_0.9 +snd_ctl_elem_id_malloc@@ALSA_0.9 +snd_ctl_elem_id_set_device@@ALSA_0.9 +snd_ctl_elem_id_set_index@@ALSA_0.9 +snd_ctl_elem_id_set_interface@@ALSA_0.9 +snd_ctl_elem_id_set_name@@ALSA_0.9 +snd_ctl_elem_id_set_numid@@ALSA_0.9 +snd_ctl_elem_id_set_subdevice@@ALSA_0.9 +snd_ctl_elem_id_sizeof@@ALSA_0.9 +snd_ctl_elem_iface_name@@ALSA_0.9 +snd_ctl_elem_info@@ALSA_0.9 +snd_ctl_elem_info_clear@@ALSA_0.9 +snd_ctl_elem_info_copy@@ALSA_0.9 +snd_ctl_elem_info_free@@ALSA_0.9 +snd_ctl_elem_info_get_count@@ALSA_0.9 +snd_ctl_elem_info_get_device@@ALSA_0.9 +snd_ctl_elem_info_get_dimension@@ALSA_0.9.3 +snd_ctl_elem_info_get_dimensions@@ALSA_0.9.3 +snd_ctl_elem_info_get_id@@ALSA_0.9 +snd_ctl_elem_info_get_index@@ALSA_0.9 +snd_ctl_elem_info_get_interface@@ALSA_0.9 +snd_ctl_elem_info_get_item_name@@ALSA_0.9 +snd_ctl_elem_info_get_items@@ALSA_0.9 +snd_ctl_elem_info_get_max64@@ALSA_0.9 +snd_ctl_elem_info_get_max@@ALSA_0.9 +snd_ctl_elem_info_get_min64@@ALSA_0.9 +snd_ctl_elem_info_get_min@@ALSA_0.9 +snd_ctl_elem_info_get_name@@ALSA_0.9 +snd_ctl_elem_info_get_numid@@ALSA_0.9 +snd_ctl_elem_info_get_owner@@ALSA_0.9 +snd_ctl_elem_info_get_step64@@ALSA_0.9 +snd_ctl_elem_info_get_step@@ALSA_0.9 +snd_ctl_elem_info_get_subdevice@@ALSA_0.9 +snd_ctl_elem_info_get_type@@ALSA_0.9 +snd_ctl_elem_info_is_inactive@@ALSA_0.9 +snd_ctl_elem_info_is_indirect@@ALSA_0.9 +snd_ctl_elem_info_is_locked@@ALSA_0.9 +snd_ctl_elem_info_is_owner@@ALSA_0.9 +snd_ctl_elem_info_is_readable@@ALSA_0.9 +snd_ctl_elem_info_is_tlv_commandable@@ALSA_0.9 +snd_ctl_elem_info_is_tlv_readable@@ALSA_0.9 +snd_ctl_elem_info_is_tlv_writable@@ALSA_0.9 +snd_ctl_elem_info_is_user@@ALSA_0.9 +snd_ctl_elem_info_is_volatile@@ALSA_0.9 +snd_ctl_elem_info_is_writable@@ALSA_0.9 +snd_ctl_elem_info_malloc@@ALSA_0.9 +snd_ctl_elem_info_set_device@@ALSA_0.9 +snd_ctl_elem_info_set_dimension@@ALSA_0.9 +snd_ctl_elem_info_set_id@@ALSA_0.9 +snd_ctl_elem_info_set_index@@ALSA_0.9 +snd_ctl_elem_info_set_interface@@ALSA_0.9 +snd_ctl_elem_info_set_item@@ALSA_0.9 +snd_ctl_elem_info_set_name@@ALSA_0.9 +snd_ctl_elem_info_set_numid@@ALSA_0.9 +snd_ctl_elem_info_set_subdevice@@ALSA_0.9 +snd_ctl_elem_info_sizeof@@ALSA_0.9 +snd_ctl_elem_list_alloc_space@@ALSA_0.9 +snd_ctl_elem_list@@ALSA_0.9 +snd_ctl_elem_list_clear@@ALSA_0.9 +snd_ctl_elem_list_copy@@ALSA_0.9 +snd_ctl_elem_list_free@@ALSA_0.9 +snd_ctl_elem_list_free_space@@ALSA_0.9 +snd_ctl_elem_list_get_count@@ALSA_0.9 +snd_ctl_elem_list_get_device@@ALSA_0.9 +snd_ctl_elem_list_get_id@@ALSA_0.9 +snd_ctl_elem_list_get_index@@ALSA_0.9 +snd_ctl_elem_list_get_interface@@ALSA_0.9 +snd_ctl_elem_list_get_name@@ALSA_0.9 +snd_ctl_elem_list_get_numid@@ALSA_0.9 +snd_ctl_elem_list_get_subdevice@@ALSA_0.9 +snd_ctl_elem_list_get_used@@ALSA_0.9 +snd_ctl_elem_list_malloc@@ALSA_0.9 +snd_ctl_elem_list_set_offset@@ALSA_0.9 +snd_ctl_elem_list_sizeof@@ALSA_0.9 +snd_ctl_elem_lock@@ALSA_0.9 +snd_ctl_elem_read@@ALSA_0.9 +snd_ctl_elem_remove@@ALSA_0.9 +snd_ctl_elem_set_bytes@@ALSA_0.9 +snd_ctl_elem_tlv_command@@ALSA_0.9 +snd_ctl_elem_tlv_read@@ALSA_0.9 +snd_ctl_elem_tlv_write@@ALSA_0.9 +snd_ctl_elem_type_name@@ALSA_0.9 +snd_ctl_elem_unlock@@ALSA_0.9 +snd_ctl_elem_value_clear@@ALSA_0.9 +snd_ctl_elem_value_compare@@ALSA_0.9 +snd_ctl_elem_value_copy@@ALSA_0.9 +snd_ctl_elem_value_free@@ALSA_0.9 +snd_ctl_elem_value_get_boolean@@ALSA_0.9 +snd_ctl_elem_value_get_byte@@ALSA_0.9 +snd_ctl_elem_value_get_bytes@@ALSA_0.9 +snd_ctl_elem_value_get_device@@ALSA_0.9 +snd_ctl_elem_value_get_enumerated@@ALSA_0.9 +snd_ctl_elem_value_get_id@@ALSA_0.9 +snd_ctl_elem_value_get_iec958@@ALSA_0.9 +snd_ctl_elem_value_get_index@@ALSA_0.9 +snd_ctl_elem_value_get_integer64@@ALSA_0.9 +snd_ctl_elem_value_get_integer@@ALSA_0.9 +snd_ctl_elem_value_get_interface@@ALSA_0.9 +snd_ctl_elem_value_get_name@@ALSA_0.9 +snd_ctl_elem_value_get_numid@@ALSA_0.9 +snd_ctl_elem_value_get_subdevice@@ALSA_0.9 +snd_ctl_elem_value_malloc@@ALSA_0.9 +snd_ctl_elem_value_set_boolean@@ALSA_0.9 +snd_ctl_elem_value_set_byte@@ALSA_0.9 +snd_ctl_elem_value_set_device@@ALSA_0.9 +snd_ctl_elem_value_set_enumerated@@ALSA_0.9 +snd_ctl_elem_value_set_id@@ALSA_0.9 +snd_ctl_elem_value_set_iec958@@ALSA_0.9 +snd_ctl_elem_value_set_index@@ALSA_0.9 +snd_ctl_elem_value_set_integer64@@ALSA_0.9 +snd_ctl_elem_value_set_integer@@ALSA_0.9 +snd_ctl_elem_value_set_interface@@ALSA_0.9 +snd_ctl_elem_value_set_name@@ALSA_0.9 +snd_ctl_elem_value_set_numid@@ALSA_0.9 +snd_ctl_elem_value_set_subdevice@@ALSA_0.9 +snd_ctl_elem_value_sizeof@@ALSA_0.9 +snd_ctl_elem_write@@ALSA_0.9 +snd_ctl_event_clear@@ALSA_0.9 +snd_ctl_event_copy@@ALSA_0.9 +snd_ctl_event_elem_get_device@@ALSA_0.9 +snd_ctl_event_elem_get_id@@ALSA_0.9 +snd_ctl_event_elem_get_index@@ALSA_0.9 +snd_ctl_event_elem_get_interface@@ALSA_0.9 +snd_ctl_event_elem_get_mask@@ALSA_0.9 +snd_ctl_event_elem_get_name@@ALSA_0.9 +snd_ctl_event_elem_get_numid@@ALSA_0.9 +snd_ctl_event_elem_get_subdevice@@ALSA_0.9 +snd_ctl_event_free@@ALSA_0.9 +snd_ctl_event_get_type@@ALSA_0.9 +snd_ctl_event_malloc@@ALSA_0.9 +snd_ctl_event_sizeof@@ALSA_0.9 +snd_ctl_event_type_name@@ALSA_0.9 +snd_ctl_ext_create@@ALSA_0.9 +snd_ctl_ext_delete@@ALSA_0.9 +snd_ctl_get_dB_range@@ALSA_0.9 +snd_ctl_get_power_state@@ALSA_0.9 +snd_ctl_hwdep_info@@ALSA_0.9 +snd_ctl_hwdep_next_device@@ALSA_0.9 +_snd_ctl_hw_open@@ALSA_0.9 +snd_ctl_hw_open@@ALSA_0.9 +snd_ctl_name@@ALSA_0.9 +snd_ctl_nonblock@@ALSA_0.9 +snd_ctl_open@@ALSA_0.9 +snd_ctl_open_fallback@@ALSA_0.9 +snd_ctl_open_lconf@@ALSA_0.9 +snd_ctl_pcm_info@@ALSA_0.9 +snd_ctl_pcm_next_device@@ALSA_0.9 +snd_ctl_pcm_prefer_subdevice@@ALSA_0.9 +_snd_ctl_poll_descriptor@@ALSA_0.9 +snd_ctl_poll_descriptors@@ALSA_0.9 +snd_ctl_poll_descriptors_count@@ALSA_0.9 +snd_ctl_poll_descriptors_revents@@ALSA_0.9 +snd_ctl_rawmidi_info@@ALSA_0.9 +snd_ctl_rawmidi_next_device@@ALSA_0.9 +snd_ctl_rawmidi_prefer_subdevice@@ALSA_0.9 +snd_ctl_read@@ALSA_0.9 +snd_ctl_set_power_state@@ALSA_0.9 +_snd_ctl_shm_open@@ALSA_0.9 +snd_ctl_shm_open@@ALSA_0.9 +snd_ctl_subscribe_events@@ALSA_0.9 +snd_ctl_type@@ALSA_0.9 +snd_ctl_wait@@ALSA_0.9 +snd_determine_driver@@ALSA_0.9 +snd_device_name_free_hint@@ALSA_0.9 +snd_device_name_get_hint@@ALSA_0.9 +snd_device_name_hint@@ALSA_0.9 +snd_dlclose@@ALSA_0.9 +snd_dlopen@ALSA_0.9 +snd_dlopen@@ALSA_1.1.6 +snd_dlpath@@ALSA_0.9 +snd_dlsym@@ALSA_0.9 +snd_func_card_driver@@ALSA_0.9 +snd_func_card_id@@ALSA_0.9 +snd_func_card_inum@@ALSA_0.9 +snd_func_card_name@@ALSA_0.9 +snd_func_concat@@ALSA_0.9 +snd_func_datadir@@ALSA_0.9 +snd_func_getenv@@ALSA_0.9 +snd_func_iadd@@ALSA_0.9 +snd_func_igetenv@@ALSA_0.9 +snd_func_imul@@ALSA_0.9 +snd_func_pcm_args_by_class@@ALSA_0.9 +snd_func_pcm_id@@ALSA_0.9 +snd_func_private_card_driver@@ALSA_0.9 +snd_func_private_pcm_subdevice@@ALSA_0.9 +snd_func_private_string@@ALSA_0.9 +snd_func_refer@@ALSA_0.9 +snd_hctl_async@@ALSA_0.9 +snd_hctl_close@@ALSA_0.9 +snd_hctl_compare_fast@@ALSA_0.9 +snd_hctl_ctl@@ALSA_0.9 +snd_hctl_elem_get_callback_private@@ALSA_0.9 +snd_hctl_elem_get_device@@ALSA_0.9 +snd_hctl_elem_get_hctl@@ALSA_0.9 +snd_hctl_elem_get_id@@ALSA_0.9 +snd_hctl_elem_get_index@@ALSA_0.9 +snd_hctl_elem_get_interface@@ALSA_0.9 +snd_hctl_elem_get_name@@ALSA_0.9 +snd_hctl_elem_get_numid@@ALSA_0.9 +snd_hctl_elem_get_subdevice@@ALSA_0.9 +snd_hctl_elem_info@@ALSA_0.9 +snd_hctl_elem_next@@ALSA_0.9 +snd_hctl_elem_prev@@ALSA_0.9 +snd_hctl_elem_read@@ALSA_0.9 +snd_hctl_elem_set_callback@@ALSA_0.9 +snd_hctl_elem_set_callback_private@@ALSA_0.9 +snd_hctl_elem_tlv_command@@ALSA_0.9 +snd_hctl_elem_tlv_read@@ALSA_0.9 +snd_hctl_elem_tlv_write@@ALSA_0.9 +snd_hctl_elem_write@@ALSA_0.9 +snd_hctl_find_elem@@ALSA_0.9 +snd_hctl_first_elem@@ALSA_0.9 +snd_hctl_free@@ALSA_0.9 +snd_hctl_get_callback_private@@ALSA_0.9 +snd_hctl_get_count@@ALSA_0.9 +snd_hctl_handle_events@@ALSA_0.9 +snd_hctl_last_elem@@ALSA_0.9 +snd_hctl_load@@ALSA_0.9 +snd_hctl_name@@ALSA_0.9 +snd_hctl_nonblock@@ALSA_0.9 +snd_hctl_open@@ALSA_0.9 +snd_hctl_open_ctl@@ALSA_0.9 +snd_hctl_poll_descriptors@@ALSA_0.9 +snd_hctl_poll_descriptors_count@@ALSA_0.9 +snd_hctl_poll_descriptors_revents@@ALSA_0.9 +snd_hctl_set_callback@@ALSA_0.9 +snd_hctl_set_callback_private@@ALSA_0.9 +snd_hctl_set_compare@@ALSA_0.9 +snd_hctl_wait@@ALSA_0.9 +snd_hwdep_close@@ALSA_0.9 +snd_hwdep_dsp_image_copy@@ALSA_0.9 +snd_hwdep_dsp_image_free@@ALSA_0.9 +snd_hwdep_dsp_image_get_image@@ALSA_0.9 +snd_hwdep_dsp_image_get_index@@ALSA_0.9 +snd_hwdep_dsp_image_get_length@@ALSA_0.9 +snd_hwdep_dsp_image_get_name@@ALSA_0.9 +snd_hwdep_dsp_image_malloc@@ALSA_0.9 +snd_hwdep_dsp_image_set_image@@ALSA_0.9 +snd_hwdep_dsp_image_set_index@@ALSA_0.9 +snd_hwdep_dsp_image_set_length@@ALSA_0.9 +snd_hwdep_dsp_image_set_name@@ALSA_0.9 +snd_hwdep_dsp_image_sizeof@@ALSA_0.9 +snd_hwdep_dsp_load@@ALSA_0.9 +snd_hwdep_dsp_status@@ALSA_0.9 +snd_hwdep_dsp_status_copy@@ALSA_0.9 +snd_hwdep_dsp_status_free@@ALSA_0.9 +snd_hwdep_dsp_status_get_chip_ready@@ALSA_0.9 +snd_hwdep_dsp_status_get_dsp_loaded@@ALSA_0.9 +snd_hwdep_dsp_status_get_id@@ALSA_0.9 +snd_hwdep_dsp_status_get_num_dsps@@ALSA_0.9 +snd_hwdep_dsp_status_get_version@@ALSA_0.9 +snd_hwdep_dsp_status_malloc@@ALSA_0.9 +snd_hwdep_dsp_status_sizeof@@ALSA_0.9 +_snd_hwdep_hw_open@@ALSA_0.9 +snd_hwdep_hw_open@@ALSA_0.9 +snd_hwdep_info@@ALSA_0.9 +snd_hwdep_info_copy@@ALSA_0.9 +snd_hwdep_info_free@@ALSA_0.9 +snd_hwdep_info_get_card@@ALSA_0.9 +snd_hwdep_info_get_device@@ALSA_0.9 +snd_hwdep_info_get_id@@ALSA_0.9 +snd_hwdep_info_get_iface@@ALSA_0.9 +snd_hwdep_info_get_name@@ALSA_0.9 +snd_hwdep_info_malloc@@ALSA_0.9 +snd_hwdep_info_set_device@@ALSA_0.9 +snd_hwdep_info_sizeof@@ALSA_0.9 +snd_hwdep_ioctl@@ALSA_0.9 +snd_hwdep_name@@ALSA_0.9 +snd_hwdep_nonblock@@ALSA_0.9 +snd_hwdep_open@@ALSA_0.9 +snd_hwdep_open_lconf@@ALSA_0.9 +snd_hwdep_poll_descriptors@@ALSA_0.9 +snd_hwdep_poll_descriptors_count@@ALSA_0.9 +snd_hwdep_poll_descriptors_revents@@ALSA_0.9 +snd_hwdep_read@@ALSA_0.9 +snd_hwdep_type@@ALSA_0.9 +snd_hwdep_write@@ALSA_0.9 +snd_input_buffer_open@@ALSA_0.9 +snd_input_close@@ALSA_0.9 +snd_input_getc@@ALSA_0.9 +snd_input_gets@@ALSA_0.9 +snd_input_scanf@@ALSA_0.9 +snd_input_stdio_attach@@ALSA_0.9 +snd_input_stdio_open@@ALSA_0.9 +snd_input_ungetc@@ALSA_0.9 +snd_instr_fm_convert_from_stream@@ALSA_0.9 +snd_instr_fm_convert_to_stream@@ALSA_0.9 +snd_instr_fm_free@@ALSA_0.9 +snd_instr_header_copy@@ALSA_0.9 +snd_instr_header_free@@ALSA_0.9 +snd_instr_header_get_alias@@ALSA_0.9 +snd_instr_header_get_cluster@@ALSA_0.9 +snd_instr_header_get_cmd@@ALSA_0.9 +snd_instr_header_get_data@@ALSA_0.9 +snd_instr_header_get_follow_alias@@ALSA_0.9 +snd_instr_header_get_format@@ALSA_0.9 +snd_instr_header_get_id@@ALSA_0.9 +snd_instr_header_get_len@@ALSA_0.9 +snd_instr_header_get_name@@ALSA_0.9 +snd_instr_header_get_type@@ALSA_0.9 +snd_instr_header_malloc@@ALSA_0.9 +snd_instr_header_set_alias@@ALSA_0.9 +snd_instr_header_set_cluster@@ALSA_0.9 +snd_instr_header_set_cmd@@ALSA_0.9 +snd_instr_header_set_follow_alias@@ALSA_0.9 +snd_instr_header_set_format@@ALSA_0.9 +snd_instr_header_set_id@@ALSA_0.9 +snd_instr_header_set_len@@ALSA_0.9 +snd_instr_header_set_name@@ALSA_0.9 +snd_instr_header_set_type@@ALSA_0.9 +snd_instr_header_sizeof@@ALSA_0.9 +snd_instr_iwffff_close@@ALSA_0.9 +snd_instr_iwffff_convert_from_stream@@ALSA_0.9 +snd_instr_iwffff_convert_to_stream@@ALSA_0.9 +snd_instr_iwffff_free@@ALSA_0.9 +snd_instr_iwffff_load@@ALSA_0.9 +snd_instr_iwffff_open@@ALSA_0.9 +snd_instr_iwffff_open_rom@@ALSA_0.9 +snd_instr_iwffff_open_rom_file@@ALSA_0.9 +snd_instr_simple_convert_from_stream@@ALSA_0.9 +snd_instr_simple_convert_to_stream@@ALSA_0.9 +snd_instr_simple_free@@ALSA_0.9 +snd_lib_error_set_handler@@ALSA_0.9 +snd_lib_error_set_local@@ALSA_0.9 +snd_midi_event_decode@@ALSA_0.9 +snd_midi_event_encode@@ALSA_0.9 +snd_midi_event_encode_byte@@ALSA_0.9 +snd_midi_event_free@@ALSA_0.9 +snd_midi_event_init@@ALSA_0.9 +snd_midi_event_new@@ALSA_0.9 +snd_midi_event_no_status@@ALSA_0.9 +snd_midi_event_reset_decode@@ALSA_0.9 +snd_midi_event_reset_encode@@ALSA_0.9 +snd_midi_event_resize_buffer@@ALSA_0.9 +snd_mixer_attach@@ALSA_0.9 +snd_mixer_attach_hctl@@ALSA_0.9 +snd_mixer_class_copy@@ALSA_0.9 +snd_mixer_class_free@@ALSA_0.9 +snd_mixer_class_get_compare@@ALSA_0.9 +snd_mixer_class_get_event@@ALSA_0.9 +snd_mixer_class_get_mixer@@ALSA_0.9 +snd_mixer_class_get_private@@ALSA_0.9 +snd_mixer_class_malloc@@ALSA_0.9 +snd_mixer_class_register@@ALSA_0.9 +snd_mixer_class_set_compare@@ALSA_0.9 +snd_mixer_class_set_event@@ALSA_0.9 +snd_mixer_class_set_private@@ALSA_0.9 +snd_mixer_class_set_private_free@@ALSA_0.9 +snd_mixer_class_sizeof@@ALSA_0.9 +snd_mixer_class_unregister@@ALSA_0.9 +snd_mixer_close@@ALSA_0.9 +snd_mixer_detach@@ALSA_0.9 +snd_mixer_detach_hctl@@ALSA_0.9 +snd_mixer_elem_add@@ALSA_0.9 +snd_mixer_elem_attach@@ALSA_0.9 +snd_mixer_elem_detach@@ALSA_0.9 +snd_mixer_elem_empty@@ALSA_0.9 +snd_mixer_elem_free@@ALSA_0.9 +snd_mixer_elem_get_callback_private@@ALSA_0.9 +snd_mixer_elem_get_private@@ALSA_0.9 +snd_mixer_elem_get_type@@ALSA_0.9 +snd_mixer_elem_info@@ALSA_0.9 +snd_mixer_elem_new@@ALSA_0.9 +snd_mixer_elem_next@@ALSA_0.9 +snd_mixer_elem_prev@@ALSA_0.9 +snd_mixer_elem_remove@@ALSA_0.9 +snd_mixer_elem_set_callback@@ALSA_0.9 +snd_mixer_elem_set_callback_private@@ALSA_0.9 +snd_mixer_elem_value@@ALSA_0.9 +snd_mixer_find_selem@@ALSA_0.9 +snd_mixer_first_elem@@ALSA_0.9 +snd_mixer_free@@ALSA_0.9 +snd_mixer_get_callback_private@@ALSA_0.9 +snd_mixer_get_count@@ALSA_0.9 +snd_mixer_get_hctl@@ALSA_0.9 +snd_mixer_handle_events@@ALSA_0.9 +snd_mixer_last_elem@@ALSA_0.9 +snd_mixer_load@@ALSA_0.9 +snd_mixer_open@@ALSA_0.9 +snd_mixer_poll_descriptors@@ALSA_0.9 +snd_mixer_poll_descriptors_count@@ALSA_0.9 +snd_mixer_poll_descriptors_revents@@ALSA_0.9 +snd_mixer_sbasic_get_private@@ALSA_0.9 +snd_mixer_sbasic_info@@ALSA_0.9 +snd_mixer_sbasic_set_private@@ALSA_0.9 +snd_mixer_sbasic_set_private_free@@ALSA_0.9 +snd_mixer_selem_ask_capture_dB_vol@@ALSA_0.9 +snd_mixer_selem_ask_capture_vol_dB@@ALSA_0.9 +snd_mixer_selem_ask_playback_dB_vol@@ALSA_0.9 +snd_mixer_selem_ask_playback_vol_dB@@ALSA_0.9 +snd_mixer_selem_channel_name@@ALSA_0.9 +snd_mixer_selem_compare@@ALSA_0.9 +snd_mixer_selem_get_capture_dB@@ALSA_0.9 +snd_mixer_selem_get_capture_dB_range@@ALSA_0.9 +snd_mixer_selem_get_capture_group@@ALSA_0.9 +snd_mixer_selem_get_capture_switch@@ALSA_0.9 +snd_mixer_selem_get_capture_volume@@ALSA_0.9 +snd_mixer_selem_get_capture_volume_range@@ALSA_0.9 +snd_mixer_selem_get_enum_item@@ALSA_0.9 +snd_mixer_selem_get_enum_item_name@@ALSA_0.9 +snd_mixer_selem_get_enum_items@@ALSA_0.9 +snd_mixer_selem_get_id@@ALSA_0.9 +snd_mixer_selem_get_index@@ALSA_0.9 +snd_mixer_selem_get_name@@ALSA_0.9 +snd_mixer_selem_get_playback_dB@@ALSA_0.9 +snd_mixer_selem_get_playback_dB_range@@ALSA_0.9 +snd_mixer_selem_get_playback_switch@@ALSA_0.9 +snd_mixer_selem_get_playback_volume@@ALSA_0.9 +snd_mixer_selem_get_playback_volume_range@@ALSA_0.9 +snd_mixer_selem_has_capture_channel@@ALSA_0.9 +snd_mixer_selem_has_capture_switch@@ALSA_0.9 +snd_mixer_selem_has_capture_switch_exclusive@@ALSA_0.9 +snd_mixer_selem_has_capture_switch_joined@@ALSA_0.9 +snd_mixer_selem_has_capture_volume@@ALSA_0.9 +snd_mixer_selem_has_capture_volume_joined@@ALSA_0.9 +snd_mixer_selem_has_common_switch@@ALSA_0.9 +snd_mixer_selem_has_common_volume@@ALSA_0.9 +snd_mixer_selem_has_playback_channel@@ALSA_0.9 +snd_mixer_selem_has_playback_switch@@ALSA_0.9 +snd_mixer_selem_has_playback_switch_joined@@ALSA_0.9 +snd_mixer_selem_has_playback_volume@@ALSA_0.9 +snd_mixer_selem_has_playback_volume_joined@@ALSA_0.9 +snd_mixer_selem_id_copy@@ALSA_0.9 +snd_mixer_selem_id_free@@ALSA_0.9 +snd_mixer_selem_id_get_index@@ALSA_0.9 +snd_mixer_selem_id_get_name@@ALSA_0.9 +snd_mixer_selem_id_malloc@@ALSA_0.9 +snd_mixer_selem_id_parse@@ALSA_0.9 +snd_mixer_selem_id_set_index@@ALSA_0.9 +snd_mixer_selem_id_set_name@@ALSA_0.9 +snd_mixer_selem_id_sizeof@@ALSA_0.9 +snd_mixer_selem_is_active@@ALSA_0.9 +snd_mixer_selem_is_capture_mono@@ALSA_0.9 +snd_mixer_selem_is_enum_capture@@ALSA_0.9 +snd_mixer_selem_is_enumerated@@ALSA_0.9 +snd_mixer_selem_is_enum_playback@@ALSA_0.9 +snd_mixer_selem_is_playback_mono@@ALSA_0.9 +snd_mixer_selem_register@@ALSA_0.9 +snd_mixer_selem_set_capture_dB_all@@ALSA_0.9 +snd_mixer_selem_set_capture_dB@@ALSA_0.9 +snd_mixer_selem_set_capture_switch_all@@ALSA_0.9 +snd_mixer_selem_set_capture_switch@@ALSA_0.9 +snd_mixer_selem_set_capture_volume_all@@ALSA_0.9 +snd_mixer_selem_set_capture_volume@@ALSA_0.9 +snd_mixer_selem_set_capture_volume_range@@ALSA_0.9 +snd_mixer_selem_set_enum_item@@ALSA_0.9 +snd_mixer_selem_set_playback_dB_all@@ALSA_0.9 +snd_mixer_selem_set_playback_dB@@ALSA_0.9 +snd_mixer_selem_set_playback_switch_all@@ALSA_0.9 +snd_mixer_selem_set_playback_switch@@ALSA_0.9 +snd_mixer_selem_set_playback_volume_all@@ALSA_0.9 +snd_mixer_selem_set_playback_volume@@ALSA_0.9 +snd_mixer_selem_set_playback_volume_range@@ALSA_0.9 +snd_mixer_set_callback@@ALSA_0.9 +snd_mixer_set_callback_private@@ALSA_0.9 +snd_mixer_set_compare@@ALSA_0.9 +snd_mixer_wait@@ALSA_0.9 +snd_names_list@@ALSA_0.9 +snd_names_list_free@@ALSA_0.9 +snd_output_buffer_open@@ALSA_0.9 +snd_output_buffer_string@@ALSA_0.9 +snd_output_close@@ALSA_0.9 +snd_output_flush@@ALSA_0.9 +snd_output_printf@@ALSA_0.9 +snd_output_putc@@ALSA_0.9 +snd_output_puts@@ALSA_0.9 +snd_output_stdio_attach@@ALSA_0.9 +snd_output_stdio_open@@ALSA_0.9 +snd_output_vprintf@@ALSA_0.9 +snd_pcm_access_mask_any@@ALSA_0.9 +snd_pcm_access_mask_copy@@ALSA_0.9 +snd_pcm_access_mask_empty@@ALSA_0.9 +snd_pcm_access_mask_free@@ALSA_0.9 +snd_pcm_access_mask_malloc@@ALSA_0.9 +snd_pcm_access_mask_none@@ALSA_0.9 +snd_pcm_access_mask_reset@@ALSA_0.9 +snd_pcm_access_mask_set@@ALSA_0.9 +snd_pcm_access_mask_sizeof@@ALSA_0.9 +snd_pcm_access_mask_test@@ALSA_0.9 +snd_pcm_access_name@@ALSA_0.9 +_snd_pcm_adpcm_open@@ALSA_0.9 +snd_pcm_adpcm_open@@ALSA_0.9 +_snd_pcm_alaw_open@@ALSA_0.9 +snd_pcm_alaw_open@@ALSA_0.9 +snd_pcm_area_copy@@ALSA_0.9 +snd_pcm_areas_copy@@ALSA_0.9 +snd_pcm_areas_copy_wrap@@ALSA_0.9 +snd_pcm_area_silence@@ALSA_0.9 +snd_pcm_areas_silence@@ALSA_0.9 +_snd_pcm_asym_open@@ALSA_0.9 +snd_pcm_async@@ALSA_0.9 +snd_pcm_avail@@ALSA_0.9 +snd_pcm_avail_delay@@ALSA_0.9 +snd_pcm_avail_update@@ALSA_0.9 +snd_pcm_build_linear_format@@ALSA_0.9 +snd_pcm_bytes_to_frames@@ALSA_0.9 +snd_pcm_bytes_to_samples@@ALSA_0.9 +snd_pcm_chmap_from_string@@ALSA_0.9 +snd_pcm_chmap_long_name@@ALSA_0.9 +snd_pcm_chmap_name@@ALSA_0.9 +snd_pcm_chmap_parse_string@@ALSA_0.9 +snd_pcm_chmap_print@@ALSA_0.9 +snd_pcm_chmap_type_name@@ALSA_0.9 +snd_pcm_close@@ALSA_0.9 +_snd_pcm_copy_open@@ALSA_0.9 +snd_pcm_copy_open@@ALSA_0.9 +snd_pcm_delay@@ALSA_0.9 +snd_pcm_direct_client_chk_xrun@@ALSA_0.9 +snd_pcm_direct_poll_descriptors@@ALSA_0.9 +snd_pcm_direct_slave_recover@@ALSA_0.9 +_snd_pcm_dmix_open@@ALSA_0.9 +snd_pcm_dmix_open@@ALSA_0.9 +snd_pcm_drain@@ALSA_0.9 +snd_pcm_drop@@ALSA_0.9 +_snd_pcm_dshare_open@@ALSA_0.9 +snd_pcm_dshare_open@@ALSA_0.9 +_snd_pcm_dsnoop_open@@ALSA_0.9 +snd_pcm_dsnoop_open@@ALSA_0.9 +snd_pcm_dump@@ALSA_0.9 +snd_pcm_dump_hw_setup@@ALSA_0.9 +snd_pcm_dump_setup@@ALSA_0.9 +snd_pcm_dump_sw_setup@@ALSA_0.9 +_snd_pcm_empty_open@@ALSA_0.9 +snd_pcm_extplug_create@@ALSA_0.9 +snd_pcm_extplug_delete@@ALSA_0.9 +snd_pcm_extplug_params_reset@@ALSA_0.9 +snd_pcm_extplug_set_param_link@@ALSA_0.9 +snd_pcm_extplug_set_param_list@@ALSA_0.9 +snd_pcm_extplug_set_param_minmax@@ALSA_0.9 +snd_pcm_extplug_set_slave_param_list@@ALSA_0.9 +snd_pcm_extplug_set_slave_param_minmax@@ALSA_0.9 +_snd_pcm_file_open@@ALSA_0.9 +snd_pcm_file_open@@ALSA_0.9 +snd_pcm_format_big_endian@@ALSA_0.9 +snd_pcm_format_cpu_endian@@ALSA_0.9 +snd_pcm_format_description@@ALSA_0.9 +snd_pcm_format_float@@ALSA_0.9 +snd_pcm_format_linear@@ALSA_0.9 +snd_pcm_format_little_endian@@ALSA_0.9 +snd_pcm_format_mask_any@@ALSA_0.9 +snd_pcm_format_mask_copy@@ALSA_0.9 +snd_pcm_format_mask_empty@@ALSA_0.9 +snd_pcm_format_mask_free@@ALSA_0.9 +snd_pcm_format_mask_malloc@@ALSA_0.9 +snd_pcm_format_mask_none@@ALSA_0.9 +snd_pcm_format_mask_reset@@ALSA_0.9 +snd_pcm_format_mask_set@@ALSA_0.9 +snd_pcm_format_mask_sizeof@@ALSA_0.9 +snd_pcm_format_mask_test@@ALSA_0.9 +snd_pcm_format_name@@ALSA_0.9 +snd_pcm_format_physical_width@@ALSA_0.9 +snd_pcm_format_set_silence@@ALSA_0.9 +snd_pcm_format_signed@@ALSA_0.9 +snd_pcm_format_silence_16@@ALSA_0.9 +snd_pcm_format_silence_32@@ALSA_0.9 +snd_pcm_format_silence_64@@ALSA_0.9 +snd_pcm_format_silence@@ALSA_0.9 +snd_pcm_format_size@@ALSA_0.9 +snd_pcm_format_unsigned@@ALSA_0.9 +snd_pcm_format_value@@ALSA_0.9 +snd_pcm_format_width@@ALSA_0.9 +snd_pcm_forwardable@@ALSA_0.9 +snd_pcm_forward@@ALSA_0.9.0rc8 +snd_pcm_frames_to_bytes@@ALSA_0.9 +snd_pcm_free_chmaps@@ALSA_0.9 +snd_pcm_generic_htimestamp@@ALSA_0.9 +snd_pcm_generic_real_htimestamp@@ALSA_0.9 +snd_pcm_get_chmap@@ALSA_0.9 +snd_pcm_get_params@@ALSA_0.9 +snd_pcm_hook_add@@ALSA_0.9 +_snd_pcm_hook_ctl_elems_install@@ALSA_0.9 +snd_pcm_hook_get_pcm@@ALSA_0.9 +snd_pcm_hook_get_private@@ALSA_0.9 +snd_pcm_hook_remove@@ALSA_0.9 +snd_pcm_hook_set_private@@ALSA_0.9 +_snd_pcm_hooks_open@@ALSA_0.9 +snd_pcm_hooks_open@@ALSA_0.9 +snd_pcm_htimestamp@@ALSA_0.9 +snd_pcm_hw_fast_tstamp@@ALSA_0.9 +snd_pcm_hw_free@@ALSA_0.9 +_snd_pcm_hw_open@@ALSA_0.9 +snd_pcm_hw_open@@ALSA_0.9 +snd_pcm_hw_param_dump@@ALSA_0.9 +snd_pcm_hw_params@@ALSA_0.9 +snd_pcm_hw_params_any@@ALSA_0.9 +snd_pcm_hw_params_can_disable_period_wakeup@@ALSA_0.9 +snd_pcm_hw_params_can_mmap_sample_resolution@@ALSA_0.9 +snd_pcm_hw_params_can_overrange@@ALSA_0.9 +snd_pcm_hw_params_can_pause@@ALSA_0.9 +snd_pcm_hw_params_can_resume@@ALSA_0.9 +snd_pcm_hw_params_can_sync_start@@ALSA_0.9 +snd_pcm_hw_params_copy@@ALSA_0.9 +snd_pcm_hw_params_current@@ALSA_0.9 +snd_pcm_hw_params_dump@@ALSA_0.9 +snd_pcm_hw_params_free@@ALSA_0.9 +__snd_pcm_hw_params_get_access@@ALSA_0.9 +snd_pcm_hw_params_get_access@ALSA_0.9 +snd_pcm_hw_params_get_access@@ALSA_0.9.0rc4 +snd_pcm_hw_params_get_access_mask@@ALSA_0.9 +__snd_pcm_hw_params_get_buffer_size@@ALSA_0.9 +snd_pcm_hw_params_get_buffer_size@ALSA_0.9 +snd_pcm_hw_params_get_buffer_size@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_buffer_size_max@@ALSA_0.9 +snd_pcm_hw_params_get_buffer_size_max@ALSA_0.9 +snd_pcm_hw_params_get_buffer_size_max@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_buffer_size_min@@ALSA_0.9 +snd_pcm_hw_params_get_buffer_size_min@ALSA_0.9 +snd_pcm_hw_params_get_buffer_size_min@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_buffer_time@@ALSA_0.9 +snd_pcm_hw_params_get_buffer_time@ALSA_0.9 +snd_pcm_hw_params_get_buffer_time@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_buffer_time_max@@ALSA_0.9 +snd_pcm_hw_params_get_buffer_time_max@ALSA_0.9 +snd_pcm_hw_params_get_buffer_time_max@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_buffer_time_min@@ALSA_0.9 +snd_pcm_hw_params_get_buffer_time_min@ALSA_0.9 +snd_pcm_hw_params_get_buffer_time_min@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_channels@@ALSA_0.9 +snd_pcm_hw_params_get_channels@ALSA_0.9 +snd_pcm_hw_params_get_channels@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_channels_max@@ALSA_0.9 +snd_pcm_hw_params_get_channels_max@ALSA_0.9 +snd_pcm_hw_params_get_channels_max@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_channels_min@@ALSA_0.9 +snd_pcm_hw_params_get_channels_min@ALSA_0.9 +snd_pcm_hw_params_get_channels_min@@ALSA_0.9.0rc4 +snd_pcm_hw_params_get_export_buffer@@ALSA_0.9 +snd_pcm_hw_params_get_fifo_size@@ALSA_0.9 +__snd_pcm_hw_params_get_format@@ALSA_0.9 +snd_pcm_hw_params_get_format@ALSA_0.9 +snd_pcm_hw_params_get_format@@ALSA_0.9.0rc4 +snd_pcm_hw_params_get_format_mask@@ALSA_0.9 +snd_pcm_hw_params_get_min_align@@ALSA_0.9 +__snd_pcm_hw_params_get_periods@@ALSA_0.9 +snd_pcm_hw_params_get_periods@ALSA_0.9 +snd_pcm_hw_params_get_periods@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_period_size@@ALSA_0.9 +snd_pcm_hw_params_get_period_size@ALSA_0.9 +snd_pcm_hw_params_get_period_size@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_period_size_max@@ALSA_0.9 +snd_pcm_hw_params_get_period_size_max@ALSA_0.9 +snd_pcm_hw_params_get_period_size_max@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_period_size_min@@ALSA_0.9 +snd_pcm_hw_params_get_period_size_min@ALSA_0.9 +snd_pcm_hw_params_get_period_size_min@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_periods_max@@ALSA_0.9 +snd_pcm_hw_params_get_periods_max@ALSA_0.9 +snd_pcm_hw_params_get_periods_max@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_periods_min@@ALSA_0.9 +snd_pcm_hw_params_get_periods_min@ALSA_0.9 +snd_pcm_hw_params_get_periods_min@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_period_time@@ALSA_0.9 +snd_pcm_hw_params_get_period_time@ALSA_0.9 +snd_pcm_hw_params_get_period_time@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_period_time_max@@ALSA_0.9 +snd_pcm_hw_params_get_period_time_max@ALSA_0.9 +snd_pcm_hw_params_get_period_time_max@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_period_time_min@@ALSA_0.9 +snd_pcm_hw_params_get_period_time_min@ALSA_0.9 +snd_pcm_hw_params_get_period_time_min@@ALSA_0.9.0rc4 +snd_pcm_hw_params_get_period_wakeup@@ALSA_0.9 +__snd_pcm_hw_params_get_rate@@ALSA_0.9 +snd_pcm_hw_params_get_rate@ALSA_0.9 +snd_pcm_hw_params_get_rate@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_rate_max@@ALSA_0.9 +snd_pcm_hw_params_get_rate_max@ALSA_0.9 +snd_pcm_hw_params_get_rate_max@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_rate_min@@ALSA_0.9 +snd_pcm_hw_params_get_rate_min@ALSA_0.9 +snd_pcm_hw_params_get_rate_min@@ALSA_0.9.0rc4 +snd_pcm_hw_params_get_rate_numden@@ALSA_0.9 +snd_pcm_hw_params_get_rate_resample@@ALSA_0.9 +snd_pcm_hw_params_get_sbits@@ALSA_0.9 +__snd_pcm_hw_params_get_subformat@@ALSA_0.9 +snd_pcm_hw_params_get_subformat@ALSA_0.9 +snd_pcm_hw_params_get_subformat@@ALSA_0.9.0rc4 +snd_pcm_hw_params_get_subformat_mask@@ALSA_0.9 +__snd_pcm_hw_params_get_tick_time@@ALSA_0.9 +snd_pcm_hw_params_get_tick_time@ALSA_0.9 +snd_pcm_hw_params_get_tick_time@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_tick_time_max@@ALSA_0.9 +snd_pcm_hw_params_get_tick_time_max@ALSA_0.9 +snd_pcm_hw_params_get_tick_time_max@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_get_tick_time_min@@ALSA_0.9 +snd_pcm_hw_params_get_tick_time_min@ALSA_0.9 +snd_pcm_hw_params_get_tick_time_min@@ALSA_0.9.0rc4 +snd_pcm_hw_params_is_batch@@ALSA_0.9 +snd_pcm_hw_params_is_block_transfer@@ALSA_0.9 +snd_pcm_hw_params_is_double@@ALSA_0.9 +snd_pcm_hw_params_is_half_duplex@@ALSA_0.9 +snd_pcm_hw_params_is_joint_duplex@@ALSA_0.9 +snd_pcm_hw_params_is_monotonic@@ALSA_0.9 +snd_pcm_hw_params_malloc@@ALSA_0.9 +snd_pcm_hw_params_set_access@@ALSA_0.9 +__snd_pcm_hw_params_set_access_first@@ALSA_0.9 +snd_pcm_hw_params_set_access_first@ALSA_0.9 +snd_pcm_hw_params_set_access_first@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_set_access_last@@ALSA_0.9 +snd_pcm_hw_params_set_access_last@ALSA_0.9 +snd_pcm_hw_params_set_access_last@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_access_mask@@ALSA_0.9 +snd_pcm_hw_params_set_buffer_size@@ALSA_0.9 +__snd_pcm_hw_params_set_buffer_size_first@@ALSA_0.9 +snd_pcm_hw_params_set_buffer_size_first@ALSA_0.9 +snd_pcm_hw_params_set_buffer_size_first@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_set_buffer_size_last@@ALSA_0.9 +snd_pcm_hw_params_set_buffer_size_last@ALSA_0.9 +snd_pcm_hw_params_set_buffer_size_last@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_buffer_size_max@@ALSA_0.9 +snd_pcm_hw_params_set_buffer_size_min@@ALSA_0.9 +snd_pcm_hw_params_set_buffer_size_minmax@@ALSA_0.9 +__snd_pcm_hw_params_set_buffer_size_near@@ALSA_0.9 +snd_pcm_hw_params_set_buffer_size_near@ALSA_0.9 +snd_pcm_hw_params_set_buffer_size_near@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_buffer_time@@ALSA_0.9 +__snd_pcm_hw_params_set_buffer_time_first@@ALSA_0.9 +snd_pcm_hw_params_set_buffer_time_first@ALSA_0.9 +snd_pcm_hw_params_set_buffer_time_first@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_set_buffer_time_last@@ALSA_0.9 +snd_pcm_hw_params_set_buffer_time_last@ALSA_0.9 +snd_pcm_hw_params_set_buffer_time_last@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_buffer_time_max@@ALSA_0.9 +snd_pcm_hw_params_set_buffer_time_min@@ALSA_0.9 +snd_pcm_hw_params_set_buffer_time_minmax@@ALSA_0.9 +__snd_pcm_hw_params_set_buffer_time_near@@ALSA_0.9 +snd_pcm_hw_params_set_buffer_time_near@ALSA_0.9 +snd_pcm_hw_params_set_buffer_time_near@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_channels@@ALSA_0.9 +__snd_pcm_hw_params_set_channels_first@@ALSA_0.9 +snd_pcm_hw_params_set_channels_first@ALSA_0.9 +snd_pcm_hw_params_set_channels_first@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_set_channels_last@@ALSA_0.9 +snd_pcm_hw_params_set_channels_last@ALSA_0.9 +snd_pcm_hw_params_set_channels_last@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_channels_max@@ALSA_0.9 +snd_pcm_hw_params_set_channels_min@@ALSA_0.9 +snd_pcm_hw_params_set_channels_minmax@@ALSA_0.9 +__snd_pcm_hw_params_set_channels_near@@ALSA_0.9 +snd_pcm_hw_params_set_channels_near@ALSA_0.9 +snd_pcm_hw_params_set_channels_near@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_export_buffer@@ALSA_0.9 +snd_pcm_hw_params_set_format@@ALSA_0.9 +__snd_pcm_hw_params_set_format_first@@ALSA_0.9 +snd_pcm_hw_params_set_format_first@ALSA_0.9 +snd_pcm_hw_params_set_format_first@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_set_format_last@@ALSA_0.9 +snd_pcm_hw_params_set_format_last@ALSA_0.9 +snd_pcm_hw_params_set_format_last@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_format_mask@@ALSA_0.9 +snd_pcm_hw_params_set_periods@@ALSA_0.9 +__snd_pcm_hw_params_set_periods_first@@ALSA_0.9 +snd_pcm_hw_params_set_periods_first@ALSA_0.9 +snd_pcm_hw_params_set_periods_first@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_periods_integer@@ALSA_0.9 +snd_pcm_hw_params_set_period_size@@ALSA_0.9 +__snd_pcm_hw_params_set_period_size_first@@ALSA_0.9 +snd_pcm_hw_params_set_period_size_first@ALSA_0.9 +snd_pcm_hw_params_set_period_size_first@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_period_size_integer@@ALSA_0.9 +__snd_pcm_hw_params_set_period_size_last@@ALSA_0.9 +snd_pcm_hw_params_set_period_size_last@ALSA_0.9 +snd_pcm_hw_params_set_period_size_last@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_period_size_max@@ALSA_0.9 +snd_pcm_hw_params_set_period_size_min@@ALSA_0.9 +snd_pcm_hw_params_set_period_size_minmax@@ALSA_0.9 +__snd_pcm_hw_params_set_period_size_near@@ALSA_0.9 +snd_pcm_hw_params_set_period_size_near@ALSA_0.9 +snd_pcm_hw_params_set_period_size_near@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_set_periods_last@@ALSA_0.9 +snd_pcm_hw_params_set_periods_last@ALSA_0.9 +snd_pcm_hw_params_set_periods_last@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_periods_max@@ALSA_0.9 +snd_pcm_hw_params_set_periods_min@@ALSA_0.9 +snd_pcm_hw_params_set_periods_minmax@@ALSA_0.9 +__snd_pcm_hw_params_set_periods_near@@ALSA_0.9 +snd_pcm_hw_params_set_periods_near@ALSA_0.9 +snd_pcm_hw_params_set_periods_near@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_period_time@@ALSA_0.9 +__snd_pcm_hw_params_set_period_time_first@@ALSA_0.9 +snd_pcm_hw_params_set_period_time_first@ALSA_0.9 +snd_pcm_hw_params_set_period_time_first@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_set_period_time_last@@ALSA_0.9 +snd_pcm_hw_params_set_period_time_last@ALSA_0.9 +snd_pcm_hw_params_set_period_time_last@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_period_time_max@@ALSA_0.9 +snd_pcm_hw_params_set_period_time_min@@ALSA_0.9 +snd_pcm_hw_params_set_period_time_minmax@@ALSA_0.9 +__snd_pcm_hw_params_set_period_time_near@@ALSA_0.9 +snd_pcm_hw_params_set_period_time_near@ALSA_0.9 +snd_pcm_hw_params_set_period_time_near@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_period_wakeup@@ALSA_0.9 +snd_pcm_hw_params_set_rate@@ALSA_0.9 +__snd_pcm_hw_params_set_rate_first@@ALSA_0.9 +snd_pcm_hw_params_set_rate_first@ALSA_0.9 +snd_pcm_hw_params_set_rate_first@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_set_rate_last@@ALSA_0.9 +snd_pcm_hw_params_set_rate_last@ALSA_0.9 +snd_pcm_hw_params_set_rate_last@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_rate_max@@ALSA_0.9 +snd_pcm_hw_params_set_rate_min@@ALSA_0.9 +snd_pcm_hw_params_set_rate_minmax@@ALSA_0.9 +__snd_pcm_hw_params_set_rate_near@@ALSA_0.9 +snd_pcm_hw_params_set_rate_near@ALSA_0.9 +snd_pcm_hw_params_set_rate_near@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_rate_resample@@ALSA_0.9 +snd_pcm_hw_params_set_subformat@@ALSA_0.9 +__snd_pcm_hw_params_set_subformat_first@@ALSA_0.9 +snd_pcm_hw_params_set_subformat_first@ALSA_0.9 +snd_pcm_hw_params_set_subformat_first@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_set_subformat_last@@ALSA_0.9 +snd_pcm_hw_params_set_subformat_last@ALSA_0.9 +snd_pcm_hw_params_set_subformat_last@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_subformat_mask@@ALSA_0.9 +snd_pcm_hw_params_set_tick_time@@ALSA_0.9 +__snd_pcm_hw_params_set_tick_time_first@@ALSA_0.9 +snd_pcm_hw_params_set_tick_time_first@ALSA_0.9 +snd_pcm_hw_params_set_tick_time_first@@ALSA_0.9.0rc4 +__snd_pcm_hw_params_set_tick_time_last@@ALSA_0.9 +snd_pcm_hw_params_set_tick_time_last@ALSA_0.9 +snd_pcm_hw_params_set_tick_time_last@@ALSA_0.9.0rc4 +snd_pcm_hw_params_set_tick_time_max@@ALSA_0.9 +snd_pcm_hw_params_set_tick_time_min@@ALSA_0.9 +snd_pcm_hw_params_set_tick_time_minmax@@ALSA_0.9 +__snd_pcm_hw_params_set_tick_time_near@@ALSA_0.9 +snd_pcm_hw_params_set_tick_time_near@ALSA_0.9 +snd_pcm_hw_params_set_tick_time_near@@ALSA_0.9.0rc4 +snd_pcm_hw_params_sizeof@@ALSA_0.9 +snd_pcm_hw_params_supports_audio_ts_type@@ALSA_0.9 +snd_pcm_hw_params_supports_audio_wallclock_ts@@ALSA_0.9 +snd_pcm_hw_params_test_access@@ALSA_0.9 +snd_pcm_hw_params_test_buffer_size@@ALSA_0.9 +snd_pcm_hw_params_test_buffer_time@@ALSA_0.9 +snd_pcm_hw_params_test_channels@@ALSA_0.9 +snd_pcm_hw_params_test_format@@ALSA_0.9 +snd_pcm_hw_params_test_periods@@ALSA_0.9 +snd_pcm_hw_params_test_period_size@@ALSA_0.9 +snd_pcm_hw_params_test_period_time@@ALSA_0.9 +snd_pcm_hw_params_test_rate@@ALSA_0.9 +snd_pcm_hw_params_test_subformat@@ALSA_0.9 +snd_pcm_hw_params_test_tick_time@@ALSA_0.9 +snd_pcm_hw_refine@@ALSA_0.9 +snd_pcm_hwsync@@ALSA_0.9 +_snd_pcm_iec958_open@@ALSA_0.9 +snd_pcm_iec958_open@@ALSA_0.9 +snd_pcm_info@@ALSA_0.9 +snd_pcm_info_copy@@ALSA_0.9 +snd_pcm_info_free@@ALSA_0.9 +snd_pcm_info_get_card@@ALSA_0.9 +snd_pcm_info_get_class@@ALSA_0.9 +snd_pcm_info_get_device@@ALSA_0.9 +snd_pcm_info_get_id@@ALSA_0.9 +snd_pcm_info_get_name@@ALSA_0.9 +snd_pcm_info_get_stream@@ALSA_0.9 +snd_pcm_info_get_subclass@@ALSA_0.9 +snd_pcm_info_get_subdevice@@ALSA_0.9 +snd_pcm_info_get_subdevice_name@@ALSA_0.9 +snd_pcm_info_get_subdevices_avail@@ALSA_0.9 +snd_pcm_info_get_subdevices_count@@ALSA_0.9 +snd_pcm_info_get_sync@@ALSA_0.9 +snd_pcm_info_malloc@@ALSA_0.9 +snd_pcm_info_set_device@@ALSA_0.9 +snd_pcm_info_set_stream@@ALSA_0.9 +snd_pcm_info_set_subdevice@@ALSA_0.9 +snd_pcm_info_sizeof@@ALSA_0.9 +snd_pcm_ioplug_avail@@ALSA_0.9 +snd_pcm_ioplug_create@@ALSA_0.9 +snd_pcm_ioplug_delete@@ALSA_0.9 +snd_pcm_ioplug_hw_avail@@ALSA_0.9 +snd_pcm_ioplug_mmap_areas@@ALSA_0.9 +snd_pcm_ioplug_params_reset@@ALSA_0.9 +snd_pcm_ioplug_reinit_status@@ALSA_0.9 +snd_pcm_ioplug_set_param_list@@ALSA_0.9 +snd_pcm_ioplug_set_param_minmax@@ALSA_0.9 +snd_pcm_ioplug_set_state@@ALSA_0.9 +_snd_pcm_ladspa_open@@ALSA_0.9 +snd_pcm_ladspa_open@@ALSA_0.9 +snd_pcm_lfloat_convert_float_integer@@ALSA_0.9 +snd_pcm_lfloat_convert_integer_float@@ALSA_0.9 +snd_pcm_lfloat_get_s32_index@@ALSA_0.9 +_snd_pcm_lfloat_open@@ALSA_0.9 +snd_pcm_lfloat_open@@ALSA_0.9 +snd_pcm_lfloat_put_s32_index@@ALSA_0.9 +_snd_pcm_linear_open@@ALSA_0.9 +snd_pcm_linear_open@@ALSA_0.9 +snd_pcm_link@@ALSA_0.9 +snd_pcm_meter_add_scope@@ALSA_0.9 +snd_pcm_meter_get_boundary@@ALSA_0.9 +snd_pcm_meter_get_bufsize@@ALSA_0.9 +snd_pcm_meter_get_channels@@ALSA_0.9 +snd_pcm_meter_get_now@@ALSA_0.9 +snd_pcm_meter_get_rate@@ALSA_0.9 +_snd_pcm_meter_open@@ALSA_0.9 +snd_pcm_meter_open@@ALSA_0.9 +snd_pcm_meter_search_scope@@ALSA_0.9 +snd_pcm_mmap@@ALSA_0.9 +snd_pcm_mmap_begin@@ALSA_0.9 +snd_pcm_mmap_commit@@ALSA_0.9 +_snd_pcm_mmap_emul_open@@ALSA_0.9 +snd_pcm_mmap_readi@@ALSA_0.9 +snd_pcm_mmap_readn@@ALSA_0.9 +snd_pcm_mmap_writei@@ALSA_0.9 +snd_pcm_mmap_writen@@ALSA_0.9 +_snd_pcm_mulaw_open@@ALSA_0.9 +snd_pcm_mulaw_open@@ALSA_0.9 +_snd_pcm_multi_open@@ALSA_0.9 +snd_pcm_multi_open@@ALSA_0.9 +snd_pcm_munmap@@ALSA_0.9 +snd_pcm_name@@ALSA_0.9 +snd_pcm_nonblock@@ALSA_0.9 +_snd_pcm_null_open@@ALSA_0.9 +snd_pcm_null_open@@ALSA_0.9 +snd_pcm_open@@ALSA_0.9 +snd_pcm_open_fallback@@ALSA_0.9 +snd_pcm_open_lconf@@ALSA_0.9 +snd_pcm_parse_control_id@@ALSA_0.9 +snd_pcm_pause@@ALSA_0.9 +_snd_pcm_plug_open@@ALSA_0.9 +snd_pcm_plug_open@@ALSA_0.9 +_snd_pcm_poll_descriptor@@ALSA_0.9 +snd_pcm_poll_descriptors@@ALSA_0.9 +snd_pcm_poll_descriptors_count@@ALSA_0.9 +snd_pcm_poll_descriptors_revents@@ALSA_0.9 +snd_pcm_prepare@@ALSA_0.9 +snd_pcm_query_chmaps@@ALSA_0.9 +snd_pcm_query_chmaps_from_hw@@ALSA_0.9 +_snd_pcm_rate_linear_open@@ALSA_0.9 +_snd_pcm_rate_open@@ALSA_0.9 +snd_pcm_rate_open@@ALSA_0.9 +snd_pcm_readi@@ALSA_0.9 +snd_pcm_readn@@ALSA_0.9 +snd_pcm_recover@@ALSA_0.9 +snd_pcm_reset@@ALSA_0.9 +snd_pcm_resume@@ALSA_0.9 +snd_pcm_rewindable@@ALSA_0.9 +snd_pcm_rewind@@ALSA_0.9 +snd_pcm_route_determine_ttable@@ALSA_0.9 +snd_pcm_route_load_ttable@@ALSA_0.9 +_snd_pcm_route_open@@ALSA_0.9 +snd_pcm_route_open@@ALSA_0.9 +snd_pcm_samples_to_bytes@@ALSA_0.9 +snd_pcm_scope_get_callback_private@@ALSA_0.9 +snd_pcm_scope_get_name@@ALSA_0.9 +snd_pcm_scope_malloc@@ALSA_0.9 +snd_pcm_scope_s16_get_channel_buffer@@ALSA_0.9 +snd_pcm_scope_s16_open@@ALSA_0.9 +snd_pcm_scope_set_callback_private@@ALSA_0.9 +snd_pcm_scope_set_name@@ALSA_0.9 +snd_pcm_scope_set_ops@@ALSA_0.9 +snd_pcm_set_chmap@@ALSA_0.9 +snd_pcm_set_params@@ALSA_0.9 +_snd_pcm_share_open@@ALSA_0.9 +snd_pcm_share_open@@ALSA_0.9 +_snd_pcm_shm_open@@ALSA_0.9 +snd_pcm_shm_open@@ALSA_0.9 +snd_pcm_slave_conf@@ALSA_0.9 +_snd_pcm_softvol_open@@ALSA_0.9 +snd_pcm_softvol_open@@ALSA_0.9 +snd_pcm_start@@ALSA_0.9 +snd_pcm_start_mode_name@@ALSA_0.9 +snd_pcm_state@@ALSA_0.9 +snd_pcm_state_name@@ALSA_0.9 +snd_pcm_status@@ALSA_0.9 +snd_pcm_status_copy@@ALSA_0.9 +snd_pcm_status_dump@@ALSA_0.9 +snd_pcm_status_free@@ALSA_0.9 +snd_pcm_status_get_audio_htstamp@@ALSA_0.9 +snd_pcm_status_get_audio_htstamp_report@@ALSA_0.9 +snd_pcm_status_get_avail@@ALSA_0.9 +snd_pcm_status_get_avail_max@@ALSA_0.9 +snd_pcm_status_get_delay@@ALSA_0.9 +snd_pcm_status_get_driver_htstamp@@ALSA_0.9 +snd_pcm_status_get_htstamp@@ALSA_0.9.0rc8 +snd_pcm_status_get_overrange@@ALSA_0.9 +snd_pcm_status_get_state@@ALSA_0.9 +snd_pcm_status_get_trigger_htstamp@@ALSA_0.9.0rc8 +snd_pcm_status_get_trigger_tstamp@@ALSA_0.9 +snd_pcm_status_get_tstamp@@ALSA_0.9 +snd_pcm_status_malloc@@ALSA_0.9 +snd_pcm_status_set_audio_htstamp_config@@ALSA_0.9 +snd_pcm_status_sizeof@@ALSA_0.9 +snd_pcm_stream@@ALSA_0.9 +snd_pcm_stream_name@@ALSA_0.9 +snd_pcm_subformat_description@@ALSA_0.9 +snd_pcm_subformat_mask_any@@ALSA_0.9 +snd_pcm_subformat_mask_copy@@ALSA_0.9 +snd_pcm_subformat_mask_empty@@ALSA_0.9 +snd_pcm_subformat_mask_free@@ALSA_0.9 +snd_pcm_subformat_mask_malloc@@ALSA_0.9 +snd_pcm_subformat_mask_none@@ALSA_0.9 +snd_pcm_subformat_mask_reset@@ALSA_0.9 +snd_pcm_subformat_mask_set@@ALSA_0.9 +snd_pcm_subformat_mask_sizeof@@ALSA_0.9 +snd_pcm_subformat_mask_test@@ALSA_0.9 +snd_pcm_subformat_name@@ALSA_0.9 +snd_pcm_sw_params@@ALSA_0.9 +snd_pcm_sw_params_copy@@ALSA_0.9 +snd_pcm_sw_params_current@@ALSA_0.9 +snd_pcm_sw_params_dump@@ALSA_0.9 +snd_pcm_sw_params_free@@ALSA_0.9 +__snd_pcm_sw_params_get_avail_min@@ALSA_0.9 +snd_pcm_sw_params_get_avail_min@ALSA_0.9 +snd_pcm_sw_params_get_avail_min@@ALSA_0.9.0rc4 +snd_pcm_sw_params_get_boundary@@ALSA_0.9 +snd_pcm_sw_params_get_period_event@@ALSA_0.9 +__snd_pcm_sw_params_get_silence_size@@ALSA_0.9 +snd_pcm_sw_params_get_silence_size@ALSA_0.9 +snd_pcm_sw_params_get_silence_size@@ALSA_0.9.0rc4 +__snd_pcm_sw_params_get_silence_threshold@@ALSA_0.9 +snd_pcm_sw_params_get_silence_threshold@ALSA_0.9 +snd_pcm_sw_params_get_silence_threshold@@ALSA_0.9.0rc4 +__snd_pcm_sw_params_get_sleep_min@@ALSA_0.9 +snd_pcm_sw_params_get_sleep_min@ALSA_0.9 +snd_pcm_sw_params_get_sleep_min@@ALSA_0.9.0rc4 +snd_pcm_sw_params_get_start_mode@@ALSA_0.9 +__snd_pcm_sw_params_get_start_threshold@@ALSA_0.9 +snd_pcm_sw_params_get_start_threshold@ALSA_0.9 +snd_pcm_sw_params_get_start_threshold@@ALSA_0.9.0rc4 +__snd_pcm_sw_params_get_stop_threshold@@ALSA_0.9 +snd_pcm_sw_params_get_stop_threshold@ALSA_0.9 +snd_pcm_sw_params_get_stop_threshold@@ALSA_0.9.0rc4 +__snd_pcm_sw_params_get_tstamp_mode@@ALSA_0.9 +snd_pcm_sw_params_get_tstamp_mode@ALSA_0.9 +snd_pcm_sw_params_get_tstamp_mode@@ALSA_0.9.0rc4 +snd_pcm_sw_params_get_tstamp_type@@ALSA_0.9 +__snd_pcm_sw_params_get_xfer_align@@ALSA_0.9 +snd_pcm_sw_params_get_xfer_align@ALSA_0.9 +snd_pcm_sw_params_get_xfer_align@@ALSA_0.9.0rc4 +snd_pcm_sw_params_get_xrun_mode@@ALSA_0.9 +snd_pcm_sw_params_malloc@@ALSA_0.9 +snd_pcm_sw_params_set_avail_min@@ALSA_0.9 +snd_pcm_sw_params_set_period_event@@ALSA_0.9 +snd_pcm_sw_params_set_silence_size@@ALSA_0.9 +snd_pcm_sw_params_set_silence_threshold@@ALSA_0.9 +snd_pcm_sw_params_set_sleep_min@@ALSA_0.9 +snd_pcm_sw_params_set_start_mode@@ALSA_0.9 +snd_pcm_sw_params_set_start_threshold@@ALSA_0.9 +snd_pcm_sw_params_set_stop_threshold@@ALSA_0.9 +snd_pcm_sw_params_set_tstamp_mode@@ALSA_0.9 +snd_pcm_sw_params_set_tstamp_type@@ALSA_0.9 +snd_pcm_sw_params_set_xfer_align@@ALSA_0.9 +snd_pcm_sw_params_set_xrun_mode@@ALSA_0.9 +snd_pcm_sw_params_sizeof@@ALSA_0.9 +snd_pcm_tstamp_mode_name@@ALSA_0.9 +snd_pcm_tstamp_type_name@@ALSA_0.9 +snd_pcm_type@@ALSA_0.9 +snd_pcm_type_name@@ALSA_0.9.0 +snd_pcm_unlink@@ALSA_0.9 +snd_pcm_wait@@ALSA_0.9 +snd_pcm_writei@@ALSA_0.9 +snd_pcm_writen@@ALSA_0.9 +snd_pcm_xrun_mode_name@@ALSA_0.9 +snd_rawmidi_close@@ALSA_0.9 +snd_rawmidi_drain@@ALSA_0.9 +snd_rawmidi_drop@@ALSA_0.9 +_snd_rawmidi_hw_open@@ALSA_0.9 +snd_rawmidi_hw_open@@ALSA_0.9 +snd_rawmidi_info@@ALSA_0.9 +snd_rawmidi_info_copy@@ALSA_0.9 +snd_rawmidi_info_free@@ALSA_0.9 +snd_rawmidi_info_get_card@@ALSA_0.9 +snd_rawmidi_info_get_device@@ALSA_0.9 +snd_rawmidi_info_get_flags@@ALSA_0.9 +snd_rawmidi_info_get_id@@ALSA_0.9 +snd_rawmidi_info_get_name@@ALSA_0.9 +snd_rawmidi_info_get_stream@@ALSA_0.9 +snd_rawmidi_info_get_subdevice@@ALSA_0.9 +snd_rawmidi_info_get_subdevice_name@@ALSA_0.9 +snd_rawmidi_info_get_subdevices_avail@@ALSA_0.9 +snd_rawmidi_info_get_subdevices_count@@ALSA_0.9 +snd_rawmidi_info_malloc@@ALSA_0.9 +snd_rawmidi_info_set_device@@ALSA_0.9 +snd_rawmidi_info_set_stream@@ALSA_0.9 +snd_rawmidi_info_set_subdevice@@ALSA_0.9 +snd_rawmidi_info_sizeof@@ALSA_0.9 +snd_rawmidi_name@@ALSA_0.9 +snd_rawmidi_nonblock@@ALSA_0.9 +snd_rawmidi_open@@ALSA_0.9 +snd_rawmidi_open_lconf@@ALSA_0.9 +snd_rawmidi_params@@ALSA_0.9 +snd_rawmidi_params_copy@@ALSA_0.9 +snd_rawmidi_params_current@@ALSA_0.9 +snd_rawmidi_params_free@@ALSA_0.9 +snd_rawmidi_params_get_avail_min@@ALSA_0.9 +snd_rawmidi_params_get_buffer_size@@ALSA_0.9 +snd_rawmidi_params_get_no_active_sensing@@ALSA_0.9 +snd_rawmidi_params_malloc@@ALSA_0.9 +snd_rawmidi_params_set_avail_min@@ALSA_0.9 +snd_rawmidi_params_set_buffer_size@@ALSA_0.9 +snd_rawmidi_params_set_no_active_sensing@@ALSA_0.9 +snd_rawmidi_params_sizeof@@ALSA_0.9 +snd_rawmidi_poll_descriptors@@ALSA_0.9 +snd_rawmidi_poll_descriptors_count@@ALSA_0.9 +snd_rawmidi_poll_descriptors_revents@@ALSA_0.9 +snd_rawmidi_read@@ALSA_0.9 +snd_rawmidi_status@@ALSA_0.9 +snd_rawmidi_status_copy@@ALSA_0.9 +snd_rawmidi_status_free@@ALSA_0.9 +snd_rawmidi_status_get_avail@@ALSA_0.9 +snd_rawmidi_status_get_tstamp@@ALSA_0.9 +snd_rawmidi_status_get_xruns@@ALSA_0.9 +snd_rawmidi_status_malloc@@ALSA_0.9 +snd_rawmidi_status_sizeof@@ALSA_0.9 +snd_rawmidi_stream@@ALSA_0.9 +snd_rawmidi_type@@ALSA_0.9 +_snd_rawmidi_virtual_open@@ALSA_0.9 +snd_rawmidi_virtual_open@@ALSA_0.9 +snd_rawmidi_write@@ALSA_0.9 +snd_receive_fd@@ALSA_0.9 +snd_sctl_build@@ALSA_0.9 +snd_sctl_free@@ALSA_0.9 +snd_sctl_install@@ALSA_0.9 +snd_sctl_remove@@ALSA_0.9 +snd_send_fd@@ALSA_0.9 +snd_seq_alloc_named_queue@@ALSA_0.9 +snd_seq_alloc_queue@@ALSA_0.9 +snd_seq_change_bit@@ALSA_0.9 +snd_seq_client_id@@ALSA_0.9 +snd_seq_client_info_copy@@ALSA_0.9 +snd_seq_client_info_event_filter_add@@ALSA_0.9 +snd_seq_client_info_event_filter_check@@ALSA_0.9 +snd_seq_client_info_event_filter_clear@@ALSA_0.9 +snd_seq_client_info_event_filter_del@@ALSA_0.9 +snd_seq_client_info_free@@ALSA_0.9 +snd_seq_client_info_get_broadcast_filter@@ALSA_0.9 +snd_seq_client_info_get_card@@ALSA_0.9 +snd_seq_client_info_get_client@@ALSA_0.9 +snd_seq_client_info_get_error_bounce@@ALSA_0.9 +snd_seq_client_info_get_event_filter@@ALSA_0.9 +snd_seq_client_info_get_event_lost@@ALSA_0.9 +snd_seq_client_info_get_name@@ALSA_0.9 +snd_seq_client_info_get_num_ports@@ALSA_0.9 +snd_seq_client_info_get_pid@@ALSA_0.9 +snd_seq_client_info_get_type@@ALSA_0.9 +snd_seq_client_info_malloc@@ALSA_0.9 +snd_seq_client_info_set_broadcast_filter@@ALSA_0.9 +snd_seq_client_info_set_client@@ALSA_0.9 +snd_seq_client_info_set_error_bounce@@ALSA_0.9 +snd_seq_client_info_set_event_filter@@ALSA_0.9 +snd_seq_client_info_set_name@@ALSA_0.9 +snd_seq_client_info_sizeof@@ALSA_0.9 +snd_seq_client_pool_copy@@ALSA_0.9 +snd_seq_client_pool_free@@ALSA_0.9 +snd_seq_client_pool_get_client@@ALSA_0.9 +snd_seq_client_pool_get_input_free@@ALSA_0.9 +snd_seq_client_pool_get_input_pool@@ALSA_0.9 +snd_seq_client_pool_get_output_free@@ALSA_0.9 +snd_seq_client_pool_get_output_pool@@ALSA_0.9 +snd_seq_client_pool_get_output_room@@ALSA_0.9 +snd_seq_client_pool_malloc@@ALSA_0.9 +snd_seq_client_pool_set_input_pool@@ALSA_0.9 +snd_seq_client_pool_set_output_pool@@ALSA_0.9 +snd_seq_client_pool_set_output_room@@ALSA_0.9 +snd_seq_client_pool_sizeof@@ALSA_0.9 +snd_seq_close@@ALSA_0.9 +snd_seq_connect_from@@ALSA_0.9 +snd_seq_connect_to@@ALSA_0.9 +snd_seq_control_queue@@ALSA_0.9 +snd_seq_create_event@@ALSA_0.9 +snd_seq_create_port@@ALSA_0.9 +snd_seq_create_queue@@ALSA_0.9 +snd_seq_create_simple_port@@ALSA_0.9 +snd_seq_delete_port@@ALSA_0.9 +snd_seq_delete_simple_port@@ALSA_0.9 +snd_seq_disconnect_from@@ALSA_0.9 +snd_seq_disconnect_to@@ALSA_0.9 +snd_seq_drain_output@@ALSA_0.9 +snd_seq_drop_input@@ALSA_0.9 +snd_seq_drop_input_buffer@@ALSA_0.9 +snd_seq_drop_output@@ALSA_0.9 +snd_seq_drop_output_buffer@@ALSA_0.9 +snd_seq_event_input@@ALSA_0.9 +snd_seq_event_input_pending@@ALSA_0.9 +snd_seq_event_length@@ALSA_0.9 +snd_seq_event_output@@ALSA_0.9 +snd_seq_event_output_buffer@@ALSA_0.9 +snd_seq_event_output_direct@@ALSA_0.9 +snd_seq_event_output_pending@@ALSA_0.9 +snd_seq_extract_output@@ALSA_0.9 +snd_seq_free_event@@ALSA_0.9 +snd_seq_free_queue@@ALSA_0.9 +snd_seq_get_any_client_info@@ALSA_0.9 +snd_seq_get_any_port_info@@ALSA_0.9 +snd_seq_get_bit@@ALSA_0.9 +snd_seq_get_client_info@@ALSA_0.9 +snd_seq_get_client_pool@@ALSA_0.9 +snd_seq_get_input_buffer_size@@ALSA_0.9 +snd_seq_get_output_buffer_size@@ALSA_0.9 +snd_seq_get_port_info@@ALSA_0.9 +snd_seq_get_port_subscription@@ALSA_0.9 +snd_seq_get_queue_info@@ALSA_0.9 +snd_seq_get_queue_status@@ALSA_0.9 +snd_seq_get_queue_tempo@@ALSA_0.9 +snd_seq_get_queue_timer@@ALSA_0.9 +snd_seq_get_queue_usage@@ALSA_0.9 +_snd_seq_hw_open@@ALSA_0.9 +snd_seq_hw_open@@ALSA_0.9 +snd_seq_name@@ALSA_0.9 +snd_seq_nonblock@@ALSA_0.9 +snd_seq_open@@ALSA_0.9 +snd_seq_open_lconf@@ALSA_0.9 +snd_seq_parse_address@@ALSA_0.9 +snd_seq_poll_descriptors@@ALSA_0.9 +snd_seq_poll_descriptors_count@@ALSA_0.9 +snd_seq_poll_descriptors_revents@@ALSA_0.9 +snd_seq_port_info_copy@@ALSA_0.9 +snd_seq_port_info_free@@ALSA_0.9 +snd_seq_port_info_get_addr@@ALSA_0.9 +snd_seq_port_info_get_capability@@ALSA_0.9 +snd_seq_port_info_get_client@@ALSA_0.9 +snd_seq_port_info_get_midi_channels@@ALSA_0.9 +snd_seq_port_info_get_midi_voices@@ALSA_0.9 +snd_seq_port_info_get_name@@ALSA_0.9 +snd_seq_port_info_get_port@@ALSA_0.9 +snd_seq_port_info_get_port_specified@@ALSA_0.9 +snd_seq_port_info_get_read_use@@ALSA_0.9 +snd_seq_port_info_get_synth_voices@@ALSA_0.9 +snd_seq_port_info_get_timestamping@@ALSA_0.9 +snd_seq_port_info_get_timestamp_queue@@ALSA_0.9 +snd_seq_port_info_get_timestamp_real@@ALSA_0.9 +snd_seq_port_info_get_type@@ALSA_0.9 +snd_seq_port_info_get_write_use@@ALSA_0.9 +snd_seq_port_info_malloc@@ALSA_0.9 +snd_seq_port_info_set_addr@@ALSA_0.9 +snd_seq_port_info_set_capability@@ALSA_0.9 +snd_seq_port_info_set_client@@ALSA_0.9 +snd_seq_port_info_set_midi_channels@@ALSA_0.9 +snd_seq_port_info_set_midi_voices@@ALSA_0.9 +snd_seq_port_info_set_name@@ALSA_0.9 +snd_seq_port_info_set_port@@ALSA_0.9 +snd_seq_port_info_set_port_specified@@ALSA_0.9 +snd_seq_port_info_set_synth_voices@@ALSA_0.9 +snd_seq_port_info_set_timestamping@@ALSA_0.9 +snd_seq_port_info_set_timestamp_queue@@ALSA_0.9 +snd_seq_port_info_set_timestamp_real@@ALSA_0.9 +snd_seq_port_info_set_type@@ALSA_0.9 +snd_seq_port_info_sizeof@@ALSA_0.9 +snd_seq_port_subscribe_copy@@ALSA_0.9 +snd_seq_port_subscribe_free@@ALSA_0.9 +snd_seq_port_subscribe_get_dest@@ALSA_0.9 +snd_seq_port_subscribe_get_exclusive@@ALSA_0.9 +snd_seq_port_subscribe_get_queue@@ALSA_0.9 +snd_seq_port_subscribe_get_sender@@ALSA_0.9 +snd_seq_port_subscribe_get_time_real@@ALSA_0.9 +snd_seq_port_subscribe_get_time_update@@ALSA_0.9 +snd_seq_port_subscribe_malloc@@ALSA_0.9 +snd_seq_port_subscribe_set_dest@@ALSA_0.9 +snd_seq_port_subscribe_set_exclusive@@ALSA_0.9 +snd_seq_port_subscribe_set_queue@@ALSA_0.9 +snd_seq_port_subscribe_set_sender@@ALSA_0.9 +snd_seq_port_subscribe_set_time_real@@ALSA_0.9 +snd_seq_port_subscribe_set_time_update@@ALSA_0.9 +snd_seq_port_subscribe_sizeof@@ALSA_0.9 +snd_seq_query_named_queue@@ALSA_0.9 +snd_seq_query_next_client@@ALSA_0.9 +snd_seq_query_next_port@@ALSA_0.9 +snd_seq_query_port_subscribers@@ALSA_0.9 +snd_seq_query_subscribe_copy@@ALSA_0.9 +snd_seq_query_subscribe_free@@ALSA_0.9 +snd_seq_query_subscribe_get_addr@@ALSA_0.9 +snd_seq_query_subscribe_get_client@@ALSA_0.9 +snd_seq_query_subscribe_get_exclusive@@ALSA_0.9 +snd_seq_query_subscribe_get_index@@ALSA_0.9 +snd_seq_query_subscribe_get_num_subs@@ALSA_0.9 +snd_seq_query_subscribe_get_port@@ALSA_0.9 +snd_seq_query_subscribe_get_queue@@ALSA_0.9 +snd_seq_query_subscribe_get_root@@ALSA_0.9 +snd_seq_query_subscribe_get_time_real@@ALSA_0.9 +snd_seq_query_subscribe_get_time_update@@ALSA_0.9 +snd_seq_query_subscribe_get_type@@ALSA_0.9 +snd_seq_query_subscribe_malloc@@ALSA_0.9 +snd_seq_query_subscribe_set_client@@ALSA_0.9 +snd_seq_query_subscribe_set_index@@ALSA_0.9 +snd_seq_query_subscribe_set_port@@ALSA_0.9 +snd_seq_query_subscribe_set_root@@ALSA_0.9 +snd_seq_query_subscribe_set_type@@ALSA_0.9 +snd_seq_query_subscribe_sizeof@@ALSA_0.9 +snd_seq_queue_info_copy@@ALSA_0.9 +snd_seq_queue_info_free@@ALSA_0.9 +snd_seq_queue_info_get_flags@@ALSA_0.9 +snd_seq_queue_info_get_locked@@ALSA_0.9 +snd_seq_queue_info_get_name@@ALSA_0.9 +snd_seq_queue_info_get_owner@@ALSA_0.9 +snd_seq_queue_info_get_queue@@ALSA_0.9 +snd_seq_queue_info_malloc@@ALSA_0.9 +snd_seq_queue_info_set_flags@@ALSA_0.9 +snd_seq_queue_info_set_locked@@ALSA_0.9 +snd_seq_queue_info_set_name@@ALSA_0.9 +snd_seq_queue_info_set_owner@@ALSA_0.9 +snd_seq_queue_info_sizeof@@ALSA_0.9 +snd_seq_queue_status_copy@@ALSA_0.9 +snd_seq_queue_status_free@@ALSA_0.9 +snd_seq_queue_status_get_events@@ALSA_0.9 +snd_seq_queue_status_get_queue@@ALSA_0.9 +snd_seq_queue_status_get_real_time@@ALSA_0.9 +snd_seq_queue_status_get_status@@ALSA_0.9 +snd_seq_queue_status_get_tick_time@@ALSA_0.9 +snd_seq_queue_status_malloc@@ALSA_0.9 +snd_seq_queue_status_sizeof@@ALSA_0.9 +snd_seq_queue_tempo_copy@@ALSA_0.9 +snd_seq_queue_tempo_free@@ALSA_0.9 +snd_seq_queue_tempo_get_ppq@@ALSA_0.9 +snd_seq_queue_tempo_get_queue@@ALSA_0.9 +snd_seq_queue_tempo_get_skew@@ALSA_0.9 +snd_seq_queue_tempo_get_skew_base@@ALSA_0.9 +snd_seq_queue_tempo_get_tempo@@ALSA_0.9 +snd_seq_queue_tempo_malloc@@ALSA_0.9 +snd_seq_queue_tempo_set_ppq@@ALSA_0.9 +snd_seq_queue_tempo_set_skew@@ALSA_0.9 +snd_seq_queue_tempo_set_skew_base@@ALSA_0.9 +snd_seq_queue_tempo_set_tempo@@ALSA_0.9 +snd_seq_queue_tempo_sizeof@@ALSA_0.9 +snd_seq_queue_timer_copy@@ALSA_0.9 +snd_seq_queue_timer_free@@ALSA_0.9 +snd_seq_queue_timer_get_id@@ALSA_0.9 +snd_seq_queue_timer_get_queue@@ALSA_0.9 +snd_seq_queue_timer_get_resolution@@ALSA_0.9 +snd_seq_queue_timer_get_type@@ALSA_0.9 +snd_seq_queue_timer_malloc@@ALSA_0.9 +snd_seq_queue_timer_set_id@@ALSA_0.9 +snd_seq_queue_timer_set_resolution@@ALSA_0.9 +snd_seq_queue_timer_set_type@@ALSA_0.9 +snd_seq_queue_timer_sizeof@@ALSA_0.9 +snd_seq_remove_events@@ALSA_0.9 +snd_seq_remove_events_copy@@ALSA_0.9 +snd_seq_remove_events_free@@ALSA_0.9 +snd_seq_remove_events_get_channel@@ALSA_0.9 +snd_seq_remove_events_get_condition@@ALSA_0.9 +snd_seq_remove_events_get_dest@@ALSA_0.9 +snd_seq_remove_events_get_event_type@@ALSA_0.9 +snd_seq_remove_events_get_queue@@ALSA_0.9 +snd_seq_remove_events_get_tag@@ALSA_0.9 +snd_seq_remove_events_get_time@@ALSA_0.9 +snd_seq_remove_events_malloc@@ALSA_0.9 +snd_seq_remove_events_set_channel@@ALSA_0.9 +snd_seq_remove_events_set_condition@@ALSA_0.9 +snd_seq_remove_events_set_dest@@ALSA_0.9 +snd_seq_remove_events_set_event_type@@ALSA_0.9 +snd_seq_remove_events_set_queue@@ALSA_0.9 +snd_seq_remove_events_set_tag@@ALSA_0.9 +snd_seq_remove_events_set_time@@ALSA_0.9 +snd_seq_remove_events_sizeof@@ALSA_0.9 +snd_seq_reset_pool_input@@ALSA_0.9 +snd_seq_reset_pool_output@@ALSA_0.9 +snd_seq_set_bit@@ALSA_0.9 +snd_seq_set_client_event_filter@@ALSA_0.9 +snd_seq_set_client_info@@ALSA_0.9 +snd_seq_set_client_name@@ALSA_0.9 +snd_seq_set_client_pool@@ALSA_0.9 +snd_seq_set_client_pool_input@@ALSA_0.9 +snd_seq_set_client_pool_output@@ALSA_0.9 +snd_seq_set_client_pool_output_room@@ALSA_0.9 +snd_seq_set_input_buffer_size@@ALSA_0.9 +snd_seq_set_output_buffer_size@@ALSA_0.9 +snd_seq_set_port_info@@ALSA_0.9 +snd_seq_set_queue_info@@ALSA_0.9 +snd_seq_set_queue_tempo@@ALSA_0.9 +snd_seq_set_queue_timer@@ALSA_0.9 +snd_seq_set_queue_usage@@ALSA_0.9 +snd_seq_subscribe_port@@ALSA_0.9 +snd_seq_sync_output_queue@@ALSA_0.9 +snd_seq_system_info@@ALSA_0.9 +snd_seq_system_info_copy@@ALSA_0.9 +snd_seq_system_info_free@@ALSA_0.9 +snd_seq_system_info_get_channels@@ALSA_0.9 +snd_seq_system_info_get_clients@@ALSA_0.9 +snd_seq_system_info_get_cur_clients@@ALSA_0.9 +snd_seq_system_info_get_cur_queues@@ALSA_0.9 +snd_seq_system_info_get_ports@@ALSA_0.9 +snd_seq_system_info_get_queues@@ALSA_0.9 +snd_seq_system_info_malloc@@ALSA_0.9 +snd_seq_system_info_sizeof@@ALSA_0.9 +snd_seq_type@@ALSA_0.9 +snd_seq_unset_bit@@ALSA_0.9 +snd_seq_unsubscribe_port@@ALSA_0.9 +snd_shm_area_create@@ALSA_0.9 +snd_shm_area_destroy@@ALSA_0.9 +snd_shm_area_destructor@@ALSA_0.9 +snd_shm_area_share@@ALSA_0.9 +snd_spcm_init@@ALSA_0.9 +snd_spcm_init_duplex@@ALSA_0.9 +snd_spcm_init_get_params@@ALSA_0.9 +snd_strerror@@ALSA_0.9 +snd_strlcpy@@ALSA_0.9 +snd_timer_async@@ALSA_0.9 +snd_timer_close@@ALSA_0.9 +snd_timer_continue@@ALSA_0.9 +snd_timer_ginfo_copy@@ALSA_0.9 +snd_timer_ginfo_free@@ALSA_0.9 +snd_timer_ginfo_get_card@@ALSA_0.9 +snd_timer_ginfo_get_clients@@ALSA_0.9 +snd_timer_ginfo_get_flags@@ALSA_0.9 +snd_timer_ginfo_get_id@@ALSA_0.9 +snd_timer_ginfo_get_name@@ALSA_0.9 +snd_timer_ginfo_get_resolution@@ALSA_0.9 +snd_timer_ginfo_get_resolution_max@@ALSA_0.9 +snd_timer_ginfo_get_resolution_min@@ALSA_0.9 +snd_timer_ginfo_get_tid@@ALSA_0.9 +snd_timer_ginfo_malloc@@ALSA_0.9 +snd_timer_ginfo_set_tid@@ALSA_0.9 +snd_timer_ginfo_sizeof@@ALSA_0.9 +_snd_timer_hw_open@@ALSA_0.9 +snd_timer_hw_open@@ALSA_0.9 +snd_timer_id_copy@@ALSA_0.9 +snd_timer_id_free@@ALSA_0.9 +snd_timer_id_get_card@@ALSA_0.9 +snd_timer_id_get_class@@ALSA_0.9 +snd_timer_id_get_device@@ALSA_0.9 +snd_timer_id_get_sclass@@ALSA_0.9 +snd_timer_id_get_subdevice@@ALSA_0.9 +snd_timer_id_malloc@@ALSA_0.9 +snd_timer_id_set_card@@ALSA_0.9 +snd_timer_id_set_class@@ALSA_0.9 +snd_timer_id_set_device@@ALSA_0.9 +snd_timer_id_set_sclass@@ALSA_0.9 +snd_timer_id_set_subdevice@@ALSA_0.9 +snd_timer_id_sizeof@@ALSA_0.9 +snd_timer_info@@ALSA_0.9 +snd_timer_info_copy@@ALSA_0.9 +snd_timer_info_free@@ALSA_0.9 +snd_timer_info_get_card@@ALSA_0.9 +snd_timer_info_get_id@@ALSA_0.9 +snd_timer_info_get_name@@ALSA_0.9 +snd_timer_info_get_resolution@@ALSA_0.9 +snd_timer_info_get_ticks@@ALSA_0.9 +snd_timer_info_is_slave@@ALSA_0.9 +snd_timer_info_malloc@@ALSA_0.9 +snd_timer_info_sizeof@@ALSA_0.9 +snd_timer_name@@ALSA_0.9 +snd_timer_nonblock@@ALSA_0.9 +snd_timer_open@@ALSA_0.9 +snd_timer_open_lconf@@ALSA_0.9 +snd_timer_params@@ALSA_0.9 +snd_timer_params_copy@@ALSA_0.9 +snd_timer_params_free@@ALSA_0.9 +snd_timer_params_get_auto_start@@ALSA_0.9 +snd_timer_params_get_early_event@@ALSA_0.9 +snd_timer_params_get_exclusive@@ALSA_0.9.0 +snd_timer_params_get_filter@@ALSA_0.9.0 +snd_timer_params_get_queue_size@@ALSA_0.9 +snd_timer_params_get_ticks@@ALSA_0.9 +snd_timer_params_malloc@@ALSA_0.9 +snd_timer_params_set_auto_start@@ALSA_0.9 +snd_timer_params_set_early_event@@ALSA_0.9 +snd_timer_params_set_exclusive@@ALSA_0.9.0 +snd_timer_params_set_filter@@ALSA_0.9.0 +snd_timer_params_set_queue_size@@ALSA_0.9 +snd_timer_params_set_ticks@@ALSA_0.9 +snd_timer_params_sizeof@@ALSA_0.9 +snd_timer_poll_descriptors@@ALSA_0.9 +snd_timer_poll_descriptors_count@@ALSA_0.9 +snd_timer_poll_descriptors_revents@@ALSA_0.9 +snd_timer_query_close@@ALSA_0.9 +_snd_timer_query_hw_open@@ALSA_0.9 +snd_timer_query_hw_open@@ALSA_0.9 +snd_timer_query_info@@ALSA_0.9.0 +snd_timer_query_next_device@@ALSA_0.9 +snd_timer_query_open@@ALSA_0.9 +snd_timer_query_open_lconf@@ALSA_0.9 +snd_timer_query_params@@ALSA_0.9.0 +snd_timer_query_status@@ALSA_0.9.0 +snd_timer_read@@ALSA_0.9 +snd_timer_start@@ALSA_0.9 +snd_timer_status@@ALSA_0.9 +snd_timer_status_copy@@ALSA_0.9 +snd_timer_status_free@@ALSA_0.9 +snd_timer_status_get_lost@@ALSA_0.9 +snd_timer_status_get_overrun@@ALSA_0.9 +snd_timer_status_get_queue@@ALSA_0.9 +snd_timer_status_get_resolution@@ALSA_0.9 +snd_timer_status_get_timestamp@@ALSA_0.9 +snd_timer_status_malloc@@ALSA_0.9 +snd_timer_status_sizeof@@ALSA_0.9 +snd_timer_stop@@ALSA_0.9 +snd_timer_type@@ALSA_0.9 +snd_tlv_convert_from_dB@@ALSA_0.9 +snd_tlv_convert_to_dB@@ALSA_0.9 +snd_tlv_get_dB_range@@ALSA_0.9 +snd_tlv_parse_dB_info@@ALSA_0.9 +snd_use_case_free_list@@ALSA_0.9 +snd_use_case_get@@ALSA_0.9 +snd_use_case_geti@@ALSA_0.9 +snd_use_case_get_list@@ALSA_0.9 +snd_use_case_identifier@@ALSA_0.9 +snd_use_case_mgr_close@@ALSA_0.9 +snd_use_case_mgr_open@@ALSA_0.9 +snd_use_case_mgr_reload@@ALSA_0.9 +snd_use_case_mgr_reset@@ALSA_0.9 +snd_use_case_parse_ctl_elem_id@@ALSA_0.9 +snd_use_case_parse_selem_id@@ALSA_0.9 +snd_use_case_set@@ALSA_0.9 +snd_user_file@@ALSA_0.9 diff --git a/lsp-alsa/Makefile b/lsp-alsa/Makefile new file mode 100644 index 0000000..48e4a17 --- /dev/null +++ b/lsp-alsa/Makefile @@ -0,0 +1,12 @@ + +ARCHIVES = lsp-libasound.a lsp-pcm-dispatch.a + +include ../archive.mk + +lsp-libasound.a: import-api.lsp +lsp-libasound.a: libasound.lsp libasound-config.lsp libasound-pcm.lsp + ar -rc $@ $^ + +lsp-pcm-dispatch.a: pcm-dispatch.lsp ex1.conf + ar -rc $@ $^ + diff --git a/lsp-alsa/ex1.conf b/lsp-alsa/ex1.conf new file mode 100644 index 0000000..8ecdef1 --- /dev/null +++ b/lsp-alsa/ex1.conf @@ -0,0 +1 @@ +(("PCM-LIST" "bluealsa" "plughw")) diff --git a/lsp-alsa/import-api.lsp b/lsp-alsa/import-api.lsp new file mode 100644 index 0000000..d20aaa5 --- /dev/null +++ b/lsp-alsa/import-api.lsp @@ -0,0 +1,107 @@ +;; This module provides "import extension" functions in support of +;; importing libasound functions. + +;; Function: (get-string-safe ADDR) +; Invoke get-string unless ADDR is 0 in which case nil is returned. +(define (get-string-safe ADDR) + (when (!= ADDR) (get-string ADDR))) + +;; Macro: (ptr-api FN ARGS [FORMAT [FILTER]]) +; This macro is used to define an API function for an import function +; that a) returns an int error code with 0 on success and +; negative on error, and b) has a * argument for an on-success return +; value. +; +; The given argument list includes a place marker ** +; where the low-level import function has a ** argument for returning +; a pointer value. The resulting API function wraps the import +; function so that the ** argument is omitted but that the pointer +; value is returned. +; +(define-macro (wrap** FN ARGS (FORMAT "Lu") (FILTER nil)) + (let ((UNPACK (list (list 'unpack FORMAT 'DATA) 0))) + (when FILTER (setf UNPACK (list FILTER UNPACK))) + (letex ((UNPACK UNPACK) + (CALL (cons (eval FN) (replace '** (copy ARGS) 'DATA))) + (REST (clean (curry = '**) ARGS)) + (FORMAT FORMAT)) + ;; redefine FN with wrapper + (constant FN (fn REST + (let ((DATA (pack FORMAT 0)) (E 0)) + (if (>= (setf E CALL)) UNPACK E)))) ) + )) + +; Wrap an import function that returns "int" error code and has a ** +; argument for an actual return data when error code is 0. The +; import** term looks like an import, but the return type slot holds +; list of format and filter, and the ** argument is marked as **. +; +(define (naming x n) + (if (string? x) + (list x (sym (format "__%d" n))) + + (= '** x) (list "void*" x) (list x (sym (format "__%d" n))))) + +; The import is wrapped into a lambda for all other arguments, that +; then returns the ** data or the error code. +(define-macro (import** _LIB FN RET) + (let ((FORMAT "Lu") (FILTER nil) (NAMED '()) (n 0)) + (dolist (i (args)) + (when (list? i) + (when (and i (string? (i 0))) (setf FORMAT (pop i))) + (when i (setf FILTER (i 0)))) + (if (string? i) (push (list i (sym (string "__" n))) NAMED -1) + (push '("void*" **) NAMED -1)) + (inc n)) + (eval (flat (list 'import _LIB FN RET (map first NAMED)))) + (eval (list 'wrap** (sym FN) (map last NAMED) (or FORMAT "Lu") FILTER)) + )) + +;====================================================================== +;; Macro: (define-api FN args [format [filter]] +; define-api is a helper macro to define an API function for a +; low-level function FN that provides a return value via a ** argument +; (i.e., a pointer to a pointer variable). +; +; The first macro argument, FN, is the symbol name of the low-level +; function. The APi function gets the same name with "@" added to it. +; +; If the second macro argument is a string, then that will +; +; This is handled in newlisp by allocating a pointer +; variable memory block through a (pack "Lu" 0) term as value for a +; DATA variable, and then pass DATA as the ** argument for the +; low-level function. Upon the low-level function's successful return, +; the now assigned memory block assignment is captured through an +; (unpack "Lu" DATA) term for return as API function value. +; +; The first macro argument +; Helper macro for functions the return pointers via ** arguments. +; +; Eg: (define-api foo x DATA y) will define API function foo@ that +; calls (foo x DATA y) with DATA being a ** argument, and then returns +; the value of DATA or the error code of foo. +; +; With (define-api foo "lf" x DATA y), i.e. a format string as first +; argument, then that will be used as unpacking format. +; +; With (define-api foo (get-string) x DATA y), i.e. a list with a +; filter function name as first argument, then that will be used as +; filter for the unpacked data. +; +; Both format and filter may be given, in that order. +(define-macro (define-api FN) + (let ((ARGS (args)) (RES '((unpack "Lu" DATA) 0))) + (when (string? (first ARGS)) + (setf RES (letex ((FMT (pop ARGS))) '((unpack FMT DATA) 0)))) + (when (list? (first ARGS)) (setf RES (list ((pop ARGS) 0) RES))) + (letex ((REAL (cons FN ARGS)) + (API (cons (sym (string (term FN) "@")) + (clean (fn (x) (= (term x) "DATA")) ARGS))) + (RES RES)) + (define API + (let ((DATA (pack "Lu" 0)) (R nil) (E 0)) + (when (>= (setf E REAL)) (setf R RES)) + (or R E)))))) + +"import-api.lsp" diff --git a/lsp-alsa/libasound-config.lsp b/lsp-alsa/libasound-config.lsp new file mode 100644 index 0000000..5183f05 --- /dev/null +++ b/lsp-alsa/libasound-config.lsp @@ -0,0 +1,277 @@ +;; == Configuration Interface +; https://alsa-project.org/alsa-doc/alsa-lib/group___config.html + +;; Type: snd_config_t +; This is an opaque internal struct for configuration nodes. The ALSA +; library uses pointers to this structure as handles to configuration +; nodes. Applications don't access contents directly. + +;; Type: snd_config_update_t +; This is an opaque internal struct for configuration private update +; objects. The ALSA library uses this structure to save private update +; information. + +;; Type: snd_config_iterator_t +; This is a pointer to the opaque struct type used for configuration +; compound iterators. The ALSA library uses these as handles for +; configuration compound iterators. Applications don't access contents +; directly. + +;; Enum: snd_config_type_t +(constant + 'SND_CONFIG_TYPE_INTEGER 0 + 'SND_CONFIG_TYPE_INTEGER64 1 + 'SND_CONFIG_TYPE_REAL 2 + 'SND_CONFIG_TYPE_STRING 3 + 'SND_CONFIG_TYPE_POINTER 4 + 'SND_CONFIG_TYPE_COMPOUND 1024 + ) + +;; Type snd_devname_t +(struct 'snd_devname_t + "char*" ; char * name + "char*" ; char * comment + "void*" ; snd_devname_t * next + ) + +;; Variable: snd_config_t *snd_config +; Holds the ALSA configuration tree. +(import LIB "snd_config") +(define (snd_config@) + ((unpack "Lu" (address snd_config)) 0)) + +;; Function: int snd_config_update() +; Updates variable snd_config by rereading the global configuration +; files (if needed). +(import LIB "snd_config_update" "int" "void") +(when (< (setf E (snd_config_update))) + (die 1 "** Cannot load the ALSA configuration tree: " E) + ) + +;; Function: int snd_config_expand +;; [in] snd_config_t *node = Handle to the expansion node +;; [in] snd_config_t *root = Handle to the configuration root node +;; [in] const char *args = Arguments string, can be NULL (last must be null) +;; [in] snd_config_t *private_data = Handle to private data node for functions +;; [out] snd_config_t **result +; Expands a configuration node, applying arguments and functions. If +; config has arguments (defined by a child with id @args), this +; function replaces any string node beginning with $ with the +; respective argument value, or the default argument value, or +; nothing. Furthermore, any functions are evaluated (see +; snd_config_evaluate). The resulting copy of config is returned in +; result. +; +; Returns a non-negative value if successful, otherwise a negative +; error code. +; +; The import is wrapped to return the result pointer or (negative) +; error code. +(import** LIB "snd_config_expand" + "int" ; int snd_config_expand + "void*" ; snd_config_t *config + "void*" ; snd_config_t *root + "void*" ; const char *args + "void*" ; snd_config_t *private_data + () ; snd_config_t **result + ) + +;; Function: int snd_config_evaluate +;; [in,out] snd_config_t *node = node in root to evaluate +;; [in] snd_config_t *root = configuration root +;; [in] snd_config_t *private_data +;; [*] snd_config_t **result = must be null! +; Evaluates a configuration node at runtime. This function evaluates +; any functions (@func) in config and replaces those nodes with the +; respective function results. Returns a non-negative value if +; successful, otherwise a negative error code. +(import LIB "snd_config_evaluate" + "int" ; int snd_config_evaluate + "void*" ; snd_config_t *config + "void*" ; snd_config_t *root + "void*" ;snd_config_t *private_data + "void*" ;snd_config_t **result + ) + + +;; Term: (snd_config_get_id NODE) +; Returns the id string for a configuration node. +; +;; Function: int snd_config_get_id(char** id) +;; [in] const snd_config_t *config - Handle to the configuration node. +;; [out] config, const char **value - node id +; Returns 0 if successful, otherwise a negative error code. The +; returned string is owned by the configuration node; the application +; must not modify or delete it, and the string becomes invalid when +; the node's id changes or when the node is freed. If the node does +; not have an id, *id is set to NULL. +; +; The import is wrapped to return the id string or (negative) error +; code. +(import** LIB "snd_config_get_id" + "int" ;; int snd_config_get_id + "void*" ; [in] const snd_config_t *config, + (get-string-safe) ; [out] const char **id + ) + +;; Function: int snd_config_get_integer(snd_config_t *node,int *value) +; Returns the value of an integer ("lu") configuration node. +; +; @param node - the configuration node concerned. +; +; @param value - pointer for the return value. +; +; The import is wrapped to return the integer as such, or (negative) +; error code. +(import** LIB "snd_config_get_integer" + "int" ; int snd_config_get_integer + "void*" ; const snd_config_t *config, + () ; long *value + ) + +;; Function: int snd_config_get_integer64 +; [in] snd_config_t *config +; [out] int64_t *value +; +; Returns the value of a 64-bit-integer ("Lu") configuration node. +; +; The import is wrapped to return the integer as such, or (negative) +; error code. +(import** LIB "snd_config_get_integer64" + "int" ; int snd_config_get_integer64 + "void*" ; const snd_config_t *config, + () ; long long *value + ) + +;; Function: int snd_config_get_real +;; [in] const snd_config_t *node +;; [out] double *value +; +; Returns the value of a real-number configuration node. +; +; The import is wrapped to return the double as such, or (negative) +; error code. +(import** LIB "snd_config_get_real" + "int" ; int snd_config_get_real + "void*" ; const snd_config_t *node, + ("lf") ; double *value + ) + +; Returns the value of a real or integer configuration node as double. More... +;; API function to return the double as such, or (negative) error code. +(import** LIB "snd_config_get_ireal" + "int" ; int snd_config_get_real + "void*" ; const snd_config_t *config, + ("lf") ; double *value) + ) + +; Returns the value of a string configuration node. The returned +; string is owned by the configuration node; the application must not +; modify or delete it, and the string becomes invalid when the node's +; value changes or when the node is freed. +; +;; API function to return the string (copied), or (negative) error +;; code. +(import** LIB "snd_config_get_string" + "int" ; int snd_config_get_string ( + "void*" ; const snd_config_t *config, + (get-string) ; const char **value) + ) + +;; int snd_config_get_ascii (const snd_config_t *config, char **value) +; Returns the value of a configuration node as a string. This function +; dynamically allocates the returned string. The application is +; responsible for deleting it with free() when it is no longer used. +; For a string node with NULL value, the returned string is NULL. + + +; Returns the value of a pointer configuration node. +; +;; API function to return the pointer (value), or (negative) error. +(import** LIB "snd_config_get_pointer" + "int" ; int snd_config_get_pointer ( + "void*" ; const snd_config_t *config, + () ; const void **value) + ) + +; Returns the type of a configuration node. +(import LIB "snd_config_get_type" + "unsigned int" ; snd_config_type_t snd_config_get_type + "void*" ; const snd_config_t *config + ) + +; Returns count of items in array, zero when the compound is not an +; array, otherwise a negative error code. +(import LIB "snd_config_is_array" + "int" ; int snd_config_is_array + "void*" ; const snd_config_t *config + ) + +;; ------- iterator functions -------- + +; Returns an iterator pointing to a node's first child. More... +(import LIB "snd_config_iterator_first" + "void*" ;; snd_config_iterator_t snd_config_iterator_first + "void*" ; const snd_config_t *node + ) + +; Returns an iterator pointing to the next sibling. More... +(import LIB "snd_config_iterator_next" + "void*" ; snd_config_iterator_t snd_config_iterator_next + "void*" ; const snd_config_iterator_t iterator + ) + +; Returns an iterator that ends a node's children list. +;; Parameters +; [in] config Handle to a configuration node. +;; +; Returns n iterator that indicates the end of config's children list. +; config must be a compound node. The return value can be understood +; as pointing past the last child of config. +(import LIB "snd_config_iterator_end" + "void*" ; snd_config_iterator_t snd_config_iterator_end + "void*" ; const snd_config_t *config + ) + +; Returns the configuration node handle pointed to by an iterator. +(import LIB "snd_config_iterator_entry" + "void*" ; snd_config_t * snd_config_iterator_entry + "void*" ; const snd_config_iterator_t iterator + ) + +;;====================================================================== +; Extended API + +;; Term: (iterate NODE) +; Make a list of a compound node's children by iterating over them. +(define (iterate NODE) + (let ((CUR (snd_config_iterator_first NODE)) + (END (snd_config_iterator_end NODE)) + (RES '())) + (while (!= CUR END) + (push (traverse (snd_config_iterator_entry CUR)) RES -1) + (setf CUR (snd_config_iterator_next CUR))) + (if (snd_config_is_array NODE) + (map list (sequence 0 (- (length RES) 1)) RES) + RES))) + +;; Term: (traverse NODE) +; Return the pair (ID value) for a node. The value of a compound node +; is the list of its child nodes. +(define (traverse NODE) + (let ((TYPE (snd_config_get_type NODE)) + (ID (snd_config_get_id NODE))) + (list ID + (case TYPE + (0 (snd_config_get_integer NODE)) + (1 (snd_config_get_integer64 NODE)) + (2 (snd_config_get_real NODE)) + (3 (snd_config_get_string NODE)) + (4 (snd_config_get_integer NODE)) + (5 (sym (string ">" (snd_config_get_pointer NODE)))) + (1024 (iterate NODE)) + (true (list 'unknown NODE TYPE)))))) + + + +"libasound-config.lsp" diff --git a/lsp-alsa/libasound-control.lsp b/lsp-alsa/libasound-control.lsp new file mode 100644 index 0000000..eacbe55 --- /dev/null +++ b/lsp-alsa/libasound-control.lsp @@ -0,0 +1,344 @@ +;; == Control Interface +; https://alsa-project.org/alsa-doc/alsa-lib/group___control.html + +;;*************************************************************************** +; Highlevel control interface + +;; Function: int snd_hctl_compare_fast +;; [in] const snd_hctl_elem_t *c1 +;; [in] const snd_hctl_elem_t *c2) +; A "don't care" fast compare functions that may be used with +; snd_hctl_set_compare. +; +; Returns -1 if c1c2 + +;; Function: int snd_hctl_open +;; [out] snd_hctl_t **hctl = Returned HCTL handle +;; [in] const char *name = ASCII identifier of the underlying CTL handle +;; [in] int mode = Open mode (see SND_CTL_NONBLOCK, SND_CTL_ASYNC) +; Opens an HCTL. + +;; Function: int snd_hctl_open_ctl +;; [out] snd_hctl_t **hctlp = Returned HCTL handle +;; [in] snd_ctl_t *ctl = underlying CTL handle +; Opens an HCTL. + +;; Function: int snd_hctl_close +;; [in] snd_hctl_t *hctl = HCTL handle +; Closes the specified HCTL handle and frees all associated resources. + +;; Function: int snd_hctl_nonblock +;; [in] snd_hctl_t *hctl +;; [in] int nonblock +; set nonblock mode. 0 = block, 1 = nonblock. + +;; Function: int snd_hctl_poll_descriptors_count +;; [in] snd_hctl_t *hctl +; Get count of poll descriptors for HCTL handle. + +;; Function: int snd_hctl_poll_descriptors +;; [in] snd_hctl_t *hctl = HCTL handle +;; [out] struct pollfd *pfds = array of poll descriptors +;; [in] unsigned int space = space in the poll descriptor array +; Get poll descriptors; fills the array and retuns count of filled +; descriptors. + +;; Function: int snd_hctl_poll_descriptors_revents +;; [in] snd_hctl_t *ctl = HCTL handle +;; [in] struct pollfd *pfds = array of poll descriptors +;; [in] unsigned int nfds = count of poll descriptors +;; [out] unsigned short *revents = returned events +; Get returned events from poll descriptors. Returns 0 on success, +; otherwise a negative error code + +;; Function: unsigned int snd_hctl_get_count +; [in] snd_hctl_t *hctl = HCTL handle +; Get number of loaded elements for an HCTL. + +;; Function: int snd_hctl_set_compare +;; [in] snd_hctl_t *hctl = HCTL handle +;; [in] snd_hctl_compare_t hsort = Element compare function +; Change HCTL compare function and reorder elements. Returns 0 on +; success otherwise a negative error code + +;; Function: snd _hctl_elem_t * snd_hctl_first_elem +;; [in] snd_hctl_t *hctl = HCTL handle +; get first element for an HCTL. + +;; Function snd _hctl_elem_t * snd_hctl_last_elem +;; [in] snd_hctl_t *hctl = HCTL handle +; get last element for an HCTL. + +;; Function: snd _hctl_elem_t * snd_hctl_find_elem +;; [in] snd_hctl_t *hctl = HCTL handle +;; [in] const snd_ctl_elem_id_t *id = Element identifier +; Find an HCTL element by id. Returns pointer to found HCTL element or +; NULL if not found. + +;; Function: void snd_hctl_set_callback +;; [in] snd_hctl_t *hctl +;; [in] snd_hctl_callback_t callback +; Set callback function for an HCTL. + +;; Function: void snd_hctl_set_callback_private +;; [in] snd_hctl_t *hctl +;; [in] void *data +; Set callback private value for an HCTL. + +;; Function: void * snd_hctl_get_callback_private +;; [in] snd_hctl_t *hctl +; Get callback private value for an HCTL. + +;; Function: int snd_hctl_load +;; [int] snd_hctl_t *hctl +; Load an HCTL with all elements and sort them. + +;; Function: int snd_hctl_free +;; [in] snd_hctl_t *hctl +; Free HCTL loaded elements + +;; Function: int snd_hctl_handle_events +;; [in] snd_hctl_t *hctl +; Handle pending HCTL events invoking callbacks. + +;; Function: const char * snd_hctl_name +;; [in] snd_hctl_t *hctl +; Get identifier of HCTL handle. Returns the ASCII identifier of given +; HCTL handle. It's the same identifier specified in snd_hctl_open(). + +;; Function: int snd_hctl_wait +;; [in] snd_hctl_t *hctl = HCTL handle +;; [in] int timeout = maximum time in milliseconds to wait +; Wait for a HCTL to become ready (i.e. at least one event pending). +; Returns a positive value on success otherwise a negative error code. +; 0 timeout occurred; 1 an event is pending. + +;; Function: snd _ctl_t * snd_hctl_ctl +;; [in] snd_hctl_t *hctl +; Get a ctl handle associated to the given hctl handle. + +;; Function: snd _hctl_elem_t * snd_hctl_elem_next +;; [in] snd_hctl_elem_t *elem +; get next HCTL element. Returns pointer to next element. + +;; Function: snd _hctl_elem_t * snd_hctl_elem_prev +;; [in] snd_hctl_elem_t *elem +; Get previous HCTL element. Returns pointer to next element. + +;; Function: int snd_hctl_elem_info +;; [in] snd_hctl_elem_t *elem +;; [out] snd_ctl_elem_info_t *info +; Get information for an HCTL element. + +;; Function: int snd_hctl_elem_read +;; [in] snd_hctl_elem_t *elem +;; [out] snd_ctl_elem_value_t *value +; Get value for an HCTL element. + +;; Function: int snd_hctl_elem_write +;; [in] snd_hctl_elem_t *elem +;; [in] snd_ctl_elem_value_t *value +; Set value for an HCTL element. + +;; Function: int snd_hctl_elem_tlv_read +;; [in] snd_hctl_elem_t *elem +;; [out] unsigned int *tlv = TLV array for value +;; [in] unsigned int tlv_size = byte size of TLV array +; Get TLV value for an HCTL element. Returns 0 otherwise a negative +; error code on failure. + +;; Function: int snd_hctl_elem_tlv_write +;; [in] snd_hctl_elem_t *elem +;; [in] const unsigned int *tlv = TLV array for value +; Set TLV value for an HCTL element. Returns 0 on success, >1 on +; success when value was changed, and <0 a negative error code on +; failure. + + +;; Function: int snd_hctl_elem_tlv_command +;; [in] snd_hctl_elem_t *elem +;; [in] const unsigned int *tlv = TLV array for value +; Set TLV value for an HCTL element. Returns 0 on success, >1 on +; success when value was changed, and <0 a negative error code on +; failure. + +;; Function: snd _hctl_t * snd_hctl_elem_get_hctl +;; [in] snd_hctl_elem_t *elem +; Get HCTL handle for an HCTL element. + +;; Function: void snd_hctl_elem_get_id +;; [in] const snd_hctl_elem_t *obj +;; [out] snd_ctl_elem_id_t *ptr = Pointer to returned CTL element identifier +; Get CTL element identifier of a CTL element id/value. + +;; Functionunsigned int snd_hctl_elem_get_numid +;; [in] const snd_hctl_elem_t *obj +; Get element numeric identifier of a CTL element id/value. + +;; Function: snd _ctl_elem_iface_t snd_hctl_elem_get_interface +;; [in] const snd_hctl_elem_t *obj +; Get interface part of CTL element identifier of a CTL element +; id/value. + +;; Function: unsigned int snd_hctl_elem_get_device +;; [in] const snd_hctl_elem_t *obj +; Get device part of CTL element identifier of a CTL element id/value. + +;; Function: unsigned int snd_hctl_elem_get_subdevice +;; [in] const snd_hctl_elem_t *obj +; Get subdevice part of CTL element identifier of a CTL element +; id/value. + +;; Function: const char * snd_hctl_elem_get_name +;; [in] const snd_hctl_elem_t *obj +; Get name part of CTL element identifier of a CTL element id/value. + +;; Function: unsigned int snd_hctl_elem_get_index +;; [in] const snd_hctl_elem_t *obj +; Get index part of CTL element identifier of a CTL element id/value. + +;; Function: void snd_hctl_elem_set_callback +;; [in] snd_hctl_elem_t *obj +;; snd_hctl_elem_callback_t val +; Set callback function for an HCTL element. + +;; Function: void * snd_hctl_elem_get_callback_private +;; [in] const snd_hctl_elem_t *obj +; Get callback private value for an HCTL element. + +;; Function: void snd_hctl_elem_set_callback_private +;; [in] snd_hctl_elem_t *obj +;; [in] void *val +; Set callback private value for an HCTL element. + +;*************************************************************************** +; Setup Control Interface + +;; Function: int snd_sctl_build +;; [out] snd_sctl_t **ctl = Result - setup control handle +;; [in] snd_ctl_t *handle = Master control handle +;; [in] snd_config_t *config = Setup configuration +;; [in] snd_config_t *private_data = Private data for runtime evaluation +;; [in] int mode = Build mode - SND_SCTL_xxxx +; Build setup control handle. + +;; Function: int snd_sctl_free +;; [in] snd_sctl_t *handle +; Free setup control handle. + +;; Function: int snd_sctl_install +;; [in] snd_sctl_t *handle +; Install given values to control elements. + +;; Function: int snd_sctl_remove +;; [in] (snd_sctl_t *handle +; Remove (restore) previous values from control elements. + +;*************************************************************************** + +(constant + ;;'SND_CONTROL_DLSYM_VERSION "_dlsym_control_001" + ;;'SND_CTL_EVENT_MASK_REMOVE ?? + ;;'SND_CTL_EVENT_MASK_VALUE ?? + ;;'SND_CTL_EVENT_MASK_INFO ?? + ;;'SND_CTL_EVENT_MASK_ADD ?? + ;;'SND_CTL_EVENT_MASK_TLV ?? + 'SND_CTL_NAME_NONE "" + 'SND_CTL_NAME_PLAYBACK "Playback " + 'SND_CTL_NAME_CAPTURE "Capture " + 'SND_CTL_NAME_IEC958_NONE "" + 'SND_CTL_NAME_IEC958_SWITCH "Switch" + 'SND_CTL_NAME_IEC958_VOLUME "Volume" + 'SND_CTL_NAME_IEC958_DEFAULT "Default" + 'SND_CTL_NAME_IEC958_MASK "Mask" + 'SND_CTL_NAME_IEC958_CON_MASK "Con Mask" + 'SND_CTL_NAME_IEC958_PRO_MASK "Pro Mask" + 'SND_CTL_NAME_IEC958_PCM_STREAM "PCM Stream" + + ;;'SND_CTL_NAME_IEC958(expl, direction, what) "IEC958 " expl SND_CTL_NAME_##direction SND_CTL_NAME_IEC958_##what + + 'SND_CTL_POWER_MASK 0xff00 + 'SND_CTL_POWER_D0 0x0000 + 'SND_CTL_POWER_D1 0x0100 + 'SND_CTL_POWER_D2 0x0200 + 'SND_CTL_POWER_D3 0x0300 + 'SND_CTL_POWER_D3hot (or SND_CTL_POWER_D3 0x0000) + 'SND_CTL_POWER_D3cold (or SND_CTL_POWER_D3 0x0001) + 'SND_CTL_TLVT_CONTAINER 0x0000 + 'SND_CTL_TLVT_DB_SCALE 0x0001 + 'SND_CTL_TLVT_DB_LINEAR 0x0002 + 'SND_CTL_TLVT_DB_RANGE 0x0003 + 'SND_CTL_TLVT_DB_MINMAX 0x0004 + 'SND_CTL_TLVT_DB_MINMAX_MUTE 0x0005 + 'SND_CTL_TLV_DB_GAIN_MUTE -9999999 + 'SND_CTL_TLVT_CHMAP_FIXED 0x00101 + 'SND_CTL_TLVT_CHMAP_VAR 0x00102 + 'SND_CTL_TLVT_CHMAP_PAIRED 0x00103 + ;;'SND_CTL_NONBLOCK + ;;'SND_CTL_ASYNC + ;;'SND_CTL_READONLY + 'SND_SCTL_NOFREE 0x0001 + + ;;snd_ctl_elem_id_alloca(ptr) + ;; allocate an invalid snd_ctl_elem_id_t using standard alloca More... + + ;;snd_ctl_card_info_alloca(ptr) + ;; Allocate an invalid snd_ctl_card_info_t on the stack. More... + + ;;snd_ctl_event_alloca(ptr) + ;; allocate an invalid snd_ctl_event_t using standard alloca More... + + ;;snd_ctl_elem_list_alloca(ptr) + ;; Allocate a snd_ctl_elem_list_t using standard alloca. More... + + ;;snd_ctl_elem_info_alloca(ptr) + ;;allocate an invalid snd_ctl_elem_info_t using standard alloca More... + + ;;snd_ctl_elem_value_alloca(ptr) + ;;Allocate an invalid snd_ctl_elem_value_t on the stack. More... + ) + +;*************************************************************************** +;;========== CARD Functions +(import LIB "snd_card_next" "int" "void*") + +(import LIB "snd_card_get_longname" "int" "int" "void*") +(import LIB "snd_card_get_name" "int" "int" "void*") +(import LIB "snd_ctl_open" "int" "void*" "char*" "int") +(import LIB "snd_ctl_close" "int" "void*") + +;; snd_ctl_card_info_t functions +(import LIB "snd_ctl_card_info_malloc" "int" "void*") +(import LIB "snd_ctl_card_info_free" "int" "void*") +(import LIB "snd_ctl_card_info" "int" "void*" "void*") +(import LIB "snd_ctl_card_info_get_card" "int" "void*") +(import LIB "snd_ctl_card_info_get_name" "char*" "void*") +(import LIB "snd_ctl_card_info_get_id" "char*" "void*") +(import LIB "snd_ctl_card_info_get_longname" "char*" "void*") +(import LIB "snd_ctl_card_info_get_components" "char*" "void*") +(import LIB "snd_ctl_card_info_get_driver" "char*" "void*") +(import LIB "snd_ctl_card_info_get_mixername" "char*" "void*") + +;; snd_ctl_elem_list_t functions +(import LIB "snd_ctl_elem_info_free" "void" "void*") +(import LIB "snd_ctl_elem_info_malloc" "int" "void*") +(import LIB "snd_ctl_elem_list" "int" "void*" "void*") +(import LIB "snd_ctl_elem_list_alloc_space" "int" "void*" "int") +(import LIB "snd_ctl_elem_list_free" "int" "void*") +(import LIB "snd_ctl_elem_list_free_space" "int" "void*") +(import LIB "snd_ctl_elem_list_get_count" "unsigned int" "void*") +(import LIB "snd_ctl_elem_list_get_device" "unsigned int" "void*" "int") +(import LIB "snd_ctl_elem_list_get_id" "void" "void*" "int" "void*") +(import LIB "snd_ctl_elem_list_get_index" "unsigned int" "void*" "int") +(import LIB "snd_ctl_elem_list_get_interface" "int" "void*""int") +(import LIB "snd_ctl_elem_list_get_name" "char*" "void*""int") +(import LIB "snd_ctl_elem_list_get_numid" "unsigned int" "void*" "int") +(import LIB "snd_ctl_elem_list_get_subdevice" "unsigned int" "void*" "int") +(import LIB "snd_ctl_elem_list_get_used" "unsigned int" "void*") +(import LIB "snd_ctl_elem_list_malloc" "int" "void*") + +;; snd_ctl_elem_info_t functions +(import LIB "snd_ctl_elem_info" "int" "void*" "void*") +(import LIB "snd_ctl_elem_info_malloc" "int" "void*") +(import LIB "snd_ctl_elem_info_free" "void" "void*") +(import LIB "snd_ctl_elem_info_get_type" "int" "void*") diff --git a/lsp-alsa/libasound-pcm.lsp b/lsp-alsa/libasound-pcm.lsp new file mode 100644 index 0000000..7862b1c --- /dev/null +++ b/lsp-alsa/libasound-pcm.lsp @@ -0,0 +1,18 @@ +(constant + ;; typedef enum _snd_pcm_stream + 'SND_PCM_STREAM_PLAYBACK 0 + 'SND_PCM_STREAM_CAPTURE 1 + ;; Non blocking mode (flag for open mode) + 'SND_PCM_NONBLOCK 0x00000001 + ;; Async notification + 'SND_PCM_ASYNC 0x00000002 + ) + +(import LIB "snd_pcm_open" "int" + "void*" ; snd_pcm_t **pcmp [output] + "char*" ; const char *name + "int" ; snd_pcm_stream_t stream + "int" ; int mode + ) + + diff --git a/lsp-alsa/libasound.lsp b/lsp-alsa/libasound.lsp new file mode 100644 index 0000000..ef4a571 --- /dev/null +++ b/lsp-alsa/libasound.lsp @@ -0,0 +1,165 @@ +;; This module implements contexts libc, libasound and ALSA for +;; providing a higher level ALSA API over a lower level libasound API +;; on top of a libc API. + +;; This implementation expects lib-utils.lsp to be loaded beforehand +;; for providing the and functions. + +;;===================================================================== +; The libc context is an API towards libc.so.6 dynamic library which +; offers the basic C functions +(context 'MAIN:libc) + +(constant 'LIB "/lib/x86_64-linux-gnu/libc.so.6") + +;; The free() function frees the memory space pointed to by ptr, which +;; must have been returned by a previous call to malloc(), calloc(), +;; or realloc(). Otherwise, or if free(ptr) has already been called +;; before, undefined behavior occurs. If ptr is NULL, no operation is +;; performed. +(import LIB "free" "void" + "void*" ; void *ptr + ) + +;; Function: (freestr ADDR) +; Given a string address, copy that into a newlisp string value, and +; free the memory of the given address. +(define (freestr ADDR) + (prog1 (get-string ADDR) (free ADDR))) + +;;====================================================================== +; The libsasound context is an API towards the libasound.so.2 dynammic +; library which offers functions for the Advanced Linux Sound +; Architecture (ALSA) +(context 'MAIN:libasound) + + +(load "import-api.lsp" libasound) + +; Find the library full pathname as constant LIB +(if (exec "find /lib /usr/lib -name 'libasound.so*' -type f") + (constant 'LIB ($it 0)) + (die 1 "Cannot find libasound.so")) +(when (ENV "LOG") (println "Using " LIB)) + +;; == Global functions +; https://alsa-project.org/alsa-doc/alsa-lib/group___global.html + +;; Function: char *snd_asoundlib_version() +; Returns the ALSA sound library version string. +(import LIB "snd_asoundlib_version" "char*" "void") + +;; Include libasound-config.lsp" into this context +(load "libasound-config.lsp" (context)) + +;; Include libasound-pcm.lsp" into this context +(load "libasound-pcm.lsp" (context)) + + +;;============================================================ +(context 'MAIN:ALSA) + +(define (snd_use_case_get_list MGR ID) + (let ((DATA (pack "Lu" 0)) (LIST nil) (E nil) (RES '()) (i nil)) + (when (>= (setf E (ALSA_UCM:snd_use_case_get_list MGR ID DATA))) + (setf LIST ((unpack "Lu" DATA) 0)) + (dotimes (i E) + (push (get-string ((unpack "Lu" LIST) 0)) RES -1) + (inc LIST 8))) + (or RES E))) + +(define (snd_asoundlib_version) + (libasound:snd_asoundlib_version)) + +(define (snd_card_next IX) + (let ((DATA (pack "ld" IX)) (E 0)) + (if (< (setf E (libasound:snd_card_next DATA))) E + ((unpack "ld" DATA) 0)))) + +(define (snd_card_get_longname IX) + (let ((DATA (pack "Lu" 0)) (E 0)) + (if (< (setf E (libasound:snd_card_get_longname IX DATA))) E + (libc:freestr ((unpack "Lu" DATA) 0))))) + +(define (snd_card_get_name IX) + (let ((DATA (pack "Lu" 0)) (E 0) (A 0)) + (if (< (setf E (libasound:snd_card_get_name IX DATA))) E + (libc:freestr ((unpack "Lu" DATA) 0))))) + +;; Return CTL +(define (snd_ctl_open NAME MODE) + (let ((DATA (pack "Lu" 0)) (E 0)) + (if (< (setf E (libasound:snd_ctl_open DATA NAME MODE))) E + ((unpack "Lu" DATA) 0)))) + +(define (snd_ctl_close CTL) + (libasound:snd_ctl_close CTL)) + +(define (card-info CTL) + (let ((DATA (pack "Lu" 0)) (E nil) (INFO nil) (RES nil)) + (when (>= (setf E (libasound:snd_ctl_card_info_malloc DATA))) + (setf INFO ((unpack "Lu" DATA) 0)) + (when (>= (setf E (libasound:snd_ctl_card_info CTL INFO))) + (setf RES + (list + (libasound:snd_ctl_card_info_get_card INFO) + (libasound:snd_ctl_card_info_get_id INFO) + (libasound:snd_ctl_card_info_get_name INFO) + (libasound:snd_ctl_card_info_get_longname INFO) + (libasound:snd_ctl_card_info_get_components INFO) + (libasound:snd_ctl_card_info_get_driver INFO) + (libasound:snd_ctl_card_info_get_mixername INFO))) + ) + (libasound:snd_ctl_card_info_free INFO)) + (or RES E))) + +(apply struct (cons 'char44 (dup "char" 44 true))) + +(struct 'snd_ctl_elem_id + "unsigned int" ; numid; /* numeric identifier, zero = invalid */ + "unsigned int" ; snd_ctl_elem_iface_t iface; /* interface identifier */ + "unsigned int" ; device; /* device/client number */ + "unsigned int" ; subdevice; /* subdevice (substream) number */ + "char44" ;; unsigned char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN (44)]; + ;; /* ASCII name of item */ + "unsigned int" ; index; /* index of item */ +) + +(define (element-details CTL LIST i) + (list (libasound:snd_ctl_elem_list_get_index LIST i) ; card index? + (libasound:snd_ctl_elem_list_get_interface LIST i) + (libasound:snd_ctl_elem_list_get_name LIST i) + (libasound:snd_ctl_elem_list_get_device LIST i) + (libasound:snd_ctl_elem_list_get_numid LIST i) + (libasound:snd_ctl_elem_list_get_subdevice LIST i) + )) + +(define (elements CTL) + (let ((DATA (pack "Lu" 0)) (E nil) (LIST nil) (RES '()) (COUNT nil)) + (when (>= (setf E (libasound:snd_ctl_elem_list_malloc DATA))) + (setf LIST ((unpack "Lu" DATA) 0)) + (when (>= (setf E (libasound:snd_ctl_elem_list CTL LIST))) + (setf COUNT (libasound:snd_ctl_elem_list_get_count LIST)) + (when (>= (setf E + (libasound:snd_ctl_elem_list_alloc_space LIST COUNT))) + (when (>= (libasound:snd_ctl_elem_list CTL LIST)) + ;; Process the COUNT elements into RES + (println COUNT " elements, " + (libasound:snd_ctl_elem_list_get_used LIST) " used." ) + (dotimes (i COUNT) + (push (element-details CTL LIST i) RES -1)) + ) + (libasound:snd_ctl_elem_list_free_space LIST)) + ) + (libasound:snd_ctl_elem_list_free LIST)) + (or RES E))) + +;;; PCM API + +;; Opens a PCM +(define (snd_pcm_open NAME STREAM-TYPE MODE) + (let ((PCM (pack "Lu" 0))) + (when (= (libasound:snd_pcm_open (address PCM) NAME STREAM-TYPE MODE)) + ((unpack "Lu" PCM) 0)))) + +"libasound.lsp" diff --git a/lsp-alsa/lsp-libasound.a.8.adoc b/lsp-alsa/lsp-libasound.a.8.adoc new file mode 100644 index 0000000..2c28ace --- /dev/null +++ b/lsp-alsa/lsp-libasound.a.8.adoc @@ -0,0 +1 @@ +== lsp-libasound.a(8) diff --git a/lsp-alsa/lsp-pcm-dispatch.a.8.adoc b/lsp-alsa/lsp-pcm-dispatch.a.8.adoc new file mode 100644 index 0000000..447a73e --- /dev/null +++ b/lsp-alsa/lsp-pcm-dispatch.a.8.adoc @@ -0,0 +1 @@ +== lsp-pcm-dispatch.a(8) diff --git a/lsp-alsa/lsp-utils.a.8.adoc b/lsp-alsa/lsp-utils.a.8.adoc new file mode 100644 index 0000000..c2c0398 --- /dev/null +++ b/lsp-alsa/lsp-utils.a.8.adoc @@ -0,0 +1 @@ +== lsp-utils.a(8) diff --git a/lsp-alsa/overview.adoc b/lsp-alsa/overview.adoc new file mode 100644 index 0000000..0f4ca8f --- /dev/null +++ b/lsp-alsa/overview.adoc @@ -0,0 +1,23 @@ +ALSA Overview +============= + +The Advanced Linux Sound Architecture (ALSA) is a collection of +software to handle sound hardware on Linux. It includes a range of +card specific kernel modules that implement the ALSA API for their +particular hardware, as well as a range of end user applications for +comfiguring and operating the sourd system. + +The ALSA API is quite flexible. It deals with the ides of a sound +system as consisting of two perspectives: the audio streaming (input +and output) and the audio control settings. A configuration includes +both declarations of possibilies for both streaming and control as +well as selected particulars. This flexibility makes up a rather +complex thought structure even though any one host typically has a +simple, particular setup. + +ALSA recognizes "cards", i.e. actual hardware sound card a well as +virtual software emulated sound cards. + +https://wiki.st.com/stm32mpu/wiki/ALSA_overview + +https://www.alsa-project.org/alsa-doc/alsa-lib/ diff --git a/lsp-alsa/pcm-dispatch.lsp b/lsp-alsa/pcm-dispatch.lsp new file mode 100644 index 0000000..dee0f76 --- /dev/null +++ b/lsp-alsa/pcm-dispatch.lsp @@ -0,0 +1,25 @@ +;; This is the main script for the pcm-dispatch tool +;; last main-arg nominates the configuration file + +(load "lsp-utils.lsp") + +; load contexts libasound and ALSA +(load "libasound.lsp") + +(setf + CONFIGFILE (println (main-args -1)) + CONFIGTEXT (read-file CONFIGFILE) + CONFIG (println (read-expr CONFIGTEXT)) + PCM-LIST (println (rest (assoc "PCM-LIST" CONFIG))) + ) + +(define (open-pcm PCM) + (ALSA:snd_pcm_open PCM libasound:SND_PCM_STREAM_PLAYBACK 0)) + +;; Find first usable PCM +(setf PCM (unless (dolist (PCM PCM-LIST (open-pcm PCM))) + (die 1 "No PCM available"))) + +(println (list 'PCM PCM)) + + diff --git a/lsp-alsa/sounder.lsp b/lsp-alsa/sounder.lsp new file mode 100755 index 0000000..44c718a --- /dev/null +++ b/lsp-alsa/sounder.lsp @@ -0,0 +1,46 @@ +#!/usr/bin/newlisp + +;; Include alsa-api.lsp +(load "libasound.lsp") + +(constant 'INFOFMT [text]Information ================================================= +| Card: %d Id: %s Name: %s +| Long name: %s +| Components: %s +| Driver: %s Mixer name: %s +|============================================================[/text] ) + +;;(SIZE (ALSA:snd_ctl_card_info_sizeof)) +(define (show-card-info CTL) + (println (format INFOFMT (ALSA:card-info CTL))) + (map println (ALSA:elements CTL)) + ) + +(define (show-card CARD) + (let ((NAME (ALSA:snd_card_get_name CARD)) + (LONG (ALSA:snd_card_get_longname CARD)) + (CTL (ALSA:snd_ctl_open (format "hw:%d" CARD) 0))) + (println "Card " CARD " is " NAME " (" LONG ")") + ;;(show-card-info CTL) + (ALSA:snd_ctl_close CTL))) + +(println (format "ALSA %s (%s) " + (ALSA:snd_asoundlib_version) libasound:LIB)) + +(setf CARD -1) +(while (>= (setf CARD (ALSA:snd_card_next CARD))) + (show-card CARD) + ) + +(setf CFG (libasound:traverse (libasound:snd_config@))) + +(define (key-of-list LIST) + (if (and (list? LIST) (not (list? (LIST 0)))) (LIST 0) "")) + +(define (path-of-ref REF) + (let ((P '()) (i 0)) + (dotimes (i (length REF)) + (push (key-of-list (nth (0 i REF) CFG)) P -1)))) + +;(println CFG) +;(exit 0) diff --git a/lsp-dbus/Makefile b/lsp-dbus/Makefile index bd97a2f..5d713a2 100644 --- a/lsp-dbus/Makefile +++ b/lsp-dbus/Makefile @@ -1,9 +1,9 @@ # Create the newlisp library dbus.lsplib -LSPSRC = lsp-dbus-connection.lsp lsp-dbus.lsp lsp-dbus-marshal.lsp -LSPSRC += lsp-dbus-events.lsp - -lsp-dbus.a: ${LSPSRC} - ar r $@ $^ +ARCHIVES = lsp-dbus.a +include ../archive.mk +lsp-dbus.a: lsp-dbus-connection.lsp lsp-dbus.lsp lsp-dbus-marshal.lsp +lsp-dbus.a: lsp-dbus-events.lsp + ar rc $@ $^ diff --git a/lsp-dbus/lsp-dbus.a.8.adoc b/lsp-dbus/lsp-dbus.a.8.adoc index c840c5d..d433abf 100644 --- a/lsp-dbus/lsp-dbus.a.8.adoc +++ b/lsp-dbus/lsp-dbus.a.8.adoc @@ -1,246 +1 @@ -= lsp-dbus.a(8) -:doctype: manpage -:revdate: {sys:date "+%Y-%m-%d %H:%M:%S"} -:BC: *:* - -== NAME - -lsp-dbus.a - Dbus API for newlisp. - -== SYNOPSIS - -.With packnl -packnl _main.lsp_ *-A lsp-misc.a* *-A lsp-dbus.a* - - -.With incore.lsp -(load "incore.lsp") + -(archive "lsp-misc.a") + -(archive "lsp-utils.a") + -(load "lsp-dbus.lsp") - -== DESCRIPTION - -*lsp-dbus.a* implements a newlisp API for Dbus. The module includes a -context _DbusConnection_ that implements the connection/authorization -level and a context _Dbus_ that implements the "object -modelling"/messaging level. - -The source software is divided into a couple of different source files -that are packed together into an _ar_ archive. - -Note that *lsp-dbus.a* depends on _FOOP_ and _prog1_ from *lsp-misc.a*. - -=== lsp-dbus API - -(*load* "lsp-dbus.lsp"):: - -The main file, *lsp-dbus.lsp*, includes connection setup (see -*:initialize* below) and client registration (i.e. issuing the dbus -"Hello():s" message as part of its loading. Currently it connects on -the system bus (only). It also installs the funcion _main-loop_ as -_prompt-event_ function for processing any unsolicited messages from -dbus (so called "signals"). - -==== The Dbus Context - -(*Dbus* _PATH_ [_DESTINATION_]):: - -The _Dbus_ context is used for identifying remote "objects" with the -given _PATH_ and _DESTINATION_ (aka bus name). The resulting _FOOP_ -object provides a proxying channel for invoking methods targeting the -given path on the given bus-name application. When omitted, the -_DESTINATION_ string is obtained from the _PATH_ string following the -convention of chopping the initial "/" and replacing remaining "/" -with ".". -+ -==== -Note that a term like _(Dbus "/org/freedesktop/DBus")_ defines an -identifer for, or pointer to, a remote "dbus object", and it is here -referred to as _PROXY_. The _PATH_ part serves as the object -identifier for dbus while the _DESTINATION_ part is an identfier for -the application that we expect holds the actual "dbus object" for the -given _PATH_. This particular term identifies object path -"/org/freedesktop/DBus" held by the application named -"org.freedesktop.DBus", which belongs to the dbus framewok. - -There is however no central arbitration for paths in dbus. It all -relies on application developers documenting which paths their -applications service and access, and then client applications rely on -using the destination tags for directing their messages to the -intended applications. -==== - -(*:new-path* _PROXY_ _PATH_):: - -The _:new-path_ method clones the FOOP object to dentify the given -_PATH_ for the same destination. - -(*:invoke* _PROXY_ _METHOD_ _ARGUMENTS_ _FLAGS_):: - -The _:invoke_ method performs a Dbus _METHOD_CALL_ handshake for the -gven _PROXY_ using the given _METHOD_, _ARGUMENTS_ and message -_FLAGS_. The function sends a dbus message and then polls for debus -messages until the reply message has arrived. any and all other -messages recevied meanwhile are added to the _pending_ list. -+ -The _METHOD_ is given as a string composed as path, interface, name -and signature -+ -==== -_path:interface.name(signature)_ -==== -+ -The _path:_ component including the colon is optional and taken from -the _PROXY_ by default. The _interface._ component incuding the period -is also optional as per dbus documentation: a method call without -explicit interface results in that the method name is looked up across -all interfaces of the destination path. -+ -The _SIGNATURE_ is the dbus style signature as a character sequence, -where y, b, n, q, i, u, x, t, d and h indicate the basic types BYTE, -BOOLEAN, INT16, UINT16, INT32, UINT32, INT64, UINT64, DOUBLE and FD -respectivly (both BOOLEAN and FD are also UINT32); a indicates -"array"; s, o and g indicate strings of various restrictions; -parentheses and curly braces wrap "struct" signatures, and v indicates -a pair of a data item preceded by its signature. Refer to dbus -documentation for further details. -+ -The given _ARGUMENTS_ is a list structure that must correspond to the -given signature. All number and string values are mapped naturally -into the indicated signatures while arrays, struct and variant -elements should occur as lists: an array is formed from the list of -elements, as is a struct. A variant typed element must occur as the -list of signature and data. See also the MARSHALLING section below. -+ -The optional _FLAGS_ argument is given either a bit mask (number) or a -list of the _Dbus_ context symbols _NO_REPLY_EXPECTED_, -_NO_AUTO_START_ and _ALLOW_INTERACTIVE_AUTHORIZATION_. Each of these -correspond to a bit position in the _FLAGS_ mask and they are combined -with bit-OR. Refer to dbus documentation for further details. -+ -.Some :invoke usage examples ----- -(:invoke Dbus:ROOT "RequestName(su)" '("my.client" 0)) - -(:invoke Dbus:ROOT "GetNameOwner(s)" '("org.bluez" 0)) - -(setf BT (Dbus "/" "org.bluez")) -(:invoke BT "GetManagedObjects()") -(Dbus:process-pending) ----- -+ -Note "org.bluez" here provides the "GetManagedObjects()" method of -interface "org.freedesktop.ObjectManager" unambiguously on the root -path, "/", rather than its bus name path "/org/bluez". -+ -While this process is waiting for the _METHOD_CALL_ reply it may -receive signal messsages from _dbus_. These will be added to the list -of "pending callbacks" that is processed via the _process-all-pending_ -function, either via an explicit call following the handshake or -"automagically" as part of the _main-loop_ function that gets -installed as as _prompt-event_ function. -+ -.Return value: -[caption=""] -==== -The return value of *:invoke* is the METHOD_REPLY message reduced into -an association list of the headers (with the _Dbus_ header symbols as -keys) extended with the method return value as a list wrapped into a -final association that is keyed by the empty string. - -In other words, the template for using *:invoke* may look like the -following: ----- -(if (:invoke ...) ($it -1 -1 -1)) ----- -==== - -(*Dbus:process-all-pending*):: - -The _process-all-pending_ function processes all pending signal -messages by invoking their associated handler functions. - -(*prompt-event Dbus:main-loop*):: - -The _main-loop_ function is set up as _prompt-event_ function for a -combined _net-select_ on both stdin and the dbus socket as well as to -process all pending signal messages. Any input from dbus, which are -signal messages, are added to the pending list, which also is -processed one message at a time until empty. -+ -Note that newlisp uses readline for input but that this is not -activated in _main-loop_. Therefore line editing is not available -immediately. However the operator may use ^D to leave the main-loop -and enter the "normal" command line input state for a single line -input (with line editing), or an initial newline for multi-line input -that is "submitted" by means of two newlines. - -(*:handler* _OBJ_ _KEY_ _HANDLER_):: - -This function registers a handler callback for a key that is a string -composed as "path:interface.member(signature)". The handler function -takes a single argument, which is the list of unmarshalled actual call -arguments. - -==== The DbusConnection Context - -(*DbusConnection* _PATH):: - -The _DbusConnection_ context is a FOOP implementation intended for the -dbus socket connection. Each _(DbusConnection PATH)_ is intended to be -like a real object that contains state, namely the opened socket file -descriptor, the connection name given to it by DBus on connection and -and the messaging serial. - -(*:serial++* _OBJECT_):: - -This method increments the serial of the given object. - -(*:open-socket* _OBJECT_):: - -This method opens the path and assignes the socket file descriptor of -the given object. Before that though, if the socket file descriptor is -non-negative then that file descriptor is closed before opening the -object's path. - -(*:read-message* _OBJECT_):: - -This method reads the next message by reading data from the socket -successively while there's something to read within a millisecond. - -(*:handshake* _OBJECT_ _MESSAGE_ [_PATTERN_]):: - -This method performs a "raw" text-based handshake on the connection, -which means to send the given message and then read and return the -response message. If a _PATTERN_ is given, then the response must -match the pattern (assigning the automatic variables $1 etc according -to the pattern). The method returns nil if the given pattern is not -matched. Note that this method is used only during connection setup -and dbus communication uses its own marshalling subsequently. - -(*:initialize* _OBJECT_ [_USER_]):: - -This method performs the connection set up including the very first -newline and the subsequent AUTH handshake. It ends with the connection -in "BEGIN" mode and returns the received connection name. - -=== MARSHALLING - -dbus documentation uses the terms "marshalling" and "unmarshalling" -for the translations of data from/to program data to/from dbus message -bytes. The data in newlisp mapped straight-forwardly with the special -note that both "struct" and "array" are held as lists in newlisp. To -that end, the data for the variant type signature must be wrapped into -an extra list of the format _(signature value)_ with explcit dbus -signature string. However, such wrapping does not take place upon -unmarshalling. - - -== SEE ALSO - -*newlisp*, *packnl*, *incore.lsp* - -== AUTHOR - -Ralph Ronnquist +== lsp-dbus.a(8) diff --git a/lsp-misc/Makefile b/lsp-misc/Makefile index e691976..9a82ec9 100644 --- a/lsp-misc/Makefile +++ b/lsp-misc/Makefile @@ -1,6 +1,8 @@ # Create the newlisp library foop.lsplib -LSPSRC = misc.lsp foop.lsp +ARCHIVES = lsp-misc.a -lsp-misc.a: ${LSPSRC} +include ../archive.mk + +lsp-misc.a: misc.lsp foop.lsp ar r $@ $^ diff --git a/lsp-misc/lsp-misc.a.8.adoc b/lsp-misc/lsp-misc.a.8.adoc index 7f8a5d0..670af48 100644 --- a/lsp-misc/lsp-misc.a.8.adoc +++ b/lsp-misc/lsp-misc.a.8.adoc @@ -1,138 +1 @@ -= lsp-misc.a(8) -:doctype: manpage -:revdate: {sys:date "+%Y-%m-%d %H:%M:%S"} - -== NAME - -lsp-misc.a - Misceallaneous useful functions. - -== SYNOPSIS - -.With packnl (example) -packnl _main.lsp_ *-A lsp-misc.a* - - -.With incore.lsp -(load "incore.lsp") + -(archive "lsp-misc.a") + -(load "misc.lsp") - -== DESCRIPTION - -*lsp-misc.a* provides a few global utility functions. - -=== misc.lsp API - -(prog1 [_term_]*):: - -The *prog1* function is like a *begin* function except that it returns -the value of the first term rather than the last. - -(die _N_ [_term_]*):: - -The *die* function printes to stderr the join of term values as -strings with space separation, and if _N_ is a number, then the -function exits the program with that return code. -+ -.Example of stderr logging -(die nil 'This "is" 'printed "to stderr") - -(octal-byte _B_):: -Print binary byte as octal or as ASCII character [32-126]. - -(octals-string _S_):: -Print string as a succesion of +octal-byte+. - -(human-byte _B_):: -Return byte code as printable (string) or as code (number). - -(human-bytes _BL_):: - -Return a list of human-byte elements from a list of byte codes but -also joining consecutive string elements to form packed strings. - -=== foop.lsp API - -This newlisp module provides Functional Object-Oriented Programming -(FOOP) modelling support. - -FOOP is an abstraction overlay using the newlisp context notion as a -simile to the _class_ notion in genuine object-oriented programming -languages. This is set out in newlisp by means of the representation -principle that an instance of a FOOP "class" (i.e. context) is a list -headed by the context itself, and followed by the "member values". - -FOOP further includes by the "method invocation" syntax where a -function is preceded by ':' and then followed by the instance -concerned before actual function arguments. That instance is then -stoved away as implicitly available via the (self) function, and the -member values accessible via index, e.g. the term (self 3) refers to -the third member of the instance. The self references are -destructively assignable with setf. - -This modelling support adds member name declaration together with -automatic getter and setter defintions. The (FOOP ...) term is used -for declaring member names in order. For example: - -(FOOP [_name_]):: - -*FOOP* is like a language extension to declare the field names of a -FOOP class, and thereby gain "get" and "set" functions generated with -the respective naming formats (:%name obj) and (:!name obj value). - -.illustration ----- -(context 'MAIN:EX) -(FOOP here there more) -(define (EX HERE THERE MORE) (list (context) HERE THERE MORE)) - -(context MAIN) -(setf A (EX 1 2 3)) ---> A = (EX 1 2 3) -(:!there A 4) ---> A = (EX 1 4 3) ----- - -=== mmap.lsp API - -This newlisp module implements a small FOOP model based memory mapping -API that links in the _libc6_ functions _mmap_, _munmap_, _msync_ and -_lseek_. - -(*MMap* _FD_ _LENGTH_ [_OFFSET_ [_PROT_]]):: - -This function creates a FOOP object that represents the memory mapping -of the given file descriptor. _FD_ may be the pathname string of a -file to memory map or an already opened file descriptor. The MMap -object represents the memory block starting at (:%base) and (%len) -bytes in length where the file is memory mapped. -+ -.Access example (from test.lsp) -[caption=""] ----- -(println (setf X (MMap "mmap.lsp"))) -(println (get-string (:%base X))) ----- -+ -Note that only a plain text file would be accessed with _get-string_. -A binary file would rather be accessed with _unpack_. The memory -mapping provides read-only "random access" to the file content. -+ -To set up read-write acces requires an _OFFSET_ and the _PROT_ -argument 0x3, and writing should be accompanied by _MMap:msync_ calls -so as to synchronize with the backing file. -+ -The FOOP object includes get and set methods for the fields (in -order): _base_, _len_, _prot_, _flags_, _fd_ and _offset_. - -=== test.lsp - -This file is a small test of the MMap memory mapping. - -== SEE ALSO - -*newlisp* - -== AUTHOR - -Ralph Ronnquist +== lsp-misc.a(8) diff --git a/lsplib.mk b/lsplib.mk deleted file mode 100644 index c1871cb..0000000 --- a/lsplib.mk +++ /dev/null @@ -1,14 +0,0 @@ -# This is a Makefile include file for build ar archives as declared in -# the $(ARCHIVES) variable. Each archive is build by including all -# .lsp files in the same named subdirectory. E.g. lib-misc.a contains -# the files lib-misc/*.lsp - -# The following defines a Makefile block for archive building -define archive -$1: $$(wildcard ${1:.a=}/*.lsp) - ar r $$@ $$^ -CLEAN += $1 -endef - -# The following command generates the archive building blocks -$(foreach F,${ARCHIVES},$(eval $(call archive,$F))) diff --git a/manpage.mk b/manpage.mk deleted file mode 100644 index 071f31f..0000000 --- a/manpage.mk +++ /dev/null @@ -1,2 +0,0 @@ -%.8: %.8.adoc - asciidoctor -b manpage $<