Avid Sibeliusという楽譜ソフトには、ユーザーが作成できるスクリプトがあります。公式のマニュアル以外にあまり資料がないので個人的な備忘録として書いておきます。
・スクリプトの作成はSibeliusを起動して、ファイル→プラグイン→プラグインの編集を選択。ここにマニュアルもある。
プラグインは大きく3つのブロックで構成される。
1. メソッド(メインのプログラム)
2. ダイアログ(データ入力が必要な場合はウィンドウをカスタマイズ)
3. データ(たぶん静的変数?)
メソッドはデフォルトで
Initialize(変数の定義)
Run(実行プログラム)
の2つが作成されている。必要なら追加できる。
テンプレート
if (Sibelius.ScoreCount = 0) //編集可能な楽譜の数
{
Sibelius.MessageBox("楽譜が存在しません。楽譜を作ってから実行してください");
return(0); //falseでリターン
}
コメントアウトはC言語と同じ。
「//」スラッシュ2回で以降をコメントアウト。
「/* ...... */」スラッシュ+米印で囲むと、囲んだ部分をコメントアウト。
Sibelius.MessageBox(text);
メッセージボックスにtextを表示してくれる、大変ありがたいコマンド。引数は変数でもいいし、" "で囲んで直接記述もできる。
楽譜の構造はぶっちゃけわからない。
score = Sibelius.ActiveScore; 楽譜全体のデータ
staff = score.NthStaff(n); 楽譜全体の中で上からn番目の五線
bar = staff.NthBar(n); 上記で選んだ五線のn番目の小節
sel = score.Selection; 選択した部分
(左側は変数なので好きな文字列でOK)
選択した音符の位置に"Hello World"のテキストを書き込むサンプル
詳細を理解していないのでだいぶ変だと思う。プログラム内のnrのデータをもっとスマートに受け取れるはず。
//Run
score = Sibelius.ActiveScore; //楽譜全体のデータ
sel = score.Selection; //選択した部分
num = 0; //変数を定義
/*selに含まれるNoteRest(音符情報)それぞれについて処理。nrは不明(五線データ?)*/
for each NoteRest nr in sel
{
var = "n" & num; //たぶん不要。
@var = nr; //これが必要なはず)
num = num + 1;
}
var = "n" & 0;
b = @var; //@varは変数n0の中身
startpos = b.Position; //Positionは小節内の位置。頭は0。4分音符1つで256。
startbar = b.ParentBar; //ParentBarは選択された小節番号。
text = "Hello World!"; //適当に文字列をつくる
format = "text.staff.small"; //Sibeliusに存在する正規のフォーマットを記述する必要あり。要マニュアル
startbar.AddText(startpos,text,format); //指定位置にテキストを書き込む
//以上
ちなみに最後の行はきちんと改行しておかないとエラーになる。
startbar.AddText(startpos,text,format);
startbarの小節にテキストを追加する。
startposは小節内の位置。0が小節アタマ。256で4分音符1つ後ろ。512で2分音符後ろ。
textは表示したいテキスト。
formatはどんなフォーマットでテキストを書き込むかの指示。マニュアルの158Pからずらーっと一覧があるので、その中のどれかを選んで記述。
var = "n" & num;
@var = nr;
この部分はちょっと難しい。
変数numは事前に0と定義しているので、for文の1回目のnumの値は0。つまり、
var = "n" & 0;
と言える。ここでの&は文字をくっつける役割があるので更に書き換えると以下のようになる。
var = "n0";
これはn0という変数を作成して、その名前をvarと定義しました、という意味になる。
次に
@var = nr;
意味としては「varという変数の中に入っているn0という文字列を変数とみなして、その中身をnrにする」という感じ。
(サンプル)
i = 0;
var = "n" & i; //変数n0を作成
@var = 100; //変数n0に100を代入
i = 5;
var = "n" & i; //変数n5を作成
@var = 500; //変数n5に500を代入
Sibelius.MessageBox(n0); //100と表示
Sibelius.MessageBox(n5); //500と表示
以上。