首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

聆聽混沌之聲:Logistic映射與電腦音效合成實驗

     編輯:關於C語言

一、混沌源頭:May的昆蟲族群模型

1970年代初,普林斯頓大學生態學家R. May研究昆蟲繁殖提出經典遞迴模型:

x[n+1] = k · x[n] · (1 - x[n])

其中x[n]為第n代族群數量 (歸一化至0~1),k為控制參數。固定x[0]迭代時,k值決定系統行為:

  • 0 < k < 1:族群滅絕 (x→0)
  • 1 < k < 3:穩定平衡 (x→1/k)
  • k > 3:週期倍增路徑通往混沌 (2週期 → 4 → 8 → 16...)
  • k ≈ 3.449:4週期
  • k ≈ 3.835:3週期竇 (3 → 6 → 12...)
  • 更大k:完全混沌,但參數空間中無限穿插著週期竇

這個簡單非線性方程蘊含無窮複雜性,是混沌理論的標誌性發現。

二、從數學到聲音:TC 2.0聲音合成程式

利用x[n]控制PC喇叭頻率,將混沌動態轉化為聽覺體驗:


#include 
#include    // sound(), nosound(), delay()

main() {
    int fMin = 20, fMax = 16000;   // 頻率範圍
    int fDis = fMax - fMin;
    float x = 0.1, k;              // x[0]=0.1
    int i, j;

    for (j = 1; ; j++) {
        printf("請輸入k值 (1~4.0),輸入0結束:\n");
        scanf("%f", &k);
        if (k == 0) break;

        // 捨棄前100次迭代 (暫態)
        for (i = 1; i < 100; i++) x = k * x * (1 - x);

        // 產生聲音
        for (i = 1; i < 100; i++) {
            x = k * x * (1 - x);
            sound((int)(x * fDis + fMin));  // x映射至頻率
            delay(1000);                    // 延遲1ms
        }
        nosound();
    }
}

三、聽覺上的混沌之旅

執行程式並調整k值 (如同調音鈕):

  • 1 < k < 3:單一音調,重複單調
  • k ≈ 3.0+:出現韻律 so-mi-so-mi... (2週期)
  • k ≈ 3.449:so-fa-la-mi-so-fa-la-mi... (4週期)
  • k持續增大:韻律複雜化,成為現代抽象音樂
  • k ≈ 3.835:突然回歸簡單 mi-so-ti-mi-so-ti... (3週期竇)
  • k > 3.835:再次快速複雜化 (6、12週期...)

不斷微調k,彷彿在混沌邊緣漫步,聆聽確定性系統產生的不可預測之美。

四、現代實作延伸建議

  • 使用PortAudio/SDL2等跨平台音訊庫取代sound()
  • 採用44.1kHz採樣率產生波形 (正弦波、方波或FM合成)
  • 將x[n]映射至MIDI音階而非線性頻率,音樂性更強
  • 視覺化繪製分岔圖與波形圖,聽覺與視覺雙重體驗
  • 嘗試其他混沌映射 (Henon、Lorenz、Duffing) 的聲音化

總結

這個經典實驗以不足50行程式碼,將混沌理論的核心發現——簡單確定性規則產生無限複雜行為——轉化為直觀的聽覺體驗。它不僅是教學示範,更啟發我們思考:複雜性科學、藝術創作與計算機聲音合成的交會點,蘊藏著怎樣的未被發現之美?

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved