新しいものを表示

スペアナ自分で作ってみてやっとWaveSpectraの録音のリアルタイム表示のレイテンシが長い理由わかった><; 表示を滑らかにしようとすると原理的に不可能なのか・・・><

FFTしたデータ関連のバグだと思って悩んでたのもこれだったっぽい・・・><;

BytesRecordedと言うものに気づかず、録音バッファが埋まったらイベントが起きるんだと勘違いしてた><; github.com/naudio/NAudio/blob/

見つけたのさっきのリングバッファのバグじゃなく根本的にNAudioの使い方を間違えてたと言う・・・><;

Array.Copy、全然C# っぽく無いしすごく使いづらい><;

なんかバグってるきがする><;

orange さんがブースト

よーするに追加削除とアクセスのどちらに即応性を求めるかという話なのでユースケースによりけりです

なんて名前にすればいいのかわかんなくてExport()にした><;

orange さんがブースト

ん、いや、バッファは定数長だからすべて O(1) か。この説明は間違ってるな(まあ雰囲気で察してください)

スレッドを表示
orange さんがブースト

前者は push / pop が常に O(1) だけど書き出し時(連続領域の配列としてアクセスしたいとき)に(たぶん)常に O(N) かかります。
後者は push/pop が O(1) にならない(償却できるかは知らん)代わりに、常に O(1) で連続領域の配列に乗ったデータにアクセスできます

スレッドを表示

あ!>< オレンジが書いたのは、内部的にはズラしてなくて、読む時に、普通に読むんじゃなく連続にした配列を返すようにしてる感じ><(どっちにしてもコピーしたのを使うので、コピーする時に連続に直してる><)

orange さんがブースト

リングバッファ自体は、内部データがバッファ両端を跨いでいても動く(→push / pop が O(1) になる)のがメリットなので、そのメリットを潰さず連続領域にデータを乗せたいなら、

・外部のバッファに書き出す関数を用意する
・少ないずらし頻度で連続領域に乗せる

のどちらかになるかと。
この図は後者の実装です

スレッドを表示
orange さんがブースト

ExportBuffer()って言うので連続になってるデータ返すようにする方があとの処理軽くなるかもって思った・・・><(どっちにしても読んで弄る時に書くスレッドを長時間ふさがないようにコピーしないと駄目かもって・・・><)

orange さんがブースト

コピーが見えるのはずらし操作かな(連続領域を使いたいからか

リングバッファ、これでいいのかな?><;(ちゃんとテストしてない><;)
gist.github.com/orange-in-spac

青森いってみたい場所わりとあるけどお金ない・・・><

1サンプルずつ読み書きしてた・・・><(これじゃ遅すぎる><)

古いものを表示
:realtek:

思考の /dev/null