SSブログ

Glitch Machine解析班 その4「曲を作る」 [chiptune]

遂に4回目に到達しました、GlitchMachine解析班。

私事ですが、ここの所、チュートリアル芸ばかり繰り出しておりましたら
最強のFM使いにしてglitchMachineを僕に教えたutabiさんから
下の画面を作られる始末。

 TanikuguBASIC.png

うん、なんか、ありがとうございます。

今回は総仕上げとして、曲を作っていきたいと思いますー、っといても
そもそもアルゴリズムによって生み出される「周期」を基に
音色を変化させ、ビートを刻み、曲を紡いでいくglitchMachineにとって
楽譜的にデータを使うのはイレギュラーな使用法だと思いますが…..

標的は

 GRADIUS ボス戦闘のテーマ
「aircraft carrier」


短いからねwwwwwww!!

さて、今日もいってみましょうか。せーの、
「君のハートにピコピコドキュンや!!」


【① トラック1矩形波メインフレーズ】
 さて、フレーズを打ち込むには、前回のWAVETABLE音源の時に
 おまけでやった、音程変化の手法とテーブル操作を利用します。

 最初に音階についてざっくりと説明しておきましょうか、
 
 ご存知と思いますが僕らが打ち込みにつかっているドレミ音階は
 1オクターブを「C, C#, D, D#, E, F, F#, G, G#, A, A#, B」の
 12段で割っていて、12段登ると1オクターブ上の音(周波数が倍)になります。

 基準となる音が A3 = 440Hzですんで、その周辺の表を作っておきます。

 音名  周波数  波形1周期の長さ 
 C4  523.25  15 
 B3  493.88  16 
 A#3  466.16  17 
 A3  440.00  18 
 G#3  415.30  19 
 G3  391.99  20 
 F#3  369.99  22 
 F3  349.22  23 
 E3  329.62  24 
 D#3  311.12  26 
 D3  293.66  27 
 C#3  277.18  29 
 C3  261.62  30 


 波形1周期の長さはGlitchMachineの1秒の長さ
 8000ステップ / 周波数の値です。
 最終的に、この周波数を切り替える事でメロディーが
 出来上がります。

 「aircraft carrier」の正式な楽譜は知りませんので、
 脳内に残ってる曲を元に適当に打ち込みました。
 C3 F3 C3 D3 (×8回繰り返し)
 A3 A3 G3 A3 (×4回繰り返し)
 C4 C4 A#3 C4 (×4回繰り返し)
 のはずなので、これを再生します。

 入力はこちら。
 0行目:27 30 23 30 18 20 18 18 15 17 15 15
 1行目:0 0 0 0 4 4 4 4 8 8 8 8 8 8 8 8
 2行目:t 12 >> 16 % PICK
 3行目:t 10 >> 4 % + 16 + PICK t SWAP % 5 * 32 &

 0行目には、上の表に書かれている1周期の長さが
 4音符×3パターン入っています。スタックなので、
 それぞれのパターン内は右から左に再生されます。
 
 1行目には各パターンへのオフセットテーブルが入っています。
 C3 F3 C3 D3 はスタック的には8音符先に放り込んでいるので、
 A3 A3 G3 A3 は4音符先、C4 C4 A#3 C4は0音符先
 例によってスタックですので再生は右から左になっており
 8音符先を8回、4音符先を4回、0音符先を4回を入力しています。
 
 2行目は1行目のオフセットを「t 12 >>」周期で
 右から0→15まで「PICK」します。これで 8x8 → 4×4 → 0×4を繰り返します。
 
 3行目では0行目に入っている1周期長を取り出すとり出す訳ですが
 「t 10 >> 4 % 」でまず 2行目より4倍早い周期で0→3を変化させています。
 その後の「+」で、2行目でとりだした オフセットを足し、続く「16 +」
 オフセットテーブル分を飛び越し、「PICK」で周期長を取り出します。

 少々複雑ですので、スタックの関係を図示しておきます。

 StackTables.png


 こういうアルゴリズムを書く場合は、鉛筆と紙が必須ですねー。


 次の「t SWAP % 」で、矩形波再生サイクルに取込みます。
 「%」はスタック1をスタック0で割った余りが出る為、
 割られる対象を後入れしたい場合、スタック0に入れておいてから「SWAP」
 ひっくり返す方法が便利です。この方法は「/」,「-」,「<<」,「>>」等で
 使えますね。これで結果的「t 周期長 %」となり、ノコギリ波の周期を
 変更します。

 最後に「5 *」で音量をあげ、「32 &」で矩形波にします。
 音量を小さめにしているのは、後でベースフレーズ、キックパート、
 ノイズパートをMIXする為のオーバーフロー対策です。

 
PULSE1.PNG


 音声はこちら
 
 



【② トラック2矩形波ベースフレーズ】
 トラック2の動作原理自体はトラック1と同じです。

 入力はこちら。
 4行:27 23 27 30 18 23 27 30 15 18 23 30
 5行:0 4 8 8 t 14 >> 4 % PICK
 6行:t 12 >> 4 % + PICK t 3 >> SWAP %
 7行:5 * 32 & 17 PICK +
 
 これといった違いはないのですが、
 楽譜は C3 D3 F3 D3 ×2回繰り返し、 C3 D3 F3 A3、 C3 F3 A3 C4
 となっており、トラック1の4分の1の速度で進む為、
 右シフト数が2づつ多い事と、3オクターブを下げる為に
 6行目に「t 3 >> 」が入っています。

 
PULSE2.PNG
 

 音声はこちら。

 

 7行目の最後の「+」でトラック1とのMIXをしています。



【③ トラック3 三角波によるキック作成】

 さて、RP2A03クラシック魂にのっとって、三角波によるキックを
 再現してみます。三角波によるキックは、ざっくりいえば
 ダウンスイープによって作ります。


 入力はこちら。
 8行目:0 16 32 48 64 80 64 48 32 16
 9行目:t t 7 >> 32 % / 10 % PICK 11 PICK +


 8行目には三角波の波形が入っています。
 9行目の「t 7 >> 32 %」によって128分1ステップで0→31迄ループします。
 その結果を「t t 7 >> 32 % /」となっていますので「t 0 /」→「t 31 /」
 「サイクルスピードの変化がループする」ことになります。
 「10 % PICK」でその「サイクルスピードの変化がループ」をTABLEに当てはめ
 「周波数が低く変化していく三角波(角速度が減速していく三角波)」
 作成しています。

TRI3.PNG


 音声はこちら。

 

 8行目 9行目で11スタックを使用していますので、「11 PICK」
 トラック1、2の出力結果を引っぱり出して、「+」で結果を合成します。



【④ トラック4 ノイズの追加】

 この行は短いですが、8bitマシンでプログラムする上では
 常套手段といえるbitフラグのスライドをやっています。

 入力はこちら
 10行目:165 t 10 >> 8 % >> DUP 1 & 0 > &
 11行目:t t * * 63 % +

 「165」がbitフラグ用の値です。2進数に直すと「1010 0101」となっており
 これをノイズONフラグとして使用します。
 「t 10 >> 8 %」「t 10 >>」サイクルで0→7を繰り返し、
 「165 0 >>」→「165 7 >>」をループするようになります。


 計算式  結果 
 165 0 >>  1010 0101 
 165 1 >>  0101 0010 
 165 2 >>  0010 1001 
 165 3 >>  0001 0100 
 165 4 >>  0000 1010 
 165 5 >>  0000 0101 
 165 6 >>  0000 0010 
 165 7 >>  0000 0001 



 さてこの結果を「1 &」すると、下1桁の値だけをとり出す事ができますので
 「1 0 1 0 0 1 0 1」と8分音符でいうと「1拍、3拍、6拍、8拍」でONになる
 リズムが作成されました。
 
 これを「0 >」とすると
 0の時は「0000 0000 0000 0000 0000 0000 0000 0000」
 1の時は「1111 1111 1111 1111 1111 1111 1111 1111」
 となります。

 この値を11行目の「t t * *」に放り込めばそのまま「0」「t t *」
 「1拍、3拍、6拍、8拍」に出力されるのですが、音色変化が欲しかったので
 前もって、「DUP」でコピーしておいた自分自身と「&」をとります。


 計算式  結果
 165 0 >> DUP 1 & 0 > &  1010 0101 
 165 1 >> DUP 1 & 0 > &  0000 0000 
 165 2 >> DUP 1 & 0 > &  0010 1001 
 165 3 >> DUP 1 & 0 > &  0000 0000 
 165 4 >> DUP 1 & 0 > &  0000 0000 
 165 5 >> DUP 1 & 0 > &  0000 0101 
 165 6 >> DUP 1 & 0 > &  0000 0000 
 165 7 >> DUP 1 & 0 > &  0000 0001 


 10行目は、短いコードですが、このような結構面倒なパラメータ変化を
 作りだしています。
 
 11行目で「t t * *」の値と10行目の値を掛けます、盛大に値がオーバーフローして
 ノイズっぽい値となりますが、いまいち音程が残ってしまうので
 「63 %」で音量を下げると共に、分解能を落として
 ノイズっぽさを上げています。

NOISE4.PNG


 音声はこちら。

 

 これを「+」で9行目の結果と足して、晴れて
 全てのトラックのMIXが完了します。

 MIX音声はこちら。
 


さて、長かったGlitch Machine解析班もこれにて解散です。
やろうと思えば、まだまだ細かいテクニックは山ほどあるのですが
基本となる所はほぼカバーできていると思います。

iphoneさえあれば、¥250-で楽しめるglitch Machine。
欲をいえば、MIDI入力がパラメータとして入力できたりすれば
直にライブに使えたりするので面白いのですが、
現時点でも通勤通学中に音がどのように作られているかを、
シンセサイズ脳を鍛える事ができる
非常に有意義なツールといえるのではないでしょうか?

最後に、
本連載はアプリ作者などから金銭の授受や依頼は無く
自発的エクストリームタダ働きで作成いたしました!!

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。