オーディオツールの作り方
    超入門編

  株式会社ヴァルハラゲームスタジオ
              稲森崇史

  IGDA日本 SIG-Audio準備会#2(2012.9.28)
自己紹介
・株式会社ヴァルハラゲームスタジオ
 オーディオディレクター 兼 プログラマ

・フリーのオーディオツール作ってます
  - 公開サイト:http://inamons.com/


・CEDEC2012で講演しました
  - 今すぐ導入できるボイスファイルマネージメント
   SlideShare:http://www.slideshare.net/tak_ina/cedec2012
本日のおはなし
・ツール作れるといいことあるよ!
・初心者に立ちはだかる壁
・処理内容を分解してみる
・ツール作り実例

※ スライド・サンプルコードは公開しますので
  概要をさらっと聞くのがオススメです
ツール作れるといいことあるよ!
ツール作れるといいことあるよ!
※ サウンドクリエイターの場合

ツールで便利になるのはもちろんとして…

・モテる(主にサウンドの同僚に)
・プログラマとお話ができるようになる
・サウンドシステム仕様を組めるようになる
・プログラマになれる(させられる)

こんな副作用があります(たぶんいいこと!)
初心者に立ちはだかる壁
初心者に立ちはだかる壁
(1) モチベーションの維持
・ 作りたいものがある! が何よりの原動力
  - 日頃の不満を解消できるツール作りを目指す
  - プログラムを覚えるため、では長続きしない

・自分のために作ろう
  - 自分が使う前提で、やることを取捨選択

・周りの人にツールを見せて褒められよう
  - やる気がでて自信もつく!
初心者に立ちはだかる壁
(2) プログラムは難しい?
・多少の適性と、後は慣れの問題
  - 興味を持った時点でプログラマ適性はアリ

・本質は仕組みを考えること
  - プログラムはあくまで「手段」
  - 仕組み実現のために「お約束(言語)」を覚える

・ググってコピペ、でいいじゃない
  - スマートでなくても動けばOK!
初心者に立ちはだかる壁
(3) どうやって勉強すればいい?
・書籍、ネットともに情報は充実
  - 「やりたいこと」の実現に必要なものから探す
  - 次に、必要な情報を理解するための勉強をする

・完成されたソースコードをいじるのが近道
  - 公開プロジェクト・コードはたくさんある
  - 少しいじって挙動を見る、を繰り返す

・ツールの処理を小さい単位に分解して考える
処理内容を分解してみる
処理内容を分解してみる
基本的なツールの処理の流れ
  ユーザー      1. クリック・キー入力などの操作
  (使う人)
                  EVENT!   2. イベント発生

  5. 結果を     インターフェース          3. 適切な処理を
ユーザーに伝える      (ツールウィンドウ)
                                  呼び出す


                                 内部処理
           4. 処理の結果を返す
                                (見えない部分)
処理内容を分解してみる
インターフェース処理
・インターフェース処理の分解
 ・ファイルフォルダ表示 ・波形描画 ・独自ダイアログ
 ・ドラッグ&ドロップ対応 ・想定外の操作への対処 etc...

・実は最も調整に時間のかかる作業
 - 難しいというよりも面倒くさい
 - 使い勝手や操作感に直結(ゲーム作りと同じ)

・ユーザーが我慢するという選択肢もアリ
処理内容を分解してみる
内部処理
・内部処理の分解
 ・ファイル読み書き ・再生コントロール ・DSP処理
 ・描画用バッファ作成 ・データ生成 etc...

・高い技術レベルを求められる部分もある
 - 困難なところは外部ライブラリを利用

・ファイル読み書きさえできれば色々いける
処理内容を分解してみる
処理の分解ができたら
・簡単な処理から習得&実装していく
  - 経験を積めば徐々に難しいこともこなせるように
  - どうしても厳しいところはアイデアで乗り越える!

・習得した技術(=処理方法)を組み合わせる
  - 手持ちの技術が増えると色々作れるようになる
ツール作り実例
ツール作り実例
開発環境(Windows向け・非商用利用なら無料)
Visual C# Express Edition
   - Microsoft製のプログラム統合環境ツール
   - プログラム支援機能が超優秀!
   - ツールのインターフェースを作りやすい
   - C#言語(UnityやPlayStationMobileでも採用)


入手先:http://www.microsoft.com/ja-jp/dev/express/default.aspx
ツール作り実例
開発環境(Windows向け・非商用利用なら無料)
おすすめサウンドライブラリ                         (OSX、Linux版もあり)

・FMOD Ex   ( http://www.fmod.org/ )

   - ゲーム向けサウンドライブラリ(使用実績多数)
   - ゲームのサウンドシステムの勉強にもなる

・BASS Audio Library         ( http://www.un4seen.com/ )

   - 多くのフォーマットに対応
   - エンコード・デコード・VST対応など機能豊富
ツール作り実例
機能実装 1:再生と停止
・PLAYボタン
・STOPボタン
・ボタンクリックイベント
・再生&停止(SoundPlayer利用)

→サウンドプレイヤー

サンプル:http://inamons.com/lib/sigaudio-pre2/sample1_player.zip
ツール作り実例
機能実装 2:WAVフォーマット解析
WAVファイルのデータ構造
 バイナリエディタで開くとこんな感じ
 データ(16進数値)   16進数値を文字にして表示
ツール作り実例
機能実装 2:WAVフォーマット解析
WAVファイルのデータ構造 (色分け)
フォーマット情報(チャンネル数・サンプルレート・ビットなど)
RIFFヘッダ   追加情報(※任意 この例ではループポイント)



                      波形データ本体
ツール作り実例
機能実装 2:WAVフォーマット解析
・再生と停止
・OPENボタン
・フォーマット表示テキスト
・ファイル選択ダイアログ
・WAVフォーマット解析処理

→フォーマットビュワー
サンプル:http://inamons.com/lib/sigaudio-pre2/sample2_formatviewer.zip
ツール作り実例
機能実装 3:波形の表示
波形データの内容 (16ビット・モノラルの場合)


             波形の振幅を
             -32768∼32767までの
             65536段階で表現
             (16ビットの場合)
ツール作り実例
機能実装 3:波形の表示
波形データの内容 (16ビット・モノラルの場合)

                                                              2402
表示波形
(実際の値) -2049                                           -579
                                               -4490
               -7290
                                       -9655
                       -12372 -13328



波形データ
  本体
ツール作り実例
機能実装 3:波形の表示
・再生と停止
・フォーマット解析
・波形データ取得処理
・折れ線で波形を描画
・一定範囲ごとの最大/最小値を
 つないで全体波形を描画

→波形ビュワー
サンプル:http://inamons.com/lib/sigaudio-pre2/sample3_waveviewer.zip
ツール作り実例
ここまでの機能の組み合わせ+α

             α=?
・再生と停止
・フォーマット解析
・波形の表示
            +
ツール作り実例
ここまでの機能の組み合わせ+α
・再生と停止
・フォーマット解析
・波形の表示
・ループポイント取得
・ファイル書き出し
・FMOD利用

→ループエディター
サンプル:http://inamons.com/lib/sigaudio-pre2/sample4_loopeditor.zip
ツール作り実例
さらに改良するなら
・機能の拡張
 - 多チャンネル対応
 - ループアライメント設定(28サンプル刻みとか)
・インターフェースの改良
 - クリックでループポイントを指定
 - ポジションバー表示、ズーム、スクロール

 →後から少しづつ充実させよう!
まとめ
まとめ
・ちょっとした利便性を求めて、
 手持ちの技術とアイデアを組み合わせ、
 周りの人に褒められつつ、
 自分のペースでじっくり作りましょう!

・プログラムができるようになることで
 新しい道が開けるかもしれません。
スライド・サンプルコードの公開先


・スライド
 http://www.slideshare.net/tak_ina/sigaudio2


・サンプルコード
 http://inamons.com/lib/sigaudio-pre2/
C#入門おすすめサイト
・DOBON.NET
 http://dobon.net/vb/dotnet/index.html


・C# によるプログラミング入門
 http://ufcpp.net/study/csharp/


・改訂版 C#入門
 http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/
ありがとうございました!
Wall Paper BY Japonizer. http://wanokoto.net/japonizes
Watch-Icon and Keybord-Icon BY Jack Cai. http://www.doublejdesign.co.uk/
Heart-Icon BY princessang2644. http://princessang2644.deviantart.com/
Book-Icon BY schollidesign. http://schollidesign.deviantart.com/
Speaker-Icon BY Brsev. http://brsev.deviantart.com/

SIG-Audio準備会#2 オーディオツールの作り方 超入門編