2015-11-01 25 views
1

我在Delphi 7寫一個程序,我認爲在把音樂在後臺運行。所以,我在組成一個.MIDI首叫Song.MID,現在我希望把我的Delphi程序自解壓(SFX)這首歌和執行,在程序中刪除它的結束。這就像是用Hex寫的,我想。我該怎麼做?德爾福 - 讓一個Delphi程序,自解壓MIDI文件

+2

添加文件作爲一種資源,然後用'TResourceStream提取它發揮'。可能不需要保存到文件中。從內存中播放它。您可能能夠給玩家一個標識資源並提取然後播放的URL。 –

+0

我該怎麼做?如果 –

+0

@DavidHeffernan我沒有記錯的話,我不認爲MIDI文件可以直接從內存流播放,至少在沒有一些外部的多媒體庫。 – Craig

回答

3

創建一個新的文本文件,並寫入:MIDI RCDATA 1.mid,將文本文件保存爲MID.rc 然後創建一個新的文本文件,並寫入:brcc32 mid.rc,將其另存爲「brcc.bat」

運行brcc.bat,將* .rc文件轉換爲* .res 將MediaPlayer移動到您的表單(媒體播放器位於「系統」選項卡上)。 將此代碼複製到您的項目中:

unit Unit1; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, MPlayer; 

type 
    TForm1 = class(TForm) 
    mplayer: TMediaPlayer; 
    procedure FormCreate(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 
{$R mid.res} 

procedure TForm1.FormCreate(Sender: TObject); 
var 
    stream:tresourcestream; 
    tmp:string; 
begin 
    try 
    stream:=tresourcestream.Create(hinstance,'MIDI',RT_RCDATA); 
    try 
     setlength(tmp,300); 
     setlength(tmp,GetTempPath(300,pchar(tmp))); 
     tmp:=tmp+inttostr(hinstance)+'.mid'; 
     stream.SaveToFile(tmp); 
    finally 
     stream.free; 
    end; 
    mplayer.FileName:=tmp; 
    mplayer.Open; 
    mplayer.Play; 
    except 
    end; 
end; 

end. 

這是最簡單的例子。所以,註冊機使用特殊的音頻格式 - * .XM,該文件被讀入從資源存儲和使用庫,例如​​FMOD(閱讀更多互聯網)