waveIn~関数
メモ C言語+Windowsで録音ソフトを作りたい人向け
/*** デバイスを調べる ***/
★waveInGetNumDevs()
音声入力デバイスの個数を調べる関数。デバイス数が0なら録音できない。
音声入力デバイスには0から順番にIDが振られている。ID=-1は「既定のデバイス」に使われている。
★waveInGetDevCaps()
デバイス情報を取得する関数。WAVEINCAPS構造体を使用する。
/*** デバイスとバッファを準備する ***/
★waveInOpen()
音声入力デバイスを開く関数。
MM_WIM_OPENメッセージ(WIM_OPENメッセージ)が送信される。
★waveInPrepareHeader()
音声を記録するバッファを使用できるようにする関数。バッファにはWAVEHDR構造体を使用する。
/*** 録音を開始する ***/
★waveInAddBuffer()
バッファをデバイスに渡す関数。
渡したバッファは録音待ちのキューに追加される。
★waveInStart()
録音を開始する関数。
バッファが一杯になると、WAVEHDR構造体のdwFlagsフラグが立てられ解放され、更にMM_WIM_DATAメッセージ(WIM_DATAメッセージ)が送られる。
録音が途切れないようにするには、録音待ちのバッファを切らさないようにwaveInAddBuffer()を呼び出していく必要がある。
★waveInStop()
録音を一時停止する関数。バッファは解放されない。
★waveInReset()
録音を停止する関数。バッファがすべて解放される。
MM_WIM_DATAメッセージ(WIM_DATAメッセージ)が送られる。
/*** 録音を終了する ***/
★waveInUnprepareHeader()
waveInPrepareHeader()を呼び出した時に確保されたメモリを開放する関数らしい
★waveInClose()
waveInOpen()で開いたデバイスを開放する関数。
MM_WIM_CLOSEメッセージ(WIM_CLOSEメッセージ)が送られる。
/*** 必要な時に使う関数 ***/
★waveInGetID()
音声入力デバイスのハンドルからIDを調べるための関数
★waveInGetErrorText()
エラー番号からエラーの詳細を調べるための関数。
★waveInGetPosition()
録音時間を調べる関数らしい。VISTA以降は「IAudioClock::GetPosition()」を使う必要があるらしい。
★waveInMessage()
あまりよく分からないが、使えなくても問題はない。
/*** その他 ***/
WAVEINCAPSA構造体はANSI環境で使う。
WAVEINCAPSW構造体はワイド文字(=UTF-16)環境で使う。
録音が終わったバッファを再度デバイスに渡す際、
waveInUnprepareHeader() → waveInPrepareHeader()
という手順を踏む必要が有るか無いかは不明。