stop()後のノイズ削除
direct_sound_sinkでstop()した後ノイズが再生されるとのバグ報告を受け、close()を修正しました。
差分
↓バグはこういう状況でした。
// 現在のバッファが書き込み中だったら if (offset_ % buffer_size_ != 0) { // 残りを0で埋める std::streamsize amt = buffer_size_ - offset_%buffer_size_; base_type::fill(offset_, 0, amt); play(0); // offset_が古いまま! } // 再生が終わるまで待ってから(offset_が古いままだと1個手前になる) std::size_t index = offset_ / buffer_size_; events_[(index+buffer_count-1)%buffer_count].wait(); // おっと、この間も再生は続いているよ! // DirectSound停止 stop();
1個先のバッファまで0埋めしてから、最後の(0埋めでない)バッファの完了を待つように修正しました。