waveIn系関数を用いた録音機能の実装

waveInReset から制御が戻らず,アプリケーションがフリーズ.原因は deadlock のようだ.具体的には,waveInReset を呼んだ時点でバッファ内にはデータが残っているため MM_WIM_DATA イベントと共に callback 関数へと処理が移されて,waveInAddBuffer でデッドロックする.この問題に対しては,録音状態を示すフラグ m_Recoding を導入して

m_Recording = false
waveInReset()

一方,callback 関数の方は

if uMsg=MM_WIM_DATA and m_Recording then
waveInAddBuffer()
end if

とすることで解決する.