GlitchMachine解析班 その3「狙った波の作り方」 [chiptune]
さて三回目となりましたGlitchMachine解析班
今回は、狙った波形を作る為のアプローチ方法を
実践編として紹介して行きたいと思います。
そもそも意図せず起きる音の変化を楽しむという
GlitchMachineの主旨に反すること甚だしいですが
まぁ制御の仕方を身につけておいても損はないでしょう.....
【① 計算式によるSin波の作り方】
学校などで習う計算式をGlitchMachineに当てはめる例です。
今回作るのは正確にいうとSinっぽい放物線を用いて作った疑似波形。
念のためSin(正弦波)をご存知無いかたはwikiをご覧下さい。→こちら
この世の中にある数多の波形の基礎となる最もスムーズな振幅です。
Step1 Sinぽい変化をする放物線のカーブ作成
放物線の式はコレを用います。
y = 4x(1-x)
googleで、この式を検索してもらえれば下図のようなグラフが出てきます。
便利な世の中になったもんですねー。
xが0→1へと進むすると
yの頂点がx=0.5で1となる
放物線を描きます。
これをGlitchMachineでxをtに置き換えて書き直すと、
1 t - 4 * t *
となります。
しかし、GlitchMachineには少数は在りません。
xは0→1へ少数を用いて細かく進む事ができますが
tは1づつ動いてしまいます。
また、欲しいのはxが0〜1の区間の波形だけなので
その区間をループする必要もあります。
そこでtを0→15でループさせて
そのステップでも放物線を描くように式を加工します。
入力はこちら。
0行目 15 t 15 & - 4 * t 15 & *
「15」 は 2進数でいうと"1111"で、「t 15 &」によってtの下位4bitを取り出し
0→15の16サイクルでループさせています。
図のような放物線のループが出来ましたね。
ただGlitchMachineは全ての値がunsigned(+方向しかない)なので
このままだとSinの-方向のひっくり返った放物線が作れません。
よって振幅を半分にして
出力128から上に波形がでるようにします。
入力はこちら。
0行目:15 t 15 & - 4 * t 15 & * 2 / 128 +
はい、これで1トビに波形を反転させるとSin波になりそうですよね。
Step2 反転
さて出力を反転するにはどうしたらいいか?
このGlitchMachine解析班1回目で使った
「^」XORを思い出してください。
XORは比較するbit双方が違う時に1、同じ時に0を出します。
255(1111 1111) と 1(0000 0001)を XORすると
254(1111 1110)となります。
255(1111 1111) と 15(0000 1111)を XORすると
240(1111 0000)となります。
XORは1と1の時に0を出力するので、イメージ的には"1"が全部揃った255の山から
ある値の"1"の在る位置の値を引いた結果がでてくる感じでお分かりでしょうか?
これによって波形を上下反転させます。
それでは反転したいタイミングに255が出ている矩形波をつくりだします。
入力はこちら。
2行目:31 t & 16 & 16 / 255 *
31 t & は0→31への32サイクルを作ります。
16 & で32サイクルの中間16サイクルより下は出力0
16サイクル以上は出力16の矩形波を作ります。
16 / で矩形波の出力を0と1にします。
255 *で矩形波の出力を0と255にします。
これでStep1の放物線と同じサイクルで、出力0と255が切り替わる
矩形波ができました。
スタックの状態は0段目に矩形波出力、1段目に放物線出力が入っているので
両者をXORします。
入力はこちら。
3行目:^
おめでとう。
これで君は放物線で作り出した擬似SIN波を手に入れたよ。
おめでとう。
音はこちら。
再生できない場合、ダウンロードは🎵こちら
【② WAVETABLE音源】
Step1 WaveTableとは
さて、いきなりWAVETABLE音源といわれてもティンと来ないと
思いますんで説明をします。
まず、アナログ音源はICchipを使わず、アナログ回路で構成された音源です。
アナログですので振幅がとにかくリニアで滑らか。その代わり電気的に
安定させるのが大変でチューニングが狂うものもあります。
これに対してデジタルアナログはChip内のデジタル処理で
アナログ回路のロジックを模倣した音源です。
これまでの連載で作ってきた音源はすべてデジタルアナログと言われる
筋合いの音源です。
安定性は抜群ですが
①でつくったSinのようにステップ毎の変化ですので波形にガタツキが出ます。
そしてWAVETABLEはロジックを組まずに波形の変化をあらかじめ数字の羅列で
記録しておき、それを再生するという力技音源です。
最近のいわゆるMIDI音源PCMもこの波形を記録するという点は同じですが
違いの例を挙げるとピアノの鍵盤が押されて指を上げるまでを記録しているのが
PCMだとするとピアノが鳴ってる最中の波形の1ループだけを抜き出して
そのループを繰り返し鳴らすのがWaveTable音源という事で
大まかにはOKだと思います。
ナムコのアーケード初期の音源C30、PCEngine、コナミMSX SCC音源
等が有名どころ。
Step2 三角波の波形を作る
さて、早速うちこんでみましょう。
0行目:0 10 20 30 40 50 40 30 20 10 t 10 % Pick
はい、これだけで三角波がでてきました。
まず「0 10 20 30 40 50 40 30 20 10」で
三角波の波形をスタック0から9に掘り込みます。
次に「t 10 %」でtを10で割った余りを取り出します。
結果的に0→9の繰り返しループを作りだします。
%は便利ですよねー。tに対して使うと好みの数のループを作れます。
これまで&でループさせてたのは何だったんだよーという話ですが
現実世界の8bitCPUでは%の計算の方が演算コストが高い(時間掛かる)ので
プログラマ本能が神速のAND演算を使わせておったんです。
でもGlitchMachineではどっちも速度関係ないです。
次にPick演算子ですが、スタックの任意のテーブル値を
引っこ抜いてくれる演算子です。
0→9のループがでPickすると、三角が現れますね。
で実は、
「0 10 20 30 40 50 40 30 20 10 t Pick」
でも同じ結果がでます。
これはPickはスタック在庫より大きい数が入力されると
スタック0段に戻って何度でもループする性質があるからです。
Step3 周波数を変える。
これだけでは芸を欠くので発音周波数も変えてみましょう。
まず、周波数(シフト量)を記入します。
0行:1 2 1 2 1 3 2 1
1行:t 10 >> 8 % PICK
0行目は変調テーブルです。
最終的に波形テーブル進行速度をコントロールするために
右シフトするシフト量となります。
1行目はシフト量の切り替えを行う箇所です。
t 10 >>はt(8000サイクル)を1024分の1→1秒間に7.8125サイクルに
まず減速し、1秒間に約8回シフト量を切り替えるようにします。
8 %で0→7の8段階にして0行目で入力したテーブルを
ループするようにします。
そしてPICKでテーブルの値を取り出し、0段にスタックします。
2行 0 10 20 30 40 50 40 30 20 10
3行 t 11 PICK >> 10 % PICK
この部分はStep2の変形となります。
まず注意して欲しいのはスタックの状態です。
波形のテーブルは10個あります。そして3行目の頭でtをスタックしていますので
1行で作り出したシフト量は12個目のスタック11に格納されているという事です。
t 11 PICK >>でtをスタック11に入っているシフト量だけ右シフトして
サイクルを遅くします。その値を10 %として0〜9の波形テーブル内に当てはめます。
あとはPICK分によって、順次テーブル内の波形が取り出されます。
おめでとう。
これで君は音程が変化する三角波を手に入れたよ。
おめでとう。
音はこちら。
再生できない場合、ダウンロードは🎵こちら
さて今回は如何でしたでしょうか?
今回使った技法は
・方程式の適用、
・XORによる反転、
・%によるサイクル、
・PICKによるスタックテーブルの利用
の4点でしたが、どれも非常に汎用性の高い手法ですので
是非とも体にガチムチに覚えこませてください。
次回は応用編です。→こちら。
今回は、狙った波形を作る為のアプローチ方法を
実践編として紹介して行きたいと思います。
そもそも意図せず起きる音の変化を楽しむという
GlitchMachineの主旨に反すること甚だしいですが
まぁ制御の仕方を身につけておいても損はないでしょう.....
【① 計算式によるSin波の作り方】
学校などで習う計算式をGlitchMachineに当てはめる例です。
今回作るのは正確にいうとSinっぽい放物線を用いて作った疑似波形。
念のためSin(正弦波)をご存知無いかたはwikiをご覧下さい。→こちら
この世の中にある数多の波形の基礎となる最もスムーズな振幅です。
Step1 Sinぽい変化をする放物線のカーブ作成
放物線の式はコレを用います。
y = 4x(1-x)
googleで、この式を検索してもらえれば下図のようなグラフが出てきます。
便利な世の中になったもんですねー。
xが0→1へと進むすると
yの頂点がx=0.5で1となる
放物線を描きます。
これをGlitchMachineでxをtに置き換えて書き直すと、
1 t - 4 * t *
となります。
しかし、GlitchMachineには少数は在りません。
xは0→1へ少数を用いて細かく進む事ができますが
tは1づつ動いてしまいます。
また、欲しいのはxが0〜1の区間の波形だけなので
その区間をループする必要もあります。
そこでtを0→15でループさせて
そのステップでも放物線を描くように式を加工します。
入力はこちら。
0行目 15 t 15 & - 4 * t 15 & *
「15」 は 2進数でいうと"1111"で、「t 15 &」によってtの下位4bitを取り出し
0→15の16サイクルでループさせています。
図のような放物線のループが出来ましたね。
ただGlitchMachineは全ての値がunsigned(+方向しかない)なので
このままだとSinの-方向のひっくり返った放物線が作れません。
よって振幅を半分にして
出力128から上に波形がでるようにします。
入力はこちら。
0行目:15 t 15 & - 4 * t 15 & * 2 / 128 +
はい、これで1トビに波形を反転させるとSin波になりそうですよね。
Step2 反転
さて出力を反転するにはどうしたらいいか?
このGlitchMachine解析班1回目で使った
「^」XORを思い出してください。
XORは比較するbit双方が違う時に1、同じ時に0を出します。
255(1111 1111) と 1(0000 0001)を XORすると
254(1111 1110)となります。
255(1111 1111) と 15(0000 1111)を XORすると
240(1111 0000)となります。
XORは1と1の時に0を出力するので、イメージ的には"1"が全部揃った255の山から
ある値の"1"の在る位置の値を引いた結果がでてくる感じでお分かりでしょうか?
これによって波形を上下反転させます。
それでは反転したいタイミングに255が出ている矩形波をつくりだします。
入力はこちら。
2行目:31 t & 16 & 16 / 255 *
31 t & は0→31への32サイクルを作ります。
16 & で32サイクルの中間16サイクルより下は出力0
16サイクル以上は出力16の矩形波を作ります。
16 / で矩形波の出力を0と1にします。
255 *で矩形波の出力を0と255にします。
これでStep1の放物線と同じサイクルで、出力0と255が切り替わる
矩形波ができました。
スタックの状態は0段目に矩形波出力、1段目に放物線出力が入っているので
両者をXORします。
入力はこちら。
3行目:^
おめでとう。
これで君は放物線で作り出した擬似SIN波を手に入れたよ。
おめでとう。
音はこちら。
再生できない場合、ダウンロードは🎵こちら
【② WAVETABLE音源】
Step1 WaveTableとは
さて、いきなりWAVETABLE音源といわれてもティンと来ないと
思いますんで説明をします。
まず、アナログ音源はICchipを使わず、アナログ回路で構成された音源です。
アナログですので振幅がとにかくリニアで滑らか。その代わり電気的に
安定させるのが大変でチューニングが狂うものもあります。
これに対してデジタルアナログはChip内のデジタル処理で
アナログ回路のロジックを模倣した音源です。
これまでの連載で作ってきた音源はすべてデジタルアナログと言われる
筋合いの音源です。
安定性は抜群ですが
①でつくったSinのようにステップ毎の変化ですので波形にガタツキが出ます。
そしてWAVETABLEはロジックを組まずに波形の変化をあらかじめ数字の羅列で
記録しておき、それを再生するという力技音源です。
最近のいわゆるMIDI音源PCMもこの波形を記録するという点は同じですが
違いの例を挙げるとピアノの鍵盤が押されて指を上げるまでを記録しているのが
PCMだとするとピアノが鳴ってる最中の波形の1ループだけを抜き出して
そのループを繰り返し鳴らすのがWaveTable音源という事で
大まかにはOKだと思います。
ナムコのアーケード初期の音源C30、PCEngine、コナミMSX SCC音源
等が有名どころ。
Step2 三角波の波形を作る
さて、早速うちこんでみましょう。
0行目:0 10 20 30 40 50 40 30 20 10 t 10 % Pick
はい、これだけで三角波がでてきました。
まず「0 10 20 30 40 50 40 30 20 10」で
三角波の波形をスタック0から9に掘り込みます。
次に「t 10 %」でtを10で割った余りを取り出します。
結果的に0→9の繰り返しループを作りだします。
%は便利ですよねー。tに対して使うと好みの数のループを作れます。
これまで&でループさせてたのは何だったんだよーという話ですが
現実世界の8bitCPUでは%の計算の方が演算コストが高い(時間掛かる)ので
プログラマ本能が神速のAND演算を使わせておったんです。
でもGlitchMachineではどっちも速度関係ないです。
次にPick演算子ですが、スタックの任意のテーブル値を
引っこ抜いてくれる演算子です。
0→9のループがでPickすると、三角が現れますね。
で実は、
「0 10 20 30 40 50 40 30 20 10 t Pick」
でも同じ結果がでます。
これはPickはスタック在庫より大きい数が入力されると
スタック0段に戻って何度でもループする性質があるからです。
Step3 周波数を変える。
これだけでは芸を欠くので発音周波数も変えてみましょう。
まず、周波数(シフト量)を記入します。
0行:1 2 1 2 1 3 2 1
1行:t 10 >> 8 % PICK
0行目は変調テーブルです。
最終的に波形テーブル進行速度をコントロールするために
右シフトするシフト量となります。
1行目はシフト量の切り替えを行う箇所です。
t 10 >>はt(8000サイクル)を1024分の1→1秒間に7.8125サイクルに
まず減速し、1秒間に約8回シフト量を切り替えるようにします。
8 %で0→7の8段階にして0行目で入力したテーブルを
ループするようにします。
そしてPICKでテーブルの値を取り出し、0段にスタックします。
2行 0 10 20 30 40 50 40 30 20 10
3行 t 11 PICK >> 10 % PICK
この部分はStep2の変形となります。
まず注意して欲しいのはスタックの状態です。
波形のテーブルは10個あります。そして3行目の頭でtをスタックしていますので
1行で作り出したシフト量は12個目のスタック11に格納されているという事です。
t 11 PICK >>でtをスタック11に入っているシフト量だけ右シフトして
サイクルを遅くします。その値を10 %として0〜9の波形テーブル内に当てはめます。
あとはPICK分によって、順次テーブル内の波形が取り出されます。
おめでとう。
これで君は音程が変化する三角波を手に入れたよ。
おめでとう。
音はこちら。
再生できない場合、ダウンロードは🎵こちら
さて今回は如何でしたでしょうか?
今回使った技法は
・方程式の適用、
・XORによる反転、
・%によるサイクル、
・PICKによるスタックテーブルの利用
の4点でしたが、どれも非常に汎用性の高い手法ですので
是非とも体にガチムチに覚えこませてください。
次回は応用編です。→こちら。
コメント 0