[c++]additive synthesis のための三角関数高速化
TRANSCRIPT
Synthe
界よりシンセ
VST Development
& Sine Speed Test
About meアバウトミー
INTERESTS- Programming (C++,C#)- Music (EDM)- Design
TWITTERAstellon@astellon_music
Agendaアジェンダ
How great is Shirabe?「調」とは?
What’s ADDITIVE SYNTH ?加算合成シンセとは?Math.h v.s. My algorithmマスヘッダー 対 私のアルゴリズム
How great is Shirabe?「調」とは?
コンセプト概念
NEW GENERATIONS新世代のためのシンセ
誰も使ったことないようなある意味「使いにくい」シンセ
アンチアナログモデリング
Features特徴
4 x OSC with 128 sine waves
Flexible additive synthesis
Specific harmonic effect
VST Synth Powered by JUCE
Progress進捗
Work In Progress…現在誠意開発中… (´ ・ ω ・` )
サイン波を最大 128 音合成してのこぎり波を出すとこまでできてる。(フーリエ級数展開の逆、的な)
What’s ADDITIVE SYNTH ?加算合成シンセとは?
Types of synthesis合成方式
Subtractive減算
Frequency Modulation(FM)周波数変調Additive加算
Additive is …加算合成の特徴
Bright明るい
Flexible Sound Making柔軟な音作り
Difficult to use使いづらい
Implementation実装
Inverse FFTフーリエ逆変換
Oscillator bank synthesisオシレーターバンク(正弦波加算)
Wave tableウェーブテーブル
Adoption採用
Oscillator bank synthesisオシレーターバンク(正弦波加算)
ただし…膨大な sin の呼び出し
sin を足していくだけ自由度は高い!!(はず)
Math.h vs My algorithmマスヘッダー 対 私のアルゴリズム
SINE is SLOW?サインは遅い?
「 fast sine algorithm 」で検索→ 約 505,000 件
Sine is slow三角関数は遅いらしい
SINE is SLOWサインは遅い
Math の高速化を検証するhttp://qiita.com/shinido/items/613fd0dd62007bc2fff0
三角関数のテーブル引きによる高速化 http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Doc/misc/SinCos_Table.html
SINE is SLOWサインは遅い
Really?ほんと?
Algorithmアルゴリズム
1. Table Look Upテーブル引き
2. Bhaskara I‘s approximationバースカラによる近似
3. Parabolic approximation放物線による近似
Table Look Upテーブル引き
sin の値を事前にメモリに書き込み必要な時に読み出し
+ 線形補間でさらなる精度
sin 𝑥1sin 𝑥2sin 𝑥3sin 𝑥4sin 𝑥5
Bhaskaraバースカラによる近似
近似式
Bhaskaraバースカラによる近似
近似式
Measurement測定
自作のアルゴリズムを C++ で記述C++ の chrono ライブラリを使用
sin を 1000 万回呼び出すのにかかる時間を 10 回計測→1 loop にかかる時間を算出
デバッグ目的のため、最適化は切ってる。
Result結果
実行時間の比較
Result結果
Sine is fast.速いじゃん math.h (´ ・ ω ・` )
Considerations考察
Time for calling function関数の呼び出しに時間がかかる?
math.h だけが最適化されてる可能性(ただの言いがかりかもしれないが)
Reflection反省
多項式近似は割と雑
最適化の余地はある
SIMD 命令、アセンブラ
Conclusion結論
そろそろ開発しよう。
最適化に使った時間を最適化したかった。
ネットに書いてあることは、うかつに信用しないこと
Source Codeソースコード
最適化のコードはここに置いてあるから見て
https://github.com/k3ita/sin_speed_test
時間があれば編集するかも
Plan開発予定
2016 9 月~12 月
20171~3 月
4~6 月
9 月以降
開発開始実験期間
開発(メイン)(ここが伸びるかも)ブラッシュアップ主にメモリ、 CPU 関連リリース( β 版かも)
Plan開発予定
目標は
Free release無料の公開
KVR Developer ChallengeKVR 開発者の挑戦
Thank you for listening聴いてくれてありがとう