続 floatストリームの設計
う〜ん、フォーマット変換にcodecvtを使うのはダメかも。
// 昨日の抜粋 float_pcm_sink sink(audio::pcm_sink(fmt, fmt.optimal_buffer_size())); std::locale loc(std::locale(), new audio::codecvt_s16_le); sink.imbue(loc);
昨日の例では、pcm_sinkのフォーマットがオブジェクトの生成時に決定します。
imbue()でcodecvtを変更できるといっても、pcm_sinkと同じフォーマットでないと意味がありません。
動的に変更する意味がなければlocaleの枠組みを使用する必要はありません。
では、basic_filebufはなぜcodecvtを使うのか考えてみると、
- テキストファイル自体にはエンコーディングを示すヘッダがない(BOMがあるけど)
- ファイルをオープンするだけならエンコーディングを指定する必要がない
- 途中でエンコーディングを変更する意味がある(HTMLのパースなど)
なんかがあるんですが、オーディオデバイスには当てはまりません。
id:y-hamigaki:20060512 で作ったsample_cvtを拡張する方がよさそうですね。