自分のスペック
- 銀行系SEな会社に所属してますがプログラム書く機会が少ないです
- 業務では以前にC言語、Java、PL/1等を書いてました。直近ではPHPやJS、HTMLをゴリゴリ書いてWebページ魔改造マンになってました
- 趣味でゲーム・シンセサイザー・メガデモ等のプログラム書いてます
- 趣味で使う言語はC・C++・C#・x86アセンブラ等。あとシェーダ言語各種
- 最近は作曲のためにSchemeやHaskellでプログラム書いてます
記事を書く経緯
- 以前Extemporeっていうライブコーディング環境触った記事を投稿したんだけど、Extempore自体が記述可能な文法としてSchemeに近い体系を採用しているみたい。で、「簡潔にデータを生成する書き方」みたいなのを色々試すことができて、作曲のアプローチとして有効なのではと思い始めてる。
- どうも昔からLispを作曲に使うというアプローチがあるみたいで、譜面生成もそうだしうまくいけばオーディオデータ作成等にも使えるんじゃないかと考え中。
- メガデモ(主に4K intro)でシーケンスデータ生成したりそれをそのまま使ったりでデータ縮められないかな?と考え中。(実際Lisp用コンパイラ作ってアセンブラ出力する事例もあるみたいだし)
- ゲームや自作ツールのスクリプトとしてLisp/Schemeを実装するというのも一つのアプローチでは?と思い始めてる。(インタプリタ自体の実装もそれほど行数なさそうだし)
- そもそもLisp/Scheme試そうとすると情報が数年前更新とかもザラだもんよ。(処理系がいくつもあるのは置いといて)
- 俺がWindowsメイン(MacやLinux系OS入れてるPCも持ってはいますけど、プログラム書くのもWindowsのPCが中心なので)
総じて「プログラム的な興味」と「作曲ツールとしてのLisp/Schemeへの興味」というのが一番の理由ですね。
資料
ググった結果とか自分で試した結果を貼っつけてます。
Lisp処理系
SBCL
http://www.sbcl.org/
今だとPortacleとかで用意するのが便利。
https://portacle.github.io/
あとRoswellも同じようにLisp環境を用意できる。個人的にはroswell便利。
https://github.com/roswell/roswell
OKI ISLisp
http://islisp.org/jp/OKIISLisp-jp.html
CLISP
https://clisp.sourceforge.io/
ClozureCL
https://ccl.clozure.com/
Fuel
最近これ使って遊んでます。
C#版だとコンパイラも実装されてるみたい。
https://github.com/mneuroth/fuel-lang
OpenMusic
http://repmus.ircam.fr/openmusic/home
Scheme処理系
TinyScheme(MSVCでコンパイル出来るバージョン)
ありがたいことに作ってる人がいたのでちょっと内容確認してるところ。
とりあえず自作プログラムへの組み込みは確認できた。
https://github.com/ignorabimus/tinyscheme
minischeme(MSVCでコンパイル出来るバージョン)
上記の作者と同様の対応をminischemeでも行っているので、
ありがたくソース読ませてもらおうかと。
https://github.com/ignorabimus/minischeme
Schemy(Microsoft製のScheme処理系。C#で実装されてる)
うちの環境だと.net frameworkの関係かSchemy.dllしかコンパイルできなかったので、別途組み込みプログラムを書く必要がありそう。
https://github.com/microsoft/schemy
ChickenScheme
Cプログラムにトランスレート可能
https://www.call-cc.org/
ChezScheme
最近これ使って遊んでます。元々商用なだけあって高機能。
https://github.com/cisco/ChezScheme
MIT-Scheme
http://groups.csail.mit.edu/mac/projects/scheme/
s7
これ自作プログラムへ組み込みしてみたんだけど、VCのコンパイラだと辛い部分があるのでどうしたものか。(色々書き換えたりオプション外したりして動いたことを確認したけど)
https://ccrma.stanford.edu/software/snd/snd/s7.html
20200909追記
Common Music(Grace)
http://commonmusic.sourceforge.net/
どうも上のs7を組み込んでるっぽい環境。
ソフトを起動すれば、Evalが可能な環境までが揃っているので、これ使ってしまうのが一番はやい気がしてる。
元々作曲用に用いられる環境のためか、MIDI出力にも対応している。
これとloopMIDIを使うとWindows環境でソフトシンセをライブコーディングで鳴らすことが可能になる。
番外?
Nyquist
Audacityに組み込まれてるらしい、オーディオ処理が可能なLisp処理系。
https://manual.audacityteam.org/man/nyquist.html#start
Ypsilon Scheme System
ピンボールゲームの作成で利用するらしいScheme処理系
http://www.littlewingpinball.com/doc/ja/ypsilon/index.html
参考資料
Extempore
Schemeベースらしい言語で作曲やシンセサイズ可能。
ちなみにグラフィックも出力可能。
https://extemporelang.github.io/
TidalCycles
こっちはHaskellを利用する作曲環境なんだけど、
譜面を効率的にまとめたりするのは同じアプローチかな、と。
https://tidalcycles.org/index.php/Welcome
Rose Shank by XZM & tAAt (2007)
どうもこのデモはLispベースの言語で実装して(バイトコードに変換してから?)専用のVM上で動かしたらしい。
https://jet.ro/visuals/4k-intros/
CommonLispMusic
https://ccrma.stanford.edu/software/clm/
Lispとコンピュータ音楽 Vol.1
https://booth.pm/ja/items/1575612
shigoto-lisp: はじめてLispを実装するときに 〜 パース編
https://qiita.com/t-sin/items/c961b8bba803a5d2fd4b
これ以降の記事も参考になる。
オーディオ・映像用プログラミング言語・Extemporeの紹介
自分の投稿です。
https://qiita.com/MachiaWorx/items/6d43749e91b8d1b2a639