Add generic event module with begin and end times.
Add module for converting events to schedule.
This commit is contained in:
parent
e12fd31c92
commit
3947d6fa2a
2 changed files with 37 additions and 0 deletions
27
lib/midi_tools/event.ex
Normal file
27
lib/midi_tools/event.ex
Normal file
|
@ -0,0 +1,27 @@
|
|||
defmodule MIDITools.Event do
|
||||
defmodule Note do
|
||||
defstruct channel: 0, tone: 0, start_time: 0, end_time: 0, velocity: 0
|
||||
|
||||
def new(channel, tone, start_time, end_time, velocity) do
|
||||
%__MODULE__{
|
||||
channel: channel,
|
||||
tone: tone,
|
||||
start_time: start_time,
|
||||
end_time: end_time,
|
||||
velocity: velocity
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def convert(%Note{
|
||||
channel: channel,
|
||||
tone: tone,
|
||||
start_time: start_time,
|
||||
end_time: end_time,
|
||||
velocity: velocity
|
||||
}) do
|
||||
note_on = MIDISynth.Command.note_on(channel, tone, velocity)
|
||||
note_off = MIDISynth.Command.note_off(channel, tone)
|
||||
[{start_time, note_on}, {end_time, note_off}]
|
||||
end
|
||||
end
|
10
lib/midi_tools/schedule.ex
Normal file
10
lib/midi_tools/schedule.ex
Normal file
|
@ -0,0 +1,10 @@
|
|||
defmodule MIDITools.Schedule do
|
||||
def convert_events(events) do
|
||||
events
|
||||
|> Enum.flat_map(&MIDITools.Event.convert/1)
|
||||
|> Enum.reduce(%{}, fn {time, midi}, acc ->
|
||||
Map.update(acc, time, midi, &<<midi::binary, &1::binary>>)
|
||||
end)
|
||||
|> Enum.sort()
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue