Current section
Files
Jump to
Current section
Files
src/play.erl
-module(play).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/play.gleam").
-export([main/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" Play an audio file through the real output device.\n"
"\n"
" Run: gleam run -m play\n"
"\n"
" The `Player` handle is a NIF resource freed by the BEAM garbage collector\n"
" (which stops playback) — no explicit close is needed. Ctrl-C twice opens\n"
" the BEAM break menu, which halts the VM and the output device with it.\n"
).
-file("src/play.gleam", 25).
-spec poll(rockbox@player:player()) -> nil.
poll(P) ->
St = rockbox@player:status(P),
Pos = erlang:integer_to_binary(erlang:element(4, St) div 1000),
Dur = erlang:integer_to_binary(erlang:element(5, St) div 1000),
gleam_stdlib:print(
<<<<<<<<<<<<"\r["/utf8, (erlang:element(2, St))/binary>>/binary,
"] "/utf8>>/binary,
Pos/binary>>/binary,
"s / "/utf8>>/binary,
Dur/binary>>/binary,
"s "/utf8>>
),
case (erlang:element(2, St) =:= <<"stopped"/utf8>>) andalso (erlang:element(
4,
St
)
> 0) of
true ->
gleam_stdlib:println(<<"\n✔ done"/utf8>>);
false ->
timer:sleep(500),
poll(P)
end.
-file("src/play.gleam", 15).
-spec main() -> nil.
main() ->
P = rockbox@player:with_config(
begin
_record = rockbox@player:default_config(),
{config,
erlang:element(2, _record),
erlang:element(3, _record),
0.8,
erlang:element(5, _record),
erlang:element(6, _record),
erlang:element(7, _record),
erlang:element(8, _record),
erlang:element(9, _record),
erlang:element(10, _record),
erlang:element(11, _record),
erlang:element(12, _record),
erlang:element(13, _record),
erlang:element(14, _record),
erlang:element(15, _record)}
end
),
rockbox@player:set_queue(
P,
[<<"../../crates/rocksky/fixtures/08 - Internet Money - Speak(Explicit).m4a"/utf8>>]
),
rockbox_ffi_nif:player_play(P),
gleam_stdlib:println(
<<"▶ playing "/utf8,
"../../crates/rocksky/fixtures/08 - Internet Money - Speak(Explicit).m4a"/utf8>>
),
poll(P).