Current section
Files
Jump to
Current section
Files
src/xalsa_pcm.erl
-module(xalsa_pcm).
-export([open_handle/1,
close_handle/1,
dump/1,
set_params/4,
writei/3,
writen/3,
prepare/1,
start/1,
recover/2,
avail_update/1,
add_async_handler/2,
writel/3, % List of Lists as input
errno/1,
sum_map/2,
float_list_to_binary/1]).
-on_load(load_nifs/0).
-define(APPNAME, xalsa).
-define(LIBNAME, xalsa).
open_handle(_Device) -> not_loaded(?LINE).
close_handle(_Handle) -> not_loaded(?LINE).
dump(_Handle) -> not_loaded(?LINE).
set_params(_Handle, _Channels, _Rate, _PeriodSize) -> not_loaded(?LINE).
writei(_Handle, _PeriodBin, _NoOfFrames) -> not_loaded(?LINE).
writen(_Handle, _PeriodBinList, _NoOfFrames) -> not_loaded(?LINE).
prepare(_Handle) -> not_loaded(?LINE).
start(_Handle) -> not_loaded(?LINE).
recover(_Handle, _ErrNo) -> not_loaded(?LINE).
avail_update(_Handle) -> not_loaded(?LINE).
add_async_handler(_Handle, _Pid) -> not_loaded(?LINE).
sum_map(_Map, _Size) -> not_loaded(?LINE).
float_list_to_binary(_List) -> not_loaded(?LINE).
load_nifs() ->
SoName = case code:priv_dir(?APPNAME) of
{error, bad_name} ->
case filelib:is_dir(filename:join(["..", priv])) of
true ->
filename:join(["..", priv, ?LIBNAME]);
_ ->
filename:join([priv, ?LIBNAME])
end;
Dir ->
filename:join(Dir, ?LIBNAME)
end,
erlang:load_nif(SoName, 0).
not_loaded(Line) ->
exit({not_loaded, [{module, ?MODULE}, {line, Line}]}).
writel(Handle, FramesList, NoOfFrames) ->
writen(Handle, lists:map(fun float_list_to_binary/1, FramesList), NoOfFrames).
errno(-11) -> eagain;
errno(-32) -> epipe;
errno(-86) -> estrpipe;
errno(A) when A >= 0 -> A.