Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Arc System Works Co., Ltd.                           .SIG AudioAudio Digital Signal Processing 1 : EQ リアルタイムオーディオ信号処理入門   ...
Arc System Works Co., Ltd.                  .SIG AudioAudio Digital Signal Processing 1 : EQ                              ...
Arc System Works Co., Ltd.                             .SIG AudioAudio Digital Signal Processing 1 : EQ                   ...
Arc System Works Co., Ltd.                      .SIG AudioAudio Digital Signal Processing 1 : EQ                          ...
Arc System Works Co., Ltd.                 .SIG AudioAudio Digital Signal Processing 1 : EQ                               ...
Arc System Works Co., Ltd.                    .SIG AudioAudio Digital Signal Processing 1 : EQ                            ...
Arc System Works Co., Ltd.                       .SIG AudioAudio Digital Signal Processing 1 : EQ    オーディオ信号処理の重要性(1)  • 計...
Arc System Works Co., Ltd.               .SIG AudioAudio Digital Signal Processing 1 : EQ    オーディオ信号処理の重要性(2)  • メインCPUやDS...
Arc System Works Co., Ltd.                                              .SIG AudioAudio Digital Signal Processing 1 : EQ  ...
Arc System Works Co., Ltd.               .SIG AudioAudio Digital Signal Processing 1 : EQ                   オーディオ信号処理とは  •...
Arc System Works Co., Ltd.                           .SIG AudioAudio Digital Signal Processing 1 : EQ             オーディオ信号処...
Arc System Works Co., Ltd.                            .SIG AudioAudio Digital Signal Processing 1 : EQ         今回の講演における信号...
Arc System Works Co., Ltd.                                      .SIG AudioAudio Digital Signal Processing 1 : EQ          ...
Arc System Works Co., Ltd.                                                                          .SIG AudioAudio Digita...
Arc System Works Co., Ltd.                                      .SIG AudioAudio Digital Signal Processing 1 : EQ          ...
Arc System Works Co., Ltd.                                                          .SIG AudioAudio Digital Signal Process...
Arc System Works Co., Ltd.                        .SIG AudioAudio Digital Signal Processing 1 : EQ                        ...
Arc System Works Co., Ltd.               .SIG AudioAudio Digital Signal Processing 1 : EQ                             イコライ...
Arc System Works Co., Ltd.                  .SIG AudioAudio Digital Signal Processing 1 : EQ                         イコライザ...
Arc System Works Co., Ltd.               .SIG AudioAudio Digital Signal Processing 1 : EQ                  イコライザー設計方法(1)  ...
Arc System Works Co., Ltd.                                 .SIG AudioAudio Digital Signal Processing 1 : EQ               ...
Arc System Works Co., Ltd.                                        .SIG AudioAudio Digital Signal Processing 1 : EQ        ...
Arc System Works Co., Ltd.                          .SIG AudioAudio Digital Signal Processing 1 : EQ                      ...
Arc System Works Co., Ltd.                        .SIG AudioAudio Digital Signal Processing 1 : EQ               高速化のための定数...
Arc System Works Co., Ltd.                          .SIG AudioAudio Digital Signal Processing 1 : EQ               高速化のための...
Arc System Works Co., Ltd.                                                                   .SIG AudioAudio Digital Signa...
Arc System Works Co., Ltd.                                                                .SIG AudioAudio Digital Signal P...
Arc System Works Co., Ltd.                                                                      .SIG AudioAudio Digital Si...
Arc System Works Co., Ltd.                               .SIG AudioAudio Digital Signal Processing 1 : EQ                 ...
Arc System Works Co., Ltd.                                  .SIG AudioAudio Digital Signal Processing 1 : EQ              ...
Arc System Works Co., Ltd.                      .SIG AudioAudio Digital Signal Processing 1 : EQ                     NAX M...
Arc System Works Co., Ltd.                                             .SIG AudioAudio Digital Signal Processing 1 : EQ   ...
Arc System Works Co., Ltd.                        .SIG AudioAudio Digital Signal Processing 1 : EQ          圧倒的な物量の大域変数・1万...
Arc System Works Co., Ltd.               .SIG AudioAudio Digital Signal Processing 1 : EQ  A4-FXAPO by FORTRAN77  • FXAPOの...
Arc System Works Co., Ltd.                        .SIG AudioAudio Digital Signal Processing 1 : EQ                   FORTR...
Arc System Works Co., Ltd.                                             .SIG AudioAudio Digital Signal Processing 1 : EQ   ...
Arc System Works Co., Ltd.                    .SIG AudioAudio Digital Signal Processing 1 : EQ                            ...
Arc System Works Co., Ltd.                 .SIG AudioAudio Digital Signal Processing 1 : EQ                            For...
Arc System Works Co., Ltd.               .SIG AudioAudio Digital Signal Processing 1 : EQ      NAX Music Player (2012)Hiro...
Arc System Works Co., Ltd.               .SIG AudioAudio Digital Signal Processing 1 : EQ                     NAX Music Pl...
Arc System Works Co., Ltd.                    .SIG AudioAudio Digital Signal Processing 1 : EQ   御静聴ありがとうございました!          ...
Upcoming SlideShare
Loading in …5
×

The beginners guide of real-time audio processing (Part 1:Equalizer)

8,605 views

Published on

9/28に開催された、SIG-Audio準備会#2での講演資料(スライド)です。
イコライザーの作り方と、フォートラン教の布教用資料(笑)です。

Published in: Technology
  • Be the first to comment

The beginners guide of real-time audio processing (Part 1:Equalizer)

  1. 1. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ リアルタイムオーディオ信号処理入門 -第1回:イコライザーをつくってみる- アークシステムワークス株式会社 技術開発部長(CTO) 増野 宏之 masuno@arcsy.co.jpHiroyuki Masuno Page 1
  2. 2. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 自己紹介(その1) • 増野 宏之 (Hiroyuki Masuno) – アークシステムワークス株式会社所属 – 技術開発部長(CTO) – 1964年10月8日生まれ, そろそろ48歳(年男) – ゲーム業界26年目 • プログラマー/オーディオエンジン開発 • 海外渉外各種交渉業務 • 法務部部長+宴会担当Hiroyuki Masuno Page 2
  3. 3. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 自己紹介(その2) • コンタクト情報 – 電子メール : • masuno@arcsy.co.jp (会社) • webmaster@artemis-ica.com (個人) – Facebook : http://www.facebook.com/hiroyuki.masuno.7 – Twitter : @HiroyukiMasuno – LinkedIn : Hiroyuki Masuno – 3DS/PSN等すべて実名登録 – ノーガード戦法Hiroyuki Masuno Page 3
  4. 4. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 講演上の注意点 • A4-DSP Engine Xbox360版の実装を ベースに解説 – XAPO等の書式はWindows版とほぼ同じ – 内部オーディオバッファ構造は以下のとおり。 • サンプリング周波数は48KHz • 波形形式はIEEE754 浮動小数点(-1.0f~1.0f)形式 • 1オーディオフレーム = 1パケット = 256サンプル • 更新間隔= 256/48000 = 約5.3ミリ秒 • オーディオフレームレート = 187.5HzHiroyuki Masuno Page 4
  5. 5. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ セッションの流れ 1. オーディオ信号処理とは何か、その重要性 2. イコライザーの基本理論(フィルター) 3. XAudio2上での設計と実装 4. EQ実演(NAX Music Player(PSVITA)) 5. ゲーム業界震撼のカミングアウト(笑) 6. 質疑応答(時間があれば)Hiroyuki Masuno Page 5
  6. 6. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 昔話 • 音が専用ハードで再生されていたのは昔。 – ファミコン(矩形波x2・三角波x1・ノイズx1) – 0x4000-0x400F番地のレジスタに値を書き込 んで発音させていた。 – CPU速度: 6502Aの1.79MHz • オーディオ機能はCPU直結 • 6502A+DAC=リコーRP2A03Hiroyuki Masuno Page 6
  7. 7. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ オーディオ信号処理の重要性(1) • 計算資源の爆発的な増加 – ファミコン(1983年)(俺=19歳) • MOS Technology 6502A, 1.79MHz • 8ビット – 最新鋭のPC (2012年)(俺=48歳) • Intel Core-i7 3770K • 最大3.9GHz, 4コア, 8ハードウェアスレッド • 64ビット • 単純なクロック周波数比較でも2,000倍Hiroyuki Masuno Page 7
  8. 8. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ オーディオ信号処理の重要性(2) • メインCPUやDSPがオーディオ処理を担当する時 代になった。 – オーディオパイプラインの誕生 – 今では、比較的重い処理のひとつ。 – 効率的なオーディオパイプライン設計のために、リ アルタイムオーディオ信号処理技術を学ぶ必要性が 生じた。 • 日本語で書かれた参考書はあまり多くない。 • ゲームの場合、重要となる高速化に関する書籍はほぼゼロと いう悲しい状態。高速化→表現力の向上Hiroyuki Masuno Page 8
  9. 9. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 参考書の紹介 • C言語ではじめる音のプログラミング -サウンドエフェクトの信号処理- – 著者:青木 直史 – 出版社: オーム社 (2008/12) – ISBN-10: 4274206505 – ISBN-13: 978-4274206504 – 2,730円Hiroyuki Masuno Page 9
  10. 10. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ オーディオ信号処理とは • 入力バッファに蓄積されたオーディオ信号波 形になんらかの数値演算を行い出力バッファ に書き出す処理のこと。たとえば・・・ – 信号を一定時間(0.2~1秒程度)遅らせて重ねる • デジタルディレイ – 信号の遅延時間を小刻みに変化させる • コーラス – 信号を極端に増幅し、波形を飽和させる • ディストーションHiroyuki Masuno Page 10
  11. 11. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ オーディオ信号処理とは(2) • 実は、入力バッファも出力バッファも必須では ないし、必ずしも波形を加工する必要もない。 – 入力バッファがない例 • 内部処理で波形を作り出す – WG (Wave Generator) – 入力波形を加工せずに出力波形にコピーする • 最大波高値を検出する – VUメーター • もっとも確からしいBPM値を検出する – リアルタイムBPM解析(A4-BPM/A4-VMA)Hiroyuki Masuno Page 11
  12. 12. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 今回の講演における信号処理 • 第1回目の今回に関しては、入力波形になんらかの 演算をして出力波形に書き出す、一般的なエフェク ターに関する説明を行う。 • WindowsにおけるXAudio2では、XAPOとして 規定されている。 – XAPO: XAudio Audio Processing Object 入力波形 → 演算処理 → 出力波形Hiroyuki Masuno Page 12
  13. 13. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 一番簡単な処理の例 • アッテネーター(減衰器)(Attenuator) – 入力された波形を半分の音量にして出力する – [半分の音量]→[外部から変えることができるように書 き直す]→[ボリューム調整APO]の出来上がり 入力波形 → 演算処理 → 出力波形 fIn fOut=fIn*0.5f fOutHiroyuki Masuno Page 13
  14. 14. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ XAPOのヘッダー #pragma once // XAPOベースクラス #include <ATGAPOBase.h> // クラスを作るときのおまじない class declspec(uuid("{5EB8D611-FF96-429d-8365-2DDF89A7C1CD}")) CA4FXAPOATT : public ATG::CSampleXAPOBase<CA4FXAPOATT, A4FXAPOATTPARAMSTATS> { public: // コンストラクター CA4FXAPOATT(); // デストラクター ~CA4FXAPOATT(); // FXAPOロックプロセッサー (Xbox360の場合, 48KHz, 16bit, 256samplesが1パケットであることは自明なので、特にこのプロセス WAVEFORMATEX情報を取得する必要はない) HRESULT LockForProcess(UINT32 InputLockedParameterCount, const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS* pInputLockedParameters, UINT32 OutputLockedParameterCount, const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS* pOutputLockedParameters); // FXAPOアンロックプロセッサー (Xbox360の場合不要) void UnlockForProcess(); private: // ATGAPOBaseクラスからの継承メソッド // シグナルプロセッサー (これが本体) void DoProcess(const A4FXAPOATTPARAMSTATS&, FLOAT32* __restrict pData, UINT32 cFrames, UINT32 cChannels); // RPCマニピュレーター (FXAPOの場合、調整可能な変数を大域変数におくので特に不要) void OnSetParameters(const A4FXAPOATTPARAMSTATS& params); };Hiroyuki Masuno Page 14
  15. 15. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ XAPOのヘッダー • 実際に必要なもの(A4FXAPOATT.h) – コンストラクター • CA4FXAPOATT(); – デストラクター • ~CA4FXAPOATT(); – ロックプロセッサー(360では不要) • HRESULT LockForProcess(UINT32 InputLockedParameterCount, const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS* pInputLockedParameters, UINT32 OutputLockedParameterCount, const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS* pOutputLockedParameters); – シグナルプロセッサー • void DoProcess(const A4FXAPOATTPARAMSTATS&, FLOAT32* __restrict pData, UINT32 cFrames, UINT32 cChannels); – RPCマニピュレーター(FXAPOでは不要) • void OnSetParameters(const A4FXAPOATTPARAMSTATS& params);Hiroyuki Masuno Page 15
  16. 16. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ シグナルプロセッサーの処理 void CA4FXAPOATT::DoProcess(const A4FXAPOATTPARAMSTATS &, FLOAT32 *__restrict pData, UINT32 cFrames, UINT32 cChannels) { // Locals int indexC, indexS; int indexAccess; int numSamples, numChannels; float fIn, fOut; // 1パケットあたりのサンプル数とチャンネル数を設定 numSamples = (int)cFrames; numChannels = (int)cChannels; // 処理 for (indexC = 0 ; indexC < numChannels ; indexC++) { for (indexS = 0 ; indexS < numSamples ; indexS++) { indexAccess = indexS * numChannels + indexC; fIn = pData[indexAccess]; fOut = fIn * 0.5f; pData[indexAccess] = fOut; } } }Hiroyuki Masuno Page 16
  17. 17. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 実際の処理の部分 for (indexC = 0 ; indexC < numChannels ; indexC++) { for (indexS = 0 ; indexS < numSamples ; indexS++) { // アクセス位置を計算(ステレオの場合LRLRLR…で並んでいる) indexAccess = indexS * numChannels + indexC; fIn = pData[indexAccess]; fOut = fIn * 0.5f; // 半分の音量にする pData[indexAccess] = fOut; } } }Hiroyuki Masuno Page 17
  18. 18. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ イコライザーを作るHiroyuki Masuno Page 18
  19. 19. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ イコライザーとは何か • 波形信号の周波数特性を変更する音響機器 • エフェクターの一種(XAPOで設計可能) • グラフィックイコライザー – 中央周波数一定 – 調整できる帯域の幅も一定 – ゲインのみ変更できる – 多数(5~31程度)の周波数領域(バンド)が調整できる。 • パラメトリックイコライザー – 上記の3要素(中央周波数・帯域幅・ゲイン)すべてを変更できる – 調整できるバンドの数は少ない(3~5程度)Hiroyuki Masuno Page 19
  20. 20. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ イコライザー設計方法(1) • Linear Phase法 – FFT(フーリエ変換)を使う • 入力波形をFFTして周波数領域に直交変換 • 各周波数ビン利得を変更 • iFFTして時間領域に逆変換 – 特徴 • 位相情報は保持される • iFFT変換後、窓のつなぎ目で、波形を綺麗に繋ご うとすると、最低でも1,024サンプルFFT + 75% オーバーラップ程度の演算が必要となるため重い。Hiroyuki Masuno Page 20
  21. 21. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ イコライザー設計方法(2) • 双2次フィルター法(Biquad Filter) – IIR(無限インパルス応答)フィルターを使う • RBJ Audio-EQ-Cookbook あまりにも有名 • http://www.musicdsp.org/files/Audio-EQ- Cookbook.txt – 特徴 • 時間軸側の計算式があるのでFFT不要で高速 • 位相情報は保持されない • バンドパスフィルターの性能はLinear法に劣るHiroyuki Masuno Page 21
  22. 22. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 今回設計するイコライザー • 10バンドのグラフィックイコライザー – ゲーム内組み込み用に簡素化 – 37.5, 75, 150, 300, 600, 1.2K, 2.4K, 4.8K, 9.6K, 19.2Kの10バンド (Xbox360) – 31.5, 63, 125, 250, 500, 1K, 2K, 4K, 8K, 16Kの10バンド (Windows, PSVITA) – 31.5Hz領域[LF]はLPF (Xbox360, Low Shelf) – 16KHz領域[HF]はHPF (Xbox360, High Shelf) – 中央の8バンド[MF1-8]はBPF – 帯域幅:中央周波数の2/3の値にする • 37.5(25), 75(50), 150(100), 300(200)⁄ – ゲイン調整幅 +/- 18.0dBで0.1dB刻みHiroyuki Masuno Page 22
  23. 23. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 処理フロー 事前パラメーター計算 ↓ 入力側から読み込み ↓ LF,MF1-MF8,HFの順に10段のフィルターを通す バンド増幅値が0.0dBの場合は計算しない ↓ 出力側に書き出しHiroyuki Masuno Page 23
  24. 24. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 高速化のための定数化(1) • ゲイン調整用の乗数は事前計算 – Vテーブル – -18.0dB(0.125f)~+18.0dB(8.000f)まで • 0.1dB刻みなので361段階 • 三角関数は計算しない – K = tan(pi * Fc / Fs) [LF,HF] – K = tan(pi * Fw / Fs) [MF] – D = -cos(2 * pi * Fc / Fs) [MF only] • Fs : サンプリング周波数48,000 • Fc : 中央周波数(一定) • Fw : ゲイン調整幅(一定)Hiroyuki Masuno Page 24
  25. 25. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 高速化のための定数化(2) • Vテーブル const double FXAPO_PGEQ3_BAND_GAIN_TABLE[361] = { 0.1250000000000000, // -18.0dB 0.1264524300377400, // -17.9dB 0.1279217364995970, // -17.8dB 0.1294081154801720, // -17.7dB 0.1309117653525780, // -17.6dB ...... ...... ...... 7.6387328312833300, // +17.6dB 7.7274906313987600, // +17.7dB 7.8172797474739700, // +17.8dB 7.9081121628231700, // +17.9dB 8.0000000000000000, // +18.0dB };Hiroyuki Masuno Page 25
  26. 26. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 高速化のための定数化(3) • Kテーブル const double FXAPO_PGEQ3_BAND_FILTER_CONSTANT_K[10] = { 0.0024543741889439, //LF k = tan(PI * 37.5 / 48000.0) 0.0032725040294712, //MF1 k = tan(PI * 50.0 / 48000.0) 0.0065450781520340, //MF2 k = tan(PI * 100.0 / 48000.0) 0.0130907170848351, //MF3 k = tan(PI * 200.0 / 48000.0) 0.0261859215691869, //MF4 k = tan(PI * 400.0 / 48000.0) 0.0524077792830412, //MF5 k = tan(PI * 800.0 / 48000.0) 0.1051042352656760, //MF6 k = tan(PI * 1600.0 / 48000.0) 0.2125565616700220, //MF7 k = tan(PI * 3200.0 / 48000.0) 0.4452286853085360, //MF8 k = tan(PI * 6400.0 / 48000.0) 3.0776835371752500, //HF k = tan(PI * 19200.0 / 48000.0) };Hiroyuki Masuno Page 26
  27. 27. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 高速化のための定数化(4) • Dテーブル const double FXAPO_PGEQ3_BAND_FILTER_CONSTANT_D[10] = { 0.0, // LF Do not apply -0.9999518089593280,// MF1 d = -cos(2PI * 75.0 / 48000.0) -0.9998072404820650,// MF2 d = -cos(2PI * 150.0 / 48000.0) -0.9992290362407230,// MF3 d = -cos(2PI * 300.0 / 48000.0) -0.9969173337331280,// MF4 d = -cos(2PI * 600.0 / 48000.0) -0.9876883405951380,// MF5 d = -cos(2PI * 1200.0 / 48000.0) -0.9510565162951540,// MF6 d = -cos(2PI * 2400.0 / 48000.0) -0.8090169943749470,// MF7 d = -cos(2PI * 4800.0 / 48000.0) -0.3090169943749470,// MF8 d = -cos(2PI * 9600.0 / 48000.0) 0.0, // HF Do not apply };Hiroyuki Masuno Page 27
  28. 28. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 事前パラメータ計算(aa,dd) double d, k, v; // フィルタパラメータdとkを定数表から引く、またvはm_dBandGainと等価となる d = FXAPO_PGEQ3_BAND_FILTER_CONSTANT_D[indexB]; k = FXAPO_PGEQ3_BAND_FILTER_CONSTANT_K[indexB]; v = m_dBandGain[indexB]; // フィルターパラメータh2は共通処理 h2[indexB] = (v - 1.0) / 2.0; // フィルタパラメータaa,ddを計算する // 0 -- LF : ローシェルフフィルタ if (0 == indexB) { if (v > 1.0) {aa[indexB] = (k - 1.0) / (k + 1.0);} //Boost: a = (K - 1) / (K + 1) else {aa[indexB] = (k - v) / (k + v);} //Cut: a = (K - v) / (K + v) } // 1~8 -- MF : バンドパスフィルタ (MF1~MF8の8種類ある) else if (indexB >= 1 && indexB <= 8) { if (v > 1.0) {aa[indexB] = (k - 1.0) / (k + 1.0);} //Boost: a = (K - 1) / (K + 1) else {aa[indexB] = (k - v) / (k + v);} //Cut: a = (K - v) / (K + v) dd[indexB] = d * (1.0 - aa[indexB]); //Cross: d = D * (1 - a) } // 9 -- HF : ハイシェルフフィルタ else { if (v > 1.0) {aa[indexB] = (k - 1.0) / (k + 1.0);} //Boost: a = (K - 1) / (K + 1) else {aa[indexB] = ((v * k) - 1.0) / ((v * k) + 1.0);} //Cut: a = (VK - 1) / (VK + 1) }Hiroyuki Masuno Page 28
  29. 29. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ フィルター処理 (LF/HF) // シェルフフィルタ // iC:チャンネル番号(0—L, 1—R) // iB:バンドID(0—LF, 9—HF) // dWave:処理波形の波高値 // xhn = w - (a - z(prev)) // w = h2 * (w + ((xhn * a) + z(prev))) + w // z(next) = xhn { xhn[iB] = dWave - (aa[iB] * z0[iC][iB]); dWave = h2[iB] * (dWave + ((xhn[iB] * aa[iB]) + z0[iC][iB])) + dWave; z0[iC][iB]= xhn[iB]; }Hiroyuki Masuno Page 29
  30. 30. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ フィルター処理 (MF1-8) // MF : バンドパスフィルタ (MF1~MF8) // yn1 = (-a * w) + (d * x1) + x2 - (d * y1) + (a * y2) // yn0 = h2 * (w - yn1) + w { yn1[iB] = (-aa[iB] * dWave) + (dd[iB] * x1[iC][iB]) + x2[iC][iB] - (dd[iB] * y1[iC][iB]) + (aa[iB] * y2[iC][iB]); yn0[iB] = h2[iB] * (dWave - yn1[iB]) + dWave; // Cross x2[iC][iB] = x1[iC][iB]; x1[iC][iB] = dWave; y2[iC][iB] = y1[iC][iB]; y1[iC][iB] = yn1[iB]; // IIR Update original sample dWave = yn0[iB]; }Hiroyuki Masuno Page 30
  31. 31. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ NAX Music Player Paragraphic EQ デモ実演Hiroyuki Masuno Page 31
  32. 32. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 最高速なイコライザー(一部) C PGEQ42 : PARAGRAPHIC EQUALIZER 4 STEREO:2CH C PROGRAMMED BY : HIROYUKI MASUNO PROGRAM PGEQ42 IMPLICIT REAL*8 (A-H, O-Z) PARAMETER(NCHAN=2, NBAND=10, NSAMP=1024) REAL*8 AA(NBAND), H2(NBAND), DD(NBAND) REAL*8 Z0(NCHAN,NBAND), X1(NCHAN,NBAND), X2(NCHAN,NBAND) REAL*8 Y1(NCHAN,NBAND), Y2(NCHAN,NBAND) REAL*8 XHN(NBAND), YN0(NBAND), YN1(NBAND) C------BAND 1:LF:APPLY LOW SHELF FILTER IF(DGAIN.EQ.1.0D0) GO TO 100 DO 110 ITER1=1,NCHAN DO 120 ITER2=1,NSAMP XHN(1)=DWAVIN(ITER2)-(AA(1)*Z0(ITER1,1)) DWAVIN(ITER2)=H2(1)*(DWAVIN(ITER2)+ & (XHN(1)*AA(1)+Z0(ITER1,1))+DWAVIN(ITER2) Z0(ITER1,1)=XHN(1) 120 CONTINUE 110 CONTINUE 100 CONTINUE C-------------------------------------- ENDHiroyuki Masuno Page 32
  33. 33. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 圧倒的な物量の大域変数・1万行を超えるupdate関数 唯一にして絶対のGameClass・新世代のプログラムを体感せよ! FOR TRAN LEGACY 2012年11月絶賛公開!!Hiroyuki Masuno Page 33
  34. 34. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ A4-FXAPO by FORTRAN77 • FXAPOのFは「FORTRAN」のF。 • Windows版のオーディオパイプラインは、 すべてFORTRAN77で記述されている。 • Visual C++とVisual FortranのMixed Languageプログラミング • 自動ベクトル化と自動並列化で全プラット フォーム中で最速。Hiroyuki Masuno Page 34
  35. 35. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ FORTRANで組む利点 • 現時点でもっとも高速。平均で6倍以上。 – FFTならば最大で3桁違うことも珍しくない。 – 言語仕様上、メモリコヒーレンシが高い • ポインターがない、変数はすべてコンパイル時確定。 – C言語でも高速に記述することはもちろん可能、でもそのために、 覚えることが多すぎるのは、本末転倒。 • 信号処理マニアなのであって、プログラム言語マニアではない。 • コンパイラーが自動ベクトル化+並列化する。 – IntelのマルチコアCPUなら現時点では最速。 – マルチコアCPUならば、ハードウェアスレッド数内で、チャン ネル数が増えても、ほとんど実行速度が変わらない。 • 膨大な数値計算のライブラリーがある。 – Intel Math Kernel Library (IMKL/MKL)Hiroyuki Masuno Page 35
  36. 36. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ Visual Fortran Composer • Intel Visual Fortran Composer XE 2013 – 2012年9月6日発売 – Compiler 13.0, IMKL 11.0 – Windows 8, Visual Studio 2012 まで対応 – 価格:258,300円 – 日本ではXLSoftさんが販売 – ゲーム業界で持っているのは ひょっとしたら私だけ??Hiroyuki Masuno Page 36
  37. 37. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ Fortran Forever • Windows版をゲーム機版に移植する際に は、非常に遅くなるので苦労する。 – 実はC/C++言語は個人的に苦手 • ゲーム機向けにもFortran Compilerを! – Xbox360, PS3, PSVITA, Wii-U, 次世代機にも! – オーディオパイプラインが早いのなら、レン ダリングも早いはず。 • シェーダーもFortranで書けるようにしよう!Hiroyuki Masuno Page 37
  38. 38. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ Fortran 公式の歌 • おおブレネリ あなたの言語はなに? • 私の言語はフォートランよ 数値計算が得意なのよ • ヤーーッフォー フォートランランラン • ヤッフォー フォートランランラン • ヤッフォー フォートランランラン • ヤッフォー フォートランランラン • ヤーーッフォー フォートランランラン • ヤッフォー フォートランランラン • ヤッフォー フォートランランラン • ヤッフォーフォーHiroyuki Masuno Page 38
  39. 39. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ NAX Music Player (2012)Hiroyuki Masuno Page 39
  40. 40. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ NAX Music Player • Playstation VITA向け, 11月発売 • 世界初「音ゲー」が楽しめる音楽プレイヤー • 基本無料・有料DLCで機能拡張 – ビジュアライザープラグイン – DSP-FXプラグイン – ダンスゲーム/ダンサープラグイン – DJ, 通信カラオケ, 各種音ゲーもDLCで提供Hiroyuki Masuno Page 40
  41. 41. Arc System Works Co., Ltd. .SIG AudioAudio Digital Signal Processing 1 : EQ 御静聴ありがとうございました! 質疑応答 お問い合わせは masuno@arcsy.co.jpHiroyuki Masuno Page 41

×