top of page

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回目の謝罪)。

今後も私の活動を応援してくれ!

コメント


© 2018 by Cubes. Created with Wix.com

bottom of page