wide_adaptor
まだフォーマットの指定に難がありますが、昨日の案でアダプタを作成してみました。
namespace audio = hamigaki::audio; namespace io = boost::iostreams; audio::vorbis_file_source vf("doremi.ogg"); const audio::vorbis_info& info = vf.info(); audio::pcm_format fmt; fmt.type = audio::pcm_format::int_le16; fmt.rate = info.rate; fmt.channels = info.channels; // wide_adaptor<float,pcm_sink>を作成して再生 io::copy(vf, audio::widen<float>(audio::pcm_sink(fmt)));
wide_adaptorの文字型はテンプレート引数で変更可能になっています。
より高い精度が必要な場合はdoubleを、浮動小数を使用したくない場合は適当な整数型(int32_t等)を使用できます。(まだ、実装はfloatのみ)
OggVorbisをdoubleストリームで扱う場合を考えると、float→doubleの変換も必要です。
変換コードの数が膨大になるので、
- 各種バイト列とint32_tの変換
- int32_tとfloatの変換
- floatとdoubleの変換
を基本に組み立てることにします。