• ベストアンサー

mciSendCommand音量調節

MCIを使用したアプリを作成しています。 MCIのmciSendCommand関数を使用して、WAVファイルを音量調節して再生したいのですが、 コードの書き方が分かりません。 誰か簡単のソースサンプルと共に、教えていただけないでしょうか? ちなみに mciSendString関数を使用した場合は、音量調節できました。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

mciSendString() でオープンするときに "type ~" を指定しないで開いていたのであれば、mciSendCommand() を使う場合も同様にtype指定なしで開くことができるはずです。 MCI_OPEN_PARMS param = { 0 }; param.lpstrElementName = (ファイルパス); mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD_PTR)&param); deviceID = param.wDeviceID; 明示的に "type mpegvideo" のような指定をしていたのであれば、 MCI_OPEN_PARMS param = { 0 }; param.lpstrDeviceType = _T("mpegvideo"); param.lpstrElementName = (ファイルパス); mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE, (DWORD_PTR)&param); deviceID = param.wDeviceID; という感じになるかと。(エラー処理は省略してます)

shimada-yutaka
質問者

お礼

遅い時間に、ご対応頂き、本当に、どうもありがとうございます。 fresh_homepieさんのご説明を元に作成しましたところ、 mciSendCommandを使用して、WAVファイルの音量調節をおこなう事ができました。 作成しましたサンプルソースは以下の通りです。 理屈等は、分かりませんが、他の方のためにも、初心者レベルで、まとめておきます。 static MCI_OPEN_PARMS mci_open = {0}; static MCI_DGV_SETAUDIO_PARMS mci_vol = {0}; static MCI_PLAY_PARMS mci_play = {0}; // デバイスオープン mci_open.lpstrDeviceType = _T("mpegvideo"); // (※) mci_open.lpstrElementName = (LPWSTR)L"sample.wav"; mciSendCommand( NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD) &mci_open ); // 音量調節 mci_vol.dwItem = MCI_DGV_SETAUDIO_VOLUME ; mci_vol.dwValue = 10; // 0~1000で調節可能 mciSendCommand( mci_open.wDeviceID, MCI_SETAUDIO, MCI_DGV_SETAUDIO_ITEM | MCI_DGV_SETAUDIO_VALUE, (DWORD) &mci_vol ); // WAVファイル再生 mciSendCommand( mci_open.wDeviceID, MCI_PLAY, MCI_WAIT, (DWORD) &mci_play ); (※)"waveaudio"としてオープンすると、    何故か、音量調節が反映されません。    "mpegvideo"としてオープンすると、    音量調節可能でした。    理由は、わかりません。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

mciSendString() の場合には "setaudio" コマンドを使うかと思いますが、mciSendCommand の場合はそれに対応する MCI_SETAUDIO を使います。 #include <mmsystem.h> #include <digitalv.h> (...略...) MCIDEVICEID deviceID = (Open時に取得したデバイスID); MCI_DGV_SETAUDIO_PARMS param = { 0 }; param.dwItem = MCI_DGV_SETAUDIO_VOLUME ; param.dwValue = (ボリューム); mciSendCommand(deviceID, MCI_SETAUDIO, MCI_DGV_SETAUDIO_ITEM | MCI_DGV_SETAUDIO_VALUE, (DWORD_PTR)&param);

shimada-yutaka
質問者

お礼

迅速な回答どうもありがとうございます。 この場合、デバイスオープンには、 MCI_DGV_OPEN_PARMS 構造体を使用すべきでしょうか? また、 WAVではなく、MPEGVideoとして、オープンしなければ、正常動作しない等の 書き込みを他サイトで拝見しました(正しいか存じませんが。。。)。 MPEGVideoとして、オープンするための記述も教えていただけないでしょうか? もし、検討違いな質問をしているようでしたら、申し訳ありません。 どうぞ宜しくお願いいたします。

shimada-yutaka
質問者

補足

迅速な回答どうもありがとうございます。 この場合、デバイスオープンには、 MCI_DGV_OPEN_PARMS 構造体を使用すべきでしょうか? また、 WAVではなく、MPEGVideoとして、オープンしなければ、正常動作しない等の 書き込みを他サイトで拝見しました(正しいか存じませんが。。。)。 MPEGVideoとして、オープンするための記述も教えていただけないでしょうか? もし、検討違いな質問をしているようでしたら、申し訳ありません。 どうぞ宜しくお願いいたします。

すると、全ての回答が全文表示されます。

関連するQ&A