SlideShare a Scribd company logo
VSTiつくるよ

              2012/6/10
          Twitter:@y3eadgbe
VSTiつくるよゼミ(http://www38.atwiki.jp/vstisemi/)
ソフトウェアシンセつくりたい

●   そもそもシンセってなによ
    –   シンセサイザー入門(http://www.groovecube.com/ja/tutorial/)
    –   いわゆる減算式シンセサイザーを作りたい

●   どうやって音を出すか
    –   スタンドアロン(OpenALなりAPI直接いじるなり)
        ●   DAWとの連携が難しい(Rewire対応?)

    –   DAWのプラグイン形式(VSTなど)
        ●   信号処理部分に注力できる
        ●   DAW等のHostとの連携が前提
        ●   作ったシンセを使える!!
VSTってなによ

●   Steinberg's Virtual Studio Technology
    –   DAW等のホストで使えるプラグインの規格
    –   Steinberg社の独自規格だがかなり普及している
    –   主にWindows用
    –   SDKが公開されている(要developer登録)
        (http://www.steinberg.net/en/company/developer.html)
    –   言語はC++(Delphi用のSDKもあるらしい)
VSTつくるよ

●   用意するもの
    –   Visual C++
    –   動作確認用のVST Host
●   SDKをダウンロードする
    –   VST2.4と3.0があるが2.4の方が対応Hostも多く無難
●   SDKのマニュアルを見る
    –   英語わからん
    –   それを差し引いても不親切
VSTつくるよ

●   サンプルを見る
    –   付属のサンプル
        ●   コメントにもあるようにシンセとしてはまずい(wiki参照)

    –   かの有名なSynth1の作者Daichiさんによる神サンプル
        ●   Synth1(http://www.geocities.jp/daichi1969/softsynth/)
        ●   サンプル(http://www.geocities.jp/daichi1969/vstisample/)
        ●   親切かつ大きさも手頃でわかりやすい
        ●   Webページにシンセ制作のノウハウがいろいろ載っている
        ●   これ見てもらえば他に書くことないのでは……
VSTつくるよ

●   結局何を作ればよいのか
    –   AudioEffectXクラスを継承したクラスを作り      
        各種メソッドを実装
        ●   Hostからの問い合わせに答える系メソッド
            –   getEffectName() など
        ●   MIDIイベントの処理
            –   processEvents()
        ●   信号処理(シンセの本体)
            –   processReplacing()
            –   ここを簡単に解説
信号を処理するよ

●   減算式シンセサイザーの構成要素
    –   VCO(Oscillator)
        ●   基本波形の生成

    –   VCF(Filter)
        ●   音色の調節

    –   VCA(Amplifier)
        ●   音量の調節

    –   その他
        ●   LFO, エフェクト
信号を処理するよ

●   減算式シンセサイザーの構成要素
    –   詳しくはシンセサイザー入門などで
        http://www.groovecube.com/ja/tutorial/architecture.html



                         VCF           VCA             Effects
           VCO




                                                        音声

          MIDI          Parameters           LFO        制御
波形を作るよ

●   減算式シンセサイザーの構成要素
    –   VCO(Oscillator)
        ●   基本波形の生成

    –   VCF(Filter)
        ●   音色の調節

    –   VCA(Amplifier)
        ●   音量の調節

    –   その他
        ●   LFO, エフェクト
波形を作るよ

●   Oscillator
    –   正弦波、三角波、のこぎり波、矩形波などの基本波形を 
        なるべくノイズなく生成する
    –   生成方法(http://www.geocities.jp/daichi1969/synthprog/)
         ●   WaveTable方式
              –   計算が軽くて音質もそこそこ
              –   この方式について説明
         ●   BLIT(Bandlimited Impulse Train)
              –   原理的にエイリアスノイズが発生しないらしい
              –   よくわからんので@taranai_bot氏に解説は任せた
波形を作るよ

●   まずは正弦波
    –   sin(x)を毎フレーム計算すればよいのでは?
        ●   sinとか毎回計算してたら重い

    –   前もって1周期分のテーブルを作っておく
        ●   間の値は一次補間で得る
        ●   そこそこ綺麗な正弦波が得られる
波形を作るよ

●   他の波も同様?
    –   三角波、矩形波などは倍音を無限に含む
    –   単純に波形を離散化するとサンプリング周波数の半分の
        周波数までしか表すことができない(ナイキスト周波数)
        ●   消えた倍音はどこへ? → エイリアスノイズ
波形を作るよ

●   ではどうするか
    –   ナイキスト周波数までの正弦波の足しあわせで波を表現
        ●   フーリエ級数展開の結果を用いる
        ●   周波数によって含むべき倍音の数が変わるので、       
            それぞれについて波形テーブルを作成
波形を作るよ

●   その他
    –   ノイズ波形
        ●   ホワイトノイズの場合は振幅を正規乱数で生成すれば良い
            –   Box-Mullar法(logと三角関数使うので少し重そう)
            –   正規乱数で作ったテーブルをループぐらいで問題ないかも?
    –   矩形波のduty比を変える
        ●   矩形波のパルス幅を変えると倍音の割合が変わる
        ●   WaveTable形式の場合事前に全ての波形を作っておくしかない?
        ●   誰か教えてください
フィルタかけるよ

●   減算式シンセサイザーの構成要素
    –   VCO(Oscillator)
        ●   基本波形の生成

    –   VCF(Filter)
        ●   音色の調節

    –   VCA(Amplifier)
        ●   音量の調節

    –   その他
        ●   LFO, エフェクト
フィルタかけるよ

●   デジタルフィルタとは
    –   離散化された信号にいろいろ処理をするもの
    –   http://ufcpp.net/study/digital_filter/

●   Low-pass Filter, High-pass Filter, Band-pass Filter
    –   それぞれ高周波、低周波をカットするフィルタ
    –   “Cookbook formulae for audio EQ biquad filter coefficients”
        (http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt)
         ●   Biquadフィルタという形式のIIRフィルタについてまとめたもの
         ●   日本語解説(http://www.g200kg.com/jp/docs/makingvst/04.html)
         ●   LPF, HPF, BPFが簡単に実装できる
音量かえるよ

●   減算式シンセサイザーの構成要素
    –   VCO(Oscillator)
        ●   基本波形の生成

    –   VCF(Filter)
        ●   音色の調節

    –   VCA(Amplifier)
        ●   音量の調節

    –   その他
        ●   LFO, エフェクト
音量かえるよ

●   ADSR方式
    –   鍵盤を押してからの音量の変化の方式
        ●   Attack: 最大音量になるまでの時間
        ●   Decay: 最大音量になってからSustainまで減衰する時間
        ●   Sustain: 鍵盤を押し続けた時の音量
        ●   Release: 鍵盤を離した後音が消えるまでの時間
            音量



            S



                                    時間
                 A   D       R
音量かえるよ

●   音量変化について
    –   人間の耳は振幅の変化を対数スケールで認識する
    –   ASDRスロープの変化を指数的にしたほうが自然かも
        ●   スロープの変化を線形や指数関数から選べるシンセもあるみたい
その他

●   パラメータの変化
    –   パラメータを素早く変えるとクリックノイズが生じる
    –   ほぼあらゆるパラメータはなめらかに変えるべき
        ●   音量、フィルタ

●   非正規化数
    –   浮動小数点で計算していると非正規化数というごく小さい
        値が現れる場合がある
    –   非常に処理が重くなるので、ある程度小さくなった値は
        0にするとよいかも

More Related Content

What's hot

Kashiwa.r.10
Kashiwa.r.10Kashiwa.r.10
Kashiwa.r.10
Caru Shi
 
女子美術大学メディアアート演習ⅡB 2012 Spring 第10回 1/2
女子美術大学メディアアート演習ⅡB  2012 Spring 第10回 1/2女子美術大学メディアアート演習ⅡB  2012 Spring 第10回 1/2
女子美術大学メディアアート演習ⅡB 2012 Spring 第10回 1/2Satoru Tokuhisa
 
TechnoTUT Lecture(Mixing&Mastering)
TechnoTUT Lecture(Mixing&Mastering)TechnoTUT Lecture(Mixing&Mastering)
TechnoTUT Lecture(Mixing&Mastering)
NU_Pan
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門
l_b__
 
Elog and Ebuild Phase Hook
Elog and Ebuild Phase HookElog and Ebuild Phase Hook
Elog and Ebuild Phase Hook
Yasuhiro Asaka
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門
l_b__
 
[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLT[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLT
Yoshifumi Yamaguchi
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理
Norishige Fukushima
 
perl meets beats.
perl meets beats.perl meets beats.
perl meets beats.
technocat
 
pythonワンライナーのすゝめ
pythonワンライナーのすゝめpythonワンライナーのすゝめ
pythonワンライナーのすゝめ
cocu_628496
 

What's hot (11)

Kashiwa.r.10
Kashiwa.r.10Kashiwa.r.10
Kashiwa.r.10
 
女子美術大学メディアアート演習ⅡB 2012 Spring 第10回 1/2
女子美術大学メディアアート演習ⅡB  2012 Spring 第10回 1/2女子美術大学メディアアート演習ⅡB  2012 Spring 第10回 1/2
女子美術大学メディアアート演習ⅡB 2012 Spring 第10回 1/2
 
TechnoTUT Lecture(Mixing&Mastering)
TechnoTUT Lecture(Mixing&Mastering)TechnoTUT Lecture(Mixing&Mastering)
TechnoTUT Lecture(Mixing&Mastering)
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門
 
Elog and Ebuild Phase Hook
Elog and Ebuild Phase HookElog and Ebuild Phase Hook
Elog and Ebuild Phase Hook
 
Ssaw08 1111
Ssaw08 1111Ssaw08 1111
Ssaw08 1111
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門
 
[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLT[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLT
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理
 
perl meets beats.
perl meets beats.perl meets beats.
perl meets beats.
 
pythonワンライナーのすゝめ
pythonワンライナーのすゝめpythonワンライナーのすゝめ
pythonワンライナーのすゝめ
 

Recently uploaded

論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
atsushi061452
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 

Recently uploaded (15)

論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 

VSTiつくるよゼミ

  • 1. VSTiつくるよ 2012/6/10 Twitter:@y3eadgbe VSTiつくるよゼミ(http://www38.atwiki.jp/vstisemi/)
  • 2. ソフトウェアシンセつくりたい ● そもそもシンセってなによ – シンセサイザー入門(http://www.groovecube.com/ja/tutorial/) – いわゆる減算式シンセサイザーを作りたい ● どうやって音を出すか – スタンドアロン(OpenALなりAPI直接いじるなり) ● DAWとの連携が難しい(Rewire対応?) – DAWのプラグイン形式(VSTなど) ● 信号処理部分に注力できる ● DAW等のHostとの連携が前提 ● 作ったシンセを使える!!
  • 3. VSTってなによ ● Steinberg's Virtual Studio Technology – DAW等のホストで使えるプラグインの規格 – Steinberg社の独自規格だがかなり普及している – 主にWindows用 – SDKが公開されている(要developer登録) (http://www.steinberg.net/en/company/developer.html) – 言語はC++(Delphi用のSDKもあるらしい)
  • 4. VSTつくるよ ● 用意するもの – Visual C++ – 動作確認用のVST Host ● SDKをダウンロードする – VST2.4と3.0があるが2.4の方が対応Hostも多く無難 ● SDKのマニュアルを見る – 英語わからん – それを差し引いても不親切
  • 5. VSTつくるよ ● サンプルを見る – 付属のサンプル ● コメントにもあるようにシンセとしてはまずい(wiki参照) – かの有名なSynth1の作者Daichiさんによる神サンプル ● Synth1(http://www.geocities.jp/daichi1969/softsynth/) ● サンプル(http://www.geocities.jp/daichi1969/vstisample/) ● 親切かつ大きさも手頃でわかりやすい ● Webページにシンセ制作のノウハウがいろいろ載っている ● これ見てもらえば他に書くことないのでは……
  • 6. VSTつくるよ ● 結局何を作ればよいのか – AudioEffectXクラスを継承したクラスを作り       各種メソッドを実装 ● Hostからの問い合わせに答える系メソッド – getEffectName() など ● MIDIイベントの処理 – processEvents() ● 信号処理(シンセの本体) – processReplacing() – ここを簡単に解説
  • 7. 信号を処理するよ ● 減算式シンセサイザーの構成要素 – VCO(Oscillator) ● 基本波形の生成 – VCF(Filter) ● 音色の調節 – VCA(Amplifier) ● 音量の調節 – その他 ● LFO, エフェクト
  • 8. 信号を処理するよ ● 減算式シンセサイザーの構成要素 – 詳しくはシンセサイザー入門などで http://www.groovecube.com/ja/tutorial/architecture.html VCF VCA Effects VCO 音声 MIDI Parameters LFO 制御
  • 9. 波形を作るよ ● 減算式シンセサイザーの構成要素 – VCO(Oscillator) ● 基本波形の生成 – VCF(Filter) ● 音色の調節 – VCA(Amplifier) ● 音量の調節 – その他 ● LFO, エフェクト
  • 10. 波形を作るよ ● Oscillator – 正弦波、三角波、のこぎり波、矩形波などの基本波形を  なるべくノイズなく生成する – 生成方法(http://www.geocities.jp/daichi1969/synthprog/) ● WaveTable方式 – 計算が軽くて音質もそこそこ – この方式について説明 ● BLIT(Bandlimited Impulse Train) – 原理的にエイリアスノイズが発生しないらしい – よくわからんので@taranai_bot氏に解説は任せた
  • 11. 波形を作るよ ● まずは正弦波 – sin(x)を毎フレーム計算すればよいのでは? ● sinとか毎回計算してたら重い – 前もって1周期分のテーブルを作っておく ● 間の値は一次補間で得る ● そこそこ綺麗な正弦波が得られる
  • 12. 波形を作るよ ● 他の波も同様? – 三角波、矩形波などは倍音を無限に含む – 単純に波形を離散化するとサンプリング周波数の半分の 周波数までしか表すことができない(ナイキスト周波数) ● 消えた倍音はどこへ? → エイリアスノイズ
  • 13. 波形を作るよ ● ではどうするか – ナイキスト周波数までの正弦波の足しあわせで波を表現 ● フーリエ級数展開の結果を用いる ● 周波数によって含むべき倍音の数が変わるので、        それぞれについて波形テーブルを作成
  • 14. 波形を作るよ ● その他 – ノイズ波形 ● ホワイトノイズの場合は振幅を正規乱数で生成すれば良い – Box-Mullar法(logと三角関数使うので少し重そう) – 正規乱数で作ったテーブルをループぐらいで問題ないかも? – 矩形波のduty比を変える ● 矩形波のパルス幅を変えると倍音の割合が変わる ● WaveTable形式の場合事前に全ての波形を作っておくしかない? ● 誰か教えてください
  • 15. フィルタかけるよ ● 減算式シンセサイザーの構成要素 – VCO(Oscillator) ● 基本波形の生成 – VCF(Filter) ● 音色の調節 – VCA(Amplifier) ● 音量の調節 – その他 ● LFO, エフェクト
  • 16. フィルタかけるよ ● デジタルフィルタとは – 離散化された信号にいろいろ処理をするもの – http://ufcpp.net/study/digital_filter/ ● Low-pass Filter, High-pass Filter, Band-pass Filter – それぞれ高周波、低周波をカットするフィルタ – “Cookbook formulae for audio EQ biquad filter coefficients” (http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt) ● Biquadフィルタという形式のIIRフィルタについてまとめたもの ● 日本語解説(http://www.g200kg.com/jp/docs/makingvst/04.html) ● LPF, HPF, BPFが簡単に実装できる
  • 17. 音量かえるよ ● 減算式シンセサイザーの構成要素 – VCO(Oscillator) ● 基本波形の生成 – VCF(Filter) ● 音色の調節 – VCA(Amplifier) ● 音量の調節 – その他 ● LFO, エフェクト
  • 18. 音量かえるよ ● ADSR方式 – 鍵盤を押してからの音量の変化の方式 ● Attack: 最大音量になるまでの時間 ● Decay: 最大音量になってからSustainまで減衰する時間 ● Sustain: 鍵盤を押し続けた時の音量 ● Release: 鍵盤を離した後音が消えるまでの時間 音量 S 時間 A D R
  • 19. 音量かえるよ ● 音量変化について – 人間の耳は振幅の変化を対数スケールで認識する – ASDRスロープの変化を指数的にしたほうが自然かも ● スロープの変化を線形や指数関数から選べるシンセもあるみたい
  • 20. その他 ● パラメータの変化 – パラメータを素早く変えるとクリックノイズが生じる – ほぼあらゆるパラメータはなめらかに変えるべき ● 音量、フィルタ ● 非正規化数 – 浮動小数点で計算していると非正規化数というごく小さい 値が現れる場合がある – 非常に処理が重くなるので、ある程度小さくなった値は 0にするとよいかも