これです><;
Belinda Carlisle - Heaven Is A Place On Earth -- HQ Audio -- LYRICS https://youtu.be/D8OYvMUiTPI
BytesRecordedと言うものに気づかず、録音バッファが埋まったらイベントが起きるんだと勘違いしてた><; https://github.com/naudio/NAudio/blob/master/NAudio/Wave/MmeInterop/WaveInEventArgs.cs
前者は push / pop が常に O(1) だけど書き出し時(連続領域の配列としてアクセスしたいとき)に(たぶん)常に O(N) かかります。
後者は push/pop が O(1) にならない(償却できるかは知らん)代わりに、常に O(1) で連続領域の配列に乗ったデータにアクセスできます
リングバッファ自体は、内部データがバッファ両端を跨いでいても動く(→push / pop が O(1) になる)のがメリットなので、そのメリットを潰さず連続領域にデータを乗せたいなら、
・外部のバッファに書き出す関数を用意する
・少ないずらし頻度で連続領域に乗せる
のどちらかになるかと。
この図は後者の実装です