C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■90973 / )  Re[1]: 埋め込みリソースのファイルパスを取得するには?
□投稿者/ 魔界の仮面弁士 (2163回)-(2019/05/15(Wed) 14:03:45)
No90969 (boryo さん) に返信
> 埋め込みリソースのMP3を再生したいと考えています。

MP3 形式に拘らないのであれば、WAV 形式を採用したほうがお手軽です。
これならば、リソースやメモリーからの読み取りも可能です。

VB なら My.Computer.Audio.Play メソッドを通じて簡単に再生できますし、
C# などからでも、PlaySound API でメモリ上からの再生が可能です。


> この一時ファイルとして出力する方法を使うしかないのでしょうか?

メモリ上のデータを MCI で再生する方法は、サポート技術情報 155360 の
『SDK32:MCI を使って AVI/WAVE ファイルをメモリ上で演奏する』
として公開されていました。VB 向けの記事では無いですけれどね。

上記のオンラインでの公開はすでに終了しているようですが、
 https://www.microsoft.com/ja-jp/download/details.aspx?id=20955
で提供されているオフライン リファレンスをダウンロードすれば、
 ms-help://MS.MSDNQTR.v90.ja/ja_kbwin32sdk/win32sdk/155360.htm
のアドレスにて引き続き閲覧できます。


試したことは無いので保証は出来かねますが、ざっくり書くとこんな感じでしょうか。


(1) 3 文字の半角大文字で構成される未知の拡張子、たとえば "BRY" を用意しておきます。

(2) それを mmioFOURCC("B"c, "R"c, "Y"c, " "c) として
 32bit 整数な FOURCC (Four-character code) に変換しておきます。

(3) MCI の OPEN コマンドにて、"OPEN TEST.BRY+ TYPE MPEGVideo ALIAS EXAMPLE" のように、
 拡張子の後ろに "+" を付与しておきます。
 + がついている場合、mmioOpen はファイルをオープンせず、かわりに
 カスタム入出力プロシージャを通るようになります。

(4) mmioInstallIOProc API で、(2) の FOURCC を指定して、コールバック先となる
 カスタム入出力プロシージャのデリゲートを渡しておきます。
 mmioInstallIOProc(FOURCC, New IOProcDelegate(AddressOf IOProc), MMIO_INSTALLPROC Or MMIO_GLOBALPROC)

(5) 上記で渡したコールバックメソッドにて、第 2 引数が MMIOM_READ だった時に、
 オーディオデータを、台を lParam1 の IntPtr に対して書き込めば OK です。
 データ位置は第 1 引数(LPMMIOINFO) の .lDiskOffset で示されるので、
 メソッドを Return する前に、lDiskOffset を更新しておく必要があります。


mmioInstallIOProc を用いた C++ な実装例が下記にあります。
http://mrkk.ciao.jp/memorandom/aviplaybackfrommemory/step1_mci.html
返信 編集キー/


管理者用

- Child Tree -