waveOutOpen 関数 (mmeapi.h)

waveOutOpen 関数は、指定された波形オーディオ出力デバイスを再生用に開きます。

構文

MMRESULT waveOutOpen(
  LPHWAVEOUT      phwo,
  UINT            uDeviceID,
  LPCWAVEFORMATEX pwfx,
  DWORD_PTR       dwCallback,
  DWORD_PTR       dwInstance,
  DWORD           fdwOpen
);

パラメーター

phwo

開いている波形オーディオ出力デバイスを識別するハンドルを受け取るバッファーへのポインター。 ハンドルを使用して、他の波形オーディオ出力関数を呼び出すときにデバイスを識別します。 fdwOpenWAVE_FORMAT_QUERY フラグが指定されている場合、このパラメーターは NULL になる可能性があります。

uDeviceID

開く波形オーディオ出力デバイスの識別子。 これは、デバイス識別子または開いている波形オーディオ入力デバイスのハンドルのいずれかです。 デバイス識別子の代わりに、次のフラグを使用することもできます。

説明
WAVE_MAPPER この機能は、指定されたフォーマットを再生できる波形オーディオ出力デバイスを選択します。

pwfx

デバイスに送信される波形オーディオ データの形式を識別する WAVEFORMATEX 構造体へのポインター。 この構造体は、 waveOutOpen に渡した直後に解放できます。

dwCallback

コールバック メカニズムを指定します。 値は、次のいずれかである必要があります。

  • コールバック関数へのポインター。 関数シグネチャについては、「 waveOutProc」を参照してください。
  • ウィンドウのハンドル。
  • スレッド識別子。
  • イベントへのハンドル。
  • NULL
fdwOpen パラメーターは、dwCallback パラメーターの解釈方法を指定します。 詳細については、「解説」を参照してください。

dwInstance

コールバック メカニズムに渡されるユーザー インスタンス データ。 このパラメーターは、ウィンドウ コールバック メカニズムでは使用されません。

fdwOpen

デバイスを開くフラグ。 次の値が定義されています。

説明
CALLBACK_EVENT dwCallback パラメーターはイベント ハンドルです。
CALLBACK_FUNCTION dwCallback パラメーターはコールバック プロシージャ アドレスです。
CALLBACK_NULL コールバック メカニズムはありません。 これが既定の設定です。
CALLBACK_THREAD dwCallback パラメーターはスレッド識別子です。
CALLBACK_WINDOW dwCallback パラメーターはウィンドウ ハンドルです。
WAVE_ALLOWSYNC このフラグを指定すると、同期波形オーディオデバイスを開くことができます。 同期ドライバーを開くときにこのフラグが指定されていない場合、デバイスは開けなくなります。
WAVE_MAPPED_DEFAULT_COMMUNICATION_DEVICE このフラグを指定し、 uDeviceID パラメーターを WAVE_MAPPERすると、関数は既定の通信デバイスを開きます。

このフラグは、 uDeviceIDWAVE_MAPPERと等しい場合にのみ適用されます。

メモ Windows 7 が必要
 
WAVE_FORMAT_DIRECT このフラグを指定した場合、ACM ドライバーはオーディオ データに対して変換を実行しません。
WAVE_FORMAT_QUERY このフラグが指定されている場合、 waveOutOpen はデバイスに対してクエリを実行して、指定された形式をサポートしているかどうかを判断しますが、デバイスは実際には開かれていません。
WAVE_MAPPED このフラグが指定されている場合、 uDeviceID パラメーターは、ウェーブ マッパーによってマップされる波形オーディオ デバイスを指定します。

戻り値

成功した場合 はMMSYSERR_NOERROR を返し、それ以外の場合はエラーを返します。 考えられるエラー値は次のとおりです。

リターン コード 説明
MMSYSERR_ALLOCATED
指定されたリソースは既に割り当てられています。
MMSYSERR_BADDEVICEID
指定されたデバイス識別子が範囲外です。
MMSYSERR_NODRIVER
デバイス ドライバーが存在しません。
MMSYSERR_NOMEM
メモリを割り当てまたはロックできません。
WAVERR_BADFORMAT
サポートされていない波形オーディオ形式で開こうとしました。
WAVERR_SYNC
デバイスは同期ですが、WAVE_ALLOWSYNC フラグを使用せずに waveOutOpen が呼び出されました。

解説

waveOutGetNumDevs 関数を使用して、システムに存在する波形オーディオ出力デバイスの数を決定します。 uDeviceID パラメーターで指定された値がデバイス識別子の場合、0 から存在するデバイス数より 1 小さい値に変更できます。 WAVE_MAPPER定数は、デバイス識別子としても使用できます。

pwfx が指す構造体を拡張して、特定のデータ形式の型固有の情報を含めることができます。 たとえば、PCM データの場合、サンプルあたりのビット数を指定するために追加の UINT が追加されます。 この場合は PCMWAVEFORMAT 構造体を使用します。 その他の波形オーディオ形式の場合は、 WAVEFORMATEX 構造体を使用して、追加データの長さを指定します。

ウィンドウまたはスレッドでコールバック情報を受信するように選択した場合は、波形オーディオ出力の進行状況を示す次のメッセージがウィンドウ プロシージャ関数に送信されます: MM_WOM_OPENMM_WOM_CLOSEおよびMM_WOM_DONE

コールバック メカニズム

dwCallback パラメーターと fdwOpen パラメーターは、波形オーディオ出力の進行状況についてアプリケーションに通知する方法を指定します。

fdwOpenCALLBACK_FUNCTION フラグが含まれている場合、dwCallback はコールバック関数へのポインターです。 関数シグネチャについては、「 waveOutProc」を参照してください。 コールバックの uMsg パラメーターは、オーディオ出力の進行状況を示します。

fdwOpenCALLBACK_WINDOW フラグが含まれている場合、dwCallback はウィンドウへのハンドルです。ウィンドウには、進行状況を示す次のメッセージが表示されます。 fdwOpenCALLBACK_THREAD フラグが含まれている場合、dwCallback はスレッド識別子です。 スレッドは、CALLBACK_WINDOWの前に一覧表示された メッセージを受信します。

fdwOpenCALLBACK_EVENT フラグが含まれている場合、dwCallback はイベントのハンドルです。 イベントは、波形バッファーの状態が変化するたびに通知されます。 アプリケーションでは 、WaitForSingleObject または WaitForMultipleObjects を使用してイベントを待機できます。 イベントがシグナル通知されると、WAVEHDR 構造体の dwFlags メンバーを調べることで、波形バッファーの現在の状態を取得できます。 ( 「waveOutPrepareHeader」を参照してください)。

fdwOpenCALLBACK_NULL フラグが含まれている場合、dwCallbackNULL である必要があります。 その場合、コールバック メカニズムは使用されません。

要件

   
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー mmeapi.h (Windows.h を含む)
Library Winmm.lib
[DLL] Winmm.dll

関連項目

コールバック関数を使用したドライバー メッセージの処理

ウィンドウまたはスレッドを使用したドライバー メッセージの処理

イベント コールバックを使用したドライバー メッセージの処理

波形オーディオ

波形関数