SlideShare uma empresa Scribd logo
1 de 41
Baixar para ler offline
Arc System Works Co., Ltd.                           .
SIG Audio
Audio Digital Signal Processing 1 : EQ




 リアルタイムオーディオ信号処理入門
                      -第1回:イコライザーをつくってみる-


                              アークシステムワークス株式会社
                                 技術開発部長(CTO)
                                    増野 宏之
                                masuno@arcsy.co.jp


Hiroyuki Masuno                                          Page 1
Arc System Works Co., Ltd.                  .
SIG Audio
Audio Digital Signal Processing 1 : EQ




                                自己紹介(その1)
  • 増野 宏之 (Hiroyuki Masuno)
         –   アークシステムワークス株式会社所属
         –   技術開発部長(CTO)
         –   1964年10月8日生まれ, そろそろ48歳(年男)
         –   ゲーム業界26年目
               • プログラマー/オーディオエンジン開発
               • 海外渉外各種交渉業務
               • 法務部部長+宴会担当

Hiroyuki Masuno                                 Page 2
Arc System Works Co., Ltd.                             .
SIG Audio
Audio 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
Arc System Works Co., Ltd.                      .
SIG Audio
Audio 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.5Hz

Hiroyuki Masuno                                     Page 4
Arc System Works Co., Ltd.                 .
SIG Audio
Audio Digital Signal Processing 1 : EQ




                                セッションの流れ
  1.      オーディオ信号処理とは何か、その重要性
  2.      イコライザーの基本理論(フィルター)
  3.      XAudio2上での設計と実装
  4.      EQ実演(NAX Music Player(PSVITA))
  5.      ゲーム業界震撼のカミングアウト(笑)
  6.      質疑応答(時間があれば)




Hiroyuki Masuno                                Page 5
Arc System Works Co., Ltd.                    .
SIG Audio
Audio Digital Signal Processing 1 : EQ




                                         昔話
  • 音が専用ハードで再生されていたのは昔。
         – ファミコン(矩形波x2・三角波x1・ノイズx1)
         – 0x4000-0x400F番地のレジスタに値を書き込
           んで発音させていた。
         – CPU速度: 6502Aの1.79MHz
               • オーディオ機能はCPU直結
               • 6502A+DAC=リコーRP2A03


Hiroyuki Masuno                                   Page 6
Arc System Works Co., Ltd.                       .
SIG Audio
Audio 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
Arc System Works Co., Ltd.               .
SIG Audio
Audio Digital Signal Processing 1 : EQ




    オーディオ信号処理の重要性(2)
  • メインCPUやDSPがオーディオ処理を担当する時
    代になった。
         – オーディオパイプラインの誕生
         – 今では、比較的重い処理のひとつ。
         – 効率的なオーディオパイプライン設計のために、リ
           アルタイムオーディオ信号処理技術を学ぶ必要性が
           生じた。
               • 日本語で書かれた参考書はあまり多くない。
               • ゲームの場合、重要となる高速化に関する書籍はほぼゼロと
                 いう悲しい状態。高速化→表現力の向上
Hiroyuki Masuno                              Page 8
Arc System Works Co., Ltd.                                              .
SIG Audio
Audio Digital Signal Processing 1 : EQ




                                     参考書の紹介
                                         • C言語ではじめる音のプログラミング
                                           -サウンドエフェクトの信号処理-
                                          –   著者:青木 直史
                                          –   出版社: オーム社 (2008/12)
                                          –   ISBN-10: 4274206505
                                          –   ISBN-13: 978-4274206504
                                          –   2,730円




Hiroyuki Masuno                                                             Page 9
Arc System Works Co., Ltd.               .
SIG Audio
Audio Digital Signal Processing 1 : EQ




                   オーディオ信号処理とは
  • 入力バッファに蓄積されたオーディオ信号波
    形になんらかの数値演算を行い出力バッファ
    に書き出す処理のこと。たとえば・・・
         – 信号を一定時間(0.2~1秒程度)遅らせて重ねる
               • デジタルディレイ
         – 信号の遅延時間を小刻みに変化させる
               • コーラス
         – 信号を極端に増幅し、波形を飽和させる
               • ディストーション
Hiroyuki Masuno                              Page 10
Arc System Works Co., Ltd.                           .
SIG Audio
Audio Digital Signal Processing 1 : EQ




             オーディオ信号処理とは(2)
  • 実は、入力バッファも出力バッファも必須では
    ないし、必ずしも波形を加工する必要もない。
         – 入力バッファがない例
               • 内部処理で波形を作り出す
                      – WG (Wave Generator)
         – 入力波形を加工せずに出力波形にコピーする
               • 最大波高値を検出する
                      – VUメーター
               • もっとも確からしいBPM値を検出する
                      – リアルタイムBPM解析(A4-BPM/A4-VMA)
Hiroyuki Masuno                                          Page 11
Arc System Works Co., Ltd.                            .
SIG Audio
Audio Digital Signal Processing 1 : EQ




         今回の講演における信号処理
  • 第1回目の今回に関しては、入力波形になんらかの
    演算をして出力波形に書き出す、一般的なエフェク
    ターに関する説明を行う。
  • WindowsにおけるXAudio2では、XAPOとして
    規定されている。
         – XAPO: XAudio Audio Processing Object

      入力波形                          →    演算処理   →   出力波形


Hiroyuki Masuno                                           Page 12
Arc System Works Co., Ltd.                                      .
SIG Audio
Audio Digital Signal Processing 1 : EQ




                         一番簡単な処理の例
  • アッテネーター(減衰器)(Attenuator)
         – 入力された波形を半分の音量にして出力する
         – [半分の音量]→[外部から変えることができるように書
           き直す]→[ボリューム調整APO]の出来上がり



      入力波形                        →        演算処理          →   出力波形
       fIn                               fOut=fIn*0.5f        fOut


Hiroyuki Masuno                                                     Page 13
Arc System Works Co., Ltd.                                                                          .
SIG Audio
Audio 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
Arc System Works Co., Ltd.                                      .
SIG Audio
Audio 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
Arc System Works Co., Ltd.                                                          .
SIG Audio
Audio 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
Arc System Works Co., Ltd.                        .
SIG Audio
Audio 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
Arc System Works Co., Ltd.               .
SIG Audio
Audio Digital Signal Processing 1 : EQ




                             イコライザーを作る




Hiroyuki Masuno                              Page 18
Arc System Works Co., Ltd.                  .
SIG Audio
Audio Digital Signal Processing 1 : EQ




                         イコライザーとは何か
  • 波形信号の周波数特性を変更する音響機器
  • エフェクターの一種(XAPOで設計可能)
  • グラフィックイコライザー
         –   中央周波数一定
         –   調整できる帯域の幅も一定
         –   ゲインのみ変更できる
         –   多数(5~31程度)の周波数領域(バンド)が調整できる。
  • パラメトリックイコライザー
         – 上記の3要素(中央周波数・帯域幅・ゲイン)すべてを変更できる
         – 調整できるバンドの数は少ない(3~5程度)


Hiroyuki Masuno                                 Page 19
Arc System Works Co., Ltd.               .
SIG Audio
Audio Digital Signal Processing 1 : EQ




                  イコライザー設計方法(1)
  • Linear Phase法
         – FFT(フーリエ変換)を使う
               • 入力波形をFFTして周波数領域に直交変換
               • 各周波数ビン利得を変更
               • iFFTして時間領域に逆変換
         – 特徴
               • 位相情報は保持される
               • iFFT変換後、窓のつなぎ目で、波形を綺麗に繋ご
                 うとすると、最低でも1,024サンプルFFT + 75%
                 オーバーラップ程度の演算が必要となるため重い。
Hiroyuki Masuno                              Page 20
Arc System Works Co., Ltd.                                 .
SIG Audio
Audio 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
Arc System Works Co., Ltd.                                        .
SIG Audio
Audio 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
Arc System Works Co., Ltd.                          .
SIG Audio
Audio Digital Signal Processing 1 : EQ




                                         処理フロー
              事前パラメーター計算
                    ↓
               入力側から読み込み
                    ↓
     LF,MF1-MF8,HFの順に10段のフィルターを通す
        バンド増幅値が0.0dBの場合は計算しない
                                            ↓
                                         出力側に書き出し
Hiroyuki Masuno                                         Page 23
Arc System Works Co., Ltd.                        .
SIG Audio
Audio 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
Arc System Works Co., Ltd.                          .
SIG Audio
Audio 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
Arc System Works Co., Ltd.                                                                   .
SIG Audio
Audio 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
Arc System Works Co., Ltd.                                                                .
SIG Audio
Audio 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
Arc System Works Co., Ltd.                                                                      .
SIG Audio
Audio 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
Arc System Works Co., Ltd.                               .
SIG Audio
Audio 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
Arc System Works Co., Ltd.                                  .
SIG Audio
Audio 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
Arc System Works Co., Ltd.                      .
SIG Audio
Audio Digital Signal Processing 1 : EQ




                     NAX Music Player
                      Paragraphic EQ


                                         デモ実演

Hiroyuki Masuno                                     Page 31
Arc System Works Co., Ltd.                                             .
SIG Audio
Audio 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--------------------------------------
          END


Hiroyuki Masuno                                                            Page 32
Arc System Works Co., Ltd.                        .
SIG Audio
Audio Digital Signal Processing 1 : EQ


          圧倒的な物量の大域変数・1万行を超えるupdate関数
        唯一にして絶対のGameClass・新世代のプログラムを体感せよ!




                       FOR               TRAN
                                         LEGACY



                             2012年11月絶賛公開!!
Hiroyuki Masuno                                       Page 33
Arc System Works Co., Ltd.               .
SIG Audio
Audio 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
Arc System Works Co., Ltd.                        .
SIG Audio
Audio Digital Signal Processing 1 : EQ




                   FORTRANで組む利点
  • 現時点でもっとも高速。平均で6倍以上。
         – FFTならば最大で3桁違うことも珍しくない。
         – 言語仕様上、メモリコヒーレンシが高い
               • ポインターがない、変数はすべてコンパイル時確定。
         – C言語でも高速に記述することはもちろん可能、でもそのために、
           覚えることが多すぎるのは、本末転倒。
               • 信号処理マニアなのであって、プログラム言語マニアではない。
  • コンパイラーが自動ベクトル化+並列化する。
         – IntelのマルチコアCPUなら現時点では最速。
         – マルチコアCPUならば、ハードウェアスレッド数内で、チャン
           ネル数が増えても、ほとんど実行速度が変わらない。
  • 膨大な数値計算のライブラリーがある。
         – Intel Math Kernel Library (IMKL/MKL)

Hiroyuki Masuno                                       Page 35
Arc System Works Co., Ltd.                                             .
SIG Audio
Audio 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
Arc System Works Co., Ltd.                    .
SIG Audio
Audio Digital Signal Processing 1 : EQ




                            Fortran Forever
  • Windows版をゲーム機版に移植する際に
    は、非常に遅くなるので苦労する。
         – 実はC/C++言語は個人的に苦手
  • ゲーム機向けにもFortran Compilerを!
         – Xbox360, PS3, PSVITA, Wii-U, 次世代機にも!
         – オーディオパイプラインが早いのなら、レン
           ダリングも早いはず。
               • シェーダーもFortranで書けるようにしよう!
Hiroyuki Masuno                                   Page 37
Arc System Works Co., Ltd.                 .
SIG Audio
Audio Digital Signal Processing 1 : EQ




                            Fortran 公式の歌
  •    おおブレネリ あなたの言語はなに?
  •    私の言語はフォートランよ 数値計算が得意なのよ
  •    ヤーーッフォー フォートランランラン
  •    ヤッフォー フォートランランラン
  •    ヤッフォー フォートランランラン
  •    ヤッフォー フォートランランラン
  •    ヤーーッフォー フォートランランラン
  •    ヤッフォー フォートランランラン
  •    ヤッフォー フォートランランラン
  •    ヤッフォーフォー
Hiroyuki Masuno                                Page 38
Arc System Works Co., Ltd.               .
SIG Audio
Audio Digital Signal Processing 1 : EQ




      NAX Music Player (2012)




Hiroyuki Masuno                              Page 39
Arc System Works Co., Ltd.               .
SIG Audio
Audio Digital Signal Processing 1 : EQ




                     NAX Music Player
  • Playstation VITA向け, 11月発売
  • 世界初「音ゲー」が楽しめる音楽プレイヤー
  • 基本無料・有料DLCで機能拡張
         –   ビジュアライザープラグイン
         –   DSP-FXプラグイン
         –   ダンスゲーム/ダンサープラグイン
         –   DJ, 通信カラオケ, 各種音ゲーもDLCで提供

Hiroyuki Masuno                              Page 40
Arc System Works Co., Ltd.                    .
SIG Audio
Audio Digital Signal Processing 1 : EQ




   御静聴ありがとうございました!

                                   質疑応答
                            お問い合わせは
                         masuno@arcsy.co.jp
Hiroyuki Masuno                                   Page 41

Mais conteúdo relacionado

Mais procurados

ゲームにおけるインタラクションのための音楽技術「MAGI」~瞬間、波形、重ねて~
ゲームにおけるインタラクションのための音楽技術「MAGI」~瞬間、波形、重ねて~ゲームにおけるインタラクションのための音楽技術「MAGI」~瞬間、波形、重ねて~
ゲームにおけるインタラクションのための音楽技術「MAGI」~瞬間、波形、重ねて~Sho Iwamoto
 
!Utau用 弱音ハクライブラリ
!Utau用 弱音ハクライブラリ!Utau用 弱音ハクライブラリ
!Utau用 弱音ハクライブラリMasahiko Nakamura
 
SIG-Audio#1 CEDEC2012 ラウドネス関連セッション報告
SIG-Audio#1 CEDEC2012 ラウドネス関連セッション報告SIG-Audio#1 CEDEC2012 ラウドネス関連セッション報告
SIG-Audio#1 CEDEC2012 ラウドネス関連セッション報告IGDA Japan SIG-Audio
 
【Unity道場スペシャル 2017札幌】超初心者向け!Unityのオーディオ機能を使ってみよう
【Unity道場スペシャル 2017札幌】超初心者向け!Unityのオーディオ機能を使ってみよう【Unity道場スペシャル 2017札幌】超初心者向け!Unityのオーディオ機能を使ってみよう
【Unity道場スペシャル 2017札幌】超初心者向け!Unityのオーディオ機能を使ってみようUnity Technologies Japan K.K.
 
SIG-Audio#12 アンケート集計結果
SIG-Audio#12 アンケート集計結果 SIG-Audio#12 アンケート集計結果
SIG-Audio#12 アンケート集計結果 IGDA Japan SIG-Audio
 
アサカツ・ヨルカツ サウンド番外編
アサカツ・ヨルカツ サウンド番外編アサカツ・ヨルカツ サウンド番外編
アサカツ・ヨルカツ サウンド番外編Takayuki Nakamura
 
SIG-Audio#14 GDC2017オーディオ報告会 「海外クリエーターから学んだサウンド開発レベルのスレッショルドライン~GDC2017をジャンル別...
SIG-Audio#14 GDC2017オーディオ報告会 「海外クリエーターから学んだサウンド開発レベルのスレッショルドライン~GDC2017をジャンル別...SIG-Audio#14 GDC2017オーディオ報告会 「海外クリエーターから学んだサウンド開発レベルのスレッショルドライン~GDC2017をジャンル別...
SIG-Audio#14 GDC2017オーディオ報告会 「海外クリエーターから学んだサウンド開発レベルのスレッショルドライン~GDC2017をジャンル別...IGDA Japan SIG-Audio
 
UE4+ADX2インタラクティブミュージックの実装
UE4+ADX2インタラクティブミュージックの実装UE4+ADX2インタラクティブミュージックの実装
UE4+ADX2インタラクティブミュージックの実装CRI Middleware Co., Ltd.
 
【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~
【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~
【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~Developers Summit
 
Imagine Cup 2012勉強会(特別講義)
Imagine Cup 2012勉強会(特別講義)Imagine Cup 2012勉強会(特別講義)
Imagine Cup 2012勉強会(特別講義)Shigeru Kobayashi
 
しゃべれて回れる「小人の執事さん」ったら地獄耳でもあるみたいですよ?(前編)
しゃべれて回れる「小人の執事さん」ったら地獄耳でもあるみたいですよ?(前編)しゃべれて回れる「小人の執事さん」ったら地獄耳でもあるみたいですよ?(前編)
しゃべれて回れる「小人の執事さん」ったら地獄耳でもあるみたいですよ?(前編)Kazuhito Miura
 
はじめてのこんぴゅうとしぇえだあ〜ComputeShaderに入門してみた話〜
はじめてのこんぴゅうとしぇえだあ〜ComputeShaderに入門してみた話〜はじめてのこんぴゅうとしぇえだあ〜ComputeShaderに入門してみた話〜
はじめてのこんぴゅうとしぇえだあ〜ComputeShaderに入門してみた話〜めーぷる しろっぷ
 
SIG-Audio#9 アンケート集計結果
SIG-Audio#9 アンケート集計結果SIG-Audio#9 アンケート集計結果
SIG-Audio#9 アンケート集計結果IGDA Japan SIG-Audio
 
ねるねるねるねを練ったわけ
ねるねるねるねを練ったわけねるねるねるねを練ったわけ
ねるねるねるねを練ったわけrerofumi
 
20131116 raspijam3
20131116 raspijam320131116 raspijam3
20131116 raspijam3Akira Ouchi
 
自作音楽ゲームの開発と設計
自作音楽ゲームの開発と設計自作音楽ゲームの開発と設計
自作音楽ゲームの開発と設計Daisuke Mizuno
 
SIG-Audio#10 GDC2015 オーディオセッション報告
SIG-Audio#10 GDC2015 オーディオセッション報告SIG-Audio#10 GDC2015 オーディオセッション報告
SIG-Audio#10 GDC2015 オーディオセッション報告Takafumi Inamori
 
MTM07で電子楽器を展示してきた
MTM07で電子楽器を展示してきたMTM07で電子楽器を展示してきた
MTM07で電子楽器を展示してきたina job
 
SIG-Audio#17 GDC2019オーディオ報告会 「より没入感のある音響ユーザー体験のために」
SIG-Audio#17 GDC2019オーディオ報告会 「より没入感のある音響ユーザー体験のために」SIG-Audio#17 GDC2019オーディオ報告会 「より没入感のある音響ユーザー体験のために」
SIG-Audio#17 GDC2019オーディオ報告会 「より没入感のある音響ユーザー体験のために」IGDA Japan SIG-Audio
 
Afoduino - FUSE 18 at University of Aizu
Afoduino - FUSE 18 at University of AizuAfoduino - FUSE 18 at University of Aizu
Afoduino - FUSE 18 at University of AizuSato Mitsuru
 

Mais procurados (20)

ゲームにおけるインタラクションのための音楽技術「MAGI」~瞬間、波形、重ねて~
ゲームにおけるインタラクションのための音楽技術「MAGI」~瞬間、波形、重ねて~ゲームにおけるインタラクションのための音楽技術「MAGI」~瞬間、波形、重ねて~
ゲームにおけるインタラクションのための音楽技術「MAGI」~瞬間、波形、重ねて~
 
!Utau用 弱音ハクライブラリ
!Utau用 弱音ハクライブラリ!Utau用 弱音ハクライブラリ
!Utau用 弱音ハクライブラリ
 
SIG-Audio#1 CEDEC2012 ラウドネス関連セッション報告
SIG-Audio#1 CEDEC2012 ラウドネス関連セッション報告SIG-Audio#1 CEDEC2012 ラウドネス関連セッション報告
SIG-Audio#1 CEDEC2012 ラウドネス関連セッション報告
 
【Unity道場スペシャル 2017札幌】超初心者向け!Unityのオーディオ機能を使ってみよう
【Unity道場スペシャル 2017札幌】超初心者向け!Unityのオーディオ機能を使ってみよう【Unity道場スペシャル 2017札幌】超初心者向け!Unityのオーディオ機能を使ってみよう
【Unity道場スペシャル 2017札幌】超初心者向け!Unityのオーディオ機能を使ってみよう
 
SIG-Audio#12 アンケート集計結果
SIG-Audio#12 アンケート集計結果 SIG-Audio#12 アンケート集計結果
SIG-Audio#12 アンケート集計結果
 
アサカツ・ヨルカツ サウンド番外編
アサカツ・ヨルカツ サウンド番外編アサカツ・ヨルカツ サウンド番外編
アサカツ・ヨルカツ サウンド番外編
 
SIG-Audio#14 GDC2017オーディオ報告会 「海外クリエーターから学んだサウンド開発レベルのスレッショルドライン~GDC2017をジャンル別...
SIG-Audio#14 GDC2017オーディオ報告会 「海外クリエーターから学んだサウンド開発レベルのスレッショルドライン~GDC2017をジャンル別...SIG-Audio#14 GDC2017オーディオ報告会 「海外クリエーターから学んだサウンド開発レベルのスレッショルドライン~GDC2017をジャンル別...
SIG-Audio#14 GDC2017オーディオ報告会 「海外クリエーターから学んだサウンド開発レベルのスレッショルドライン~GDC2017をジャンル別...
 
UE4+ADX2インタラクティブミュージックの実装
UE4+ADX2インタラクティブミュージックの実装UE4+ADX2インタラクティブミュージックの実装
UE4+ADX2インタラクティブミュージックの実装
 
【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~
【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~
【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~
 
Imagine Cup 2012勉強会(特別講義)
Imagine Cup 2012勉強会(特別講義)Imagine Cup 2012勉強会(特別講義)
Imagine Cup 2012勉強会(特別講義)
 
しゃべれて回れる「小人の執事さん」ったら地獄耳でもあるみたいですよ?(前編)
しゃべれて回れる「小人の執事さん」ったら地獄耳でもあるみたいですよ?(前編)しゃべれて回れる「小人の執事さん」ったら地獄耳でもあるみたいですよ?(前編)
しゃべれて回れる「小人の執事さん」ったら地獄耳でもあるみたいですよ?(前編)
 
はじめてのこんぴゅうとしぇえだあ〜ComputeShaderに入門してみた話〜
はじめてのこんぴゅうとしぇえだあ〜ComputeShaderに入門してみた話〜はじめてのこんぴゅうとしぇえだあ〜ComputeShaderに入門してみた話〜
はじめてのこんぴゅうとしぇえだあ〜ComputeShaderに入門してみた話〜
 
SIG-Audio#9 アンケート集計結果
SIG-Audio#9 アンケート集計結果SIG-Audio#9 アンケート集計結果
SIG-Audio#9 アンケート集計結果
 
ねるねるねるねを練ったわけ
ねるねるねるねを練ったわけねるねるねるねを練ったわけ
ねるねるねるねを練ったわけ
 
20131116 raspijam3
20131116 raspijam320131116 raspijam3
20131116 raspijam3
 
自作音楽ゲームの開発と設計
自作音楽ゲームの開発と設計自作音楽ゲームの開発と設計
自作音楽ゲームの開発と設計
 
SIG-Audio#10 GDC2015 オーディオセッション報告
SIG-Audio#10 GDC2015 オーディオセッション報告SIG-Audio#10 GDC2015 オーディオセッション報告
SIG-Audio#10 GDC2015 オーディオセッション報告
 
MTM07で電子楽器を展示してきた
MTM07で電子楽器を展示してきたMTM07で電子楽器を展示してきた
MTM07で電子楽器を展示してきた
 
SIG-Audio#17 GDC2019オーディオ報告会 「より没入感のある音響ユーザー体験のために」
SIG-Audio#17 GDC2019オーディオ報告会 「より没入感のある音響ユーザー体験のために」SIG-Audio#17 GDC2019オーディオ報告会 「より没入感のある音響ユーザー体験のために」
SIG-Audio#17 GDC2019オーディオ報告会 「より没入感のある音響ユーザー体験のために」
 
Afoduino - FUSE 18 at University of Aizu
Afoduino - FUSE 18 at University of AizuAfoduino - FUSE 18 at University of Aizu
Afoduino - FUSE 18 at University of Aizu
 

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

ソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミングソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミングRansui Iso
 
2016年12月21日 AITCシニア技術者勉強会 第2回「センサに反応する総天然色イルミネーションを作ってみよう!」
2016年12月21日 AITCシニア技術者勉強会 第2回「センサに反応する総天然色イルミネーションを作ってみよう!」 2016年12月21日 AITCシニア技術者勉強会 第2回「センサに反応する総天然色イルミネーションを作ってみよう!」
2016年12月21日 AITCシニア技術者勉強会 第2回「センサに反応する総天然色イルミネーションを作ってみよう!」 aitc_jp
 
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングSounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングt-sin
 
音声認識におけるサーバサイド開発_Shuta Ichimura
音声認識におけるサーバサイド開発_Shuta Ichimura音声認識におけるサーバサイド開発_Shuta Ichimura
音声認識におけるサーバサイド開発_Shuta IchimuraLINE_Engineer
 
VSTiつくるよゼミ
VSTiつくるよゼミVSTiつくるよゼミ
VSTiつくるよゼミy3eadgbe
 
女子美術大学メディアアート演習Ⅱ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
 
スパースモデリング入門
スパースモデリング入門スパースモデリング入門
スパースモデリング入門Hideo Terada
 
HTML5 Conference 2015 鹿児島
HTML5 Conference 2015 鹿児島HTML5 Conference 2015 鹿児島
HTML5 Conference 2015 鹿児島Ryoya Kawai
 
Lecture at University of Tsukuba
Lecture at University of TsukubaLecture at University of Tsukuba
Lecture at University of TsukubaShigeru Kobayashi
 
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門Takeshi HASEGAWA
 
OSC2011 Tokyo/Fall 濃いバナ(virtio)
OSC2011 Tokyo/Fall 濃いバナ(virtio)OSC2011 Tokyo/Fall 濃いバナ(virtio)
OSC2011 Tokyo/Fall 濃いバナ(virtio)Takeshi HASEGAWA
 
20220519_TechStreet_vol6_kitazaki_v1.pdf
20220519_TechStreet_vol6_kitazaki_v1.pdf20220519_TechStreet_vol6_kitazaki_v1.pdf
20220519_TechStreet_vol6_kitazaki_v1.pdfAyachika Kitazaki
 
「Pythonでやってみた」~広がるプログラミングの愉しみ~
「Pythonでやってみた」~広がるプログラミングの愉しみ~「Pythonでやってみた」~広がるプログラミングの愉しみ~
「Pythonでやってみた」~広がるプログラミングの愉しみ~Ransui Iso
 
2017年01月21日 AITCシニア技術者勉強会 第3回「各種センサーを使ってみよう!~温湿度と加速度~」
2017年01月21日 AITCシニア技術者勉強会 第3回「各種センサーを使ってみよう!~温湿度と加速度~」2017年01月21日 AITCシニア技術者勉強会 第3回「各種センサーを使ってみよう!~温湿度と加速度~」
2017年01月21日 AITCシニア技術者勉強会 第3回「各種センサーを使ってみよう!~温湿度と加速度~」aitc_jp
 
音にこだわる! ネイティブアプリだからできる 快適なサウンド演出
音にこだわる! ネイティブアプリだからできる 快適なサウンド演出音にこだわる! ネイティブアプリだからできる 快適なサウンド演出
音にこだわる! ネイティブアプリだからできる 快適なサウンド演出Takaaki Ichijo
 
SORACOM UG 広島 #2 | SORACOM の紹介から SORACOM Conference "Discovery" 2018 SORACOM ...
SORACOM UG 広島 #2 | SORACOM の紹介から SORACOM Conference "Discovery" 2018 SORACOM ...SORACOM UG 広島 #2 | SORACOM の紹介から SORACOM Conference "Discovery" 2018 SORACOM ...
SORACOM UG 広島 #2 | SORACOM の紹介から SORACOM Conference "Discovery" 2018 SORACOM ...SORACOM,INC
 

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

ソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミングソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミング
 
Ssaw08 0520
Ssaw08 0520Ssaw08 0520
Ssaw08 0520
 
2016年12月21日 AITCシニア技術者勉強会 第2回「センサに反応する総天然色イルミネーションを作ってみよう!」
2016年12月21日 AITCシニア技術者勉強会 第2回「センサに反応する総天然色イルミネーションを作ってみよう!」 2016年12月21日 AITCシニア技術者勉強会 第2回「センサに反応する総天然色イルミネーションを作ってみよう!」
2016年12月21日 AITCシニア技術者勉強会 第2回「センサに反応する総天然色イルミネーションを作ってみよう!」
 
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングSounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
 
音声認識におけるサーバサイド開発_Shuta Ichimura
音声認識におけるサーバサイド開発_Shuta Ichimura音声認識におけるサーバサイド開発_Shuta Ichimura
音声認識におけるサーバサイド開発_Shuta Ichimura
 
Slides AXIS WS2
Slides AXIS WS2Slides AXIS WS2
Slides AXIS WS2
 
ADS-B on raspberry pi
ADS-B on raspberry piADS-B on raspberry pi
ADS-B on raspberry pi
 
VSTiつくるよゼミ
VSTiつくるよゼミVSTiつくるよゼミ
VSTiつくるよゼミ
 
女子美術大学メディアアート演習ⅡB 2012 Spring 第10回 1/2
女子美術大学メディアアート演習ⅡB  2012 Spring 第10回 1/2女子美術大学メディアアート演習ⅡB  2012 Spring 第10回 1/2
女子美術大学メディアアート演習ⅡB 2012 Spring 第10回 1/2
 
スパースモデリング入門
スパースモデリング入門スパースモデリング入門
スパースモデリング入門
 
HTML5 Conference 2015 鹿児島
HTML5 Conference 2015 鹿児島HTML5 Conference 2015 鹿児島
HTML5 Conference 2015 鹿児島
 
Lecture at University of Tsukuba
Lecture at University of TsukubaLecture at University of Tsukuba
Lecture at University of Tsukuba
 
Introduction of FPGA
Introduction of FPGAIntroduction of FPGA
Introduction of FPGA
 
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
 
OSC2011 Tokyo/Fall 濃いバナ(virtio)
OSC2011 Tokyo/Fall 濃いバナ(virtio)OSC2011 Tokyo/Fall 濃いバナ(virtio)
OSC2011 Tokyo/Fall 濃いバナ(virtio)
 
20220519_TechStreet_vol6_kitazaki_v1.pdf
20220519_TechStreet_vol6_kitazaki_v1.pdf20220519_TechStreet_vol6_kitazaki_v1.pdf
20220519_TechStreet_vol6_kitazaki_v1.pdf
 
「Pythonでやってみた」~広がるプログラミングの愉しみ~
「Pythonでやってみた」~広がるプログラミングの愉しみ~「Pythonでやってみた」~広がるプログラミングの愉しみ~
「Pythonでやってみた」~広がるプログラミングの愉しみ~
 
2017年01月21日 AITCシニア技術者勉強会 第3回「各種センサーを使ってみよう!~温湿度と加速度~」
2017年01月21日 AITCシニア技術者勉強会 第3回「各種センサーを使ってみよう!~温湿度と加速度~」2017年01月21日 AITCシニア技術者勉強会 第3回「各種センサーを使ってみよう!~温湿度と加速度~」
2017年01月21日 AITCシニア技術者勉強会 第3回「各種センサーを使ってみよう!~温湿度と加速度~」
 
音にこだわる! ネイティブアプリだからできる 快適なサウンド演出
音にこだわる! ネイティブアプリだからできる 快適なサウンド演出音にこだわる! ネイティブアプリだからできる 快適なサウンド演出
音にこだわる! ネイティブアプリだからできる 快適なサウンド演出
 
SORACOM UG 広島 #2 | SORACOM の紹介から SORACOM Conference "Discovery" 2018 SORACOM ...
SORACOM UG 広島 #2 | SORACOM の紹介から SORACOM Conference "Discovery" 2018 SORACOM ...SORACOM UG 広島 #2 | SORACOM の紹介から SORACOM Conference "Discovery" 2018 SORACOM ...
SORACOM UG 広島 #2 | SORACOM の紹介から SORACOM Conference "Discovery" 2018 SORACOM ...
 

Último

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 

Último (9)

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

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

  • 1. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ リアルタイムオーディオ信号処理入門 -第1回:イコライザーをつくってみる- アークシステムワークス株式会社 技術開発部長(CTO) 増野 宏之 masuno@arcsy.co.jp Hiroyuki Masuno Page 1
  • 2. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ 自己紹介(その1) • 増野 宏之 (Hiroyuki Masuno) – アークシステムワークス株式会社所属 – 技術開発部長(CTO) – 1964年10月8日生まれ, そろそろ48歳(年男) – ゲーム業界26年目 • プログラマー/オーディオエンジン開発 • 海外渉外各種交渉業務 • 法務部部長+宴会担当 Hiroyuki Masuno Page 2
  • 3. Arc System Works Co., Ltd. . SIG Audio Audio 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. Arc System Works Co., Ltd. . SIG Audio Audio 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.5Hz Hiroyuki Masuno Page 4
  • 5. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ セッションの流れ 1. オーディオ信号処理とは何か、その重要性 2. イコライザーの基本理論(フィルター) 3. XAudio2上での設計と実装 4. EQ実演(NAX Music Player(PSVITA)) 5. ゲーム業界震撼のカミングアウト(笑) 6. 質疑応答(時間があれば) Hiroyuki Masuno Page 5
  • 6. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ 昔話 • 音が専用ハードで再生されていたのは昔。 – ファミコン(矩形波x2・三角波x1・ノイズx1) – 0x4000-0x400F番地のレジスタに値を書き込 んで発音させていた。 – CPU速度: 6502Aの1.79MHz • オーディオ機能はCPU直結 • 6502A+DAC=リコーRP2A03 Hiroyuki Masuno Page 6
  • 7. Arc System Works Co., Ltd. . SIG Audio Audio 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. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ オーディオ信号処理の重要性(2) • メインCPUやDSPがオーディオ処理を担当する時 代になった。 – オーディオパイプラインの誕生 – 今では、比較的重い処理のひとつ。 – 効率的なオーディオパイプライン設計のために、リ アルタイムオーディオ信号処理技術を学ぶ必要性が 生じた。 • 日本語で書かれた参考書はあまり多くない。 • ゲームの場合、重要となる高速化に関する書籍はほぼゼロと いう悲しい状態。高速化→表現力の向上 Hiroyuki Masuno Page 8
  • 9. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ 参考書の紹介 • C言語ではじめる音のプログラミング -サウンドエフェクトの信号処理- – 著者:青木 直史 – 出版社: オーム社 (2008/12) – ISBN-10: 4274206505 – ISBN-13: 978-4274206504 – 2,730円 Hiroyuki Masuno Page 9
  • 10. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ オーディオ信号処理とは • 入力バッファに蓄積されたオーディオ信号波 形になんらかの数値演算を行い出力バッファ に書き出す処理のこと。たとえば・・・ – 信号を一定時間(0.2~1秒程度)遅らせて重ねる • デジタルディレイ – 信号の遅延時間を小刻みに変化させる • コーラス – 信号を極端に増幅し、波形を飽和させる • ディストーション Hiroyuki Masuno Page 10
  • 11. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ オーディオ信号処理とは(2) • 実は、入力バッファも出力バッファも必須では ないし、必ずしも波形を加工する必要もない。 – 入力バッファがない例 • 内部処理で波形を作り出す – WG (Wave Generator) – 入力波形を加工せずに出力波形にコピーする • 最大波高値を検出する – VUメーター • もっとも確からしいBPM値を検出する – リアルタイムBPM解析(A4-BPM/A4-VMA) Hiroyuki Masuno Page 11
  • 12. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ 今回の講演における信号処理 • 第1回目の今回に関しては、入力波形になんらかの 演算をして出力波形に書き出す、一般的なエフェク ターに関する説明を行う。 • WindowsにおけるXAudio2では、XAPOとして 規定されている。 – XAPO: XAudio Audio Processing Object 入力波形 → 演算処理 → 出力波形 Hiroyuki Masuno Page 12
  • 13. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ 一番簡単な処理の例 • アッテネーター(減衰器)(Attenuator) – 入力された波形を半分の音量にして出力する – [半分の音量]→[外部から変えることができるように書 き直す]→[ボリューム調整APO]の出来上がり 入力波形 → 演算処理 → 出力波形 fIn fOut=fIn*0.5f fOut Hiroyuki Masuno Page 13
  • 14. Arc System Works Co., Ltd. . SIG Audio Audio 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. Arc System Works Co., Ltd. . SIG Audio Audio 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. Arc System Works Co., Ltd. . SIG Audio Audio 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. Arc System Works Co., Ltd. . SIG Audio Audio 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. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ イコライザーを作る Hiroyuki Masuno Page 18
  • 19. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ イコライザーとは何か • 波形信号の周波数特性を変更する音響機器 • エフェクターの一種(XAPOで設計可能) • グラフィックイコライザー – 中央周波数一定 – 調整できる帯域の幅も一定 – ゲインのみ変更できる – 多数(5~31程度)の周波数領域(バンド)が調整できる。 • パラメトリックイコライザー – 上記の3要素(中央周波数・帯域幅・ゲイン)すべてを変更できる – 調整できるバンドの数は少ない(3~5程度) Hiroyuki Masuno Page 19
  • 20. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ イコライザー設計方法(1) • Linear Phase法 – FFT(フーリエ変換)を使う • 入力波形をFFTして周波数領域に直交変換 • 各周波数ビン利得を変更 • iFFTして時間領域に逆変換 – 特徴 • 位相情報は保持される • iFFT変換後、窓のつなぎ目で、波形を綺麗に繋ご うとすると、最低でも1,024サンプルFFT + 75% オーバーラップ程度の演算が必要となるため重い。 Hiroyuki Masuno Page 20
  • 21. Arc System Works Co., Ltd. . SIG Audio Audio 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. Arc System Works Co., Ltd. . SIG Audio Audio 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. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ 処理フロー 事前パラメーター計算 ↓ 入力側から読み込み ↓ LF,MF1-MF8,HFの順に10段のフィルターを通す バンド増幅値が0.0dBの場合は計算しない ↓ 出力側に書き出し Hiroyuki Masuno Page 23
  • 24. Arc System Works Co., Ltd. . SIG Audio Audio 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. Arc System Works Co., Ltd. . SIG Audio Audio 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. Arc System Works Co., Ltd. . SIG Audio Audio 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. Arc System Works Co., Ltd. . SIG Audio Audio 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. Arc System Works Co., Ltd. . SIG Audio Audio 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. Arc System Works Co., Ltd. . SIG Audio Audio 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. Arc System Works Co., Ltd. . SIG Audio Audio 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. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ NAX Music Player Paragraphic EQ デモ実演 Hiroyuki Masuno Page 31
  • 32. Arc System Works Co., Ltd. . SIG Audio Audio 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-------------------------------------- END Hiroyuki Masuno Page 32
  • 33. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ 圧倒的な物量の大域変数・1万行を超えるupdate関数 唯一にして絶対のGameClass・新世代のプログラムを体感せよ! FOR TRAN LEGACY 2012年11月絶賛公開!! Hiroyuki Masuno Page 33
  • 34. Arc System Works Co., Ltd. . SIG Audio Audio 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. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ FORTRANで組む利点 • 現時点でもっとも高速。平均で6倍以上。 – FFTならば最大で3桁違うことも珍しくない。 – 言語仕様上、メモリコヒーレンシが高い • ポインターがない、変数はすべてコンパイル時確定。 – C言語でも高速に記述することはもちろん可能、でもそのために、 覚えることが多すぎるのは、本末転倒。 • 信号処理マニアなのであって、プログラム言語マニアではない。 • コンパイラーが自動ベクトル化+並列化する。 – IntelのマルチコアCPUなら現時点では最速。 – マルチコアCPUならば、ハードウェアスレッド数内で、チャン ネル数が増えても、ほとんど実行速度が変わらない。 • 膨大な数値計算のライブラリーがある。 – Intel Math Kernel Library (IMKL/MKL) Hiroyuki Masuno Page 35
  • 36. Arc System Works Co., Ltd. . SIG Audio Audio 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. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ Fortran Forever • Windows版をゲーム機版に移植する際に は、非常に遅くなるので苦労する。 – 実はC/C++言語は個人的に苦手 • ゲーム機向けにもFortran Compilerを! – Xbox360, PS3, PSVITA, Wii-U, 次世代機にも! – オーディオパイプラインが早いのなら、レン ダリングも早いはず。 • シェーダーもFortranで書けるようにしよう! Hiroyuki Masuno Page 37
  • 38. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ Fortran 公式の歌 • おおブレネリ あなたの言語はなに? • 私の言語はフォートランよ 数値計算が得意なのよ • ヤーーッフォー フォートランランラン • ヤッフォー フォートランランラン • ヤッフォー フォートランランラン • ヤッフォー フォートランランラン • ヤーーッフォー フォートランランラン • ヤッフォー フォートランランラン • ヤッフォー フォートランランラン • ヤッフォーフォー Hiroyuki Masuno Page 38
  • 39. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ NAX Music Player (2012) Hiroyuki Masuno Page 39
  • 40. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ NAX Music Player • Playstation VITA向け, 11月発売 • 世界初「音ゲー」が楽しめる音楽プレイヤー • 基本無料・有料DLCで機能拡張 – ビジュアライザープラグイン – DSP-FXプラグイン – ダンスゲーム/ダンサープラグイン – DJ, 通信カラオケ, 各種音ゲーもDLCで提供 Hiroyuki Masuno Page 40
  • 41. Arc System Works Co., Ltd. . SIG Audio Audio Digital Signal Processing 1 : EQ 御静聴ありがとうございました! 質疑応答 お問い合わせは masuno@arcsy.co.jp Hiroyuki Masuno Page 41