SuperCollider を Emacs で使う(Scel)
概要
ここ最近、だいぶ久しぶりに SuperCollider や Max を再開し、過去のコードを眺めたり紐解いたりしている(昔は PowerPC だったし、Max/Msp 4 だった)。 今は OSC などアプリケーション間通信プロトコルも整備されているし、Processing や Ableton Max for Live など他のアプリケーションとの連携も容易になってきている。 自分にとっては手慣れた Python が FoxDot のような形で使えるようになってきているのも嬉しい。 何より、Python にも librosa などサウンドプロセッシングのライブラリがあるし、Machine Learning など広大な世界が広がっている。
このような背景で再度始めたわけですが、やはり手慣れたツールでやりたいので Emacs で Supercollider を使う環境を準備しました。 その方法を備忘含め記します。
手順
- Scel をダウンロード(thanx!)
- sclang**.el を .emacs/site-lisp に配置
- HelpSource と sc を /Users/<ユーザー名>/Library/Application Support/SuperCollider/Extensions/scide_scel に配置
- init.el に path と require を追加
(dolist (dir (list "/sbin" "/usr/sbin" ... "~/Applications/SuperCollider/SuperCollider.app/Contents/MacOS" )) (require 'sclang)
私はこれにショートカットを足しています。
(defun my-sclang-mode-init () (local-set-key "\C-c\C-b" 'sclang-server-boot) ) (add-hook 'sclang-mode-hook 'my-sclang-mode-init)
参考までに最後にデフォルトのキーマップやコマンドを載せておきます。
使い方
Supercollider は起動しておく必要はありません。 Emacs から sclang-start で起動します。
M-x sclang-start
compiling class library... Found 850 primitives. Compiling directory '/Users/<ユーザー名>/Applications/SuperCollider/SuperCollider.app/Contents/Resources/SCClassLibrary' Compiling directory '/Users/<ユーザー名>/Library/Application Support/SuperCollider/Extensions' Compiling directory '/Users/<ユーザー名>/Library/Application Support/SuperCollider/downloaded-quarks/BatLib' Compiling directory '/Users/<ユーザー名>/Library/Application Support/SuperCollider/downloaded-quarks/FoxDot' numentries = 1272073 / 19323360 = 0.066 5751 method selectors, 3360 classes method table size 20776064 bytes, big table size 154586880 Number of Symbols 14863 Byte Code Size 438094 compiled 563 files in 1.63 seconds compile done localhost : setting clientID to 0. internal : setting clientID to 0. Emacs: Initializing lisp interface. Class tree inited in 0.02 seconds *** Welcome to SuperCollider 3.11.0. *** For help type C-c C-y. Emacs: Index help topics in 0.445 seconds Emacs: Built symbol table in 0.0247 seconds
忘れずに server を boot して
M-x sclang-server-boot
server 'localhost' unresponsive, rebooting ... '/quit' message sent to server 'localhost'. Booting server 'localhost' on address 127.0.0.1:57110. Found 0 LADSPA plugins Number of Devices: 5 0 : "外部" 1 : "外部" 2 : "MacBook Airの" 3 : "MacBook Airのス" 4 : "ZoomAudioD" "外部" Input Device Streams: 1 0 channels 1 "外部" Output Device Streams: 1 0 channels 2 SC_AudioDriver: sample rate = 44100.000000, driver's block size = 512 SuperCollider 3 server ready. Requested notification messages from server 'localhost' localhost: server process's maxLogins (1) matches with my options. localhost: keeping clientID (0) as confirmed by server process. Shared memory server interface initialized
これで準備は OK です。 試しに SuperCollider Workspace (scratch のようなインタラクション用のサンドボックス) にこれを打ち込み、実行します。
{ LFSaw.ar([160, 160 + 12.midicps], 0, 0.2) }.plot(0.1);
M-x sclang-eval-region-or-line
ちゃんとプロットもされます。
最後に
コマンドはこれくらいあるので、ほぼ開発する上においては不自由しないでしょう。何より Emacs が使えるのが私は嬉しいと思っています。いつもながら、開発してくれている方々に感謝です。
Possible completions are: sclang-beginning-of-defun sclang-browser-beginning-of-link sclang-browser-follow-link sclang-browser-mode sclang-browser-mouse-follow-link sclang-browser-next-link sclang-browser-previous-link sclang-browser-quit sclang-class-tree sclang-clear-post-buffer sclang-complete-symbol sclang-customize sclang-dump-full-interface sclang-dump-interface sclang-edit-dev-source sclang-edit-help-code sclang-edit-help-file sclang-edit-html-help-file sclang-electric-brace sclang-electric-slash sclang-electric-star sclang-end-of-defun sclang-eval-defun sclang-eval-document sclang-eval-expression sclang-eval-line sclang-eval-region sclang-eval-region-or-line sclang-find-definitions sclang-find-help sclang-find-help-in-gui sclang-find-primitive sclang-find-references sclang-goto-help-browser sclang-help-minor-mode sclang-help-mode sclang-help-mode-beginning-of-defun sclang-help-mode-end-of-defun sclang-index-help-topics sclang-kill sclang-main-run sclang-main-stop sclang-minor-mode sclang-mode sclang-mouse-next-server sclang-next-server sclang-open-help-gui sclang-pop-definition-mark sclang-recompile sclang-server-boot sclang-server-display-default sclang-server-dump-osc sclang-server-free-all sclang-server-make-default sclang-server-pause-recording sclang-server-prepare-for-record sclang-server-quit sclang-server-reboot sclang-server-record sclang-server-stop-recording sclang-set-server-latency sclang-show-method-args sclang-show-post-buffer sclang-show-server-latency sclang-show-server-panel sclang-start sclang-stop sclang-switch-to-workspace sclang-toggle-debug-command-handler sclang-update-server-info
勘を取り戻したら FoxDot や Python や他のアプリケーションとの通信含め色々とトライしたいと思っています。