-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", 32). -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 ), P@1 = begin _pipe = P, _pipe@1 = rockbox@player:set_queue( _pipe, [<<"../../crates/rocksky/fixtures/08 - Internet Money - Speak(Explicit).m4a"/utf8>>] ), _pipe@2 = rockbox@player:set_eq_preset(_pipe@1, bass_boost), _pipe@3 = rockbox@player:set_bass(_pipe@2, 7), _pipe@4 = rockbox@player:set_treble(_pipe@3, 4), rockbox@player:play(_pipe@4) end, gleam_stdlib:println( <<"ā–¶ playing "/utf8, "../../crates/rocksky/fixtures/08 - Internet Money - Speak(Explicit).m4a"/utf8>> ), gleam_stdlib:println( <<"eq: BassBoost preset, bass +7 dB, treble +4 dB"/utf8>> ), poll(P@1).