LoginSignup
0
0

More than 3 years have passed since last update.

MinimのSampler

Last updated at Posted at 2021-03-27

Processingで波形再生して波形を表示したいなと思い、
いろいろ調べたらMinimのSamplerでいけたので備忘録

実行すると

image.png

ソースコード

以下のコードで
ドラムの波形はwavなどで用意する。
ここでは上位のフォルダ階層のMaterialsフォルダに用意しています。

64個の配列に数字が入っていてそれをもとに再生します。
Drawでシーケンスしているので少しタイミングが揺れます・・・

simple_sampler.java
import ddf.minim.spi.*;
import ddf.minim.signals.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.ugens.*;
import ddf.minim.effects.*;

Minim minim;
AudioOutput out;

void setup(){
  size(512, 200);
  frameRate(60);   
  minim = new Minim(this);
  out = minim.getLineOut();

  setup_Drum();
}

Sampler kick;
Sampler PHH;

Gain       gain;
void setup_Drum()
{
    gain = new Gain(-12.0f);

    PHH = new Sampler("../Materials/128_044_NOISE_PHH.wav", 1, new Minim(this));
    PHH.patch( out );
    kick = new Sampler("../Materials/128_035_NOISE_BD2.wav", 1, new Minim(this));
    kick.patch(gain).patch( out );
}

int[] DrumChart = {0,-1,-1,-1, 0,-1,-1,-1, 1,-1,-1,-1, 0,-1,-1,-1, 0,-1,-1,-1, 0,-1,-1,-1, 1,-1,1,-1, 0,-1,-1,-1, 0,-1,-1,-1, 0,-1,-1,-1, 1,-1,-1,-1, 0,-1,-1,-1, 0,-1,-1,-1, 0,-1,-1,-1, 1,-1,-1,-1, 0,-1,0,0, };

void PlayDrum(int currentNoteIndex)
{
  switch(DrumChart[currentNoteIndex%DrumChart.length])
  {
    case -1:break;
    case 0:kick.trigger();break;
    case 1:PHH.trigger();break;
  }
}

int counter = 0;
float lastTime = 0;
void draw(){
  int currentTime = millis();

  if(currentTime > lastTime)
  {
   PlayDrum((counter++)%DrumChart.length); 
   lastTime = currentTime + 60;
  }

  DrawWave();
}

void DrawWave()
{
  background(0);
  stroke(255);
  strokeWeight(1);
  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);
  }
}

音量を下げて最終出力へ

MinimのSampler
UGensの分類で

gain = new Gain(-12.0f);
kick = new Sampler("../Materials/128_035_NOISE_BD2.wav", 1, new Minim(this));
kick.patch(gain).patch( out );

という感じで、ここではoutへ出力するのだけどその間にgainを通して音量-12dB下げています。
オーディオのルーティングが簡単に書けるのでいろいろ実験しやすそうです。

BitCrushエフェクト

例えばkickの音をBitCrushさせたいなと思った以下のような感じで間に挟むだけでエフェクトがかかります。簡単。

void setup_Drum()
{
    gain = new Gain(0.0f);

    BitCrush bitCrush;
    bitCrush = new BitCrush(2, out.sampleRate());

    PHH = new Sampler("../Materials/128_044_NOISE_PHH.wav", 1, new Minim(this));
    PHH.patch( out );
    kick = new Sampler("../Materials/128_035_NOISE_BD2.wav", 1, new Minim(this));
    kick.patch(bitCrush).patch(gain).patch( out );
}
0
0
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
0
0