[c++]additive synthesis のための三角関数高速化

30
Synth e 界界界 界界界 VST Development & Sine Speed Test

Upload: keita-goto

Post on 21-Jan-2017

112 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: [C++]additive synthesis のための三角関数高速化

Synthe

界よりシンセ

VST Development

& Sine Speed Test

Page 2: [C++]additive synthesis のための三角関数高速化

About meアバウトミー

INTERESTS- Programming (C++,C#)- Music (EDM)- Design

TWITTERAstellon@astellon_music

Page 3: [C++]additive synthesis のための三角関数高速化

Agendaアジェンダ

How great is Shirabe?「調」とは?

What’s ADDITIVE SYNTH ?加算合成シンセとは?Math.h v.s. My algorithmマスヘッダー 対 私のアルゴリズム

Page 4: [C++]additive synthesis のための三角関数高速化

How great is Shirabe?「調」とは?

Page 5: [C++]additive synthesis のための三角関数高速化

コンセプト概念

NEW GENERATIONS新世代のためのシンセ

誰も使ったことないようなある意味「使いにくい」シンセ

アンチアナログモデリング

Page 6: [C++]additive synthesis のための三角関数高速化

Features特徴

4 x OSC with 128 sine waves

Flexible additive synthesis

Specific harmonic effect

VST Synth Powered by JUCE

Page 7: [C++]additive synthesis のための三角関数高速化

Progress進捗

Work In Progress…現在誠意開発中…  (´ ・ ω ・` )

サイン波を最大 128 音合成してのこぎり波を出すとこまでできてる。(フーリエ級数展開の逆、的な)

Page 8: [C++]additive synthesis のための三角関数高速化

What’s ADDITIVE SYNTH ?加算合成シンセとは?

Page 9: [C++]additive synthesis のための三角関数高速化

Types of synthesis合成方式

Subtractive減算

Frequency Modulation(FM)周波数変調Additive加算

Page 10: [C++]additive synthesis のための三角関数高速化

Additive is …加算合成の特徴

Bright明るい

Flexible Sound Making柔軟な音作り

Difficult to use使いづらい

Page 11: [C++]additive synthesis のための三角関数高速化

Implementation実装

Inverse FFTフーリエ逆変換

Oscillator bank synthesisオシレーターバンク(正弦波加算)

Wave tableウェーブテーブル

Page 12: [C++]additive synthesis のための三角関数高速化

Adoption採用

Oscillator bank synthesisオシレーターバンク(正弦波加算)

ただし…膨大な sin の呼び出し

sin を足していくだけ自由度は高い!!(はず)

Page 13: [C++]additive synthesis のための三角関数高速化

Math.h vs My algorithmマスヘッダー 対 私のアルゴリズム

Page 14: [C++]additive synthesis のための三角関数高速化

SINE is SLOW?サインは遅い?

「 fast sine algorithm 」で検索→  約 505,000 件

Sine is slow三角関数は遅いらしい

Page 15: [C++]additive synthesis のための三角関数高速化

SINE is SLOWサインは遅い

Math の高速化を検証するhttp://qiita.com/shinido/items/613fd0dd62007bc2fff0

三角関数のテーブル引きによる高速化 http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Doc/misc/SinCos_Table.html

Page 16: [C++]additive synthesis のための三角関数高速化

SINE is SLOWサインは遅い

Really?ほんと?

Page 17: [C++]additive synthesis のための三角関数高速化

Algorithmアルゴリズム

1. Table Look Upテーブル引き

2. Bhaskara I‘s approximationバースカラによる近似

3. Parabolic approximation放物線による近似

Page 18: [C++]additive synthesis のための三角関数高速化

Table Look Upテーブル引き

sin の値を事前にメモリに書き込み必要な時に読み出し

+ 線形補間でさらなる精度

sin 𝑥1sin 𝑥2sin 𝑥3sin 𝑥4sin 𝑥5

Page 19: [C++]additive synthesis のための三角関数高速化

Bhaskaraバースカラによる近似

近似式

Page 20: [C++]additive synthesis のための三角関数高速化

Bhaskaraバースカラによる近似

近似式

Page 21: [C++]additive synthesis のための三角関数高速化

Measurement測定

自作のアルゴリズムを C++ で記述C++ の chrono ライブラリを使用

sin を 1000 万回呼び出すのにかかる時間を 10 回計測→1 loop にかかる時間を算出

デバッグ目的のため、最適化は切ってる。

Page 22: [C++]additive synthesis のための三角関数高速化

Result結果

実行時間の比較

Page 23: [C++]additive synthesis のための三角関数高速化

Result結果

Sine is fast.速いじゃん math.h (´ ・ ω ・` )

Page 24: [C++]additive synthesis のための三角関数高速化

Considerations考察

Time for calling function関数の呼び出しに時間がかかる?

math.h だけが最適化されてる可能性(ただの言いがかりかもしれないが)

Page 25: [C++]additive synthesis のための三角関数高速化

Reflection反省

多項式近似は割と雑

最適化の余地はある

SIMD 命令、アセンブラ

Page 26: [C++]additive synthesis のための三角関数高速化

Conclusion結論

そろそろ開発しよう。

最適化に使った時間を最適化したかった。

ネットに書いてあることは、うかつに信用しないこと

Page 27: [C++]additive synthesis のための三角関数高速化

Source Codeソースコード

最適化のコードはここに置いてあるから見て

https://github.com/k3ita/sin_speed_test

時間があれば編集するかも

Page 28: [C++]additive synthesis のための三角関数高速化

Plan開発予定

2016 9 月~12 月

20171~3 月

4~6 月

9 月以降

開発開始実験期間

開発(メイン)(ここが伸びるかも)ブラッシュアップ主にメモリ、 CPU 関連リリース( β 版かも)

Page 29: [C++]additive synthesis のための三角関数高速化

Plan開発予定

目標は

Free release無料の公開

KVR Developer ChallengeKVR 開発者の挑戦

Page 30: [C++]additive synthesis のための三角関数高速化

Thank you for listening聴いてくれてありがとう