始めまして、シグマといいます。
今VBとDirectXでゲームを作ってるんですが、WAVEFORMATEXにWAVファイルの情報を設定するとき、いちいち自分でWAVファイルの情報を調べて入力するのが面倒だと思って調べてたら、mmIOとかいう関数でWAVファイルを開きデータを取得するサンプルを見つけたんですが、C言語のなんです・・・。
ヘルプを見たら、platform SDKで、英語なのでよく分からなかったんですが、これはVBでは使えないのでしょうか?使えない場合、何かいい方法はないでしょうか。
どなたかご教授くださいm(__)m
WAVのですかぁ、わたしもちょっと興味あります。
よければそのC言語のサンプルのURLを教えてくださいませんか?
いちおう、C言語のサンプルでも、読み取る自信はあるので、
読み取れたらお教えします。
(ただし、英語はだめです)
ところで、下に書いたJavaScriptURLを実行してみてください。
日本のマイクロソフトの中身を検索するんですけど、
そこにもしかしたら手がかりがあるかもしれません。
(プロンプトに"in Englishとかいてありますけど、
それはOperaで英語しか受け付けないからつけているだけです)
最初のjavascript:から、さいごの
'+escape(q)までを選択してコピーしていれてください^^;
なんかめちゃめちゃ重くてフリーズしてしまいました^^;
さすがマイクロソフト・・・
(API名を入れればいいんですよね?後でもう一回やってみます。)
ところでサンプルの入手先ですが、
http://www3.justnet.ne.jp/~botchy/
↑です。直リンクは失礼なのでトップです。ここのsample codeの多分どれにでも入ってると思うのですが、dd_lib_win.hというヘッダです。
初心者向けに簡単にDirectXの機能を使えるようにライブラリにしてくれてるようです。自分も少しだけC言語が分かるのですが、凄い綺麗にまとまってて、最小限の労力でコードを書ける・・・ようですが自分は残念ながらVBですのでお世話にはなってないです。
もし何かわかりましたら教えてください。
それでは。
mmio系は使えますよ。
VB5sp3でテストコード書いてWAVEFORMATEX構造体を取得できたので間違いないです。
簡単に書くと,
1. mmioOpenでファイルを開く
2. mmioDescendでWAVEチャンクを探す (MMIO_FINDRIFF)
3. mmioDescendでfmtチャンクを探す (MMIO_FINDCHUNK)
4. mmioReadで読み込む
5. mmioCloseでファイルを閉じる
ということをすればよいです。
あと,MSの全文検索なら,
http://search.microsoft.com/Default.asp?siteid=%2FJapan
に行けば日本語で,
http://search.microsoft.com/Default.asp?siteid=%2FUS
に行けば英語で,それぞれできるのですから,こちらを使う方がよいかと。
あうう〜・・
散々調べたんですが、分かりませんでした;
mmioopenの戻り値の型はhmmioという特別なファイルハンドルみたいなことが書いてあったんですが、当然こんな型はVBではないんですけどなにに入れればいいんですか?それとも参照設定が何か足りないんでしょうか?
せめてそれだけでも教えてください・・・。
お願いします。m(__)m
el.hをみてみたんですけど、関数の使用手順くらいしかわかりませんでした^^;
えっと、hmmio。hがついてるっていうことは、Long型でいいんじゃないでしょうか?
hがつくと、普通何かのハンドル(デバイスなりウィンドウなりのOS内での識別番号)を意味する…と思うので。
(たとえば、hwndとか、hdcとか…)
どうやら、C言語の多くの型は、Long型で代用できるようです。
それと、Long型は処理速度としては、一番速いそうな…。
C言語のBoolean型も、VBと仕様が違うので、
文字列や構造体以外Long型でかまわないと思います。
構造体は普通、全部大文字でかかれてるはずだし。
一応,APIビューワに定義がありましたよ。
シグマさんは散々調べているそうですから、
そう言うふうにいってはいけませんよ。YuOさん。
えっと、APIビューアに宣言はありますけど、問題はそのつかいかた…ですよね?
el.hを読んでみると、
mmioIn = mmioOpen(FileName,NULL,MMIO_ALLOCBUF or MMIO_READ)’0なら関数を抜ける
mmioDescend(hmmioIn,ckInRiff,NULL,0)'ckInRiffはMMCKINFO構造体 0でなければ関数を抜ける
mmioFOURCC('W','A','V','E') 'ckInRiff.fccTypeとちがえば抜ける
ckIn.ckid=mmioFOURCC('f','m','t',' ')'ckInはMMCKINFO構造体
mmioDescend(hmmioIn,ckIn,ckInRiff,MMIO_FINDCHUNK) ' 0でなければ関数を抜ける
mmioRead(hmmioIn,pcmWaveFormat,Len(pcmWaveFormat))
'pcmWaveFormatはPCMWAVEFORMAT構造体
多分このあたりで音がなってるんだと思います。
・・・
なんだか"面倒だから"でつかえるほどのものでしょうか^^;
ゲームだったら、何を演奏するかわからないわけではないし、
mciで演奏したほうが、はやいような…^^;
ところでここも参考になるような気がします。
http://www.google.com/search?q=mmio+VB&sourceid=opera&num=0&ie=utf-8&oe=utf-8
結構ありますねぇ、ソースIDはOperaになりますが、気にしないでください。
文字コードはUTF-8になります。
いろいろ試したのですができませんでした。
どうやら僕にはちょっと早すぎたみたいです;
丁寧にレスしてくれたのに申し訳ないです。
でも結構分かったことがあったので意義はありました^^
Cの型の代用の仕方とか、APIビューアすら知りませんでした。
APIビューアって便利ですね。もっと早く知りたかったですよ。
とりあえずもうちょっと粘ってみますが無理だったらたかみちえさんの言うように
演奏するデータは分かってるので、個々に情報を入力しようと思います。
とにかくレスありがとうございましたm(__)m
解決したようですが、一応。
うちのHPにMMIOを利用して
チャンクデータを読み込むモジュールを公開してます。
(サンプルではなく、ライブラリの方です)
同様にwaveOut〜を使ってwaveファイルを再生するモジュールがあるんですが
そのモジュールをみれば使い方とかもわかると思います。
よければ参考にしてみて下さい。
ツイート | ![]() |