waveOut~関数
ttps://learn.microsoft.com/ja-jp/windows/win32/multimedia/wom-open
ttps://learn.microsoft.com/ja-jp/windows/win32/api/mmeapi/nf-mmeapi-waveoutopen
/*** デバイスを調べる ***/
★waveOutGetNumDevs()
音声出力デバイスの個数を調べる。
デバイスには0から順番にIDが振られている。ID=-1には「既定のデバイス」が割り振られている。
★waveOutGetDevCaps()
デバイスの情報を調べる。WAVEOUTCAPS構造体を使用する。
/*** デバイスとバッファの準備 ***/
★waveOutOpen()
デバイスを開く。
MM_WOM_OPENメッセージ(WOM_OPENメッセージ)が送られる。
★waveOutPrepareHeader()
音声バッファを使用できるようにする関数。バッファにはWAVEHDR構造体を使用する。
/*** 再生を開始する ***/
★waveOutWrite()
デバイスにバッファを送る。バッファを送ると即再生が始まる。
waveOutPause()を先に呼び出しておけば、いきなり再生が始まる事は無いかもしれない。
現在再生中のバッファがある場合は再生待ち行列(キュー)に送られる。
再生を終えたバッファは返され、MM_WOM_DONEメッセージ(WOM_DONEメッセージ)が送られる。
途切れない再生をするには、バッファの音声がすべて再生し終える前にwaveOutWrite()を呼び出していく必要がある。
★waveOutPause()
再生を一時停止する。バッファは解放しない。
★waveOutRestart()
再生を再開する。
★waveOutReset()
再生を停止する。バッファをすべて解放する。
MM_WOM_DONEメッセージ(WOM_DONEメッセージ)が送られる。
/*** 再生を終了する ***/
★waveOutUnprepareHeader()
waveOutPrepareHeader()を呼び出した時に確保されたメモリを開放する関数らしい
★waveOutClose()
デバイスを閉じる。
MM_WOM_CLOSEメッセージ(WOM_CLOSEメッセージ)が送られる。
/*** 必要があれば使う ***/
★waveOutGetErrorText()
エラー番号からエラーの詳細を調べる。
★waveOutGetID
ハンドルからIDを調べる。
★waveOutGetPosition()
現在の再生時間を取得する。
★waveOutBreakLoop()
WAVEHDR構造体の機能でループ再生している際、現在が最終ループという事にする関数。
★waveOutSetPitch()
ピッチを設定する。
★waveOutGetPitch()
ピッチ設定を取得する。
★waveOutSetPlaybackRate()
再生速度を設定する。
★waveOutGetPlaybackRate()
再生速度を取得する。
★waveOutSetVolume()
ボリュームレベルを設定する。
★waveOutGetVolume()
ボリュームレベルを取得する。
★waveOutMessage()
あまりよく分からないが、使えなくても問題はない。
/*** その他 ***/
WAVEOUTCAPSA構造体はANSI環境で使う。
WAVEOUTCAPSW構造体はワイド文字(=UTF-16)環境で使う。
再生が終わったバッファを再度デバイスに渡す際、
waveOutUnprepareHeader() → waveOutPrepareHeader()
という手順を踏む必要が有るか無いかは不明。