VC++ MCIのmciSendCommand関数について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
神族
記事: 38
登録日時: 12年前
住所: 日本
連絡を取る:

VC++ MCIのmciSendCommand関数について

#1

投稿記事 by 神族 » 12年前

VC++でMCIのmciSendCommand関数使っても何故か音が出ないしエラーさえでない・・・誰か音楽再生仕方教えて下さい!

*コード変更しました2012/12/12/20:07

コード:

char buf[1000];
DWORD dwFlags=0;
MCI_OPEN_PARMS mop;

dwFlags|=MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID;
mop.lpstrDeviceType="Sequencer";

dwFlags|=MCI_OPEN_ELEMENT;
mop.lpstrElementName="test.Mid";

dwFlags|=MCI_WAIT;
MCIERROR ret=mciSendCommand(NULL,MCI_OPEN,dwFlags,(DWORD)&mop);
if(ret==0){
	 mciSendCommand(mop.wDeviceID,MCI_PLAY,0,0);
}else{
	 mciGetErrorString(ret,buf,sizeof(buf));
	 MessageBox::Show(gcnew String(buf),"error");
}
*追記:mciのエラーはこういう感じでました!「指定されたファイル名拡張子からデバイスの種類を判断できません。」だってお
*追記:lpstrDeviceTypeにMCI_DEVTYPE_SEQUENCER入れたら再生できたけど文字列指定だと何故か「指定されたファイル名拡張子からデバイスの種類を判断できません。」がでる。
ちなみにデフォルト再生はWindows Media
*追記:レジストエディターのHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensionsでは、ちゃんと名前のMidとデータのSequencerが入ってます。

*自己解決:デバイスID使わないのに何故必要なのか?と思って

コード:

dwFlags|=MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID;
のMCI_OPEN_TYPE_ID;を消したら上手く文字列指定で再生できました!
最後に編集したユーザー 神族 on 2012年12月12日(水) 21:57 [ 編集 7 回目 ]

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: VC++ MCIのmciSendCommand関数について

#2

投稿記事 by softya(ソフト屋) » 12年前

こちらのサンプルコードのままでも動かないでしょうか?
http://www.geocities.jp/ky_webid/win32c/044.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: VC++ MCIのmciSendCommand関数について

#3

投稿記事 by YuO » 12年前

それぞれの mciSendCommand API の戻り値,およびそれが 0 でなかった場合はそれを mciGetErrorString API に渡して得られた文字列はどうなっていますか。

コンパイルが通るのは第一段階で,それができてようやく「バグがないかどうかの調査」ができます。
ちゃんとテストやデバッグをしましょう。

神族
記事: 38
登録日時: 12年前
住所: 日本
連絡を取る:

Re: VC++ MCIのmciSendCommand関数について

#4

投稿記事 by 神族 » 12年前

YuO さんが書きました:それぞれの mciSendCommand API の戻り値,およびそれが 0 でなかった場合はそれを mciGetErrorString API に渡して得られた文字列はどうなっていますか。

コンパイルが通るのは第一段階で,それができてようやく「バグがないかどうかの調査」ができます。
ちゃんとテストやデバッグをしましょう。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: VC++ MCIのmciSendCommand関数について

#5

投稿記事 by softya(ソフト屋) » 12年前

前にも書きましたが、次の返答が来てからの追記は読み飛ばしてしまうので書いたことに気づかないことが多いです。何よりメール通知が来ないのです。
今回は解決された様で良かったですが、次からは必ず返答の形にする事をオススメします。
「Win32APIと.NETの質問 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?t=1 ... 765#p96730
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る