Roland SH-4d 向けのパターンチェイン(ソングモード)シーケンサーの製作

Roland SH-4d 向けにパターンを束ねてソングとして扱うウェブアプリケーションをつくってみました。

SH-4d は TR-REC スタイルにてスタンドアローンで打ち込みができるデスクトップシンセサイザーです。 最大 64 step の長さで 4ch シンセ + 1ch リズムの各パートを入力して 1パターンとして扱うタイプで、簡単に打ち込み・再生できるため、自分は楽器の練習用としてとても便利に使っています。(適当に思いつきのリズムとベース・コードトラックを打ち込んで、合わせて KORG opsix を演奏するプレイ(?)です)

サウンドもグッド。

Roland – SH-4d | Synthesizer

Desktop Synthesizer

SH-4d の「パターン」は 1/16 スケールで 64 step 打つと 4小節になりますが、練習していると欲がでてきまして「…もう 4小節欲しい」となり、SH-4d のマニュアルを確認すると、

https://www.roland.com/jp/support/by_product/sh-4d/owners_manuals/8e612acf-31f2-4528-bb01-32cad0afd135/

Program Change MSB: 85, LSB: 0, PC: 0-127 (*4)

(*4) PATTERN画面でのみ送受信します。プログラム・チェンジは(読み込みたいパターンのバンク番号)×8+(パターン番号)-1となります。

と PATTERN 画面でプログラムチェンジを受け付けてパターンチェンジできそうでしたので、手軽に使えるようウェブブラウザでパターンシーケンスを打てるアプリケーションを製作しました。

ソースコードメモ: https://github.com/h1romas4/sh4d-chain/blob/main/src/components/Sequencer.vue#L162-L172

/**
 * sendSH4dPc
 *
 * @param {*} bank
 * @param {*} no
 */
function sendSH4dPc(bank, no) {
  midiOutputChannel.sendControlChange(
    0, pcMSB
  ) // CC0 bank select MSB 0x55
  midiOutputChannel.sendControlChange(
    0x20, pcLSB
  ) // CC32 bank select LSB 0x0
  midiOutputChannel.sendProgramChange(
    (bank - 1) * 16 + (no - 1)
  ) // Program change
}

ちなみに上記の MIDI ドキュメント上は「(読み込みたいパターンのバンク番号) x 8」となっていますが x 16 の誤記かと思います。

Pattern Chainer for Roland SH-4d の使い方

最初に、PC や Mac の USB に SH-4d を接続して電源を入れ MIDI デバイスとして認識させます。macOS ではドライバのインストールが必要で、Windows/Ubuntu は不要です。

次に SH-4d の設定を次のようにします。

  • SYSTEM SETTINGS – TEMPO/SYNC – Sync Out – USB
  • SYSTEM SETTINGS – MIDI – Ctrl Ch – 16
  • PATTERN 画面にしておく(CURRENT と NEXT パターンがでている画面)

最後に、 Microsoft Edge などの Chromium 系のウェブブラウザで以下のサイトにアクセスします。初回 MIDI デバイスへのアクセス権限の問い合わせがあると思いますので「許可」してあげてください。(Firefox はセキュリティ権限の関係で動作せずで仕様を確認中です。 Firefox でもうまく動作することを確認しました。Safari は2023/11 現在 Web MIDI API が動作しないため非対応です)

https://h1romas4.github.io/sh4d-chain/

Pattern Chainer for Roland SH-4d – like song mode

うまく MIDI が接続されていると Sync にカレントパターンの BPM が表示されるはずです。(BPM が 0 の場合は MIDI デバイスと Sync の関係を MIDI Setting から確認ください)

画面からいい感じにシーケンスを打った後「SH-4d 側の START」を押すと、シーケンスが同期されパターンチェンジ(プログラムチェンジ)が発行されパターン同士が接続されたように振る舞います。

例えばプリセットパターンの 1-1, 1-2, 1-3 をチェーンする場合は次のようになります。

各シーケンスにはパターンの最大長を入力すると良いです。

また、ソングの設定でデフォルトオンになっている Send program change in the last step. の設定はプログラムチェンジを送信するタイミングです。

SH-4d のパターンチェンジはパート内の最短長をもって切り替えられる仕様のため、それよりパターン全体の長さが長い場合はこの設定をオンにしてプログラムチェンジの発行をパターン演奏の最後まで遅延させます。もしパターン中全てのパート長が 1/16 64 step などで揃っている場合は、この設定をオフにすると SH-4d 画面上の NEXT パターンが見れるので、演奏中に安心できるかもしれません。

追加の機能としては、簡単ではありますが冒険の書的にソングの保存機能も付けています。Save | Load ボタンからウェブブラウザのローカルストレージに保存されます。

アプリケーションのソースコードは次の GitHub リポジトリに。

https://github.com/h1romas4/sh4d-chain

This is a simple sequencer to chain play patterns on the Roland SH-4d. Connect the pattern and treat it as a song.

It works based on the MIDI clock of SH-4d on a web browser, and It can work with other rhythm boxes by setting Program Change MSB/LSB.

Vue.js 3 と WEBMIDI.js を活用して 1000 行に満たない簡単なプログラムになっていますので自分好みに改造して使うと良いかもです。ライセンスは MIT License です。

設定などを SH-4d スペシャルでつくってしまっていますが、おそらく他のリズムボックス系のシンセも MIDI Settings 画面の Program Change MSB/LSB 値をセットすれば同様に動作するのではないかと思います。

また、タイミングの考慮が必要ですが、2窓してギターのマルチエフェクタのパッチ切り替えもできるかもしれないとふと製作中に思いました。(そこまでするなら普通のシーケンサー使えという話ではありますがw

最後に、製作中のバージョンですが動作デモです。てなわけで Enjoy!


以下は開発メモ。

Firefox の Web MIDI API

Windows 版の Firefox から Web MIDI API をリクエストすると次のように権限を追加する拡張が導入され正しく動作します。おそらく macOS 版でも同様です。

Ubuntu 標準の Snap 版 Firefox ではこの動作がうまくできないようで、本アプリケーションは MIDI に接続できず機能しません。「サイト権限」の設定自体がでてこないので、何かしらの判定で disable になっているようですが調査中です。

$ snap connections firefox
dom/midi/MIDIPermissionRequest.cpp

UPDATE 2023-12-15 Snap 版 Firefox に MIDI サポートのパッチが入りました。 Ubuntu Snap Firefox では 121.0-1 から動作すると思います。

https://github.com/canonical/firefox-snap/commit/6790ed70ce53944d24d5b059314f697d8b42610e

Merge pull request #39 from seb128/stable-midi-support Use alsa plug to interact with MIDI devices

UPDATE 2023-12-23 alsa は接続されましたが、まだ動作しないようです。

UPDATE 2024-02-10 Linux 版の Firefox において、Mozilla の debian package 版を使うことで、Web MIDI API が正しく動作することを確認しました。

https://support.mozilla.org/en-US/kb/install-firefox-linux#w_install-firefox-deb-package-for-debian-based-distributions

Install Firefox .deb package for Debian-based distributions

コメントを残す