![]() |
Hamigaki.Audioを使用した簡単な例として、Ogg Vorbisファイルを再生するプログラムを紹介する。
#include <hamigaki/audio/vorbis_file.hpp> #include <hamigaki/audio/pcm_device.hpp> #include <boost/iostreams/copy.hpp> namespace audio = hamigaki::audio; namespace io = boost::iostreams; int main() { audio::vorbis_file_source vf("doremi.ogg"); io::copy(vf, audio::pcm_sink(vf.format())); }
Hamigaki.AudioにおけるオーディオデバイスはBoost.IostreamsのSource/Sinkのモデルとして実装されている。ここではSourceとしてvorbis_file_source
を、Sinkとしてpcm_sink
を使用している。
vorbis_file_source
はOgg Vorbisファイルを読み出すSourceである。コンストラクタの引数としてファイル名を指定する。
pcm_sink
はPCMデータを再生するためのSinkである。Source/Sink間のデータのやり取りは同じフォーマットで行う必要がある。そのため、pcm_sink
のコンストラクタにはvorbis_file_source::format()
から取得したpcm_format
を渡す。
Sourceからデータを読み取り、Sinkへ書き出すにはboost::iostreams::copy()
を用いる。もちろん、boost::iostreams::read()
やboost::iostreams::write()
も使用できる。
Source/Sink間のフォーマットが同じであれば、SourceとSinkは自由に変更できる。例えば、WAVファイルをOgg Vorbisファイルに変換するプログラムは次のように書くことができる。
#include <hamigaki/audio/wave_file.hpp> #include <hamigaki/audio/vorbis_encoder.hpp> #include <boost/iostreams/copy.hpp> namespace audio = hamigaki::audio; namespace io = boost::iostreams; int main() { audio::wave_file_source wf("doremi.wav"); io::copy(wf, audio::vorbis_file_sink("doremi.ogg", wf.format())); }
製作著作 © 2006 Takeshi Mouri |