WindowsのサウンドAPI
- 2018年7月16日
- 読了時間: 3分
初の投稿が一般受けしない内容なのは申し訳ない。
技術ブログも兼ねてるのでね…。
さて現在、SEにショートカットキーを割り当てる、配信支援ソフト的なものを製作しているCubesであるが、活動開始した当初から開発している割に、開発が一向に進まないことは本当に申し訳ないと思っている(二度目の謝罪)。
理由としては、ショートカットキーを押してからSEが発音されるまでの短くして、リアルタイム性を高くしたい(いわるゆ低レイテンシ)ために、Windowsのいくつかのサウンド系APIの中から、どれを使うべきか色々テストしていたためである。
(開発手法を改めたことと、キー判定処理にてこずっていたのもあるが、これは別記事で記す)
それと、話の前提として開発言語はHotSoupProcessor(HSP)を使用している。
知っている人は知っていると思うが、MIDORIKAWA氏が開発した「Windows777」はこの言語で開発されている。
前置きが長くなってしまったが、ここからが本題である。
初めに使用したのはMCIである。
以前音楽プレイヤーを製作したときに、使用して使い慣れていたため、まずはこれでキーイベント発生からSE発音までに、体感で0.5秒以上のレイテンシがあった。
さすがにこれでは使い物にならないので、DirectSoundを使用することにした。
(MIA氏のHSP DirectSoundExtensionを使用した)
一連のMCIコマンドをDirectSoundに置き換えてテストすると、レイテンシが体感で0.1秒以下程度まで改善された。
レイテンシはこれで十分であったが、調べてみるとMicrosoft的にはXAudio2を押してるらしく、こちらも試してみることした。
これについては、Easy3D for HSPを使用してみることした。
このプラグインは数年前にライセンス関連でいざこざがあり、使用するのは若干躊躇われたが、まあとりあえず。
それで、先ほどのDirectSoundで書いたコードをEasy3Dの関数に置き換えて、テストした。
レイテンシはDirectSoundと変わりなく、また便利な関数も多数用意されていたので、これを使って開発していこうと思った。
しかし!こっからが一番この記事で言いたいことである!
XAudio2はDirectX9.0C(?)からWindowsに搭載されているAPIだが、Windows8からXbox系のサウンドAPIと統合した関係で、Windows7以前のXAudio2とは互換性がないということが分かった。
また、Windows8で以前のXAudio2を使用するには、エンドユーザが何かしらプラグインを導入する必要があり、このことからXAudio2を使用せずに、DirectSoundを使用する方針に戻した。
調べる限りではWindows8以降のXAudio2を使用すれば、DirectSoundよりも低レイテンシを実現できるはずだが、HSP向けのプラグインが見つからなかったため、今回は断念せざるを得なかった。
(HSPは一応DLL内の関数を直に呼び出せるが、めんどくさいのでやめた)
そんなわけでWindowsのサウンドAPIの選定は終わったので、これから開発がどんどん進んでいくはずである()
8月中の発表を目指しているので、期待して待っていて欲しい。
最後まで読んでくれてありがとう。
今回は一般向けではない、むしろ備忘録的な記事になってしまって申し訳ない(3回目の謝罪)。
今後も私の活動を応援してくれ!

コメント