SuperCollider を Emacs で使う(Scel)

概要

ここ最近、だいぶ久しぶりに SuperCollider や Max を再開し、過去のコードを眺めたり紐解いたりしている(昔は PowerPC だったし、Max/Msp 4 だった)。 今は OSC などアプリケーション間通信プロトコルも整備されているし、Processing や Ableton Max for Live など他のアプリケーションとの連携も容易になってきている。 自分にとっては手慣れた Python が FoxDot のような形で使えるようになってきているのも嬉しい。 何より、Python にも librosa などサウンドプロセッシングのライブラリがあるし、Machine Learning など広大な世界が広がっている。

このような背景で再度始めたわけですが、やはり手慣れたツールでやりたいので EmacsSupercollider を使う環境を準備しました。 その方法を備忘含め記します。

手順

  1. Scel をダウンロード(thanx!)
  2. sclang**.el を .emacs/site-lisp に配置
  3. HelpSource と sc を /Users/<ユーザー名>/Library/Application Support/SuperCollider/Extensions/scide_scel に配置
  4. 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

ちゃんとプロットもされます。

f:id:entre_temps:20210620104057p:plain
scel

最後に

コマンドはこれくらいあるので、ほぼ開発する上においては不自由しないでしょう。何より 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 や他のアプリケーションとの通信含め色々とトライしたいと思っています。