毎度、いかおです。
前回はサイン波を作成してならせてみせましたが今度はノコギリ波を作ります。
先ず、ノコギリ波はどんな波形かというと・・・・
そこはグーグル先生に聞いて下さい。
【その原理】
「キャリアとモジュレータとの周波数を1:1にするとノコギリ波が作れる」
ということなので、いわゆるFM音源的アプローチで(サイン波はできてるので)作ってみます
先ず、1サイクルのサイン波を作成する。コレは前回の私の投稿であるここを参考にして・・・・
例えば1サイクルのサイン波はこんな感じで作れるかな?
static const float PI = 3.141592f; static const float SamplingRate = 48000.0f; static const float Heltz = 440.0f; //ラ〜♪ static const float DegBase = 360.0f; float width = DegBase / (SamplingRate / Heltz); float vals[360]; floart deg = 0.0f; int n = n; for(int i=0;i < 360){ if(deg > DegBase)break; vals[i] = sin(deg * PI / 180); deg = deg + width; n++; }
そしてアドレステーブルを作成する。FM音源はこのアドレステーブルを他のサイン波と加算したりして変調し変調された順番で元のサイン波を取り出す。なんだか無茶な方法に見えるけどしょせん楽器なんでいいか・・・
int addresTable[360]; // アドレステーブルはintにしとこう for(int i=0;i < n;i++){ addressTable[i]=i; }
そして変調だ。元のサイン波と混ぜてしまう
int editedAddressTable[360]; //これもint for(int i=0;i < n;i++){ editedAddressTable[i] = vals[i] + addressTable[i]; }
そして取り出す・・・
float answer[360]: for(int i=0;i < n;i++){ answer[i] = vals[editedAddressTable[i]]; } // このanswerがFM変調後の音です
これが本当にノコギリ波になるのか?
次回、作ってみます