風呂瀬 信五

音源を操り視覚を喚起する:p5.jsで探るサウンドアートの詩学

私たちのクリエイティブコーディングの旅は、しばしば静寂なキャンバスから始まります。ピクセルが色づき、形が生まれ、動きが与えられる。しかし、その視覚的な世界の向こう側に、まだ手つかずの広大な領域が横たわっているとしたらどうでしょう。それは、聴覚表現という次元です。p5.jsで描画することには慣れてきたけれど、作品に音という時間軸を織り込み、視覚と共鳴させることで、より深い体験を生み出すにはどうすればよいのか。この記事は、そんな問いを抱くあなたと共に、p5.sound ライブラリを使い、コードで音の風景を紡ぎ出すための第一歩を踏み出すための思索の記録です。

サウンドアートの呼び声:コードと音の出会い

クリエイティブコーディングの文脈において、音は単なる背景音楽や効果音以上の存在となり得ます。それは、作品の構造そのものであり、時間と共に変化するパラメータであり、鑑賞者の感情を直接揺さぶるメディアです。Processingが視覚表現のスケッチを手軽にしたように、p5.jsはその精神をWebブラウザという普遍的なプラットフォームへと移植しました。そして、そのエコシステムの一部である p5.sound ライブラリは、複雑なWeb Audio APIを優しく包み込み、アーティストやデザイナーが音の本質的な探求に集中できる環境を提供してくれます。

静的な画像が一瞬の光景を切り取るのに対し、音は始まりと終わりを持つ時間の流れそのものです。コードによって音を生成し、操作することは、この時間という不可視の素材を彫刻する行為に他なりません。画面上の円が脈動する、その背景で鳴っているサイン波は、単なる付け合わせではありません。それは円の心臓の鼓動であり、作品に生命のリズムを与えているのです。p5.jsとサウンドアートの出会いは、私たちに視覚と聴覚の境界を溶かし、より統合された表現を創造する可能性を呼びかけています。

p5.soundライブラリの豊かなパレット:音を「見る」ためのツール

p5.sound を探求することは、音を生成し、再生し、そして分析するための、豊かで直感的なツールセットを手に入れることを意味します。これらのツールは、音という非物質的な現象を、コードを通して理解し、操作可能なデータへと変換するための架け橋となります。

最も基本的な機能は、音ファイルを再生することです。loadSound() でオーディオファイルを非同期に読み込み、コールバック関数内で play() を呼び出すことで、スケッチにサウンドトラックを加えることができます。しかし、p5.sound の真の力は、音をリアルタイムで生成・分析する能力にあります。

例えば、p5.Oscillator は基本的な波形(サイン波、三角波、ノコギリ波など)を生成する発振器です。以下のコードは、シンプルなサイン波を生成し、その周波数をマウスのX座標で、振幅(音量)をY座標でコントロールする例です。

let osc;

function setup() {
  createCanvas(windowWidth, windowHeight);
  osc = new p5.Oscillator('sine');
}

function draw() {
  background(220);
  // 周波数をマウスX座標にマッピング (100Hzから1000Hzの範囲)
  let freq = map(mouseX, 0, width, 100, 1000);
  osc.freq(freq);

  // 振幅をマウスY座標にマッピング (0から1の範囲)
  let amp = map(mouseY, 0, height, 1, 0);
  osc.amp(amp);
}

// ユーザーのインタラクションで音を開始する
function mousePressed() {
  osc.start();
}

さらに強力なのが、音を分析するツールです。p5.FFT (高速フーリエ変換) は、音を周波数スペクトラムに分解し、どの周波数帯域にどれだけのエネルギーが含まれているかを配列として返します。これは、音を「見る」ための基本的な手法です。fft.analyze() を呼び出すことで、その瞬間の音の周波数構成をデータとして取得し、それを元に視覚表現を生成できます。これらのAPIは、音を目に見えない波から、操作可能な数値の集合へと翻訳してくれる魔法の辞書なのです。

聴覚と視覚のシンクロニシティ:コードが描く共振の風景

p5.sound の最も魅力的な側面は、聴覚情報と視覚情報をリアルタイムで結びつけ、共感覚的な体験を創出できる点にあります。音の持つダイナミクスを、そのままキャンバス上の形の変化に変換する。それは、音と光が互いに応答し合う、生命的なシステムの構築に似ています。

p5.Amplitude は、音量の変化を簡単に取得できるオブジェクトです。getLevel() メソッドは、現在の音量を 0 から 1.0 の範囲の数値で返します。この数値を、円の直径や、色の明るさ、パーティクルの速度といった視覚的なパラメータに直接結びつけることができます。

let sound, amp;

function preload() {
  sound = loadSound('assets/beat.mp3');
}

function setup() {
  createCanvas(400, 400);
  amp = new p5.Amplitude();
  sound.loop();
}

function draw() {
  background(20);
  let level = amp.getLevel();
  let diameter = map(level, 0, 1, 50, 400);

  fill(255, 50, 50);
  noStroke();
  ellipse(width / 2, height / 2, diameter, diameter);
}

さらに一歩進んで、p5.FFT を使えば、より繊細な音の質感を視覚化できます。fft.analyze() が返すスペクトラムデータは、低音域から高音域までのエネルギー分布を示す配列です。この配列の各要素を、画面に並べた長方形の高さに対応させれば、クラシックなオーディオビジュアライザーが完成します。低音が響けば左側のバーが伸び、高音のシンバルが鳴れば右側のバーが反応する。こうして、音の「色彩」や「テクスチャ」が、私たちの目の前に風景として立ち現れるのです。この聴覚と視覚のシンクロニシティは、作品に深い没入感と、論理だけでは説明できない情動的な説得力を与えます。

リアルタイムインタラクションと音:生成される経験の深層

作品が鑑賞者の存在に応答する時、それは単なる「鑑賞」から「体験」へと深化します。リアルタイムインタラクション は、p5.jsとサウンドアートが交差する領域において、極めて重要な役割を果たします。鑑賞者のマウスの動き、キーボードの打鍵、さらにはマイクから入力される声そのものが、生成される音響と映像を変化させるのです。

p5.AudioIn オブジェクトを使えば、ユーザーのマイク入力を簡単に扱うことができます。マイクからの入力レベルを取得し、それをトリガーにして新しいビジュアル要素を生成したり、既存の要素の振る舞いを変化させたりできます。例えば、静かにしている間は画面が穏やかでも、声を出すとその音量に応じて画面に波紋が広がる、といった作品が考えられます。この時、鑑賞者はもはや受動的な存在ではありません。自らの声、呼吸、存在そのものが作品を構成する一部となり、作品との間に一回性の対話が生まれます。

let mic;

function setup() {
  createCanvas(windowWidth, windowHeight);
  mic = new p5.AudioIn();
  mic.start();
}

function draw() {
  background(0);
  let vol = mic.getLevel();
  
  // 声の大きさに応じて円が広がる
  noFill();
  stroke(255);
  strokeWeight(2);
  ellipse(width / 2, height / 2, vol * width, vol * width);
}

このようなインタラクティブなシステムにおいて、コードは決定論的な指示書ではなく、可能性の場を定義するルールセットとして機能します。何が起こるかを完全に予測することはできず、鑑賞者とシステムとの相互作用の中で、その瞬間にしか存在し得ないユニークな経験が生成されます。これは、完成されたオブジェクトを提示する芸術から、プロセスと関係性を主題とする芸術への移行を示唆しています。

音響風景の詩学:p5.jsが拓くサウンドインスタレーションの可能性

p5.jsを用いたサウンドアートの探求は、Webブラウザの四角い窓に留まりません。その可能性は物理空間へと拡張され、音響インスタレーションという形を取ることもあります。Webという分散ネットワークの特性を活かせば、複数のスマートフォンやPCが同期して異なる音パートを再生し、空間全体を一つの音響風景 (Soundscape) に変える、といった試みも可能です。

また、Web Serial APIなどの技術を用いれば(ブラウザの対応状況によりますが)、p5.jsのスケッチをArduinoのような物理的なセンサーと接続することも視野に入ります。部屋の光量、人の動き、温度の変化といった環境データをリアルタイムで取得し、それに応じて変化するジェネラティブなサウンドスケープを生成する。それは、データと環境と人間が相互に作用し合う、生きた生態系のようなアート作品です。

フィールドレコーディングで集めた街の雑踏や自然の音を素材として用い、その音響特性を p5.FFT で分析し、土地の記憶を抽象的なビジュアルとして再構成する作品も考えられます。p5.jsは、私たちが日常の中で聞き流している音の豊かさに再び光を当て、その詩学を発見するための強力な探査機となるのです。

終わりなき響きの中で:創造の余白を耕す

p5.jsと p5.sound を用いて音の風景を紡ぐ旅は、明確な答えや完成形にたどり着くことだけを目的とするものではありません。むしろ、その過程自体が、コードと音、論理と感性、視覚と聴覚の関係性をめぐる、豊かで内省的な探求の場となります。オシレーターの周波数を一つ変えるだけで、画面の円の動きと響きがどのように変化するかに耳を澄ませる。その小さな気づきの積み重ねが、私たち自身の知覚を研ぎ澄まし、新たな表現の語彙を授けてくれます。

ここに示したコードやアイデアは、広大な可能性の海へと漕ぎ出すための、ささやかな羅針盤に過ぎません。p5.sound は、単なるライブラリではなく、音という不可思議な現象を通じて世界と対話し、自分だけの響きを見つけ出すための思考のフレームワークです。どうか、あなたのエディタを開き、静かにコードを書き始めてみてください。キャンバスの静寂が破られ、最初の音が響く瞬間、そこからあなただけの、終わりなき創造の旅が始まるのです。

関連記事