Packages

A Gleam library for working with delay times.

Current section

Files

Jump to
delay_times src delay_times.erl
Raw

src/delay_times.erl

-module(delay_times).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([new/3]).
-export_type([delay_times/0, note_modifier/0, unit/0]).
-type delay_times() :: {delay_times,
float(),
float(),
float(),
float(),
float(),
float(),
float(),
float()}.
-type note_modifier() :: normal | dotted | triplet.
-type unit() :: ms | hz.
-file("/Users/josephlyons/Projects/Personal/gleam/delay_times/src/delay_times.gleam", 29).
-spec new(float(), note_modifier(), unit()) -> delay_times().
new(Beats_per_minute, Modifier, Unit) ->
Quarter_note_delay_value = case Unit of
ms ->
case Beats_per_minute of
+0.0 -> +0.0;
-0.0 -> -0.0;
Gleam@denominator -> 60000.0 / Gleam@denominator
end;
hz ->
Beats_per_minute / 60.0
end,
Multiplier = case Modifier of
normal ->
1.0;
dotted ->
1.5;
triplet ->
2.0 / 3.0
end,
{delay_times,
(Quarter_note_delay_value * 4.0) * Multiplier,
(Quarter_note_delay_value * 2.0) * Multiplier,
Quarter_note_delay_value * Multiplier,
(Quarter_note_delay_value / 2.0) * Multiplier,
(Quarter_note_delay_value / 4.0) * Multiplier,
(Quarter_note_delay_value / 8.0) * Multiplier,
(Quarter_note_delay_value / 16.0) * Multiplier,
(Quarter_note_delay_value / 32.0) * Multiplier}.