ページ 11

Waveファイルを埋め込んで再生

Posted: 2006年8月23日(水) 21:10
by 新海
http://www.activebasic.com/forum/viewtopic.php?t=1098
上記リンク先を参考に、リソースエディタを使用しないで、WAVEファイルを
リソースとして追加し、再生しようと試みましたがWAVEファイルを再生することが出来ません。
コードは以下の通りですが、そもそもこれは可能なことでしょうか。

WaveTest.rc

コード: 全て選択

Wave01 RCData DISCARDABLE "Test.wav"
WaveTest.abp

コード: 全て選択

Const RCData = 10
Const Wave01 = 1

#include <api_mmsys.sbp>
#resource "WaveTest.rc"

Declare Function FindResource Lib "kernel32" Alias "FindResourceA" (hModule As HANDLE,lpName As BytePtr,lpType As BytePtr) As HANDLE
Declare Function LoadResource Lib "kernel32" (hModule As HANDLE,hResInfo As HANDLE) As HGLOBAL
Declare Function LockResource Lib "kernel32" (hResData As HGLOBAL) As VoidPtr

Dim hRes As HANDLE
Dim hGlobal As HGLOBAL
Dim pRes As VoidPtr

'リソースを検索
hRes=FindResource(0,Wave01,RCData)
'リソースを読み込み
hGlobal=LoadResource(0,hRes)
'リソースのアドレスを取得
pRes=LockResource(hGlobal)

PlaySound(pRes,GetModuleHandle(0),SND_RESOURCE)
MsgBox 0,"End"
End

Re: Waveファイルを埋め込んで再生

Posted: 2006年9月02日(土) 03:29
by Tomorrow
> 上記リンク先を参考に、リソースエディタを使用しないで、WAVEファイルを
> リソースとして追加し、再生しようと試みましたがWAVEファイルを再生することが出来ません。
今のABでのリソース対応状況はビットマップ・カーソル・アイコンの3つだけのようですので、リソースエディタを使用せずにというのは無理な気がします。

> コードは以下の通りですが、そもそもこれは可能なことでしょうか。
試してみたところ...
PlaySound()でリソースから読み込む(SND_RESOURCE)場合

リソースの種類:WAVE
リソース名:WAVE01(任意) としてWaveファイルを埋め込み、

コード: 全て選択

'リソース名Wave01を文字列として扱うことに注意。大文字小文字は区別されないらしい。
PlaySound("Wave01",GetModuleHandle(0),SND_RESOURCE)
とすることで再生できました。(参考)

また御投稿されたサンプルのように自分でリソースを読み込み、アドレスを取得した場合は

コード: 全て選択

'SND_MEMORYでメモリ上のWAVEを再生。pResはリソースのアドレス。
PlaySound(pRes,GetModuleHandle(0),SND_MEMORY)
とすると再生されました。