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も大体できているんですが、全然動きません。デバッグ中。