Delphi6personal使用の初心者です
midiデータをリソースとしてexeに組み込みこれを再生したいのですが
どのようにしたら良いのかはわかりません。
現在リソースをexeに組み込むまでは出来ました。
private
sound1 :TResourceStream;
という名前でリソースに格納しています。
これを再生するにはどうしたらよいのでしょうか?
一番簡単なのは、MediaPlayerコンポーネントです。
このコンポーネントでは、MIDI,MP3,WAV,AVI,CDのファイルが再生できます。
使い方は、Filenameプロパティに再生するファイルを指定し、
Openメソッドで開いた後、Playメソッドで再生します。
MediaPlayerコンポーネントのVisibleをFalseにしておけば実装できるのではないでしょうか。
例)
mediaplayer1.FileName := 'c:\winnt\media\tada.wav';
mediaplayer1.Open;
mediaplayer1.Play;
半蔵さんお返事ありがとうございます。
行ないたい事は、ファイルにあるmidiファイルを再生するのではなく、
アプリケーションのexe内に、プログラムiconのようにmidiデータを格納してこのデータを取り出してmidiデータを再生したいのです
現在、exe内にmidiデータは収納できたのですが、これを取り出して利用する方法がわかりません。
MediaPlayerを使用する場合にも、
MediaPlayer1.FileNameにResourceStreamを指定しても、stringとTresourceStreamは違うとコンパイラーに怒られてしまいました。
WinapiのPlaySoundでできませんか?
>sound1 :TResourceStream;
>という名前でリソースに格納しています。
>MediaPlayer1.FileNameにResourceStreamを指定しても...
とありますが,具体的なコードが見えませんので,何とも言えませんが,
http://homepage2.nifty.com/Mr_XRAY/Halbow/Notes/N008.html
のList6は参考になりませんか?
...さん、調べましたら、Winapiのplaysoundでは、midiは鳴らせないようなのです。
http://www.interq.or.jp/moonstone/person/del/sound.htm参照しました。
●MIDIで鳴らした音のループを制御
にかかれていました。
MR.XRAYさん、そちらの記載を参考に、exeに埋め込みました。
ここまでは良かったのですが、Midiを鳴らす手立てがわかりません。
uses
MMSYSTEM;
procedure TForm1.Button1Click(Sender: TObject);
var
RS:TResourceStream;
begin
RS := TResourceStream.Create(hInstance,'MySound','Midi');
try
sndPlaySound(RS.Memory,SND_MEMORY or SND_SYNC);
finally
RS.Free;
end;
end;
等としても、音がでません。
exe内部に格納されているのは、リソースハッカー等のソフトを使用して確認してみました。
>等としても、音がでません。
MIDIはPlaySoundでは再生できませんね.
でしたら同じページのList7の様に,一度ファイルに書き出す方法では
どうですか.例えば(ちょっと空しい... )
もし,見られるのが嫌だったら不可視にしてしまうとか...
var
RS:TResourceStream ;
AFile: String;
procedure TForm1.FormCreate(Sender: TObject);
begin
MediaPlayer1.Visible:=False;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
//一旦ファイルに保存
AFile:=ExtractFilePath(ParamStr(0))+'MyMIDI.mid';
RS := TResourceStream.Create(hInstance,'MySound','Midi');
try
RS.SaveToFile(AFile);
finally
RS.Free;
end;
//演奏開始して終了したらファイルを削除
if FileExists(AFile) then begin
MediaPlayer1.FileName:=AFile;
MediaPlayer1.Open;
MediaPlayer1.Play;
end;
end;
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
MediaPlayer1.Close;
DeleteFile(AFile);
end;
Mr.XRAYさんお返事ありがとうございます。
やはりこのような方法しかないのですね。(残念)
もう少し自分でも調べてみますが、他の方法が無いようでしたら
この方法で対処させてもらいます。
ツイート | ![]() |