さて、ここからは実践編です。KYMAを実際の作品製作に使用した場合に、必要となりそうな機能をピックアップしていきます。 まず、再生されるサンプルループをマスターとしてそれににトリガーを同期させたい場合は 1 bpm: (60.0 / サンプルの長さ) と表記します。以前は File Menu から Open を選択し、目的の Sample file を直接開いて、長さ (Duration) を調べる必要がありましたが、現行の KYMAX においては 'file name' sampleFileDuration S とすることで作業ステップを大幅に短縮出来ます。 定期的に出力されるトリガーに「オン時間」を設定する機能に bpm:dutyCycle: があります。例えば1秒に一回トリガーを発生させつつ、オン時間を1/4に設定したい場合は、 1 bpm: 60 dutyCycle: 0.25 となります。dutyCycle の値が小さいほど、立ち上がりのオン時間は短くなります。 この場合は1秒×0.25 = 250ミリセカンドのオン時間となります。 次は Random Variation について実習していきましょう。 Random Function メッセージには random と nextRandom が存在します。任意のパラメータにこれらランダムメッセージを書き込むことによって、-1 から1の間のランダムな数値 をジェネレートする事ができます。 2秒毎に新たなランダム化された数値を発生させる場合は 2 s random 新しいランダム数値を任意なトリガータイミング毎に発生させる場合は !KeyDown nextRandom 240 BPM 毎にランダムな数値を発生させる場合は (1 bpm: 240) nextRandom と表記するとよいでしょう。 ランダム数値を音程操作に応用すると !KeyDown nextRandom * 12 nn + 48 nn のように2Cから4Cの間の音程が、鍵盤を押す毎にランダムに発生します。 この音程を、ある特定の音列に制限する場合は配列 (array) を使います。 (!KeyDown nextRandom abs * 5 of: #(53 50 48 45 43)) nn この abs は絶対値の Function メッセージ です。今回のように配列を使う場合には、負の数値を扱うことが出来ないので、 これによって、 nextRandom の持つ -1 ~ 1 のデータ幅を 0 ~ 1 の正の値に変換します。* 5 でこの値は5倍され of: 以下にリストアップされている 5種類の配列 #(53 50 48 45 43) をトリガータイミング毎に選択することになります。配列の数に合わせて、掛ける数は変化します。 7種類の配列の場合は (!KeyDown nextRandom abs * 7 of: #(60 58 53 50 48 45 43)) nn となります。 これを応用して、鍵盤の音程から、0.125秒毎にリストアップされた5種類の音列の間でランダムに音程が変化するメッセージは、 !Pitch + ((0.125 s random abs * 5 of: #(10 7 5 2 0)) nn) となります。 Event Value の変化に対して smoothed または smooth: という Function を使うことで、音階の変化にポルタメントをかける事もできます。 (!Pitch + (0.125 s random abs * 5 of: #(10 7 5 2 0)) nn) smoothed この場合の変化に要する時間は100ミリセカンドです。これ以外の応答速度が望まれる場合は、 (!Pitch + (0.125 s random abs * 5 of: #(10 7 5 2 0)) nn) smooth: 0.5 s というように smooth: n s を使って、時間を設定することが出来ます。 Arithmetic with Event Values and Sounds ここからはリアルタイムに Event Value や Sound に対して行う、数学的な処理に関する例を紹介します。Arithmetic Operators と呼ばれる算術演算素子のなかで最も単純なものは、我々が日常四則計算で使っている、 + 、 - 、 * 、 / です。
Transcendental Functions (超越関数)
Array Accessing of: メッセージの最初の変数はインデックスに、2番目の変数は数列になります。数列の最初に位置する数はインデックスナンバー・ゼロ (index # 0) です。#1 でないことに注意しましょう。インデックスはリアルタイムで操作が可能ですが、数列 (array) は数字の配列でなければなりません。通常、インデックスをコントロールする数値の幅は0〜1なので、大抵の場合はこれに数列の大きさ -1 の値を掛けることで全ての数列にアクセスが可能になります。
Booleans リアルタイムに比較を行うファンクションです。条件適合の場合は 1、不適合の場合は 0 が返ります。
では今までのおさらいを兼ねて、これらのファンクションを使用してみましょう。 ((((((22050 * fvUnit L) hz) nn) removeUnits 12) truncated) eq: 0) * ( fvUnit R gt: 0.01) next Page→ |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||