REAPER

PeloReaper Extensionの情報やダウンロードはこちらからどうぞ。
PeloReaper Extension for REAPER is here.
ReaperBanner01_w250 AudioSoftBanner01_w250

ReaScript入門(1): ReaScriptの初歩的なこと~Hello World

今回からREAPER上で動作させられるスクリプトやその動作環境などについて解説していきます。少しでもReaScript入門のハードルを下げていければと思っていますが、どうなることやら。


ReaScriptイントロダクション

ReaScriptとは

ReaScriptとはREAPER上で動かせるスクリプト(もしくはその実行環境のこと)を指します。厳密な解説は下記リンクの公式サイトに譲るとして、ひとまず「スクリプトを追加することでREAPERのActionを追加できる」のだと理解していれば十分かと思います。

ReaScriptからはREAPER本体やExtensionから提供されるAPIを呼び出したり、他の既存のActionを実行したりといったことが出来ます。APIはActionを作るためのプログラムの部品のようなもので、例えばTrackの個数を返してくれる関数など様々なものがあります。

では「これで何を実現できるか」というのは多岐にわたるのですが、例えば以下のようなものでしょうか。

  • 手間がかかる定型作業を1つのAction(スクリプト)で実行させるような自動化(Item編集やMIDI編集、FXのパラメータ設定等様々な作業に応用可能)
  • 既存のActionの動作では満足いかなかった場合に、自分専用にカスタムした動きのActionを作って作業オペレーションを最適化
  • カスタムGUIを作成して自分用のツールを作る
これらの他にもアイデア次第で自分のやりたい事を実現出来ると思います。

また、REAPER上で動作するスクリプトという意味では、オーディオFXやMIDI FXを作れるJSFX、動画などの画像処理を行うVideo Processorスクリプトなどもありますが、この記事の系列では扱いません。Video Processorについてはこの辺りで過去にいろいろ記事を書きましたので、そちらを見てもらうと良いかと思います。


ReaScript自作の必要性

ではどういった時にReaScriptを自作する必要があるのでしょうか?

REAPERを使い始めた初心者の方は、いきなりReaScriptを書く必要はありません。既に便利なActionやスクリプトが沢山ありますので、それを使って自分の作業環境を良くしていければ十分じゃないかと思います。

ReaScript自作に手を出す前に、試しに使ってみて把握しておくと良さそうなところをいくつかリストアップしておきますので参考にしてみて下さい(下に行くほど高度・面倒)。

  • デフォルトでREAPERに実装されている様々なActionを使ってみる。
  • SWSもインストールして、これに含まれるActionも使ってみる。
  • REAPER標準のCustom Action(複数のActionを並べて順番に実行できる、一般的なツールだとマクロ機能のようなもの)でActionを組み合わせて実行してみる。
  • ReaPackで有志の方が作成したスクリプトをダウンロードしていろいろ試してみる。
  • おまけとしてSWSのCycle Actionを試すのもアリですが、もうこのあたりからプログラミング色が強くなってきます(プログラミングに慣れてくればReaScriptで書いた方が楽かも)。

こういった既存の機能をいろいろと使っていくと、それらでは細かいところに手が届かないように感じたりする場面が出てきたりします。そう感じて更に自分に最適なActionが欲しくなってきたら、いよいよReaScriptを書く必要性が高まってきたと言えるでしょう。

とはいえReaScript自体に興味があるなら、もろもろすっ飛ばしていきなりスクリプトを作り始めてもいいと思います。上記の内容はあくまで参考までにということで。


ReaScript作成に使用できるプログラミング言語

ReaScriptを作成するのに使用できる言語はReaScript公式ページに記載されていますが、EEL2、Lua、Pythonから選ぶことが出来ます。Pythonはセットアップが必要なので、デフォルトの状態で使えるのはEEL2とLuaになります。

言語追加セットアップ解説
EEL2 不要 REAPERを含むCockosのツール専用の範囲ではあちこちで使われている言語。Video processorやJSFX等のオーディオ処理等にも用いられており、スクリプト実行パフォーマンスが良いとされています。REAPER内のみだけでスクリプトを組む前提なら、覚えておくといろいろなものを作れるようになるので便利な一方、REAPER以外ではほぼ使われていない言語なので、3つの言語のうち習得ハードルは最も高いと言えるでしょう。
Lua 不要 ReaScriptを書くのに最も標準的に使われている言語で、ネットにもLua言語解説の記事は多数存在するので習得が比較的容易です。REAPER以外のオーディオ関連ツールでもLuaの採用率は高い(例:Steinberg HALion、UVI Falcon、SurgeXT、Synthesizer V、Renoiseなど)ので、習得しておくとREAPER以外でも役に立つ可能性があります。何か特別な理由がなければLuaがオススメです。
Python 必要 上記2つの言語が割とコンパクトな規模のものなのに対して、様々なモジュールを用いて複雑な作業を割と容易に実現できるのがPythonの良いところ。言語自体の解説記事なども多く、習得が比較的容易。一見最強の選択肢に見えますが、いくつかデメリットも存在します。
  • REAPERでPythonを使うには追加のセットアップが必要。スクリプトを他人に配るなら、相手側にも同じPythonをインストールしたりする必要があったり、それに伴う面倒な環境依存問題に悩むことがあるかも。
  • 公式サイトにも書かれていますが、一部の機能がPythonではサポートされていなかったりします。
  • うろおぼえ的な記憶だと、Pythonスクリプト起動には若干時間がかかるので、スクリプトを高速に連打するようなことをやるとLuaと比べてかなり処理が遅くなることもあったような・・・(最近試してないので、既に改善されている可能性はあります)。

いろいろ書いてしまいましたが、ザックリまとめると

  • 一般的にはLuaがオススメ
  • 多少手間はあるけど複雑な事をサクッとやりたいならPythonも使う
あたりが落としどころでしょうか。

※今後の記事ではLuaを使用することを前提として解説を進めていきます。また、Lua言語自体の書き方や言語仕様等の説明も出来るだけ割愛させて頂くことにして、ReaScript固有の部分に的を絞って解説しますのでご了承下さい。


(おまけ)REAPER Extensionについて

REAPERのAPIは上記で紹介したスクリプト言語からだけでなく、C言語から呼び出す方法も用意されています。C言語で作成されたREAPERのプラグインは特別にREAPER Extensionと呼ばれています。こちらはLua等のテキストファイルを追加すればサクッとActionを追加出来るというような代物ではなく、作成のハードルは非常に高くなっています。

過去に当ブログでもREAPER Extensionの作り方についてこの辺りの記事で解説していますが、ゴリゴリのエンジニア向けの内容となります。本記事の読者向けには「まぁそんなものもあるのね」くらいに知っておいてもらえればOKです。


ReaScriptを作成してみる

ReaScript作成~実行方法

それでは簡単なReaScriptを作成して、実行してみましょう。

  1. REAPERメインメニューから [Actions > Show action list...] でAction Listを表示します。
  2. Action List下部にある [New action...] ボタンをクリックして [New ReaScript...] を選ぶと、スクリプトの保存場所を聞かれます。 ReaScript_HelloWorld_AddNewScript
  3. ファイルの種類は [Lua files (*.lua)] で、ファイル名は任意に指定します(ファイル名はそのままAction名になるのと、利便性の都合上日本語は用いずに半角英数のみのファイル名にしておくのがオススメです)。
    ここでは HelloReaperWorld.lua という名前にして保存します。
    ReaScript_HelloWorld_AddNewScriptFile
  4. 保存するとスクリプトを編集するテキストエディタが表示されますが、実はもうこの時点でスクリプト自体の作成(とそれに対応するActionの追加)は完了していて、Action Listに「Script: HelloReaperWorld.lua」というActionが並んでいると思います。もちろん、実行も可能です(スクリプトが空なので何も起きませんが)。
    ReaScript_HelloWorld_Action

Hello World:テキストを表示するプログラムの作成

では作成したスクリプトにエディタ上で以下のコードを追加して、Ctrl+Sで保存してみましょう。保存すると、同時にActionも実行されます。

reaper.ShowConsoleMsg("Hello REAPER World!!")

ReaScript_HelloWorld_Code_01

REAPERのコンソールウィンドウが開いて、「Hello REAPER World!!」と表示されたのではないでしょうか。
ReaScript_HelloWorld_Result

これでLuaによる初めての自作ReaScriptの完成です! あとはいつでもAction Listから呼び出すことが可能です。

プログラムの簡単な解説

  • REAPERのAPIは、Luaだと「reaper.API名(パラメータ)」のような形で呼び出せます。
  • 「ShowConsoleMsg」はREAPERのコンソールウィンドウにメッセージを表示するAPIで、パラメータとして "Hello REAPER World!!" という文字列をセットしています。

作成したスクリプトを後から修正したい場合

また、後からこのスクリプトを修正したい場合は、追加したスクリプトのActionをAction Listで選択して [Edit action...] ボタンで編集出来ます。

ReaScript_HelloWorld_EditScript


作成したスクリプトを削除したい場合

既に作成してあるスクリプトのActionを選択して、Action Listの [Delete] ボタンで削除できます。

ReaScript_HelloWorld_DeleteScript


既に作っておいたScriptを読み込んでActionにしたい場合

最初にスクリプトを作成する時と似ていますが、Action Listのボタンで [New action... > Load ReaScript...] からスクリプトのファイルをロードすればOKです。

ReaScript_LoadScriptFile



今回はここまで。前置きが長かった割に、スクリプトを作り始めたらあっという間だったのではないでしょうか。Actionをこんなにも簡単に追加出来ると分かると、夢が広がりますよね。


REAPER上でRX Monitorがうまく動かない時の対処方法

REAPERとiZotope RXのRX Monitorを連携させようとした場合に、上手く動かない場合の対処法をメモしておきます。

※筆者は2024年6月時点でiZotop RX10 Standardを使用。


RX Monitorとは

iZotope RXにはVSTプラグインとして「RX Monitor」というものが付属しています。簡単に言うと、RXの音声出力をこのプラグインへ送信して、その音を(プラグインが挿入されている)DAW側で確認出来るという機能です。

DAW側のエフェクトチェーンの直前にRX Monitorをインサートしておけば、RXアプリケーション側で修正した音をDAWでエフェクトをかけつつプレビューが出来て便利だったりします。

これ以外にも、例えばオーディオデバイスの設定やDAWによってはオーディオデバイスを占有してしまって他のアプリケーションで同時に利用できなくなったりすることがあります。その場合RXで直接音が鳴らせないという状況になるため、回避策としてオーディオデバイスを占有してるホスト側のRX Monitorを介して音を鳴らす方法としても利用できます。

RX Monitorの詳細については↓のiZotopeのブログやRXのマニュアルを参照して下さい。



RX側を再生した場合にエラーメッセージが表示される場合

REAPERからItemの波形を編集するために、外部エディタ(External Editor)としてRXアプリケーションを用いた場合、RX側でプレイバックすると以下のようなエラーメッセージが出る場合があります。

The selected audio driver is unavailable.
RXMonitor_ErrorOnPlayback

エラーメッセージが出る手順の例

REAPER上での編集フローとしてありがちなのは、以下のような手順でItemの波形を外部エディタ(RX)で編集するような場合です。

  1. (事前準備)REAPERのPreferencesで「External Editors」を設定してRXアプリケーションをItemの波形編集用に登録しておく。
    RXMonitor_RPExternalEditorsRX
  2. Track FXにRX MonitorのVSTを挿入しておく。
  3. wavのItemを外部エディタ(External Editor)であるRXで開く(Item右クリックから [Open items in editor>Open items in 'iZotope RX 10 Audio Editor.exe'] のような感じのものをクリックで開けます)。
    RXMonitor_OpenAudioItemOnRX_01
  4. RXアプリケーション側メインメニューから「Edit>Preferences...」でAudioタブの設定を開き、[Driver type]や[Output device]が[RX Monitor]になっていることを確認。
    RXMonitor_Preferences_01
  5. RXアプリケーション側で再生を行うと、RX Monitorプラグイン側に音声が流れてREAPER側から音が鳴るハズ・・・(ここでRX側に上記エラーが表示される)。
    RXMonitor_Error_01

もちろんこれはあくまで不具合の発生する手順の一つであって、条件が揃っていれば他の手順でも再現する場合はあるかと思います。


原因と解決方法

REAPERにはこちらで紹介しているような「REAPERのウィンドウが非アクティブになったらオーディオデバイスを閉じる」機能がオプションとして存在します。筆者の遭遇したケースでは、この機能がONになっているのが原因でした。


自動でオーディオデバイスが閉じられる機能がONになっていると、REAPERから別のウィンドウ(ここではRXアプリケーション)にフォーカスを切り替えた瞬間にREAPERのオーディオデバイスが閉じられて無効化されてしまいます。
RXMonitor_ReaperAudioClosed_01
↑ REAPERウィンドウ右上のオーディオデバイスの状態表示を見ると閉じられていることが分かる

オーディオデバイスが無効になっている状態のREAPER側に挿入されているRX Monitorへ音声を送信しようとしたけど再生に失敗したため、エラーメッセージが表示されて音も鳴らないという結果になったようでした。

解決方法としては、REAPERが非アクティブになってもオーディオデバイスを閉じないようにオプション設定を行えばOKです。具体的にはREAPERのPreferencesで[Audio]の設定ページにある [Close audio device when stopped and application is inactive] を OFF(チェックを外す)にしておくと良いでしょう。

RXMonitor_OptionCloseAudioWhenInactive_01

このオプションはデフォルトでONになっていたような気もする(?)ので、RX Monitorを使うような人はOFFにしておくことをお勧めします。というか、他にもREAPER非アクティブ時にItemをOfflineにする等、このテの自動無効化系オプション全般がいろいろなところで問題を引き起こすため、ワークフロー上問題がなければOFFにしておいた方が良さそうです。


REAPERでItemの波形表示(Peaks)が粗くなってしまう問題の対処方法

今回はREAPER上でのItemの波形表示の挙動が変わって焦ったという話です。


いつの間にか変わったItemの波形表示

先日気が付いたのですが、REAPERでタイムライン(Arrange View)を拡大表示してItemを見た時に、従来はサンプルの折れ線が表示されていたのにいつの間にか粗いカクカクの表示になっていました(下図の上側のItemのような感じ)。

何かバグったかな? と思って波形表示(Peaks)の再構築を行ったりしても直らなくて少し焦ったのですが、その後解決策を無事見つけることが出来ました。最近こういったケースに遭遇したことはないでしょうか。

REAPER_LowResPeaks_01

解決方法

結論から言うと、Preferencesに設定が追加されていました。以下の設定でON/OFFの切り替えが出来るようになっています。

  1. REAPERのメインメニューから [Options>Preferences...] で設定ウィンドウを開く。
  2. 左側の設定項目で [Media>Video] を選択し、[Display low-resolution audio peaks for video items] をONにすると動画のItemの波形表示が粗くなります(OFFで従来通りサンプル折れ線表示)。

上記説明で強調表示してあるとおり、「動画のItemの波形表示」のみがこの影響を受けるようで、それ以外のwavファイルなどのItemについては特に影響はないようです(こちらは従来通りサンプルの折れ線表示のまま)。

設定を切り替えてみた場合の表示状態の比較は以下のとおりです。

  • 設定をONにした場合: REAPER_LowResPeaks_On
  • 設定をOFFにした場合: REAPER_LowResPeaks_Off

REAPERのどのバージョンからこの設定が入ったのかはチェックしてないのですが、最近波形表示がパワーアップした(ラウドネス等のグラフや色付け表示などが強化された)こともあって、その流れで実装された機能なのかもしれません。あと恐らくPeaksを粗く表示できるようにすることで、そのもとになるPeaks構築の計算を高速に出来るようにしたとかなのかも(ノートPCや非力なPCなどで処理速度に違いが出るか見てみたいところ)。

いずれにしても無事問題が解決したのでスッキリしました。どんなツールでもそうですが、デフォルトの挙動が急に変わるとビックリしますね! 音声付きの動画をタイムラインによく配置する人はご注意下さい。


このブログについて
ぺろりがREAPERで遊びたいというだけのブログかもしれない

必ずこちらをお読みください

twitter: @pelori

管理人用
  • ライブドアブログ