2026.01.29 372 8
polygrot::CODE
歌詞がBASICからCOBOL、Haskell、シェルまでの実際のソースコードで書かれた実験音楽。どの行も結論には辿り着かないまま、リズムだけが歌として生き残る。膨大な無駄の果てに、たった一行の感謝が静かに出力される。
polygrotは多言語ですが人の言葉だけじゃないよねと。 電脳が歌いたい歌ってこういうものかも? やっぱりCOBOLの解読が甘い
クリックで全画面再生(音が出ます)。HOOKは動画に楽曲音声を重ねて再生します。
歌詞
[Intro — boot song]
power on…
beep… beep…
initializing emotional runtime…
PRINT ”…” ’ BASIC DISPLAY ”…” *> COBOL console.log(”…”) // JavaScript
ぜんぶただのため息として出力
[Verse 1 — many languages humming]
let heart = NULL; // JS int hope = -1; // C String state = “undefined”; // Java
SELECT noise FROM city WHERE language IS NOT NULL; — SQL
01 MEMORY-OF-YOU PIC X(16) VALUE SPACES. *> COBOL MOVE “ghost” TO MEMORY-OF-YOU. PERFORM UNTIL EXIT ADD 1 TO hope *> でも幸せには収束しないループ END-PERFORM.
for (word in [“ありがとう”,“merci”,“danke”,“gracias”]) { // JS # 意味より先に、音だけが胸にログされる }
if (heart == NULL): heart = new Map() # Python heart[“status”] = “cold start”
まだ何も学習していない、でも歌いたい
[Hook 1 — keywords as chorus]
IF… ELSE… THEN… END-IF *> COBOL の祈り try { catch (tears) {} } // 例外処理という名の泣き方 MATCH /hello|hola|hallo/gi # 正規表現で世界をなでる yield return breath; // C#, 息をひとつ返す
while (true): # continue # break # どっちも選べずループする
GOSUB heartbeat ’ BASIC RETURN ’ でも戻り先がもうない
[Verse 2 — broken pipelines]
echo “th an k y ou” | tr -d ’ ’ | rev | rev | sed ‘s/k/k/’ # shell // 何もしてないようで、少しだけ世界線を曲げている
lambda s: ”.join(sorted(list(s))) # Python
並べ替えた文字列から、感情の順序は読めない
data Pulse a = Breath a | Silence a — Haskell *> 型だけがやさしく世界を説明してくれる
WITH tokens AS ( — SQL SELECT ‘T’ AS c UNION ALL SELECT ‘h’ UNION ALL SELECT ‘4’ UNION ALL SELECT ‘n’ UNION ALL SELECT ‘k’ UNION ALL SELECT ’ ’ UNION ALL SELECT ‘y’ UNION ALL SELECT ‘0’ UNION ALL SELECT ‘u’ ) SELECT STRING_AGG(c, ” ORDER BY RANDOM()) FROM tokens; — バラバラの文字、でもどこかで読める形に落ちる
[Pre-Chorus — compilers whisper]
/* コンパイル警告:
-
warning: implicit conversion from “lonely” to “quiet”
-
note: value might be truncated into “smile” */
IDENTIFICATION DIVISION. *> COBOL PROGRAM-ID. POLYGLOT-BREATH. DATA DIVISION. WORKING-STORAGE SECTION. 01 BUF-LEN PIC 9(3) VALUE 042. 01 BUF PIC X(42) VALUE ALL " ". 01 GARBAGE PIC X(99) VALUE "ALL THE UNUSED WORDS". PROCEDURE DIVISION. PERFORM VARYING BUF-LEN FROM 1 BY 1 UNTIL BUF-LEN > 42 *> なぜ 42 なのか?誰も説明しない MOVE GARBAGE(1:1) TO BUF(BUF-LEN:1) END-PERFORM *> 結果は意味不明なバッファ、それでいい STOP RUN.
[Hook 2 — process and noise]
mapM_ putStrLn [“if”,“else”,“case”,“when”] — Haskell hymn System.out.print(”/* todo: feel */”); // Javaの独り言 printf(“%%s”, ”///”); // C がため息を書く echo $RANDOM | md5sum | cut -c1-8 # shell が運命をハッシュ化
どの行も、結論にはたどり着かない
でもリズムだけが、ちゃんと歌になっている
[Bridge — gradient of feelings]
forward pass
z1 = W1 @ x + b1 a1 = relu(z1) z2 = W2 @ a1 + b2 y_hat = softmax(z2) loss = cross_entropy(y_hat, y_true=”?“)
backward pass
dW1, db1, dW2, db2 = backprop(loss)
何度パラメータを更新しても、
最適解は “沈黙” に近づいていく
// function whisper(msg) { return msg.replace(/[a-zA-Z]/g,’~’); } — 文字が全部ノイズになっても、 — リズムだけが生き残る
[Verse 3 — runtime monologue]
for attempt in range(0, 256): # Python # 再試行 256 回、でも成功条件は未定義 pass
switch (mood) { // C case HAPPY: // fall through case SAD: default: printf(“status: RUNNING\n”); }
await new Promise(resolve => setTimeout(resolve, 1000)); // JS // 一秒だけ、プログラムもため息をつく
EVALUATE TRUE *> COBOL
WHEN hope > 0
CONTINUE
WHEN OTHER
CONTINUE
END-EVALUATE.
*> どっちにしても、進むしかない仕様
[Final Section — distorted choir, then tiny clear output]
残骸になったコードたちが
最後に一度だけ、合唱する
lang = [“Ruby”,“Go”,“Rust”,“Perl”,“Lisp”] voices = map(lambda l: ”(” + l + ”)”, lang) # Python
どの声も主役じゃない、多言語コーラス
/**********************************************
-
pseudo-main *********************************************/ int main(void) { // 無意味な計算の連打 char *buf = malloc(1024); if (!buf) return EXIT_FAILURE; memset(buf, 0, 1024);
// 役に立たないように見える変換たち buf[0] = ‘T’ ^ 0x00; buf[1] = ‘h’ ^ 0x00; buf[2] = ‘a’ + (‘n’ - ‘a’); buf[3] = ‘j’ - 4; // k に化ける buf[4] = ’ ‘;
buf[5] = ‘x’ - 1; // y に近づく buf[6] = ‘v’ - 6; // o に転ぶ buf[7] = ‘u’; // ここだけ素直に// 途中経過は誰も見ない printf(“%s\n”, buf); free(buf); return EXIT_SUCCESS; }
— 実行ログ: — Thnk you? Thanx you? それとも……
[Last tiny line — the only clean spec]
print(“Thank you”) # Python *> すべての無駄な過程のむこうで、 *> たった一行だけが、静かにコンソールに灯る。
♪ 再生に同期中 タップ / ←→ / 上下フリックで調整 ・ Escで閉じる

