7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ElixirAdvent Calendar 2024

Day 15

Elixirで作る「DDJ-FLX4のジョグ対応ブロックくずし」 その4 portmidiとRayexの相性

Last updated at Posted at 2024-12-14

残念なお知らせです

portmidiとRayexの相性が悪くてコアダンプ吐いてしまいます

失敗したソース

defmodule DdjBlock do
  @moduledoc """
  Documentation for `DdjBlock`.
  """
  alias Rayex.Structs.Rectangle
  use Rayex

  def main() do
    Task.async(fn -> ddj() end)
    t = Task.async(fn -> maing() end)
    Task.await(t , 500000)
  end

  defp ddj() do
    {_, input} = PortMidi.open(:input, "DDJ-FLX4 MIDI 1")
    PortMidi.listen(input, self())
    midi_in(input)
    PortMidi.close(:input, input)
  end

  defp maing() do
    init_window(800, 800, "DdjBlock")
    main_loop(true)
  end

  defp main_loop(true) do
    begin_drawing()
    draw()
    end_drawing()

    Process.sleep(100)
    main_loop(!window_should_close())
  end

  defp main_loop(_), do: nil

  defp draw() do
    rectangle = %Rectangle{x: 100.0, y: 100.0, width: 100.0, height: 50.0}
    draw_rectangle_lines_ex(rectangle, 1, %{r: 0, g: 255, b: 0, a: 255})
  end

  def midi_in(input) do
    receive do
      {^input, [{{176, 33, 65}, _}]} ->
        IO.inspect("右")

      {^input, [{{176, 33, 63}, _}]} ->
        IO.inspect("左")
    end

    midi_in(input)
  end
end

やりたかった事

DDJ-FLX4とRayexを非同期で動かしたかった
コアダンプがどこに吐いているかわからなかったが
ソースをイジってmidi_in(input)のreceive doで落ちているとこまで理解した

困ったことに動く時もある

一旦諦めて実装方法を変更する

このままと企画倒れするのでなんとか実装を考えた結果

  • DDJ-FLX4の入力と画面のプログラムを物理的に分離します
  • DDJ-FLX4の入力と画面のプログラムはWebSockeで通信します
  • WebSockeのサーバーも立てます

結果 DDJ-FLX4の入力WebSockeのサーバー → 画面
の予定です

この視点ではまだコラム書いてないがこの方法で成功している

今回はここまで

つづく

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?