Current section
Files
Jump to
Current section
Files
src/rockbox@dsp.erl
-module(rockbox@dsp).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/rockbox/dsp.gleam").
-export([new/1, set_input_frequency/2, flush/1, eq_enable/2, set_eq_band/5, set_eq_precut/2, set_tone/3, set_tone_cutoffs/3, set_surround/5, set_channel_config/2, set_stereo_width/2, set_compressor/7, set_replaygain/4, set_replaygain_gains/5, set_replaygain_gains_raw/5, process/2]).
-export_type([dsp/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(
" The DSP pipeline: EQ, tone, surround, compressor, ReplayGain, resampler.\n"
"\n"
" A `Dsp` wraps the process-wide audio DSP singleton (only one should be\n"
" alive at a time). It is a NIF resource, freed by the BEAM garbage\n"
" collector — no explicit close.\n"
"\n"
" ReplayGain `mode` here uses the DSP-native values: 0 track, 1 album,\n"
" 2 shuffle, 3 off.\n"
).
-type dsp() :: any().
-file("src/rockbox/dsp.gleam", 18).
?DOC(" Create a DSP for interleaved S16LE stereo at `sample_rate` Hz.\n").
-spec new(integer()) -> dsp().
new(Sample_rate) ->
rockbox_ffi_nif:dsp_new(Sample_rate).
-file("src/rockbox/dsp.gleam", 21).
-spec set_input_frequency(dsp(), integer()) -> nil.
set_input_frequency(Dsp, Hz) ->
rockbox_ffi_nif:dsp_set_input_frequency(Dsp, Hz).
-file("src/rockbox/dsp.gleam", 24).
-spec flush(dsp()) -> nil.
flush(Dsp) ->
rockbox_ffi_nif:dsp_flush(Dsp).
-file("src/rockbox/dsp.gleam", 27).
-spec eq_enable(dsp(), boolean()) -> nil.
eq_enable(Dsp, Enable) ->
rockbox_ffi_nif:dsp_eq_enable(Dsp, Enable).
-file("src/rockbox/dsp.gleam", 31).
?DOC(" Configure one EQ band (0..9). Band 0 low shelf, 9 high shelf.\n").
-spec set_eq_band(dsp(), integer(), integer(), float(), float()) -> nil.
set_eq_band(Dsp, Band, Cutoff_hz, Q, Gain_db) ->
rockbox_ffi_nif:dsp_set_eq_band(Dsp, Band, Cutoff_hz, Q, Gain_db).
-file("src/rockbox/dsp.gleam", 40).
-spec set_eq_precut(dsp(), float()) -> nil.
set_eq_precut(Dsp, Db) ->
rockbox_ffi_nif:dsp_set_eq_precut(Dsp, Db).
-file("src/rockbox/dsp.gleam", 43).
-spec set_tone(dsp(), integer(), integer()) -> nil.
set_tone(Dsp, Bass_db, Treble_db) ->
rockbox_ffi_nif:dsp_set_tone(Dsp, Bass_db, Treble_db).
-file("src/rockbox/dsp.gleam", 46).
-spec set_tone_cutoffs(dsp(), integer(), integer()) -> nil.
set_tone_cutoffs(Dsp, Bass_hz, Treble_hz) ->
rockbox_ffi_nif:dsp_set_tone_cutoffs(Dsp, Bass_hz, Treble_hz).
-file("src/rockbox/dsp.gleam", 49).
-spec set_surround(dsp(), integer(), integer(), integer(), integer()) -> nil.
set_surround(Dsp, Delay_ms, Balance, Fx1, Fx2) ->
rockbox_ffi_nif:dsp_set_surround(Dsp, Delay_ms, Balance, Fx1, Fx2).
-file("src/rockbox/dsp.gleam", 58).
-spec set_channel_config(dsp(), integer()) -> nil.
set_channel_config(Dsp, Mode) ->
rockbox_ffi_nif:dsp_set_channel_config(Dsp, Mode).
-file("src/rockbox/dsp.gleam", 61).
-spec set_stereo_width(dsp(), integer()) -> nil.
set_stereo_width(Dsp, Percent) ->
rockbox_ffi_nif:dsp_set_stereo_width(Dsp, Percent).
-file("src/rockbox/dsp.gleam", 64).
-spec set_compressor(
dsp(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer()
) -> nil.
set_compressor(
Dsp,
Threshold,
Makeup_gain,
Ratio,
Knee,
Release_time,
Attack_time
) ->
rockbox_ffi_nif:dsp_set_compressor(
Dsp,
Threshold,
Makeup_gain,
Ratio,
Knee,
Release_time,
Attack_time
).
-file("src/rockbox/dsp.gleam", 77).
?DOC(
" ReplayGain mode (0 track, 1 album, 2 shuffle, 3 off), clipping prevention,\n"
" preamp in dB.\n"
).
-spec set_replaygain(dsp(), integer(), boolean(), float()) -> nil.
set_replaygain(Dsp, Mode, Noclip, Preamp_db) ->
rockbox_ffi_nif:dsp_set_replaygain(Dsp, Mode, Noclip, Preamp_db).
-file("src/rockbox/dsp.gleam", 121).
-spec opt(gleam@option:option(float())) -> gleam@dynamic:dynamic_().
opt(O) ->
case O of
{some, F} ->
gleam_stdlib:identity(F);
none ->
gleam@dynamic:nil()
end.
-file("src/rockbox/dsp.gleam", 89).
?DOC(" Per-track gains in plain dB / peaks as linear amplitude. `None` = absent.\n").
-spec set_replaygain_gains(
dsp(),
gleam@option:option(float()),
gleam@option:option(float()),
gleam@option:option(float()),
gleam@option:option(float())
) -> nil.
set_replaygain_gains(Dsp, Track_gain_db, Album_gain_db, Track_peak, Album_peak) ->
rockbox_ffi_nif:dsp_set_replaygain_gains(
Dsp,
opt(Track_gain_db),
opt(Album_gain_db),
opt(Track_peak),
opt(Album_peak)
).
-file("src/rockbox/dsp.gleam", 107).
?DOC(" Native Q7.24 factors (the `raw_*` metadata fields); 0 = not tagged.\n").
-spec set_replaygain_gains_raw(
dsp(),
integer(),
integer(),
integer(),
integer()
) -> nil.
set_replaygain_gains_raw(Dsp, Track_gain, Album_gain, Track_peak, Album_peak) ->
rockbox_ffi_nif:dsp_set_replaygain_gains_raw(
Dsp,
Track_gain,
Album_gain,
Track_peak,
Album_peak
).
-file("src/rockbox/dsp.gleam", 118).
?DOC(
" Run interleaved stereo S16 samples through the pipeline. Both the input\n"
" and the result are little-endian int16 sample buffers.\n"
).
-spec process(dsp(), bitstring()) -> bitstring().
process(Dsp, Pcm) ->
rockbox_ffi_nif:dsp_process(Dsp, Pcm).