Ssaw08 1111
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Ssaw08 1111

on

  • 4,272 views

 

Statistics

Views

Total Views
4,272
Views on SlideShare
3,100
Embed Views
1,172

Actions

Likes
1
Downloads
67
Comments
0

5 Embeds 1,172

http://yoppa.org 1088
http://yoppa.jpn.org 81
http://72.14.235.132 1
http://74.125.153.132 1
https://web.archive.org 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Ssaw08 1111 Presentation Transcript

  • 1. SSAW08 後期第8回作品制作のヒントProcessing + Minim で音響を視覚化する2008年11月11日
  • 2. 本日の内容• 前半:制作のヒント、その1 • Processing と Minimを用いて、音響を視覚化してみる • Processing 0149以降のLibraryの扱いかたの変更について• 後半:108スタジオ使用講習会 (矢坂先生)
  • 3. Processin 0149以降の重要な変更点• Processing 0149以降から、重要な変更あり • 参照:http://processing.org/download/revisions.txt• ライブラリの扱いが変更となった • 全てのライブラリはSketchのフォルダ内の "libraries" フォルダに入れら れていなければならない • 以前はProcessingのLibraryフォルダにあった • 以下の理由から変更されたらしい • ユーザは以前のフォルダにアクセスできないかもしれない • またOS Xでは隠されている
  • 4. Processin 0149以降の重要な変更点• Sketchフォルダの場所を確認する • Pricessingのメニューから、" Sketch " > "Show Sketch Folder" を選択 • Sketchフォルダが表示される • Processingの環境設定 • Sketchbook location: で表示されている場所
  • 5. Processin 0149以降の重要な変更点• また、この変更に伴い、ライブラリの対応が必要なため、多くのライブラ リの互換性が無くなっている • PGraphicsを使う全てのレンダラ• 外部のLibraryを使用している場合は、古いバージョンと併用しながら、 徐々に切り替えていく必要あり
  • 6. Minimを使ってみる• Minimとは • Processing用に開発された、オーディオを扱うためのライブラリ • 音を扱うための様々な機能をバンドル • オーディオファイルの再生 • ID3 (オーディオの情報 )タグの扱い • 録音・再生 • サウンド入力・出力 • 音響合成 • ユニットジェネレータ群 (オシレータ、フィルタ) • 音響解析 (FFT, IFFT) • ビートの検出
  • 7. Minimを使ってみる• Minimとは • Processing用に開発された、オーディオを扱うためのライブラリ • 音を扱うための様々な機能をバンドル • オーディオファイルの再生 • ID3 (オーディオの情報 )タグの扱い • 録音・再生 • サウンド入力・出力 • 音響合成 • ユニットジェネレータ群 (オシレータ、フィルタ) • 音響解析 (FFT, IFFT) • ビートの検出 • 今回はMinim使用の一例として、音響解析 (FFT) を用いて、音響を視覚 化してみる
  • 8. Minimを使ってみる1:サウンド出力 • sin波を生成し、サウンド出力する • Minimオブジェクトをインスタンス化する( = minim) • minimのメソッド、getLineOut() で出力先を指定 ( = out) • SineWave関数を用いて、sin波のデータを生成 ( = sin) • 出力先に、sin波のシグナルを追加 out.addSignal(sin);
  • 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. Minimを使ってみる2:波形の表示 • 生成したシグナルの波形を表示する • 出力先 (minim.getLineOut) が out の場合 • out.left:左チャンネルのサウンドの値 • out.right:左チャンネルのサウンドの値 • 特定位置のサンプルを読みだし • out.left.get(i) : 左チャンネル、i番目のサンプル • out.right.get(i) : 右チャンネル、i番目のサンプル • この情報を利用して波形を描く
  • 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. Minimを使ってみる2:波形の表示void stop(){ out.close(); minim.stop(); super.stop();}
  • 13. Minimを使ってみる2:波形の表示
  • 14. Minimを使ってみる3:サウンド入力+波形表示 • sin波を生成し、サウンド入力する • Minimオブジェクトをインスタンス化する( = minim) • minimのメソッド、getLineIn() で入力を指定( = in) • minim.getLineIn(int type, int bufferSize);
  • 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. Minimを使ってみる3:サウンド入力+波形表示void stop(){ in.close(); minim.stop(); super.stop();}
  • 17. Minimを使ってみる3:サウンド入力+波形表示
  • 18. Minim: FFT • FFT:高速フーリエ変換 (Fast Fourier Transform) • フーリエ変換を高速に演算するアルゴリズム • 使用法 • FFT(int timeSize, float sampleRate);
  • 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. 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. 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. Minim - FFT1 :解析結果をグラフにする
  • 23. Minim: FFT - より効果的にビジュアライズ• もう少し面白く視覚化できないか?• 音のハーモニーを視覚的に感じられるように工夫してみる • グラフではなく半透明の円にする • 左右のチャンネルを個別に解析 • 円の配置中心から左右に別れていく • レベルが円の半径になる • OpenGLで描画する (パフォーマスの向上)
  • 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. 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. Minim: FFT - より効果的にビジュアライズ
  • 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. 外のアプリケーションとの連携• 設定: • SoundFlowerをインストールして再起動 • System環境設定 → サウンド • 入力をSoundFlower (2ch) にする
  • 29. 外のアプリケーションとの連携• 出力側の設定 • Soundflowerbed.appを軌道 • ツールバーに表示される • オーディオ出力先をBuilt-in Outputにする