浮動小数点形式WAVE
wave_file_source/wave_file_sinkをfloatとdoubleに対応させました。
この辺りの仕様をまとめた正式なドキュメントが見当たらないのですが、WAVEFORMATEX::wFormatTagをWAVE_FORMAT_IEEE_FLOATにしただけで、SoundPlayerLilithでは再生できました。
これでOggVorbisのデコード結果をfloatのまま書き出せます。
audio::vorbis_file_source vf("doremi.ogg"); const audio::vorbis_info& info = vf.info(); audio::pcm_format fmt; fmt.type = audio::float_le32; fmt.channels = info.channels; fmt.rate = info.rate; io::copy( vf, audio::widen<float>( audio::wave_file_sink("doremi.wav", fmt) ) );
いつもと違うのはfmt.typeがfloat_le32になっているぐらいです。
wave_file_sinkはバイトストリームのままで、floatをバイト列へ変換するのは、あくまでwide_adaptorの役目です。