direct_sound_buffer
DirectSoundのSinkができました。動かなかった原因は、通知用イベントオブジェクトのインデックスを間違えていただけでした。
こんな感じになりました。
#include <hamigaki/audio/direct_sound.hpp> #include <hamigaki/audio/vorbis_file.hpp> #include <boost/iostreams/copy.hpp> namespace audio = hamigaki::audio; namespace ds = audio::direct_sound; namespace io = boost::iostreams; int main() { audio::vorbis_file_source vf("doremi.ogg"); audio::direct_sound_device dev; dev.set_cooperative_level(0, ds::priority_level); dev.format(vf.fmt); io::copy(vf, dev.create_buffer( vf.format(), vf.format().optimal_buffer_size() ) ); }
set_cooperative_level()で協調レベルを設定するのは必須です。set_cooperative_level()を複数回呼ぶ場合もあるため、コンストラクタでは呼んでいません。
direct_sound_device::format()はプライマリバッファのフォーマットを変更します。これは必須ではありません。
あと、create_buffer()でバッファサイズを省略できないのは、単にオーバーロードするのを忘れただけです。あとで追加しておきます。