SwingOSC for SuperCollider3 on Linux


スパコをLinuxで使用する上で問題になるのがGUI関係です
しかし、MacAPIであるCocoajavaのswingを用いてエミュレートした、SwingOSCという非常に便利なOSC(Open Sound Control)サーバが2005年に登場しました
その後積極的にアップデートを繰り返し、つい先日ver0.58になりました!
(単にSwingOSCを導入したい方は以下数行を読み飛ばしてください)

Linux上のスパコでGUIを扱う場合には選択肢が二つあります

の二つです
SCUMはGUIフレームワーク(たぶんFLTKベース)でしてスパコのためのものです
SwingOSCはJavaのクラスライブラリであるSwing(とAWT)を用いています
さて、どちらを選択するかな、と悩まれる所でしょう
僕の例で恐縮ですが選択の一例を述べてみます
当初SwingOSCは知りませんでした。よってSCUM一択。SCUMの配布サイトのスクショをみたところ、おお、これで問題ないんじゃない?と喜んで導入したところ、残念ながら波形表示に問題があるようでした。Macでいうところのscopeが上手く表示できないといった症状です。ググってもイマイチ解決せずに悩んでいた所、SwingOSCの存在を知りまして導入したところ、波形表示が出来ました!
といった具合にSwingOSCを選択しました
Java?重いんじゃね?という印象を持たれる方も多いと思います
残念ながら、非力なマシンですと重いでしょう
しかしながら、例えばSCWindowというクラスをエミュレートしたものとしてJSCWindowというクラスが使えます
従来のGUIクラスに”J"を付ければほぼそのまま使えるのです!


では、SwingOSC導入方法です
まず、http://www.sciss.de/swingOSC/より最新版を落とします
解凍先のフォルダ以下に"SuperCollider/SCClassLibrary/SwingOSC" というフォルダがあると思います
そいつをスパコのインストール先のExtensions/にコピーしましょう
例えば"/usr/share/SuperCollider/Extensions"以下です
ex)

sudo cp -R ~/SwingOSC/SuperCollider/SCClassLibrary/SwingOSC /usr/share/SuperCollider/Extensoins

!間違ってもSCClassLibrary/以下にコピーしてはダメですよ、僕はこれで小一時間はまりました
同様にHelpフォルダもインストール先のHelp/以下にコピーします
ex)

sudo cp -R ~/SwingOSC/SuperCollider/Help/SwingOSC /usr/share/SuperCollider/Help

次に設定ファイルに追記をします
~/.sclang.scにSwingOSC.program = "java -jar /usr/share/SwingOSC/SwingOSC.jar";
などと記述しましょう
" "内にSwingOSC.jarのある先です。僕は/usr/share/SwingOSCフォルダを作成しそこにSwingOSC.jarを移しています。解凍先に"build/SwingOSC.jar"というファイルがあると思いますがそいつです。別にどこかに移す必要はなく、"SwingOSC.program = "java -jar 解凍先/build/SwingOSC.jar";"と記述しても大丈夫です
スパコのインストール先にconfiguration/sclang.scがある場合にはそいつに追記
その後スパコを立ち上げて
g = SwingOSC.default;
g.boot;
と書いて一行目を実行してみましょう

booting java -jar /usr/share/SwingOSC/SwingOSC.jar -t 57111 -L -i
SwingOSC v0.56. receiving TCP at address 127.0.0.1:57111

などとメッセージが出れば無事起動成功です!


スパコ用のインストール方法はhttp://www.sciss.de/swingOSC/SuperCollider/readme.html
に記載されています

(

var w,com,com2,button,button2,pop,slider,rslider,dslider,text,ezslider,eznumber,listview,statictext,nbox,knob,multislider,envview;

w = JSCWindow("SwingOSC for SC3 on Linux",Rect(0,0,640,480));


button = JSCButton(w,Rect(5,5,100,20));
button.states = [
["JSCButton",Color.white,Color.black],["JSCButton2",Color.red,Color.blue]
];

pop = JSCPopUpMenu(w,Rect(5,50,100,20));
pop.items = ["test1","test2","test3"];

slider = JSCSlider(w,Rect(5,100,100,20));
slider.value = 0.4;
slider.step = 0.1;

rslider = JSCRangeSlider(w,Rect(5,150,100,20)).lo_(0.2).hi_(0.4);

dslider = JSC2DSlider(w,Rect(5,200,100,100)).x_(0.5).y_(0);

text = JSCTextField(w,Rect(5,350,100,20));
text.string = "JSCTextFeild";

knob = JKnob(w,Rect(5,400,25,25));
knob.value = 0.75;


com = JSCCompositeView(w,Rect(120,5,500,250));
com.background = Color.blue(alpha:0.3);
com.decorator = FlowLayout(com.bounds);

com2 = JSCCompositeView(w,Rect(150,280,400,170));
com2.background = Gradient(Color.white,Color.red);

ezslider = JEZSlider(com,300 @ 20,"EZSlider");

eznumber = JEZNumber(com,300 @ 20,"EZNumber");

listview = JSCListView(com,100 @ 20);
listview.items = [
"test1","test2","test3","test4"
];


statictext = JSCStaticText(com,Rect(160,300,100,20)).string_("static text");

nbox = JSCNumberBox(com,Rect(260,300,100,20));
nbox.value = 2;


multislider = JSCMultiSliderView(com,200 @ 100);
multislider.indexThumbSize_(200/8);


envview = JSCEnvelopeView( com2, Rect( 200, 300, 300, 140 ))
.drawLines_( true )
.selectionColor_( Color.red )
.resize_( 5 )
.thumbSize_( 5 )
.value_([[ 0.0, 0.1, 0.5, 1.0 ], [ 0.1, 1.0, 0.8, 0.0 ]]);


w.front;

)

汚いですが、このコードを実行すれば画像の様に表示されるはずです!
なおCompiz Fusionまたはberylを使用してる方は切った方が良いかと思います。僕の環境では上手く表示されない場合がありました。JSCWindowを大きくすれば表示される場合もあります。