circular_buffer
多分、pcm_sinkは動くようになったと思います。
今日の差分
Windows版の実装が頭にあったため、昨日はバッファのリストをぐるぐる回る形で実装していましたが、AudioUnitのコールバックに渡されるバッファのサイズが一定ではないようなので、普通のリングバッファに変えました。
リングバッファはBoost.CircularBufferの簡易版になっていて、Boost1.35以降に置き換え可能なようにしています。
template<class T> class circular_buffer : private boost::noncopyable // Boostと違ってコピー不可 { public: typedef T* pointer; typedef std::size_t size_type; typedef T* iterator; // ダミー typedef std::pair<pointer,size_type> array_range; typedef size_type capacity_type; explicit circular_buffer(capacity_type capacity); ~circular_buffer(); // insert()に渡すためだけのダミー iterator end(); // ループより前の配列 array_range array_one(); // ループより後ろの配列 array_range array_two(); // 要素数 size_type size() const; // 空かどうか bool empty() const; // 一杯かどうか bool full() const; // バッファの最大要素数 capacity_type capacity() const; // 前から要素を削除してサイズ変更(縮小しか実装していない) void rresize(size_type new_size) // 後ろに要素を追加(末尾への挿入しか実装していない) void insert(iterator /*pos*/, const T* first, const T* last); // バッファを空にする void clear(); };
pcm_sourceも大体できているんですが、全然動きません。デバッグ中。