Spawn the player server using the given options
Pass start_link arguments to MIDISynth Simplify event creation
This commit is contained in:
parent
808370cf7f
commit
2b38e95436
6 changed files with 92 additions and 87 deletions
|
@ -6,23 +6,23 @@ defmodule MIDIPlayer.EventTest do
|
|||
|
||||
test "note event" do
|
||||
assert %Event.Note{channel: 0, tone: 60, start_time: 1, end_time: 1000, velocity: 127} =
|
||||
Event.Note.new(0, 60, 1, 1000, 127)
|
||||
Event.note(0, 60, 1, 1000, 127)
|
||||
end
|
||||
|
||||
test "change program event" do
|
||||
assert %Event.ChangeProgram{channel: 0, time: 1, program: 40} =
|
||||
Event.ChangeProgram.new(0, 1, 40)
|
||||
Event.change_program(0, 1, 40)
|
||||
end
|
||||
|
||||
test "note event conversion" do
|
||||
note = Event.Note.new(0, 60, 1, 1000, 127)
|
||||
note = Event.note(0, 60, 1, 1000, 127)
|
||||
[note_on, note_off] = Event.convert(note)
|
||||
assert {1, <<0x90, 60, 127>>} = note_on
|
||||
assert {1000, <<0x80, 60, 64>>} = note_off
|
||||
end
|
||||
|
||||
test "change program event conversion" do
|
||||
change_program = Event.ChangeProgram.new(0, 1, 40)
|
||||
change_program = Event.change_program(0, 1, 40)
|
||||
assert [{1, <<0xC0, 40>>}] = Event.convert(change_program)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,55 +3,56 @@ defmodule MIDIPlayerTest do
|
|||
doctest MIDIPlayer
|
||||
|
||||
alias MIDIPlayer, as: Player
|
||||
alias MIDIPlayer.Event
|
||||
|
||||
setup do
|
||||
{:ok, _pid} = Player.start_link()
|
||||
:ok
|
||||
{:ok, player} = Player.start_link([])
|
||||
[player: player]
|
||||
end
|
||||
|
||||
setup_all do
|
||||
events = Enum.map(1..4, &MIDIPlayer.Event.Note.new(9, 51, &1 * 500, (&1 + 1) * 500, 127))
|
||||
events = Enum.map(1..4, &Event.note(9, 51, &1 * 500, (&1 + 1) * 500, 127))
|
||||
duration = 2000
|
||||
[events: events, duration: duration]
|
||||
end
|
||||
|
||||
test "play", %{events: events, duration: duration} do
|
||||
assert :ok = Player.generate_schedule(events, duration)
|
||||
assert :ok = Player.play()
|
||||
test "play", %{player: player, events: events, duration: duration} do
|
||||
assert :ok = Player.generate_schedule(player, events, duration)
|
||||
assert :ok = Player.play(player)
|
||||
Process.sleep(2500)
|
||||
end
|
||||
|
||||
test "pause & resume", %{events: events, duration: duration} do
|
||||
Player.generate_schedule(events, duration)
|
||||
Player.play()
|
||||
test "pause & resume", %{player: player, events: events, duration: duration} do
|
||||
Player.generate_schedule(player, events, duration)
|
||||
Player.play(player)
|
||||
Process.sleep(1100)
|
||||
assert :ok = Player.pause()
|
||||
assert :ok = Player.pause(player)
|
||||
Process.sleep(500)
|
||||
assert :ok = Player.resume()
|
||||
assert :ok = Player.resume(player)
|
||||
Process.sleep(1400)
|
||||
end
|
||||
|
||||
test "pause & resume edge cases", %{events: events, duration: duration} do
|
||||
Player.generate_schedule(events, duration)
|
||||
assert {:error, :not_started} = Player.pause()
|
||||
assert {:error, :not_paused} = Player.resume()
|
||||
Player.play()
|
||||
Player.pause()
|
||||
assert {:error, :already_paused} = Player.pause()
|
||||
test "pause & resume edge cases", %{player: player, events: events, duration: duration} do
|
||||
Player.generate_schedule(player, events, duration)
|
||||
assert {:error, :not_started} = Player.pause(player)
|
||||
assert {:error, :not_paused} = Player.resume(player)
|
||||
Player.play(player)
|
||||
Player.pause(player)
|
||||
assert {:error, :already_paused} = Player.pause(player)
|
||||
end
|
||||
|
||||
test "event conversion" do
|
||||
event1 = MIDIPlayer.Event.ChangeProgram.new(0, 1, 40)
|
||||
event2 = MIDIPlayer.Event.Note.new(0, 60, 1, 1000, 127)
|
||||
test "event conversion", %{player: player} do
|
||||
event1 = Event.change_program(0, 1, 40)
|
||||
event2 = Event.note(0, 60, 1, 1000, 127)
|
||||
events = [event1, event2]
|
||||
duration = 100
|
||||
assert :ok = Player.generate_schedule(events, duration)
|
||||
assert :ok = Player.generate_schedule(player, events, duration)
|
||||
|
||||
change_program = MIDISynth.Command.change_program(0, 40)
|
||||
note_on = MIDISynth.Command.note_on(0, 60, 127)
|
||||
note_off = MIDISynth.Command.note_off(0, 60)
|
||||
|
||||
[command1, command2] = Player.get_schedule()
|
||||
[command1, command2] = Player.get_schedule(player)
|
||||
assert {1, <<^change_program::binary-size(2), ^note_on::binary-size(3)>>} = command1
|
||||
assert {1000, ^note_off} = command2
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue