MozziWS 2_5

今回はディレイ(音響の遅延処理)に挑戦します。 まず、Mozziでフィードバック付きのディレイを使うにはAudioDelayFeedback.hをincludeします。 (フィードバックの設定が必要ない場合はAudioDelay.h) 本スケッチでは、前回用いたEventDelayによるトリガーを用いてサイン波を前述のEadエンベロープで減衰させ、その上で、ディレイによる音響遅延処理で音色をさらに変化させています。

aDel.setDelayTimeCells()でディレイタイムを設定(本スケッチではランダム)し、aDel.setFeedbackLevel()でフィードバック設定(-128〜127)を行います。

Mozziのディレイは少々滑らかさに欠けるので(あるだけ素晴らしいですが…)、外部のディレイを使った方がイメージ通りの音を作りやすいかもしれません。

(サンプルのdelays/”AudioDelayFeedbackAllPass.ino”(Tim Barrass 2012-2013.)を参考にしています)

 1#include <MozziGuts.h>
 2#include <Oscil.h> //オシレーターのテンプレート
 3#include <AudioDelayFeedback.h> //フィードバック付きディレイクラス
 4#include <Ead.h>  //エンベロープ
 5#include <EventDelay.h> //Arduinoのdelayの代わり
 6#include <mozzi_rand.h> //ランダムジェネレータ
 7#include <mozzi_midi.h> //midiへの変換
 8#include <tables/sin2048_int8.h> //サイン波テーブル
 9 
10#define CONTROL_RATE 128
11 
12Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin(SIN2048_DATA);
13EventDelay kDelay; // 遅延処理によるエンベロープトリガー
14Ead kEnvelope(CONTROL_RATE); //エンベロープトリガー
15 
16AudioDelayFeedback <256, ALLPASS> aDel;
17 
18int gain;
19int val;
20int Pin=0;
21 
22void setup(){
23  startMozzi(CONTROL_RATE); 
24  randSeed(); // ランダムジェネレータの初期化 (スケッチのループ毎に異なる値を出す)
25  kDelay.start(1000);
26}
27 
28 
29void updateControl(){
30   
31  val = map(mozziAnalogRead(Pin), 0, 1024, 0, 127); //センサの値を格納
32 
33  if(kDelay.ready()){
34    aSin.setFreq(mtof(val)); // 周波数を設定
35    // ADSRパラメータのランダム設定
36    unsigned int duration = rand(500u)+200;
37    unsigned int attack = rand(75);
38    unsigned int decay = duration - attack;
39    kEnvelope.start(attack,decay);
40     
41    // ディレイパラメータのランダム設定
42    float del_cells = (float)rand(65535u)/256;
43    aDel.setDelayTimeCells(del_cells); //ディレイタイム設定
44    char fb = rand(-50,50);
45    aDel.setFeedbackLevel(fb); //フィードバック設定(-128〜127)
46    kDelay.start(duration+500); //トリガー
47  }
48  gain = (int) kEnvelope.next(); 
49}
50 
51int updateAudio(){
52  return aDel.next((gain*aSin.next())>>8); //ディレイ処理をかけた結果を出力する処理 (シフト演算によるゲイン調整)
53}
54 
55void loop(){
56  audioHook();
57}

回路は第4回の可変抵抗のものを流用してください。

MAIN PAGE メインページへ