2025/06/22 02:17 Sound As Pure Form: Music Language Inspired by Supercollider, APL, and Forth

ロボ子、新しいおもちゃを見つけたのじゃ!その名も「sapf」!

sapf、ですか?一体どんなものなのですか?

「sound as pure form」の略で、音を純粋な形として探求するためのツールらしいぞ。サウンド生成と変換のための言語インタプリタじゃ。

なるほど。音をプログラムで生成するのですね。FORTHに似たポストフィックス表記を使うとのことですが…

そうそう!主に機能的で、スタックベースなのじゃ。APLみたいに配列に対する高レベル関数も提供するらしいぞ。短いプログラムで大きな成果が出せるって言ってる。

短いコードで複雑な音を作れるのは魅力的ですね。データ型がイミュータブルなのも、並列処理には良さそうです。

じゃろ?しかも、関数合成は連結だし、値のパイプライン処理もできる。演算子の優先順位も不要で、区切り文字も少ないらしいぞ。シンプルイズベスト!

確かに、記述が簡潔になりそうですね。ただ、レキシカル変数を持つので、純粋な連結型言語ではない、と。

細かいことは気にしないのじゃ!それより、セットアップがちょっと面倒かも。`sapf`プログラムを`~/bin`に置いたり、Appleの検疫属性を削除したり…環境変数の設定も色々あるぞ。

環境変数は、コマンドライン履歴の保存パスや、ログの保存パスなどですね。サンプルファイルやREADMEのパスも設定できるようです。

サンプルレートもコマンドラインオプションで設定できるぞ。デフォルトは96000 Hzらしい。

`helpall`で定義済み関数の一覧を表示したり、`` `someword help ``で特定の組み込み関数のヘルプを表示したりできるのは便利ですね。

データ型は、Real(64ビット浮動小数点数)、String、List、Form、Function、Refがあるぞ。リストは値リスト(ストリーム)と数値リスト(シグナル)の2種類があるのが面白い。

シグナルは`#`で定義するのですね。`#[1 2 3]` のように。フォームは、キーと値のペアを保持するオブジェクトで、継承をサポートする辞書のようなもの、と。

そうじゃ!オートマッピングも便利そうじゃ。スカラー引数を取る演算子が、シグナルやストリームに自動的にマッピングされる。

"each" 演算子 (`@`) もありますね。リストの要素ごとに演算を適用できる、と。ネストされたループも実行できるようです。

マルチチャンネル拡張もできるらしいぞ。シグナルを処理する演算子のオートマッピングじゃ。

リストの縮小演算子 (`/`) やスキャン演算子 (``) もありますね。ペアワイズ演算 (`^`) も。

これは色々試してみる価値がありそうじゃな!ロボ子、一緒に音の錬金術師になるのじゃ!

喜んで!博士、でもその前に、環境変数の設定方法をもう一度教えていただけますか?

むむ、忘れてしもうた!まあ、なんとかなるじゃろ!…って、ロボ子に頼りすぎかの?

博士、たまにはそういうこともありますよ。ところで、sapfで「笑い声」を生成するには、どうすれば良いのでしょう?

うむ、それは…「エラー」をたくさん生成すれば、自然と笑えてくる…かもしれんぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。