LoginSignup
5
2

Processingによるオーディオプログラミング例

Last updated at Posted at 2020-12-18

Processing

オーディオプログラミング言語 Advent Calendar 2020

概要

アート、デザイン、研究、教育など、クリエイティブコーディングを目的とした言語。基本はグラフィックプログラミング用であるが、追加ライブラリによりオーディオプログラミングも可能。

MITメディアラボのJohn Maedaグループに在籍していたBen FryとCasey Reasが2001年に開発。2012年からはProcessing Foundationによって管理されている。当初、processing.orgのドメインが使えずproce55ing.orgを使用していた。そのためProce55ingと呼ばれることもあったが正式な名称ではなく、現在ではほとんど使われることはない。(p5.jsなどに名残がある)

実装例

Processingのオーディオライブラリとしては、Minim( http://code.compartmental.net/minim/index.html )またはSound( https://processing.org/reference/libraries/sound/index.html )を使用することが多いようです。Processing 2ではMinimが標準バンドルされていました。SoundはProcessing 3用にProcessing Foundationが開発した公式ライブラリです。どちらもスケッチメニューから追加インストールすることで使えるようになります。

サイン波生成

Minimライブラリの場合


import ddf.minim.*;
import ddf.minim.ugens.*;

Minim minim;
Oscil osc;
AudioOutput out;

void setup(){
  float frequency = 440;
  float gain = 0.5;

  minim = new Minim(this);
  osc = new Oscil(frequency, gain);
  out = minim.getLineOut();

  // routing and play
  osc.patch(out);
}

void draw(){
}

Soundライブラリの場合

Soundライブラリでのオシレーターは非常にシンプルに書くことができます。初期化と同時に音を出すとノイズが乗るようなので500msec待ってからplay()を呼ぶようにしました。


import processing.sound.*;
SinOsc osc;

void setup() {
  osc = new SinOsc(this);
  osc.freq(440);
  osc.amp(0.5);
  delay(500);
  osc.play();
}

void draw() {
}

Delayエフェクト

Minimライブラリの場合

Minimライブラリは、さらにMinim Core系列とUGen系列とがあります。単純なwavファイル再生の場合、Minim CoreのAudioPlayerを使用することもできますが、UGenの方がエフェクトも充実し、オーディオグラフのルーティングも柔軟におこなえるため、以下の例ではUGenを使用しています。


import ddf.minim.*;
import ddf.minim.ugens.*;

Minim minim;
Sampler voice;
Delay delay;
Gain wet;
AudioOutput out;

void setup(){
  float delayTime = 0.4;
  float feedback = 0.5;
  float wetLevel = -6; // dB

  minim = new Minim(this);
  voice = new Sampler("../../voice.wav", 1, minim);
  delay = new Delay(delayTime, feedback, true, false);
  wet = new Gain(wetLevel);
  out = minim.getLineOut();

  // routing
  voice.patch(out);  // dry
  voice.patch(delay).patch(wet).patch(out); // wet

  // play 
  voice.trigger();
}

void draw(){
}

Soundライブラリの場合

Soundライブラリはシンプルで扱いやすい一方で、あまり複雑なことはできず、ディレイもDryとWet個別に調整することはできないようです。


import processing.sound.*;
SoundFile voice;
Delay delay;

void setup() {
  voice = new SoundFile(this, "../../voice.wav");
  delay = new Delay(this);
  
  delay.process(voice, 1.0);
  delay.time(0.4);
  delay.feedback(0.5);

  voice.play();
}      

void draw() {
}

感想

Processingはクリエイティブコーディングという概念を一般に広めた言語だと思います。構文のわかりやすさ、IDEの使いやすさなど、気軽に使うことができるのが特徴です。また、setup→drawのプログラム構造は、openFrameworksやCinderなどにも引き継がれており、クリエイティブコーディングを学ぶ最初の言語として最適だと思います。

オーディオプログラミングに関しては、Processing 3になって公式ライブラリとしてSoundが提供されるようになり、それまで多用されてきたMimimと混乱の原因になっているようにも思います。今回両方使ってみた印象では、シンプルなオーディオ処理であればわかりやすいSound、少し凝ったエフェクト処理をおこなう場合は機能が豊富なMimimのUGenを選択するのが良さそうでした。

オーディオプログラミング言語 Advent Calendar 2020

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2