SSAW08 後期第8回作品制作のヒントProcessing + Minim で音響を視覚化する2008年11月11日
本日の内容• 前半:制作のヒント、その1  • Processing と Minimを用いて、音響を視覚化してみる  • Processing 0149以降のLibraryの扱いかたの変更について• 後半:108スタジオ使用講習会 (矢坂先生)
Processin 0149以降の重要な変更点• Processing 0149以降から、重要な変更あり   • 参照:http://processing.org/download/revisions.txt• ライブラリの扱いが変更となった ...
Processin 0149以降の重要な変更点• Sketchフォルダの場所を確認する   • Pricessingのメニューから、" Sketch " > "Show Sketch Folder" を選択      • Sketchフォルダが...
Processin 0149以降の重要な変更点• また、この変更に伴い、ライブラリの対応が必要なため、多くのライブラ  リの互換性が無くなっている  • PGraphicsを使う全てのレンダラ• 外部のLibraryを使用している場合は、古いバ...
Minimを使ってみる• Minimとは  • Processing用に開発された、オーディオを扱うためのライブラリ  • 音を扱うための様々な機能をバンドル      • オーディオファイルの再生      • ID3 (オーディオの情報 )...
Minimを使ってみる• Minimとは  • Processing用に開発された、オーディオを扱うためのライブラリ  • 音を扱うための様々な機能をバンドル      • オーディオファイルの再生      • ID3 (オーディオの情報 )...
Minimを使ってみる1:サウンド出力 • sin波を生成し、サウンド出力する    • Minimオブジェクトをインスタンス化する( = minim)    • minimのメソッド、getLineOut() で出力先を指定 ( = out)...
Minimを使ってみる1:サウンド出力import ddf.minim.*;import ddf.minim.signals.*;Minim minim;AudioOutput out;SineWave sine;void   setup(){...
Minimを使ってみる2:波形の表示 • 生成したシグナルの波形を表示する   • 出力先 (minim.getLineOut) が out の場合     • out.left:左チャンネルのサウンドの値     • out.right:左チ...
Minimを使ってみる2:波形の表示import ddf.minim.*;import ddf.minim.signals.*;Minim minim;AudioOutput out;SineWave sine;void   setup(){	...
Minimを使ってみる2:波形の表示void   stop(){	      out.close();	      minim.stop();	      super.stop();}
Minimを使ってみる2:波形の表示
Minimを使ってみる3:サウンド入力+波形表示 • sin波を生成し、サウンド入力する    • Minimオブジェクトをインスタンス化する( = minim)    • minimのメソッド、getLineIn() で入力を指定( = in...
Minimを使ってみる3:サウンド入力+波形表示import ddf.minim.*;Minim minim;AudioInput in;void   setup(){	      size(512, 200, P3D);	      mini...
Minimを使ってみる3:サウンド入力+波形表示void   stop(){	      in.close();	      minim.stop();	      super.stop();}
Minimを使ってみる3:サウンド入力+波形表示
Minim: FFT • FFT:高速フーリエ変換 (Fast Fourier Transform)    • フーリエ変換を高速に演算するアルゴリズム • 使用法   • FFT(int timeSize, float sampleRate);
Minim: FFT • void setup()    • mini.getLineInでサウンドを入力 ( = in )    • FFTオブジェクトをインスタンス化( = fft)       • fft = new FFT(in.buffer...
Minim - FFT1 :解析結果をグラフにするimport ddf.minim.analysis.*;import ddf.minim.*;Minim minim;AudioInput in;FFT fft;String windowNam...
Minim - FFT1 :解析結果をグラフにするvoid draw(){	   background(0);	   fft.forward(in.mix);	   for(int i = 0; i < fft.specSize(); i++)...
Minim - FFT1 :解析結果をグラフにする
Minim: FFT - より効果的にビジュアライズ• もう少し面白く視覚化できないか?• 音のハーモニーを視覚的に感じられるように工夫してみる  • グラフではなく半透明の円にする  • 左右のチャンネルを個別に解析  • 円の配置中心から左...
Minim: FFT - より効果的にビジュアライズimport processing.opengl.*;import ddf.minim.analysis.*;import ddf.minim.*;Minim minim;AudioInput...
Minim: FFT - より効果的にビジュアライズvoid   draw(){	      background(0);		      noStroke();	      fill(0,0,255,10);	      ellipseMode...
Minim: FFT - より効果的にビジュアライズ
外のアプリケーションとの連携• 外の音響合成のソフトを用いて、音響を生成し、Processing + Minimで視  覚化したい• サウンドの出力をProcessingにルーティングする必要がある• SounfFlowerを用いると便利   ...
外のアプリケーションとの連携• 設定:  • SoundFlowerをインストールして再起動  • System環境設定 → サウンド  • 入力をSoundFlower (2ch) にする
外のアプリケーションとの連携• 出力側の設定  • Soundflowerbed.appを軌道     • ツールバーに表示される     • オーディオ出力先をBuilt-in Outputにする
Upcoming SlideShare
Loading in …5
×

Ssaw08 1111

2,524 views

Published on

Published in: Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,524
On SlideShare
0
From Embeds
0
Number of Embeds
1,183
Actions
Shares
0
Downloads
70
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Ssaw08 1111

  1. 1. SSAW08 後期第8回作品制作のヒントProcessing + Minim で音響を視覚化する2008年11月11日
  2. 2. 本日の内容• 前半:制作のヒント、その1 • Processing と Minimを用いて、音響を視覚化してみる • Processing 0149以降のLibraryの扱いかたの変更について• 後半:108スタジオ使用講習会 (矢坂先生)
  3. 3. Processin 0149以降の重要な変更点• Processing 0149以降から、重要な変更あり • 参照:http://processing.org/download/revisions.txt• ライブラリの扱いが変更となった • 全てのライブラリはSketchのフォルダ内の "libraries" フォルダに入れら れていなければならない • 以前はProcessingのLibraryフォルダにあった • 以下の理由から変更されたらしい • ユーザは以前のフォルダにアクセスできないかもしれない • またOS Xでは隠されている
  4. 4. Processin 0149以降の重要な変更点• Sketchフォルダの場所を確認する • Pricessingのメニューから、" Sketch " > "Show Sketch Folder" を選択 • Sketchフォルダが表示される • Processingの環境設定 • Sketchbook location: で表示されている場所
  5. 5. Processin 0149以降の重要な変更点• また、この変更に伴い、ライブラリの対応が必要なため、多くのライブラ リの互換性が無くなっている • PGraphicsを使う全てのレンダラ• 外部のLibraryを使用している場合は、古いバージョンと併用しながら、 徐々に切り替えていく必要あり
  6. 6. Minimを使ってみる• Minimとは • Processing用に開発された、オーディオを扱うためのライブラリ • 音を扱うための様々な機能をバンドル • オーディオファイルの再生 • ID3 (オーディオの情報 )タグの扱い • 録音・再生 • サウンド入力・出力 • 音響合成 • ユニットジェネレータ群 (オシレータ、フィルタ) • 音響解析 (FFT, IFFT) • ビートの検出
  7. 7. Minimを使ってみる• Minimとは • Processing用に開発された、オーディオを扱うためのライブラリ • 音を扱うための様々な機能をバンドル • オーディオファイルの再生 • ID3 (オーディオの情報 )タグの扱い • 録音・再生 • サウンド入力・出力 • 音響合成 • ユニットジェネレータ群 (オシレータ、フィルタ) • 音響解析 (FFT, IFFT) • ビートの検出 • 今回はMinim使用の一例として、音響解析 (FFT) を用いて、音響を視覚 化してみる
  8. 8. Minimを使ってみる1:サウンド出力 • sin波を生成し、サウンド出力する • Minimオブジェクトをインスタンス化する( = minim) • minimのメソッド、getLineOut() で出力先を指定 ( = out) • SineWave関数を用いて、sin波のデータを生成 ( = sin) • 出力先に、sin波のシグナルを追加 out.addSignal(sin);
  9. 9. Minimを使ってみる1:サウンド出力import ddf.minim.*;import ddf.minim.signals.*;Minim minim;AudioOutput out;SineWave sine;void setup(){ size(512, 200, P3D); minim = new Minim(this); out = minim.getLineOut(Minim.STEREO, 2048); sine = new SineWave(440, 0.5, out.sampleRate()); out.addSignal(sine);}void draw(){}void stop(){ out.close(); minim.stop(); super.stop();}
  10. 10. Minimを使ってみる2:波形の表示 • 生成したシグナルの波形を表示する • 出力先 (minim.getLineOut) が out の場合 • out.left:左チャンネルのサウンドの値 • out.right:左チャンネルのサウンドの値 • 特定位置のサンプルを読みだし • out.left.get(i) : 左チャンネル、i番目のサンプル • out.right.get(i) : 右チャンネル、i番目のサンプル • この情報を利用して波形を描く
  11. 11. Minimを使ってみる2:波形の表示import ddf.minim.*;import ddf.minim.signals.*;Minim minim;AudioOutput out;SineWave sine;void setup(){ size(512, 200, P3D); minim = new Minim(this); out = minim.getLineOut(Minim.STEREO, 2048); sine = new SineWave(440, 0.5, out.sampleRate()); out.addSignal(sine);}void draw(){ background(0); stroke(255); for(int i = 0; i < out.bufferSize() - 1; i++) { line(i, 50 + out.left.get(i)*50, i+1, 50 + out.left.get(i+1)*50); line(i, 150 + out.right.get(i)*50, i+1, 150 + out.right.get(i+1)*50); }}
  12. 12. Minimを使ってみる2:波形の表示void stop(){ out.close(); minim.stop(); super.stop();}
  13. 13. Minimを使ってみる2:波形の表示
  14. 14. Minimを使ってみる3:サウンド入力+波形表示 • sin波を生成し、サウンド入力する • Minimオブジェクトをインスタンス化する( = minim) • minimのメソッド、getLineIn() で入力を指定( = in) • minim.getLineIn(int type, int bufferSize);
  15. 15. Minimを使ってみる3:サウンド入力+波形表示import ddf.minim.*;Minim minim;AudioInput in;void setup(){ size(512, 200, P3D); minim = new Minim(this); minim.debugOn(); in = minim.getLineIn(Minim.STEREO, 512);}void draw(){ background(0); stroke(255); for(int i = 0; i < in.bufferSize() - 1; i++) { line(i, 50 + in.left.get(i)*50, i+1, 50 + in.left.get(i+1)*50); line(i, 150 + in.right.get(i)*50, i+1, 150 + in.right.get(i+1)*50); }}
  16. 16. Minimを使ってみる3:サウンド入力+波形表示void stop(){ in.close(); minim.stop(); super.stop();}
  17. 17. Minimを使ってみる3:サウンド入力+波形表示
  18. 18. Minim: FFT • FFT:高速フーリエ変換 (Fast Fourier Transform) • フーリエ変換を高速に演算するアルゴリズム • 使用法 • FFT(int timeSize, float sampleRate);
  19. 19. Minim: FFT • void setup() • mini.getLineInでサウンドを入力 ( = in ) • FFTオブジェクトをインスタンス化( = fft) • fft = new FFT(in.bufferSize(), in.sampleRate()); • void draw() • fftインスタンスを用いて、入力信号inをFFT解析する • fft.forward(in.mix); ← 左右チャンネルをMIX • 解析した情報を画像として描画 • fft解析結果のとりだし方 • fft.getBand(i) ー i番目の周波数帯のPower値
  20. 20. Minim - FFT1 :解析結果をグラフにするimport ddf.minim.analysis.*;import ddf.minim.*;Minim minim;AudioInput in;FFT fft;String windowName;float fftSize = 128;float graphScale = 16;void setup(){ size(640, 480, P3D); colorMode(HSB, 360, 100, 100, 100); noStroke(); minim = new Minim(this); minim.debugOn(); in = minim.getLineIn(Minim.STEREO, int(fftSize)); fft = new FFT(in.bufferSize(), in.sampleRate());}
  21. 21. Minim - FFT1 :解析結果をグラフにするvoid draw(){ background(0); fft.forward(in.mix); for(int i = 0; i < fft.specSize(); i++) { fill(360 / fftSize * 2 * i, 100, 100); rect(width/fftSize * 2 * i, height - fft.getBand(i)*graphScale, width/fftSize * 2, fft.getBand(i)*graphScale); }}
  22. 22. Minim - FFT1 :解析結果をグラフにする
  23. 23. Minim: FFT - より効果的にビジュアライズ• もう少し面白く視覚化できないか?• 音のハーモニーを視覚的に感じられるように工夫してみる • グラフではなく半透明の円にする • 左右のチャンネルを個別に解析 • 円の配置中心から左右に別れていく • レベルが円の半径になる • OpenGLで描画する (パフォーマスの向上)
  24. 24. Minim: FFT - より効果的にビジュアライズimport processing.opengl.*;import ddf.minim.analysis.*;import ddf.minim.*;Minim minim;AudioInput in;FFT fft;String windowName;float fftSize = 1024;float graphScale = 20;void setup(){ size(1024, 768, OPENGL); minim = new Minim(this); minim.debugOn(); in = minim.getLineIn(Minim.STEREO, int(fftSize)); fft = new FFT(in.bufferSize(), in.sampleRate()); background(0);}
  25. 25. Minim: FFT - より効果的にビジュアライズvoid draw(){ background(0); noStroke(); fill(0,0,255,10); ellipseMode(CENTER); fft.forward(in.left); for(int i = 0; i < fft.specSize(); i++) { ellipse(width / 2 - width/fftSize * i, height/2, fft.getBand(i)*graphScale, fft.getBand(i)*graphScale); } fft.forward(in.right); for(int i = 0; i < fft.specSize(); i++) { ellipse(width / 2 + width/fftSize * i, height/2, fft.getBand(i)*graphScale, fft.getBand(i)*graphScale); }}
  26. 26. Minim: FFT - より効果的にビジュアライズ
  27. 27. 外のアプリケーションとの連携• 外の音響合成のソフトを用いて、音響を生成し、Processing + Minimで視 覚化したい• サウンドの出力をProcessingにルーティングする必要がある• SounfFlowerを用いると便利 • http://code.google.com/p/soundflower/ • 外のアプリケーションのサウンド出力を全て取得して、別のアプリケー ションの入力として扱うことができる• 例 • iTunes → SoundFlower → Processing + Minim • Max/MSP → SoundFlower → Processing + Minim • SuperCollider → SoundFlower → Processing + Minim • Chuck → SoundFlower → Processing + Minim • ...etc
  28. 28. 外のアプリケーションとの連携• 設定: • SoundFlowerをインストールして再起動 • System環境設定 → サウンド • 入力をSoundFlower (2ch) にする
  29. 29. 外のアプリケーションとの連携• 出力側の設定 • Soundflowerbed.appを軌道 • ツールバーに表示される • オーディオ出力先をBuilt-in Outputにする

×