• Visitor No. - : - : -

WAVE Fileを.exeに埋め込んで使ってみよう

#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (Image03.JPG)
2800円出した本です。これを参考に作ろうとしたんですが、まぁ....しかし、全く動かないじゃないか......最初につまずいたのは、リソース名のRESファイルが作成されない。何度実行しても、できるのは、リソースファイル.RESしかできない。
変だと思って出来上がったリソースファイル.RESの中身を秀丸に表示してみた。しっかり中にできているではないか。二つ目のピンク書き発見。次に例文の入力である。入力する途中で、3つ目4つ目の間違い発見。まっ、3つ目、これは、簡単です。Psoundなんて変数は定義してないわけだから、PWavesoundの間違いであることは明白。
4つ目、あれ、もう一度出来上がったリソースファイルを秀丸に送ってみる。やはりない。'test.wav'なんてなく、代わりにファイル名になっているのは、'SAMPLEWAVE'だった。入力を終わって走らせる。「SndPlaySoundなんて知らないよ」ってコンパイラの返事。
解らない.....uses節に何かを加えるんだろうが、何を加えるのか解らない。

いよいよWebsite検索に頼る。

GoogleでSndPlaySoundとDelphiで検索。出た! MMsystemを書き加える、コンパイル完了Buttonに記述したんですが、押してもならない。
さらに検索、外部ファイルを鳴らす時は、この書式であることが判明した。PWavesoundのところに'test.wav'のようにファイル名を入れると鳴ることがわかった。
じゃあ、PWavesoundの中身は何だろう。レコード世代だし、LPSTR、きっと大きなStringに違いないとButtonのCaptionに代入した。
中身はなんと、WAVE Fileの中身の部分が入っていた。いくつかサイトを見ても、外部ファイルを鳴らす方法ばかり、お風呂で考えることにした。SND_ASYNCが 怪しい。ここにファイル名ではなく、「鳴らすデータだよ」って説明するものをSND_ASYNCのところに入れるのであろう。
お風呂を出てから、WinAPIで検索するが、出てくるのは、VBばっかり......PC-98時代が長かったためか、VBVBVBVBVBVBVBVB、BASICから離れられないのだろうか.....Googleなんて、日本のサイトから表示するのでDelphi付けていてもWinAPIに該当するVBの日本のサイトをいっぱい表示する。結局、毎度のことながら、Altavistaで検索。Dephi関係のサイトがいっぱい出る。日本語はないけど.....
こういう英語って単純明快、リソースファイルの先頭位置を示して鳴らすときには、SND_ASYNC or SND_Memoryって書けばよいと解った。鳴った! そして、私が最終的に作ったのは、
>procedure TForm1.MP2(s:pchar; sync:uint);
>var hFind, hRes: THandle; Song: PChar;
>begin
> hFind:=FindResource(HInstance, s, RT_RCDATA);
> if hFind<>0 then begin
> hRes:=LoadResource(HInstance, hFind);
> if hRes <> 0 then begin
> Song:=LockResource(hRes);
> if Assigned(Song) then SndPlaySound(Song, Sync or snd_Memory);
> UnlockResource(hRes);
> end;
> FreeResource(hFind);
> end;
>end;
それで、鳴らしたいところで
MP2('Samplewave', Snd_ASync);
と記述する。これは次の作業を進めながら鳴らす。この方法だと、終了ボタンでは、なる前にwindowを閉じてしまうので、
MP2('Samplewave', Snd_Sync);
と記述すると、なり終わるまで次の作業はとまっているとわかった。これだけ間違いあって2800円?
[ スポンサー ドリンク ]
  • StarDate2008.0622 今にして思えば、この広告、このおっちゃんの格好やったら、ぜぇ~ったいサンダル履くと思うんやけど.....おねぇちゃんが、短パンにハイヒールのブーツで足長う見せるんとちゃうから、めっちゃ目だってるやん!




最終更新:2009年10月30日 23:14