Twitter

インパルスの生成と応用

定期的に1サンプルだけ、1にしてあとのサンプルを0にする、いわゆるインパルスは以下のように、「phasor~」と「delta~」と「<~ 0」の組み合わせでできます。まず「phasor~」はノコギリ波を生成するオブジェクトです。ノコギリ波は基本的に周期の中で値が上昇し続けますが、その周期の終わりに1サンプルだけ値が下降します。 「delta~」は現在のサンプルのと前のサンプルの値の差を求めるオブジェクトです。「phasor~」の生成するノコギリ波の周期の終わりのみ、差が負の値になるので、これを「<~ 0」で検出し、0と1に変換します。この方法によってインパルスジェネレータを作る事ができます。 音を聞いてみると、プチプチというノイズが定期的に聞こえるはずです。池田亮司さんでお馴染みな音ですね。周波数を上げていくと、しっかりピッチが聞こえます。 impulse1
また、この波形を「tabwrite~」とArrayで見てみると以下のようになります。

impulse2

プチプチやっているだけでは面白くないので、これにディケイ(減衰)を加えて、インパルスが「尾を引く」状態にしてみましょう。減衰を加えるにはいろいろな方法がありますが、「fexpr~」でif文を書いて作ったのが下図の例です。
impulse3

「fexpr~」では$x1で左インレットの入力値、$x2で右インレットの入力値を表現できます。また$yは一つ前に出力されたサンプルを意味します。
つまり、この条件式は「一つ前に出力されたサンプルより入力値が大きかった場合には、そのまま入力値を出力し、そうでない場合は前の出力値に右インレットから入力された値をかけて出力する」という事を表現しています。右インレットの値を0から0.9999くらいの範囲で変化させると、それにしたがって減衰の長さが変わります。
ではこの減衰付きインパルス音をサイン波の周波数に適応してみましょう。

impulse4

図のように非常に高めのディケイ値を入れると昔のシューティングゲームを彷彿とさせる音が出来上がります。
減衰を簡単に実現するのには「cyclone」ライブラリの「rampsmooth~」を使うという方法もあります。また、「click~」を使うと任意のタイミングでインパルスを作る事ができます。

この項のパッチをダウンロード

Post a Comment

Your email is kept private. Required fields are marked *