WAVファイルの情報を取得するには・・

解決


シグマ  2002-05-03 05:15:01  No: 104226

始めまして、シグマといいます。
今VBとDirectXでゲームを作ってるんですが、WAVEFORMATEXにWAVファイルの情報を設定するとき、いちいち自分でWAVファイルの情報を調べて入力するのが面倒だと思って調べてたら、mmIOとかいう関数でWAVファイルを開きデータを取得するサンプルを見つけたんですが、C言語のなんです・・・。
ヘルプを見たら、platform SDKで、英語なのでよく分からなかったんですが、これはVBでは使えないのでしょうか?使えない場合、何かいい方法はないでしょうか。
どなたかご教授くださいm(__)m


たかみちえ  URL  2002-05-03 06:25:35  No: 104227

WAVのですかぁ、わたしもちょっと興味あります。
よければそのC言語のサンプルのURLを教えてくださいませんか?
いちおう、C言語のサンプルでも、読み取る自信はあるので、
読み取れたらお教えします。
(ただし、英語はだめです)

  ところで、下に書いたJavaScriptURLを実行してみてください。
日本のマイクロソフトの中身を検索するんですけど、
そこにもしかしたら手がかりがあるかもしれません。
(プロンプトに"in Englishとかいてありますけど、
  それはOperaで英語しか受け付けないからつけているだけです)


たかみちえ  URL  2002-05-03 06:27:17  No: 104228

最初のjavascript:から、さいごの
'+escape(q)までを選択してコピーしていれてください^^;


シグマ  2002-05-03 09:26:25  No: 104229

なんかめちゃめちゃ重くてフリーズしてしまいました^^;
さすがマイクロソフト・・・
(API名を入れればいいんですよね?後でもう一回やってみます。)

ところでサンプルの入手先ですが、
http://www3.justnet.ne.jp/~botchy/
↑です。直リンクは失礼なのでトップです。ここのsample codeの多分どれにでも入ってると思うのですが、dd_lib_win.hというヘッダです。
初心者向けに簡単にDirectXの機能を使えるようにライブラリにしてくれてるようです。自分も少しだけC言語が分かるのですが、凄い綺麗にまとまってて、最小限の労力でコードを書ける・・・ようですが自分は残念ながらVBですのでお世話にはなってないです。
もし何かわかりましたら教えてください。
それでは。


YuO  2002-05-04 00:18:20  No: 104230

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
に行けば英語で,それぞれできるのですから,こちらを使う方がよいかと。


シグマ  2002-05-04 07:43:33  No: 104231

あうう〜・・
散々調べたんですが、分かりませんでした;
mmioopenの戻り値の型はhmmioという特別なファイルハンドルみたいなことが書いてあったんですが、当然こんな型はVBではないんですけどなにに入れればいいんですか?それとも参照設定が何か足りないんでしょうか?
せめてそれだけでも教えてください・・・。
お願いします。m(__)m


たかみちえ  URL  2002-05-04 08:48:13  No: 104232

el.hをみてみたんですけど、関数の使用手順くらいしかわかりませんでした^^;

  えっと、hmmio。hがついてるっていうことは、Long型でいいんじゃないでしょうか?
hがつくと、普通何かのハンドル(デバイスなりウィンドウなりのOS内での識別番号)を意味する…と思うので。
(たとえば、hwndとか、hdcとか…)

  どうやら、C言語の多くの型は、Long型で代用できるようです。
それと、Long型は処理速度としては、一番速いそうな…。

  C言語のBoolean型も、VBと仕様が違うので、
文字列や構造体以外Long型でかまわないと思います。
構造体は普通、全部大文字でかかれてるはずだし。


YuO  2002-05-04 15:08:40  No: 104233

http://www.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/vbcon98/vbconaccessingdllswindowsapi.htm
は当然,読んだんですよね?

一応,APIビューワに定義がありましたよ。


たかみちえ  URL  2002-05-04 20:15:39  No: 104234

シグマさんは散々調べているそうですから、
そう言うふうにいってはいけませんよ。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になります。


シグマ  2002-05-05 02:09:39  No: 104235

いろいろ試したのですができませんでした。
どうやら僕にはちょっと早すぎたみたいです;
丁寧にレスしてくれたのに申し訳ないです。

でも結構分かったことがあったので意義はありました^^
Cの型の代用の仕方とか、APIビューアすら知りませんでした。
APIビューアって便利ですね。もっと早く知りたかったですよ。
とりあえずもうちょっと粘ってみますが無理だったらたかみちえさんの言うように
演奏するデータは分かってるので、個々に情報を入力しようと思います。

とにかくレスありがとうございましたm(__)m


こころ  URL  2002-05-06 09:10:40  No: 104236

解決したようですが、一応。
うちのHPにMMIOを利用して
チャンクデータを読み込むモジュールを公開してます。
(サンプルではなく、ライブラリの方です)

同様にwaveOut〜を使ってwaveファイルを再生するモジュールがあるんですが
そのモジュールをみれば使い方とかもわかると思います。
よければ参考にしてみて下さい。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加