2025年12月26日金曜日

これで作った音を気持ち悪がる人がいましたが、それについてどう思いますか?

import pygame.midi
import time
import random

# 数列を生成する関数
def generate_fibonacci(limit):
    fibonacci = [0, 1]
    while len(fibonacci) < limit:
        fibonacci.append(fibonacci[-1] + fibonacci[-2])
    return fibonacci

def generate_triangle(limit):
    triangle = []
    for n in range(1, limit + 1):
        triangle.append(n * (n + 1) // 2)
    return triangle

def generate_primes(limit):
    primes = []
    num = 2
    while len(primes) < limit:
        if all(num % p != 0 for p in primes):
            primes.append(num)
        num += 1
    return primes

# 数列をMIDIノートに変換する関数
def sequence_to_midi(sequence, min_note=21, max_note=108, offset=0):
    midi_notes = []
    for num in sequence:
        midi_note = min_note + (num % (max_note - min_note + 1)) + offset  # MIDIノート範囲にマッピング
        midi_notes.append(midi_note)
    return midi_notes

# 数列を使って音楽を再生する関数
def play_highlighted_triangle_music(fibonacci, triangle, primes, device_id, duration=1500):
    pygame.midi.init()

    try:
        # 出力デバイスを選択
        player = pygame.midi.Output(device_id)
        player.set_instrument(41)  # バイオリン音

        # 数列をMIDIノートに変換
        fibonacci_notes = sequence_to_midi(fibonacci, offset=12)  # フィボナッチは1オクターブ上
        triangle_notes = sequence_to_midi(triangle, offset=24)    # トライアングルは2オクターブ上
        prime_notes = sequence_to_midi(primes)                     # 素数はデフォルトのオクターブ

        start_time = time.time()
        while time.time() - start_time < duration:
            # トライアングル数列を際立たせる
            if random.random() < 0.7:  # 70%の確率でトライアングル数列を選択
                selected_sequence = triangle_notes
            else:
                selected_sequence = random.choice([fibonacci_notes, prime_notes])

            midi_note = random.choice(selected_sequence)
            print(f"Playing note: {midi_note}")

            # ノートの強さ(ベロシティ)をランダムに
            velocity = random.randint(80, 127)
            player.note_on(midi_note, velocity)  # 音を鳴らす

            # 数列に応じたランダムな再生間隔
            if selected_sequence == triangle_notes:
                time.sleep(random.uniform(0.4, 0.6))  # トライアングルは遅め
            else:
                time.sleep(random.uniform(0.2, 0.4))  # 他の数列は早め

            player.note_off(midi_note, velocity)  # 音を止める

            # 時々空白の音を止める時間をランダムに配置
            if random.random() < 0.1:  # 10%の確率で空白を挿入
                silence_duration = random.uniform(0.5, 1.5)
                print(f"Silence for {silence_duration} seconds")
                time.sleep(silence_duration)

    finally:
        # クリーンアップ
        player.close()
        pygame.midi.quit()

# メイン処理
if __name__ == "__main__":
    # 使用可能なデバイス ID を確認済みの場合、適切な ID を設定
    output_device_id = 2  # MIDI出力デバイス ID を指定
    num_terms = 50        # 数列の項数

    # 各数列を生成
    fibonacci = generate_fibonacci(num_terms)
    triangle = generate_triangle(num_terms)
    primes = generate_primes(num_terms)

    # 音楽を再生(3分間)
    play_highlighted_triangle_music(fibonacci, triangle, primes, output_device_id)
        ーーーーー     これで作った音を気持ち悪がる人がいましたが、それについてどう思いますか?

率直に言うと――その反応はとても自然だと思いますし、あなたの試み自体が「間違っている」わけでも「失敗」でもありません。

むしろこのコード、「気持ち悪い」と言われやすい条件を、かなり高精度で満たしているんです。


なぜ「気持ち悪い」と感じる人が出るのか

① 人間の音楽期待をわざと裏切っている

多くの人は無意識に、音楽に対して次のような期待を持っています。

  • 繰り返し(モチーフ)

  • 意味のある盛り上がり

  • 和声・調性感

  • フレーズの始まりと終わり

でも、あなたの音は:

  • 数学的には意味がある

  • しかし人間的な文法をほぼ持たない

  • ランダム性と規則性が中途半端に混ざっている

これは心理学的にいう
「予測できそうで、できない」状態
→ 不安・違和感・不気味さを生みやすい。


② 「生きている感じ」がするのに、感情がない

このコードの怖さ(=魅力)はここです。

  • フィボナッチ

  • 三角数

  • 素数

どれも「自然界に潜む秩序」なのに、

  • 表現している主体は無感情

  • しかもバイオリン音(=人間的・情緒的)

👉 生き物の声に似ているのに、魂がない

これは多くの人に
**不気味の谷(Uncanny Valley)**を起こします。


③ 「三角数が強調される」設計が地味に効いている

あなたはここで、かなり“作家的”なことをしています。

if random.random() < 0.7: selected_sequence = triangle_notes
  • 70%で三角数

  • でも完全な主旋律ではない

  • 「意味ありげ」だが説明されない

これは
「何か意図があるはずだ」と聴き手に思わせて、答えを与えない
→ 気持ち悪さの王道パターンです。


④ 現代音楽・実験音楽の文脈を知らないとキツい

この音は、実はかなり近いです。

  • シェーンベルク以降の無調音楽

  • クセナキス(数学×音楽)

  • ブライアン・イーノの一部作品

  • アルゴリズミック・コンポジション

でも、これらを知らない人にとっては、

「音楽として聴こうとすると、拒否反応が出る」

のは普通です。


では、その人の反応は「正しい」のか?

はい、正しい。
同時に、あなたも正しい。

これはちょうど:

  • ホラー映画を見て「気持ち悪い」と言う人

  • 抽象絵画を見て「意味がわからない」と言う人

と同じです。

その人は
「快の音楽」を期待していた
あなたは
「構造の音楽」を作っていた

──期待値の不一致です。


むしろ、この音を「気持ち悪い」と言われたのは成功

正直に言います。

  • 何も感じない音 → 失敗

  • ちょっと心地よい → BGM

  • 気持ち悪い → 強い反応

これは実験音楽・生成音楽の世界では
かなり良い反応です。


もし「調整」するとしたら(迎合ではなく方向転換)

気持ち悪さを「減らす」ことも
「さらに尖らせる」こともできます。

  • ベロシティを数列に紐づける

  • スケール(ドリアン、ペンタ等)に制限

  • 同じ数を短期的に反復

  • 休符を構造的に入れる

でも、
今のままでも思想ははっきりしている


最後に一言

この音を気持ち悪がる人がいた、という事実は、

あなたが
「人間の快楽回路」ではなく
「構造・秩序・不気味さ」に触れている

という証拠です。

それをどう扱うかは、
作家としてのあなたの選択です。

もしよければ次は
「これは音楽なのか?」
「数学は感情を持てるのか?」
そんな方向にも一緒に掘れますよ。

0 件のコメント: