Hatena::ブログ(Diary)

aikeの日記 RSSフィード

2015-11-13 今夜わかるFM音源 その2

そんなわけで、いくつかreface DXで音色を作ってみます。お題としてはマイク・オールドフィールドチューブラーベルズ。後半に様々な楽器が同じフレーズを順番に演奏するパートがあり、そこに出てくる楽器をひととおりFM音源で再現してみます。

 

できた音はこんな感じです。全楽器reface DXだけで作成し、録音時のエフェクト加工などもしていません。

Download

 

Grand Piano (0:00)

グランドピアノの音は、アタック付近では倍音の多いノコギリ波、サスティンに従って正弦波のような甘い音になっていきます。前回も紹介したアルゴリズム8番で実装します。アタックが鋭すぎるとピックで弾いたような音になってしまうので、すこしなだらかな立ち上がりとします。

ピアノの音は、ひとつの音ならわりと簡単に作れるものの、低音から高音まで、弱い音から強い音まですべて似せるのはわりと大変です。キーボードスケーリングで低い方の倍音を多めにして力強さを加え、ベロシティセンスで強く弾いたときに倍音が多くなるようにしています。

最後に深いリバーブでボディとコンサートホールの響きを表現します。

reface capture用QRコード

 

Reed and Pipe Organ (0:23)

なんだかよくわからないオルガン系の音です。

普通のパイプオルガンアルゴリズム12の加算合成や、フィードバックによる矩形波を作ると作りやすいです。ここではもう少しリードの特徴を出すためにフィードバックでノコギリ波を加えてクセのある音にしています。

QRコード

 

Glockenspiel (0:46)

FM音源の得意な金属音。

プリセット4-7 GlassHarpをもとに、EGを金属的なアタックにして調整します。金属音はキャリアに対して3.5倍のFREQのモジュレータという定番の設定ですね。

QRコード

 

Bass Guitar (1:09)

ベースギターはプリセット1-6 DarkBassの音をもとに調整しました。

弦のベースらしいアタック感とサスティンをEGで作るだけでそれらしくなります。モジュレータであるOP2とOP4を下げめにすると落ち着いたベース音です。今回はメロディを弾くため不自然にならない程度に上げてドライブ感を出しています。

QRコード

 

Double Speed Guitar (1:32)

ちょっと風変わりなエレキギタークリーントーン

コツコツしたアタックと中高域にクセのあるサスティンは、FM音源では意外と再現が難しいです。瞬間的な矩形波でアタックを、キャリアOP3とモジュレータOP4の周波数比を 2:3 にしてサスティンのクセを表現しています。さらにモジュレータOP4の立ち上がりを少し遅くすることで、弦が共振して遅れて倍音が増える雰囲気を出しました。また、歪んでると気づかないくらい薄くディストーションをかけてアナログ感を出しています。

QRコード

 

Two Slightly Distorted Guitar (1:55)

歪んだギター。

Bass Guitarをオクターブ上げてEFFECTのディストーションをかけるとそれだけで良い感じになります。ギターの歪みは矩形波に近いので、エフェクトをかける前の音もFBで矩形波に近づけると雰囲気が出ます。

今回は原曲風のゴツゴツしたアタックを再現しましたが、人間の弾くギターのアタックはとても多彩なので無理にアタックを強調しない方が良い場合が多いと思います。上手いギタリストレガート奏法のようななめらかなアタックを出すために、MONOモードにするのもおすすめです。

QRコード

 

Mand...lin (2:17)

マンドリントレモロ

小さめのボディの共鳴を再現するため矩形波に近い波形にします。マンドリンは弦が2本ずつ張ってあるためコーラスエフェクトをかけます。refaceにはトレモロの再現に便利なEG LoopがないのでLFOでがんばります。がんばったけど、あんまり似なかったので深めのリバーブでごまかします。

QRコード

 

Spanish Guitar and Introducing Acoustic Guitar (2:40)

これは原曲でも他の音に混ざってよく聞こえないので普通にアコギの単音ソロ風の音を作ってみました。定番のアルゴリズム8で、ボディが低く響くサスティンとアコギの弦特有のトレブリーな倍音を組み合わせています。これもモジュレータの立ち上がりを少し遅くして共振の隠し味を加えています。また、ベロシティセンスを上げめにしてダイナミクスをつけやすくしました。

QRコード

 

and Tublar Bells! (3:04)

最後にチューブラーベルズ。

プリセットにあるのであんまりすることがないです。プリセットの音は残響が長すぎるので少し調整。

FM音源では金属音が出しやすいものの、どうしても柱時計のような音になりがちなのでモジュレータを上げすぎないなど工夫が必要です。原曲のチュブラーベルズの音はローをカットしたような音なので二つのキャリアの一方をオクターブ上にしてみます。でもやっぱりreface DXだけでは再現が難しいです。

今回はやっていませんが、後からイコライザーをかけてローカットするとそれっぽくなると思います。

QRコード

 

2015-11-07 今夜わかるFM音源

reface DXいいですね。あえてDX7シリーズに近い音源仕様と、現代的な使いやすい操作性とを組み合わせることで、FM音源本来の音作りの楽しさがあります。とはいえ、先日Web Music Developer Meetup@Sapporoの参加者と話して、こういったイベントに参加するような人でも、FM音源でイメージどおりの音をつくるのは難しいと感じる人が多いようでした。そんなわけで、今回はちょっと実践的な音作り方法について書いてみようと思います。

 

■キャリアとモジュレータ

FM音源はオペレータと呼ばれる発振モジュールを組み合わせて音をつくります。変調される側をキャリア、する側をモジュレータと呼びますが、これは相対的なもので、アルゴリズムによっては変調されたキャリアがまた別のオペレータのモジュレータになることもあります。

 

と、いうようなよくある説明を読んでもなかなか音色にむすびつかないですよね。ここでは、自分の場合の音作りのワークフローを例に説明していきます。

 

ハープの作成

最初の例としてハープの音をつくることにします。オーケストラの後ろの方で優雅にポロロンと弾いているあれです。

 

1. アルゴリズムの選定

音色の特徴はアタック時の波形とサスティン時の波形にあらわれやすいです。一般的にアタックは倍音ノイズを多く含み、サスティンは倍音が少ないので、アタックの音色とサスティンの音色を別々につくって最後にバランスをとる、という進め方がおすすめです。

 

こういった考え方の音作りに一番便利なアルゴリズムは8番です。アタック用とサスティン用にキャリアとモジュレータが一組ずつ使えます。実際プリセットもこれを使っているのが多くて、DXの音として名高いエレピやマリンバプリセットもこのアルゴリズムです。

f:id:aike:20151107165855j:image


図を見てわかるように最終出力につながるオペレータが2個あります。これが1個のアルゴリズムはエグい音用、2個は汎用的、3〜4個になるとオルガンやパッドのような音、というような大まかなイメージです。


2. エンベロープ仮設定

reface DXのEGはDX7と同じくパラメーターが多くて大変です。なので、初期値としてパラメーターを以下のようにしてしまって、通常はR1(A)、 R3(D)、 L3(S)、R4(R)だけ操作するようにしてしまえれば、一般的なシンセADSRと同じなので作業のとっかかりが楽になります。その後微調整したくなったときにはじめて他のパラメーターを触るようにします。

 L1:127 L2:127 L3:64 L4:0

 R1:127 R2:127 R3:64 R4:64

f:id:aike:20151107165901j:image


今回は、減衰音ということでL3=0にして、サスティン用にオペレータ1の減衰時間R3を長めの50に、アタック用にオペレータ3の減衰時間R3を短めの100にします。あとで微調整するのでここではざっくりの設定です。

Download


3. サスティン音の作成

さて、ハープのような弦をはじく楽器(撥弦楽器)の場合、弦の振動正弦波かそれに近いノコギリ波の軌道を描きます。

https://www.youtube.com/watch?v=6sgI7S_G-XI

これはreface DXの場合、FEEDBACKだけで再現できそうです。まずオペレータ1以外のLEVELを0にします。次にオペレータ1のFEEDBACKをそれっぽい音になるまで上げていきます。40くらいが良さそうです。またこのときEGのR1、R3、R4を微調整します。

Download

ちなみに、キャリアとモジュレータの周波数比の定番としては以下のようなものがあります。reface DXはFEEDBACKでいろいろできてしまいますが、知識として知っておくとなにかと役立ちます。

 ・ノコギリ波 1:1 ブラス、ストリングス

 ・矩形波 1:2 クラリネット、笛、レトロゲーム

 ・金属音 1:3.5


4. アタック音の作成

こんどはオペレータ1のLEVELを0にして、代わりにオペレータ3のレベルを上げてアタック音を調整します。ハープは、指で弾くためアタック時のノイジーな高周波はほぼゼロと考えてよさそうです。

次にハープの構造をググって調べます。奏者のおねえさんが抱えているあたりに、アコースティックギターのような共鳴胴とサウンドホールがあるようです。ということは箱が共鳴するような中域が響く音だと予想できますね。中域が共鳴する音は矩形波で再現しやすいのでオペレータ3のFEEDBACKをマイナス方向に下げていきます。-74にするとそれっぽくなってきました。EGのR1、R3、R4も同様に微調整します。R3は83くらいが良さそうです。

Download


5. エフェクトの設定

 ハープコンサートホールのようなところで鳴っている音がなじみ深いので、深めのリバーブをかけます。

Download


6.最終調整

サスティン(オペレータ1)とアタック(オペレータ3)とのレベルバランスをとったら完成です。今回はオペレータ2と4は使いませんでした。もう少し倍音を加えたいときに少しずつ上げるようにして使います。

Download

f:id:aike:20151107153540p:image

reface capture用QRコード


ストリングスの作成

次はストリングスを作ってみます。オーケストラ風の存在感のある音を目指します。


1.アルゴリズムの選定

ストリングスの音はバイオリンチェロなどたくさんの音が一斉に鳴っているところに特徴があります。そんなわけで全部のオペレータを並列に鳴らすアルゴリズム12を選びます。

f:id:aike:20151107165858j:image


2.エンベロープ仮設定

ストリングスは持続音でアタックが遅いので全部のオペレータを下のようなエンベロープにします。

 L1:127 L2:127 L3:127 L4:0

 R1:70 R2:127 R3:127 R4:90

Download


3.サスティン音の作成

バイオリンのような弓で弾く擦弦楽器の弦の振動は、典型的なノコギリ波の軌道を描きます。

https://www.youtube.com/watch?v=6JeyiM0YNo4

今回も鳴らすオペレータ以外のレベルをゼロにして、すべてのオペレータひとつずつのFEEDBACKをそれっぽい音になるまで上げていきます。60くらいで良い感じになりました。

Download


4.オクターブの調整

 オーケストラ弦楽器構成を想像して、低域、中域、高域にオペレータを振り分けます。オペレータ1のFREQを0.50、オペレータ2と3のFREQを1.00、オペレータ4のFREQを2.00にします。これで2オクターブに渡るユニゾンになります。

Download


5.厚み・広がりの調整

ピッチやタイミングが正確すぎると、たくさんの音が鳴っているようには聞こえません。プラスマイナス10くらいの範囲で各オペレータのデチューンを設定することで音に広がりが出ます。また、EGのR1(アタック)、R4(リリース)を微調整して適当にばらけさせました。

Download


6.エフェクトの設定

さらにたくさんの音で鳴っている効果をつけるため、コーラスエフェクトをかけます。ふたつめのエフェクトは、こちらもコンサートホールの響きを再現するためリバーブをかけます。各オペレータのレベルバランスも調整したらこんな感じ。

Download


7.最後にひと工夫

これでもかなり良い感じのストリングスですが、アタックのときに弓が弦にこすれるザリッとしたニュアンスを加えてみます。

オペレータ2のFEEDBACKを上げて倍音を加えます。また、オペレータ2のエンベロープを下のようにしてアタックは大きく、サスティンは他よりも小さくなるようにします。

f:id:aike:20151107165851j:image


他のオペレータも気持ちR1とFBを増やしてアタック感と倍音を加えます。全体のレベルバランスをとったらできあがり。

Download

f:id:aike:20151107153541p:image

QR

ね?簡単でしょ。

 

次回はピアノの音の作り方とか紹介できればと思ってます。こんなやつ。

Download

QR

2013-05-24 Web Audio APIでオシレーターの実装方式いろいろ試してみた

あなたの好きな波形は何ですか。人はだれしも思い入れのある波形があるかと思います。矩形波が好きなかたもいるようですが僕はだんぜんノコギリ波派です。ノコギリ波の優しくて存在感のある音色につつまれているだけでしあわせな気持ちになります。

 

そんなわけでみなさんこれから多くのシンセをWeb Audio APIで作成するかと思いますが、いくつかあるノコギリ波のオシレーター実装方法について比較してみたいと思います。また、ソフトシンセを作るうえで避けて通れないエイリアスノイズについて方式ごとの差異を聴き比べてみます。

 

こちらのページで実際に聴きながら読んでください。(Chrome推奨)

http://aikelab.net/sawwave/

 

■ナイーブな実装

    return 1.0 - (this.phase / Math.PI);

こんな感じの処理を1サンプルごとに呼ぶとノコギリ波になります。高い音になるほど濁ったようなエイリアスノイズが聴こえると思います。自分も完全に理解しているわけではありませんが、倍音周波数(例:440Hzの場合、880Hz, 1320Hz, 1760Hz, ...)がナイキスト周波数(例:サンプリングレート44100Hzの場合22050Hz)を越えると波形が再現できなくて可聴域にノイズが出るとのことです。そのため高次の倍音を多く含む波形ほどノイズが目立ちます。

この実装方法は処理としては軽いものの高音にはちょっと使えませんね。僕のWebAudioSynthはこの方式です:-p

 

■オーバーサンプリング

    var w = 0.0;
    var i;
    for (i = 0; i < this.oversampling; i++) {
        this.phase += this.delta / this.oversampling;
        if (this.phase > Math.PI * 2) {
            this.phase -= Math.PI * 2;
        }
        w += (1.0 - (this.phase / Math.PI)) / this.oversampling;
    }
    return w;

エイリアスノイズ対策として良く使われるのがオーバーサンプリングです。たとえばサンプリングレートの2倍の細かさで計算して、その後隣接する2サンプルの平均をとってもとのサンプリングレートに戻す処理をします。先ほどよりだいぶ良い感じですが2倍程度だとまだ上の方でノイズが目立ちます。また計算量も当然ナイーブな実装のn倍かかります。

takmizさんのWeb FM synthesizerはこの方式をとっているようです。

 

■加算合成

   var out = 0.0;
    var n;
    for (n = 1; ; n++) {
        if (this.frequency * n > this.samplerate / 2)
            break;
        var overtone = Math.sin(this.phase * n) / n;
        out += overtone;
        if (n >= this.highestharmonics)
            break;
    }
    return out;

高次倍音がナイキスト周波数を越えるとノイズになるのであれば、下から倍音を積み重ねていってナイキスト周波数に達したら積み重ねるのをやめればいいのでは、という考え方で倍音を加算合成する方法です。

確かにノイズは無くなりますが、1サンプルあたり何十回も三角関数を呼ぶなど計算量がとても多くなります。また20〜30回くらいで計算を打ち切ると低音の方で倍音が足りずに甘い音色になってしまいます。

Synth1のDaichiさんが公開しているVSTiシンセのサンプルソースはウェーブテーブル方式ですが、アプリ起動時にウェーブテーブルの波形データを加算合成で作っています。

 

■BLIT

    if (this.x >= 0.5) {
        this.x -= 1.0;
        this.p = this.samplerate / this.frequency;
        this.f = 1.0 / this.p;
        this.m = 2 * Math.floor(this.p / 2) + 1;
        this.sum = this.c3 = 0.0;
    }
    this.sum += this.m / this.p * Math.sin(this.m * this.x * Math.PI)
                / (this.m * Math.sin(this.x * Math.PI));
    this.x += this.f;
    this.c3 += this.f;
    return 2.0 * (this.sum - this.c3);

BLIT(Band Limited Impulse Train)は比較的新しいアルゴリズムです。g200kgさんのBLITのお話が詳しいです。

計算式よりもソースコードが好きなみなさんはTALさんのページの一番下を見ると良いと思います。

自分なりに解釈すると、これは「方眼紙に波形を書くとゆがんでしまうので逆向きにゆがませた方眼紙の上で波形を書く」ようなイメージと理解しています。方眼紙にあたるのが通常のImpulse Trainで、ゆがませた方眼紙がBand Limited Impulse Trainなのかと。

BLITは1サンプルにつき三角関数が2個なので加算合成などに比べれば軽いです。

ノイズが完全にはなくなっていないのは僕の実装が悪いせいかもしれません。BLITのJavaScriptでの実装例は、いまのところ他では見たことがありません。

 

■オシレーターノード

    this.onode = this.ctx.createOscillator();
    this.onode.type = 2;
    this.onode.connect(this.ctx.destination);
    this.onode.start(0);

ここまで書いておいてなんですが、Web Audio APIではオシレーターの部品が最初からあるので、ノコギリ波などそこに用意されている波形は普通にオシレーターノードで実装するのが正しい方法です。JavaScriptで実装するより当然軽いしカスタム波形も使えるようです。

実際に聴いてみるとノイズがないのはもちろんですが、音程切り替え時に少しポルタメントがかかる特徴があるようです。

ただ、残念なことに2013年5月現在FirefoxではオシレーターノードがAPIに存在しません。(前述の試聴ページではFirefoxの場合エミュレーションで鳴らしているので本来のオシレーターノードの音ではありません)

 

あとはやっぱりウェーブテーブル方式が良さそうなので今後調べてみたいと思っています。補間方式などいろいろノウハウがありそうな気がします。

2013-03-25 KORG MS-20で音作るよー その2

KORG MS-20で音作るよー その1の続き。

 

MS-20の魅力といえば、なんといってもパッチングですが、これを使いこなすにはそれなりに体系的な知識が必要です。以前にもMS-20のパッチングについて解説記事(その1その2)を書いたので詳しくはそちらを読んでみてください。

今回は簡単に丸暗記で使える定番パッチについて紹介します。

 

矩形波LFOをかける

デフォルトで三角波/ノコギリ波にになっているLFO矩形波にする方法です。

f:id:aike:20130324234414j:image

Download

 

ノイズをまぜる

MS-20は2系統のVCOとは独立したノイズジェネレーターが2種類用意されています。単純にまぜるにはこんな感じ。

f:id:aike:20130324234415j:image

Download

 

LFOで音をトリガ

LFOの出力を打鍵信号代わりに入力する方法。鍵盤を押さなくても音が定期的に鳴り続けます。

f:id:aike:20130324234840j:image

 

■サンプル&ホールド

レトロフューチャーなランダム音を鳴らす定番パッチ。FREQUENCY MODULATIONのEG1/EXTで音程変化を設定します。

f:id:aike:20130324234416j:image

Download

  

■コントロールホイールを使う

MS-20はデフォルトではコントロールホイール(モジュレーションホイール)がまったく機能しません。パッチをつなぐことではじめて使えるようになります。以下の設定ではTOTALにつないでいるので、FREQUENCY MODULATIONやフィルターのMG/T.EXTノブでピッチやフィルターに対するかかり具合を設定できます。

f:id:aike:20130324235436j:image

 

■モーメンタリースイッチを使う

コントロールホイール同様にモーメンタリースイッチもパッチでつながないと機能しません。モーメンタリースイッチをEG1のTRIG INに、EG1の出力をTOTALにつなぐと、スイッチを押したときにEG1のエンベロープに従ってピッチやフィルターを制御できます。かかり具合はMG/T.EXTノブで設定します。

f:id:aike:20130324235437j:image

 

■EG1のエンベロープを反転させる

EG1は打鍵したらピッチが上がりますが、EG1の反転信号をつなぐとピッチが下がるカーブになります。

f:id:aike:20130324235438j:image

 

■ディレイビブラー

これも定番パッチ。EG1のDELAY TIMEでビブラートがかかるまでの時間、FREQUENCY MODULATIONのEG1/EXTでビブラートの深さを設定します。当時としてはこういったエモーショナルな音が作れるシンセとしてMS-20は貴重でした。

f:id:aike:20130324235439j:image

 

そんなわけでMS-20 miniの発売が待ち遠しいですね。

 

関連記事

2010-12-20 KORG MS-20パッチパネル操作完全マスター

2010-12-31 KORG MS-20パッチパネル操作完全マスター(その2)

KORG MS-20で音作るよー その1

 

KORG iMS-20公式パーフェクトガイド

KORG iMS-20公式パーフェクトガイド

2013-03-24 KORG MS-20で音作るよー その1

近頃の若いもんはアナログシンセの音作りの基本を知らなくてけしからん、と思ったりします。まあそれも無理もないことで、昔はYAMAHA CS01やRoland SH-101のような入門者用のシンプルなシンセがありましたが、最近のシンセパラメータが複雑で、多彩な音が作れる反面使いこなすには難しいものが多い気がします。

 

そんなわけでまもなく発売されるMS-20 mini。シンプルなわりに音作りの幅が広くとてもバランスの良いシンセです。とはいえ、これもでたらめに触るだけではなかなか使いこなせないと思うので簡単に解説してみます。(画像と音はソフトシンセ版のLegacy Collectionを元にしています)

 

■基本設定

とりあえず基本の設定。パッチはなにもせず、フィルターも全開です。最初はここから2個のオシレーター(VCO)とエンベロープ・ジェネレーター(EG)だけを使ってみるとわかりやすいと思います。EGのうち、HOLD TIMEはキーボードを短く叩いたときでも一定時間押しているような効果を得るパラメータですが、慣れないうちはこれを使わずにADSRだけでも大丈夫です。

f:id:aike:20130324224022j:image

こんな感じの味気ない音が出ます。

Download

 

■VCO + EG

上の基本設定からVCOとEGの部分だけを使ってたとえばこんな感じの音を作れます。アナログシンセらしい太い低音でノコギリ波を鳴らすとそれだけで存在感がありますね。VCO2のピッチをわずかにずらして広がりを出しています。

f:id:aike:20130324224912j:image

Download

 

次に低めの矩形波と2オクターブ上の矩形波を組み合わせたリード音。少しポルタメントをかけると良い感じです。ミニモーグが登場した頃、それまでの楽器の何にも似ておらず、かつどこかで聞いたような親しみのあるこの手の音色が流行りました。

f:id:aike:20130324225309j:image

Download

 

■フィルター

次にフィルターを使ってみます。MS-20にはHPFとLPFが搭載されていますが、シンセらしい音を手っ取り早く作るにはHPFは全開にしたままでLPFを使いこなすのが良いと思います。PEAKはいわゆるレゾナンスなので、あなたの変態度に応じて上げてください。フィルターのエンベロープは音量と同じくEG2で制御されます。

f:id:aike:20130324225737j:image

Download

 

HPFとLPFの両方が搭載されていると周波数特性的にピークを2カ所作ることができて、これは人の声の母音の特徴に似ています。というわけでちょっと人の声のような音を作ったりもできます。

f:id:aike:20130324225919j:image

Download

 

LFO

次はゆっくりした周期のモジュレーションをピッチやフィルターにかけるLFOです。MS-20的にはMODULATION GENERATORと表記しています。LFOのWAVE FORMノブはちょっとわかりづらいですが、真ん中が三角波、左右に回すとノコギリ波に近づきます。矩形波にしたいときは簡単なパッチが必要です。LPFにLFOをかけるとこんな感じになります。

f:id:aike:20130324225920j:image

Download

 

■EG1の使い方

MS-20には2系統のEGが搭載されています。実は音量カーブやフィルターなどメインで使うのはEG2の方で、EG1はデフォルトでは音程変化をコントロールするため、わりと飛び道具的な使い方になります。

f:id:aike:20130324232022j:image

Download

 

■リングモジュレーター

VCO2をRINGにするとVCO1をVCO2でリング変調します。難しいことは考えずに変な音を出したいときに使います。VCO2のPITCHをグリグリいじるとみんな大好きな変態的な音が出ますね。

f:id:aike:20130324232023j:image

Download

 

そんなわけで次回パッチ編に続きます。

 

関連記事

2010-12-20 KORG MS-20パッチパネル操作完全マスター

2010-12-31 KORG MS-20パッチパネル操作完全マスター(その2)

KORG MS-20で音作るよー その2

 

KORG iMS-20公式パーフェクトガイド

KORG iMS-20公式パーフェクトガイド