日々の何気ないアップデートでも新機能がゴリゴリ追加される商売気のないREAPERさん、先日公開されたv7.46は二十周年記念版だそうで意外と歴史のあるDAWなのです。

今回のアップデートでもいろいろな機能が追加されましたが、中でもトラックのピン留め(Track pinning)はPre-Release版の頃から注目を集めており、このたび正式機能として組み込まれました。さっそく試してみたところ、現時点では一部注意する点があったので簡単にまとめてみました。
ピン留めはどういった機能なのか
アレンジエリアの上部に任意のトラックを固定できる機能です。
マスタートラックやリファレンストラック、コードやメモ等、常に表示しておきたいトラックをピン留めしておくと便利かと思います。
Cubaseの「トラックリストを分割」に似ているのでCubaseを触った事のある方ならすぐ分かるのではないでしょうか。
私がいつもやっているASMRなどのボイスドラマ編集でも音声トラックをピン留めすればSEの配置がやりやすくなりそうなので期待しておりました。

TCPの右クリックメニュー最上部からピン留めできます。
早くも日本語化されている…ばルるる様いつもありがとうございます😭

コードやメモなど、テキストアイテムを置くとこんな。
近年、あとからコード譜が必要になるケースが増えているので、プロジェクト内でコードをメモるようになりました。

ボイスドラマでボイストラックをピン留め。なかなか便利😙
じゃあ編集が早くなるのかといえばならない。便利になったぶん人間がさぼるからである。

動画トラックをピン留めしてサムネイルを配置すれば他のDAWのような見た目に。
サムネイルの作成には以下のJSスクリプトを利用しています。
(ReaPackからインストールできます)
js_Video - Create thumbnail items in selected track for selected video items
https://forums.cockos.com/showthread.php?t=237293(スレッド)
現時点での問題
トラックのピン留めを使うと、SWS/S&M拡張機能のAPI「BR_TrackAtMouseCursor()」で正常なマウスカーソル位置の取得ができなくなってしまったようです。それに伴い、SWSにいくつかある「マウスカーソルの下にあるトラックをソロにして再生」のようなアクションやスクリプトがいくつか機能しなくなりました。(ピン留めを使わなければ問題無いです)
SWS製作者様はこの機能に関してサポートを終了するというスタンスのようなので、今後SWSに別の機能が用意されるのかされないのかちょっと分からない状況です。私が英語苦手でちゃんと読み取れていない可能性もあります😭
個人的にはSWSのマウスカーソルの下にあるトラックをソロにして再生、停止したらソロを解除というアクションにアホみたいに依存しているので、この機能が使えなくなるくらいならピン留めなんてしませんけどピン留めは使いたいです(強欲)
|
1 |
Toggle play from mouse cursor position and solo track under mouse for the duration |
有志の方によるスクリプトがあったりしないかなーと思いざっと探したのですがピン留めに対応した物は見つけられませんでした。(でもありそうなので知ってる方はメールフォームから情報求む🙇♂️)
ただ機能的には結構シンプルなのでいつものようにChatGPTさんに作ってもらいました。さすがに1回では動きませんでしたが4往復くらいでちゃんと動く物を書いてくれましたよ。
マウスカーソル下のトラックをソロにして再生するスクリプト(ChatGPTさん作)(2026/3/11更新)
2026/3/11、修正版に差し替えました
詳細はこちらの記事にて。
https://blueberry-yogurt.com/?p=3991#toc1
機能の内容
- マウスカーソル位置のトラックをソロにしてマウスカーソル位置から再生
- 再生を停止するとソロが解除される
- スクリプト実行中に同スクリプトを実行するとソロを解除して停止
- マウスカーソル位置以外のトラックのソロ・ミュートは一切変更しない
SWSのアクションはマウスカーソル位置以外のトラックのソロ・ミュートを解除するため、その点が異なります。また、SWSとjs_ReaScriptAPIが必要です。
スクリプトのソース
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
-- @description Solo track under mouse and play from mouse cursor, unsolo after stop (stop on re-run, keep edit cursor visually) -- @version 1.1 -- @author ChatGPT -- マウスカーソル下のトラックをソロ再生し、停止時にソロ状態を戻すスクリプト -- MIDIエディタ上だった場合はSWSの「_BR_ME_TOGGLE_PLAY_MOUSE_SOLO_ITEM」を実行 -- SWS、js_ReaScriptAPIが必要 -- MainとMIDI、両方からスクリプトを読み込んでショートカットを割り当ててください -- スクリプトの動作を聞かれたら「新規インスタンス」を選択してください。「インスタンス停止」を選ぶと動作しません local track = nil local set_solo = false local start_pos = nil -- カスタマイズ ---------- -- ソロの種類 0=not soloed, 1=soloed, 2=soloed in place, 5=safe soloed, 6=safe soloed in place local solo_mode = 2 -- マウスがMIDIエディタ上だったときに実行するコマンド local midi_command_id = reaper.NamedCommandLookup("_BR_ME_TOGGLE_PLAY_MOUSE_SOLO_ITEM") -- 停止後にソロ解除 function CheckStop() if reaper.GetPlayState() == 0 then if track and set_solo then reaper.SetMediaTrackInfo_Value(track, "I_SOLO", 0) end else reaper.defer(CheckStop) end end -- メイン処理 function Main() local play_state = reaper.GetPlayState() -- 再生中なら即停止(カーソルは動かさない) if play_state & 1 == 1 then reaper.OnStopButton() return end -- マウスポジション、hwndを取得 local x, y = reaper.GetMousePosition() track = reaper.GetTrackFromPoint(x, y) local hwnd = reaper.JS_Window_FromPoint(x, y) local parent = hwnd -- MIDI Editor上だったときの処理 while parent do local class = reaper.JS_Window_GetClassName(parent) local title = reaper.JS_Window_GetTitle(parent) or "" -- 判定条件(どちらか一致でOK) if class == "midieditor" or title:match("MIDI") then local active_midi_editor = reaper.MIDIEditor_GetActive() reaper.MIDIEditor_OnCommand(active_midi_editor, midi_command_id) return end parent = reaper.JS_Window_GetParent(parent) end -- ソロ再生 if track then local solo_state = reaper.GetMediaTrackInfo_Value(track, "I_SOLO") if solo_state == 0 then reaper.SetMediaTrackInfo_Value(track, "I_SOLO", solo_mode) set_solo = true end -- マウス位置のタイムライン上の時間を取得 start_pos = reaper.BR_PositionAtMouseCursor(true) if start_pos == -1 then start_pos = reaper.GetCursorPosition() end -- 編集カーソルの現在位置を保存 local cur_pos = reaper.GetCursorPosition() -- 編集カーソルを一時的にマウス位置に移動して再生 reaper.SetEditCurPos(start_pos, false, false) reaper.OnPlayButton() -- 再生開始後にカーソルを元に戻す reaper.SetEditCurPos(cur_pos, false, false) reaper.defer(CheckStop) end end Main() |
インストールとインスタンスの設定
REAPERのアクションリストを開いて「新規アクションボタン > ReaScriptを読込」からLuaスクリプトを読み込み、ショートカットキーに割り当ててご使用ください。
スクリプト実行中に同スクリプト実行すると、初回にスクリプトの動作を聞かれるので「この回答をこのスクリプトに記憶」にチェックを入れ、「新規インスタンス」ボタンを押してください。インスタンス停止を選んでしまうとうまく動きません。

注意点
短いボイスドラマの編集を一通り終わらせるまでこのスクリプトを使ってみましたが特に問題は出ませんでした。とはいえ限定的な環境での動作確認に過ぎないので、公開しておいてなんですが、もしスクリプトを使われる方はガチめに自己責任でお願いします。
reaper.deferを使ってるので何かの拍子に延々ループとかしちゃわないかと心配でしたが簡単にデバッグした限りはちゃんと終了している模様。
たぶん有志の方がちゃんとしたのを作ってくださると思うのでそれまでの繋ぎということでひとつ。


