SynthMaker奮闘日記~その3

今回はのこぎり波を作っていきます。
まずは小難しい理論をつらつら並べていくだけなのでそういうのが嫌いな人は無視してくださいw;

のこぎり波の理論


のこぎり波というのは図でも見てわかっていただけるように、ピーク値(最大値、または最小値)からもう一方のピーク値までを1方向に進む波のことです。
この図では上から下へ進んでいますが、逆の場合もあります。
しかし音色は変わらないので問題にはなりません。

音と云うのはおもしろいもので、周期的な波であればすべての音を正弦波で表すことができます。
長い目で見ればあらゆる音は周期的に変化するので理論的にはすべての音が表せると言っても過言ではないでしょう。

特に「のこぎり波」「方形波」「三角波」は倍音を組み合わせることで作ることができます。

下の図は「ウィキ・コモンズ」から引用した基準の正弦波に2~25倍波を混ぜた様子です。
(フリーライセンスらしいので使わせていただきました、違っていたら即削除します)

のこぎり波を式で表すと下の通りになります。

fは周波数、nfで倍音の周波数を表しています。
また、2πというのは弧度法で2π[rad]、つまり360度であることを意味しています。
この式ではtが引数でnは無限に変化します。
現在ほとんどのシンセのオシレーターではのこぎり波を選択することができますが、
あまり多くの周波数の波を合成しても聴こえなくなるため、nfが22050Hz(サンプリング周波数の半分)を超えない範囲の周波数を合成しているようです。
一番低い周波数(20Hz)では1102倍まで合成、11020Hzを超える周波数では1倍、つまり正弦波であるという計算になります。

のこぎり波を作ってみる

今回はのこぎり波を理解するためにも、あえて正弦波をいくつも合成する方法を使ってのこぎり波を作ります。
そして最後に一番簡単なのこぎり波の回路を示します。

しかし、ここで問題が起きます。
いったいいくつ正弦波を合成すればいいのでしょうか。
前回の正弦波は単音で済みましたが、今回の正弦波は多いと1102個の正弦波を合成しないといけません。
実はのこぎり波は他の倍音系の非正弦波に対して最も多くの波を合成する波になります。
次回次々回にわたって解説するのですが、方形波と三角波は551個。
どの波でも100個も正弦波を用意してたらCPUが重すぎて死んでしまいます。
これはいったいどうしましょう。

ここでさきほどののこぎり波のgifアニメを見ていただきたいのですが、
なんとなくのこぎり波の形は10倍音を超えたあたりから変化がなめらかになっているような気がします。
気がすると言ったら気がするんです(何
そんなわけで波は10個の正弦波で作ることにしましょう。

まずは正弦波を倍音仕様に作りかえる


まずは公式にあてはまるような正弦波を書きだせるように前回作った回路を設定し直しましょう。
imageプラグインエラー : ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (VST_02.PNG)
1つ目の波、つまり基準波(sin ωt)は前回と同じものですが、2倍波以降はそれぞれnという数値が絡んできます。
このnを考慮した正弦波を作りましょう。

音程

まず、nωtをつくります。
ωは角周波数といって、周波数を円で表したものです。(単位はrad/sec、時間をかけると円弧の角度が分かるようになる)
ω=2πf なので、この周波数fを(nf)にすれば倍音の角周波数が求められます。
つまり入力される周波数をn倍できるようにしましょう。

OSCの部分をつくりかえてみました。

この(I)で囲まれたコンポーメントは「Int」です。
プログラミング、特にC言語をやったことがある人は知っていると思いますが、「Int」は整数を返すコンポーメンとです。
「整数型」なんて呼ばれたりもしますが、その名前のとおり、整数以外の入力は受け付けません。
なので仮に小数を入力したとしても小数点以下の位は反映されません。
小数を反映するものもありますが、いずれ出てくるので、ここでは割愛します。

「Int」は、入力側に他のコンポーメントをつなげると入力される数値を表示し、
出力側につなげると、表示されている数値を返します。
ここでは入力側に何もつなげずに、1と入力しておきましょう。

さらに、「Hz to 0-1」の直前に「×」をいれて、かける値をさきほどの「Int」にします。

これで音程が倍音に沿って変わるようになりました。
キーボードを押しながら、Intのバーを上下してみてください。
通常の音階ではない、おもしろい変化をすると思いますw

音量

次は音量変化にも対応するようにしましょう。
音量はどうやら倍音の倍数に反比例するようです。
つまりは、さきほどの「Int」を音量から割ればいいのでしょう。

素直に「/」を入れてみました。
「/」は「×」と同様で、上の数値から下の数値を割るコンポーメントです。
ここで上下を間違えないでください。
間違えると音を激しく割ることとなります。

正弦波を10個作る

正弦波を倍音に対応することができるようになりました。
次はこの正弦波を複製します。

でもその前に、さきほど作ったコンポーメントを一つのコンポーメンとにしてみましょう。

この部分をドラッグして囲います。
図のように枠で囲まれるので「□」のボタンを押します。

すると、このように一つのコンポーメントにまとまります。
ついでに「N」を押して名前をつけておきましょう。
ここでは「sine」としておきました。
「+」を押すとコンポーメントとして登録もできるので、左のメニューをOSCに合わせたうえで「+」を押しておくと次回以降が便利です。
方形波、三角波でも使うので、是非登録しておきましょう。

さて、1つにしたのはいいですが、編集できないと困ります。
どうすればいいんでしょうか。
これにはふたつの方法があります。
1つはさきほどの枠の「▽」を押す方法、もう1つはコンポーメントをダブルクリックする方法です。
どちらも動作は変わらないので、やりやすい方法を選びましょう。

逆にこの画面から上の階層に戻るには、なにもないところでダブルクリックをします。

戻ったところでさきほど作ったコンポーメントを10個に複製しましょう。
コピーはファイル操作と同じで、右クリックでコピー&ペースト、もしくはCtrl+CとCtrl+Vでできます。
コピーした後、それぞれのコンポーメントのIntを1~10まで順番に設定します。

元の階層に戻った図がこれです。

ただ単に10個つなげるだけだと、音の波形が大きすぎたので、「Amp」をつなげました。
「Amp」は入力された値を軽減して返します。
なので音が小さくなります。

完成

以上でのこぎり波を生成する回路ができました。
出力された波形の結果がこれです。

一番最初に示した図には、ほど近くはなっています。
音の感じとしては「ミョ~」でしょうかw?
これがのこぎり波の特徴です。

最後に

今回はかなり長々と書きましたが、全部基本のコンポーメントの使い方ばかりです。
なので必ず押さえておきましょう。
逆に今回これを抑えていたら、次回は今回の回路から「方形波」「三角波」を作るだけなので、
かなり楽です。

最後に、最も簡単にした回路図を表示しておきます。

実はのこぎり波はのこぎり波用のコンポーメントがあるんですよねw;
まぁこれだけだとのこぎり波はどのようにできているのかまったくわからないので、
今回は正弦波から作ったのですが・・・
この回路で再生したときのないの形が下の図です。

かなりきれいな形になっています。
どれだけの波を混ぜているのかはわかりませんが、人の耳に聞こえる波としてはほぼ正確でしょう。

次回は「方形波」「三角波」を作ります。


最終更新:2010年03月16日 15:30
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。