録音スタジオで広く使われているオーディオ編集ソフト・ProToolsの無料版「Pro Tools First」が公開されました。
突然ですが2013年の話をします。
IT系コミュニティ・プログラミング生放送勉強会ではマスコットキャラクターのプロ生ちゃんボイスを公開しているのですが、プロ生ちゃんボイスがWindows APIのPlaySound関数で再生できないとう問題がありました。
プロ生ちゃんの音声がWindows サウンド設定で再生されない問題 - 桜、抹茶、白、日記
http://d.hatena.ne.jp/youandi/20130911/p1
再生できないプロ生ちゃんボイスはProToolsでエクスポートされたwavファイルらしいことは分かっていたのですが、当時はProToolsが手元になく検証できませんでした。
wavファイルの書き出しは要注意 [CUBASE][StudioOne]
ProTools Firstを入手方法してProToolsのwavファイルがPlaySound関数で本当に再生できないのか検証してみました。
環境
ProToolsのインストール先・Windows10
・PC内蔵オーディオ + ASIO対応オーディオインターフェイス
・iLokなし
PlaySound関数の実行環境
・Windows8.1
ProTools Firstを予約する
ProTools Firstを入手するには下記のサイトから予約する必要があります。http://connect.avid.com/ProToolsFirst-Register.html
ProTools Firstがダウンロードできるようになるとその旨のメールが届きます。
自分の場合2015年2月に予約して2015年8月にダウンロードできるようになりました。
Avid用アカウントを作成する
ProTools Firstをダウンロードするには下記のサイトからAvidにアカウント登録する必要があります。https://www.avid.com/JP/account/orientation?returnUrl=%2fJP%2faccount
登録したメールアドレスとパスワードはProTools Firstの起動時にも必要です。
ProTools Firstをインストールする
ProTools Firstはzipファイルで公開されているのでダウンロードしたら解凍し、Setup.exeをダブルクリックしてインストールします。この画面の「Pro Tools Firstをインストール」をクリックします。
追加のアイテムをインストールするそうです。
デバイスソフトウェアもインストールされます。
この後何も画面表示されないのですが、もう一度この画面の「Pro Tools Firstをインストール」をクリックします。
ProTools Firstのインストールが始まります。
インストールはウィザード形式で進んでいきます。
インストール中に別のデバイスソフトウェアがインストールされます。
この後再起動が必要になります。再起動後スタートメニューにPro Tools Firstが追加されます。
起動してサインインを求められるのでEメールとパスワードにAvidアカウントに登録したものを入力します。
ようやく起動できるようになりましたがオーディオインターフェイスに空きがないとエラーになります。
なかなかハードルが高いです。
ASIO対応オーディオインターフェイスをつなげたら起動できました。
ProTools Firstが使えるようになるまでにファイアウォールのホワイトリストが3つ追加されてました。
ProToolsでwavファイルをエクスポートする
ProToolsで新規プロジェクトを作成してwavファイルをエクスポートしてみます。ちなみにProTools Firstはプロジェクトの保存先がクラウド限定で、起動するときはネットに接続しておかないと新規プロジェクトの作成ができないようです。
エクスポートはCD音質の設定にしました。
ファイルタイプ : WAV
フォーマット : インターリープ
ビットデプス : 16ビット
サンプルレート : 44.1kHz
wavファイルにはWAVフォーマットとそれを拡張したBroadcast Wave Formatとがあり、どちらもファイルの拡張子はwavです。
ProToolsでエクスポートできるwavファイルはBroadcast Wave Formatのみのようです。
wavファイル再生アプリを作る
Windows APIのPlaySound関数を使ってwavファイルを再生するアプリを作ります。Visual Studio Communiy 2013のVisual C++で作りました。
wavファイルのフルパスをコマンドライン引数で指定すると再生する仕様です。
SimpleWavPlayer.cpp
ビルドするには
プロジェクト - (プロジェクト名)のプロパティ - 構成プロパティ - リンカ - 入力 - 追加の依存ファイル
に
winmm.lib
を追加する必要があります。
追加の依存ファイルを忘れると下のエラーが出てビルドできません。
結果は再生できず
ProTools Firstで書き出したwavファイルはMedia Playerでは再生できますが、PlaySound関数で再生すると「システム通知」に設定されたポーンという警告音が鳴るだけでした。ですがPlaySound関数は「成功」の戻り値1(TRUE)を返します。
MSDNによると
指定されたサウンドが見つからなかった場合、PlaySound 関数はシステムイベントに対応する既定のサウンドイベント(一般の警告音)を使います。システムの既定のサウンドイベントと既定のサウンドのどちらも設定されていなかった場合は、サウンドを再生せずに FALSE を返します。
とのこと。
https://msdn.microsoft.com/ja-jp/library/Cc428768.aspx
PlaySound関数はProTools Firstで書き出したwavファイルをサウンドとして認識できないのか見つからなかったことになり成功を返すようです。
CUBASEのwavファイルは再生できる
全く同じ音源をCUBASE Pro 8でwavファイルに書き出してみました。CUBASEで書き出した場合はWAVだろうがBroadcast Wave Formatだろうがちゃんと再生され、戻り値に「成功」の1(TRUE)が返ってきました。
まとめ
これらの結果から次の仮説を立てました。-
ProToolsでエクスポートしたwavファイルがPlaySound関数で再生できないのはProToolsのバグ
(Avidが修正すれば再生できる可能性がある) -
PlaySound関数がwavファイルを再生できないのに成功を返すのは仕様
(MSDNに書いてある通り。仕様を変えると互換性がなくなる)
しかもProToolsのwavファイルはWindows Media Playerでは正常に再生できてしまうので気付きにくいです。
さらにPlaySound関数はwavファイルを再生できなくても成功を返すのでテストフレームワークを使ってもパスしてしまいそうです。
フリーソフトのSoundEngine Freeで変換したwavファイルはPlaySound関数で再生できることが分かってます。
Windowsアプリにwavファイルを組み込むときはSoundEngine FreeやCUBASEなど他のDAWで変換したファイルを組み込んだほうが良さそうです。
関連ブログ
wavファイルの書き出しは要注意 [CUBASE][StudioOne]CUBASE Pro 8を使ってみました
CUBASE Pro 8 トラブル対策
[CUBASE] 「突然音が出なくなった」を解決する
[CUBASE][StudioOne] 音の遅れ(レイテンシー)の原因を探る
[VOCALOID4] 巡音ルカV4Xを使ってみました
VOCALOID4に対応したピアプロスタジオを使ってみました
VOCALOD4 Editor for CUBASE (V4版ボカキュー)を使ってみました
以上、参考になれば幸いです。