SIG-Audio #16「オーディオプログラミングワークショップ」レポート

 「ゲームプログラマになりたい人はたくさんいるが、オーディオプログラマになりたいという人は少ない。もっと増えて欲しいが、どうやればオーディオプログラマになれるのかも知られていない」。

 NPO法人IGDA日本がコロプラ社の会場協力のもと、11月7日に開催したSIG-Audio第16回勉強会「オーディオプログラミングワークショップ」。SIGの正世話人でバンダイナムコスタジオの中西哲一氏は、開会の挨拶で上のように述べました。ゲームオーディオの制作においてはデータを作成するサウンドデザイナーだけでなく、それらを実装するオーディオプログラマの存在も不可欠です。今回の勉強会は、そのオーディオプログラマとは何かを学ぶ場として開かれました。

オーディオプログラマの仕事内容紹介

 はじめにスクウェア・エニックスでサウンド部・ローカライズ部のテクニカルディレクターを務める土田善紀氏より、オーディオプログラマの仕事内容が紹介されました。なおスクウェア・エニックスではサウンドプログラマと呼んでおり、本講演でもその呼称を採用しています。

スクウェア・エニックス 土田善紀氏

 サウンドプログラマとは、音声信号を扱うプログラマのこと。実際の仕事は大きく4つに分類されます。

 1つ目は「サウンドドライバを作る」。ゲーム機の中で動くオーディオのミドルウェアのようなもので、マルチプラットフォーム対応の際にハードごとの仕様の違いをカバー、マルチチャンネル対応時のアウトプットフォーマットの対応、データフォーマットのマルチ対応、UnityやUnrealといったゲームエンジン上で、データを統一して扱えるようにする、などの目的があります。

 2つ目は「サウンドツールを作る」。データからサウンドドライバが扱えるバイナリパッケージを作るためのツールで、サウンドデザイナーがサウンドドライバの存在を目にすることなく音作りができるようにします。オーサリングツールのほか、音楽のループを綺麗に作るツール、3D音響の設定ツールなど、様々な種類があります。またゲームタイトル側の既存ツールに手を加えるといった作業もあります。

 3つ目は「管理システム、ツールを作る」。現在のゲーム開発はファイル数が数万~数十万になり、管理システムが必要になります。既存のツールも活用しつつ、自分達のバージョン管理システムを作ったり、効果音や楽曲のデータベースを作り、社内で必要な時に引き出せるようにしたりもします。またサウンドでどの程度のリソースを使っているか、ディスクにどれだけ入るかを監視するツールなども制作しています。

 4つ目は「ヘンテコ音響効果機能を作る」。デジタル信号処理による機能をゲームに搭載するもので、リアルタイム信号処理、インタラクティブミュージック、空間音響・残響・遮蔽、省力化・自動化など幅広い目的があります。さらに自社だけでなく他社や他業界との連携における外部技術の組み込みなども行います。

 土田氏は「ここがサウンドプログラマの一番面白いところ」と述べ、次のように詳細を語りました。

 「リアルタイム信号処理」は、ユーザーの操作に合わせて音を鳴らすといったもの。例えば衝突音や爆発で瓦礫が崩れた時に出る音では、瓦礫の数や大きさで音の鳴り方が変わるため、物理的なデータを入れると勝手に音が鳴るシステムを制作しました。ユーザーの操作によってどんな音が必要になるかわからないため、事前の録音はできず、ゲーム内で生成する必要があります。

 「インタラクティブミュージック」は、ユーザーや敵がどんな状態にあるかをゲーム側から受け取り、音楽を変化させていきます。純粋にデジタル信号処理でするものもあれば、データのシークポイントを切り替えることで実現することもあります。

 「空間音響・残響・遮蔽」は、3D空間上の音響処理のこと。右から敵が来たら右から音が聞こえるというだけでなく、5.1chやDolby Atmosといった3D的な音響を、ユーザーが立っている位置から逆算し、どのように音が聞こえているかを計算しています。壁があった時はどんな音が聞こえるか、川の中や川から離れたらどう聞こえるかなどです。これには明確な正解はなく、「それっぽく聞こえたら勝ち」だそうです。

 「省力化・自動化」は、作業の省力化のためにAIに任せるといった話。例えばキャラクターの足音や衣擦れ、マントのはためきなどは、以前は人間が1つずつ設定していましたが、ものすごい労力がかかります。またモーションデザイナーがモーションを変えたら、音もやり直しになってしまう問題もあります。そこでキャラクターの骨の動きなどをモニタリングして、音が鳴ると判定された時は鳴らし、音の大小までコンピュータが処理します。これによりモーションデザイナーが手を加えても、サウンドデザイナーには追加作業が発生しなくてすむようになります。

 「外部との連携」では、ボーカロイドをゲーム内で呼び出したり、空間音響のシステムをアンプ側に搭載したりと、ゲーム業界外との様々な連携が挙げられました。

 このように土田氏はオーディオプログラマの仕事について、「何でもありで、いろんなことをさせられる。音に関わっていないようなことまで何でも作る仕事」と語ります。

ワークショップ風景

全タイトルをサポートするために求められる広範なスキル

 それではサウンドプログラマに必要なスキルとは何か。「大事なのは基本」とし、C言語のアルゴリズムを知った上で、C++で作業すること。CPU・メモリ・スレッドの挙動を把握し、開発環境構築などを自分でできること。各APIの仕様やデザインパターン・アルゴリズムなどを学ぶことを挙げました。そのために、数学はどうしても必要になるとも言います。これらはあらゆるプログラマに必要なスキルとしています。

 さらにサウンドプログラマには、デジタル信号処理の基本が必要です。種々ある波形フォーマットの扱いや、Unity、Unrealエンジンなどの市販ゲームエンジンの知識も必要だと言います。

 ちなみにスクウェア・エニックスでは、ゲームエンジンはC++、ツールはC#で制作。Win32が未だに使われていたり、.NetFrameworkやWPFが使われていたりと、チームによって環境が違うので、それらに合わせていく必要もあるとしています。また大量のファイルのデータ管理にはデータベースも必須で、MySQLやPostgreSQLなどのデータベースプログラミングが必要になります。さらにTCP/IPでツールとのデータのやり取りをしているので、ネットワークの知識も必要です。

 ハードウェアについても、サウンドプログラマは特定のゲームタイトルに紐付くプログラマではないため、Windows、iOS、Android、Mac、Unixと全て扱える必要があります。PS4やSwitchなど、家庭用ゲーム機についても同様で、会社が参入しているすべてのハードウェアにかかわることになります。

 バージョン管理では、GitやPerforce、Subversionの3つを使いこなすことが求められます。チームによって使っているものがバラバラなので、全社を相手にするサウンドプログラマは全て対応しなければなりません。以前は各チームで勝手にバージョン管理ソフトを作ったりした時代もあったとか。このほかLuaやPythonなどのスクリプト言語や、HTML5も求められることがあるそうです。

 そしてサウンドに関する専門知識。WindowsならXAudio2やCoreAudioAPIなどを使うものの、プロジェクトにより異なります。またAndroidはOpenSLES、iOSはAudioQueueと、それぞれで異なります。

 周辺ツールのプラグインも書くことになります。VSTプラグインで便利な機能を作るなどは一例で、他にProToolsやVegas、SoundForce、Reaperプラグインなども知っておくべきです。会社ごと、タイトルごとで使っているツールが違うので、それに合わせて書くことになります。またWwiseやADXなど市販のミドルウェアで、何ができるのかをリサーチするのも重要としています。

 今後求められるスキルとしては、グラフィックス系や機械学習などの幅広い分野の知識が必要になってくるのではないかと言います。土田氏は「何でも自動で、コンピュータでいい感じにやっておいて」という方向に進んでいくと見ているそうです。

プログラマとしての基礎能力が問われる

 続いて、バンダイナムコスタジオの山口邦雄氏、酒井健行氏、佐々木廣太郎氏による、オーディオプログラムワークショップが開かれました。バンダイナムコスタジオ主催のインターンシップで、オーディオプログラマ編の内容が好評だったため、教材内容を再構成して本ワークショップで活用されたそうです。

バンダイナムコスタジオ 山口邦雄氏

 詳しい内容は非公開で……ということでしたが、音とは何かという基礎知識から、XAudio2を使って実際に音を鳴らすプログラムを組むという流れで、実践的なトレーニングが行なわれました。

 最後にバンダイナムコスタジオのオーディオプログラマに必要なスキルについても語られました。

 まずは何より、スキルを発揮するためのやる気と、新しいものに対応し続けていくための学び続ける意欲が大事だと言います。その上で、プログラマとしてC++とC#は必須としています。

 次に求められるのは、コミュニケーション能力。オーディオプログラマはサウンドクリエイターから「この作業を楽にできないか」といった相談などを受けて、それを実現していくため、求められた意図をきちんとくみ取れないと、いいものはできません。

 そのほか、あれば嬉しいスキルとして、アセンブラとSIMD命令によるプログラミングができること。オーディオプログラマはライブラリなど一番下の層を扱うので、高速化が必要になり、少なくともアセンブラが読める必要があるとしています。

 そのほか、「VSTプラグインを作ったことがあること」「UnityやUnrealを使ったゲーム制作経験があること」「DAWを使ったことがあること」などが挙げられました。またGPGPUを使ったことがあることも強みになるといいます。CG分野ではNVIDIA GeForce RTX 2000シリーズで搭載されたレイトレーシング技術が話題になっていますが、機能としてはオーディオでも使えるものなので、これを活用すると、少し上の表現が目指せるのではないかとしています。

 本講演では2社のオーディオプログラマが講演しましたが、必要なスキルとして双方ともに「プログラマとしての基礎能力」を挙げているのが印象的です。オーディオプログラマという言葉だけを聞くと、音の専門家という印象を持ちますが、実際には音そのものだけでなく、そこに関わるあらゆる仕事に携わることがわかります。一般的なゲームプログラマと同様の基礎能力に加えて、より幅広い知識と応用力が求められる職種と言えそうです。(石田賀津男)