簡易バージョン

vorbis_fileとwave_sourceを、それぞれbasic_vorbis_fileとbasic_wave_sourceに変更しました。vorbis_fileとwave_sourceはSourceにfile_sourceを指定した簡易バージョンになっています。これでちょっぴりコードが短くなりました。

#include <hamigaki/audio/pcm_device.hpp>
#include <hamigaki/audio/vorbis_file.hpp>
#include <boost/iostreams/copy.hpp>

namespace audio = hamigaki::audio;
namespace io = boost::iostreams;

audio::vorbis_file vf("doremi.ogg"); // ファイル名だけ指定すればOK

const audio::vorbis_info& info = vf.info();

audio::pcm_format fmt;
fmt.rate = info.rate;
fmt.bits = 16;
fmt.channels = info.channels;

io::copy(vf, audio::pcm_sink(fmt, 4096));

まだ、フォーマット受け渡しの問題は残っています。
今日の成果物

昨日のバージョンはかなり駄目なバグが入っていました。

// サンプルサイズの計算部分
#if バグ
sample_size_(f.channels * (f.bits + 7) / 8)
#else
sample_size_(f.channels * ((f.bits + 7) / 8))
#endif

そろそろちゃんとしたテストを組み込まないとまずいですねぇ。