Mac版pcm_source

rresize()のバグで激しくメモリを壊していたので修正しました。
circular_buffer.hppの差分
メモリ破壊の結果、スレッドの管理情報を壊していて、pthread_join()やpthread_cond_wait()がおかしな動きをしていました。
gdbで特定のアドレスが書き換わったらブレークする方法が分からなかったので、壊してそうなところにひたすら、

break pcm_device.cpp:123 if *(int*)0x12345678 != 0x87654321

みたいなブレークポイントを設定してデバッグしてました。
多分もっとまともな方法があると思います。


この修正で一応pcm_sourceも動くようになったのでコミットしました。
pcm_device.cppの差分
出力はデフォルトAudioOutputUnitという便利なインタフェースが用意してあるのですが、入力はこれに相当するものを自前で組み立てる必要があります。

  1. AUHALというHALデバイスを接続できるAudioUnitを生成する
  2. AUHALにデフォルト入力デバイスを設定する
  3. AUHALは既定では出力モードになっているので、入力モードに変更する

AUHALの仕様上サンプリングレートを設定できないっぽいので、今のところデバイスのデフォルトのサンプリングレートで録音されます。
これにサンプリングレートの変換機能を追加すれば完成です。