9
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?

DDJ-FLX4のPadでLチカ

Last updated at Posted at 2024-12-03

PioneerDjのDDJ-FLX4でLチカを実装します

前提

でportmidiが設定済みとします

DDJ-FLX4のPad LEDの仕様

まず、DDJ-FLX4のPadを光らせるMIDIの通信仕様を理解する必要があります
MIDIは3バイトで1つの命令になります
16進数で表現します

Padの場合

デッキ番号, Pad番号, LEDのON/OFF の3バイトになります

デッキ番号

デッキは2つあります

  • デッキ1(左) 97
  • デッキ2(右) 99

Pad番号

上段左から

  • Pad1 00
  • Pad2 01
  • Pad3 02
  • Pad4 03

下段段左から

  • Pad5 04
  • Pad6 05
  • Pad7 06
  • Pad8 07

LEDのON/OFF

  • ON 7F
  • OFF 00

デッキ1(左)
上段左の1つめのPadをLEDをON

97, 00, 7F

デッキ2(左)
上段左の1つめのPadをLEDをOFF

97, 00, 00

ElixirでPadのLチカをする

プログラムの仕様

  • Pad1〜Pad8までLEDをON/OFF
  • デッキ1,デッキ2は交互に光らせる

  • デッキ1のPad1→デッキ2のPad1
  • デッキ1のPad2→デッキ2のPad2
          ︙
  • デッキ1のPad8→デッキ2のPad8
lib/pad.ex
defmodule Pad do
  @moduledoc """
  Documentation for `pad`.
  """

  @led_on "7F"
  @led_of "00"

  @pad1 "00"
  @pad2 "01"
  @pad3 "02"
  @pad4 "03"
  @pad5 "04"
  @pad6 "05"
  @pad7 "06"
  @pad8 "07"

  @deck1 "97"
  @deck2 "99"

  @pad_list [@pad1, @pad2, @pad3, @pad4, @pad5, @pad6, @pad7, @pad8]

  def start() do
    {_, output} = PortMidi.open(:output, "DDJ-FLX4 MIDI 1")

    Enum.each(0..7, fn pad -> pad_led(output, pad) end)
    PortMidi.close(:output, output)
  end

  def pad_led(output, pad) do
    pad_hex = Enum.at(@pad_list, pad)
    pad_led(output, @deck1, pad_hex)
    pad_led(output, @deck2, pad_hex)
  end

  def pad_led(output, deck, pad) do
    [deck, pad, @led_on]
    |> send_midi(output)

    Process.sleep(500)

    [deck, pad, @led_of]
    |> send_midi(output)

    Process.sleep(100)
  end

  def send_midi(v, output) do
    Enum.map(v, fn x -> hex_to_dec(x) end)
    |> List.to_tuple()
    |> then(&PortMidi.write(output, &1))
  end

  def hex_to_dec(hex), do: String.to_integer(hex, 16)
end

実行

$ mix run --eval "Pad.start()"

動作結果

9
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
9
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?