dont_close
昨日の一時ファイルの件ですが、布団に入ったとたん、動かない原因に気が付きました。
問題はまたもやclose()にありました。
io_ex::tmp_file tmp; io::copy( io::array_source(&data[0], data.size()), audio::make_wave_sink(tmp, fmt) ); io::seek(tmp, 0, BOOST_IOS::beg); io::copy( audio::make_wave_source(tmp), audio::pcm_sink(fmt, rate/5*((Bits+7)/8)*channels) );
この場合、最初のcopy()でtmp_fileがclose()されるため、次のseek()とcopy()が動きません。
そこでclose()を呼ばないようにするdont_closeアダプタを作りました。
io_ex::tmp_file tmp; io::copy( io::array_source(&data[0], data.size()), audio::make_wave_sink(io_ex::dont_close(tmp), fmt) ); io::seek(tmp, 0, BOOST_IOS::beg); io::copy( audio::make_wave_source(tmp), audio::pcm_sink(fmt, rate/5*((Bits+7)/8)*channels) );
この例では、copy()がwave_sinkをclose()しますが、tmp_fileはclose()されません。