顶楼所介绍的脚本中播放音乐使用的是一个叫 BASSMOD.DLL 插件,该插件仅用于播放 MOD 格式的音乐文件(XM, IT, S3M, MOD, MTM, UMX)。该插件还有一个姊妹插件叫 BASS.DLL,它的功能更多更强。因为有人希望本人能够提供一个类似于顶楼但是能够播放 MP3 音乐文件的脚本,所以自己抽时间把 BASS.DLL 这方面的功能研究了一下,写出了下面的示例脚本。
该脚本与顶楼的脚本很相似,只是把插件 BASSMOD.DLL 换成了 BASS.DLL,把背景音乐 mymusic.mod 换成了 mymusic.mp3。BASS.DLL 文件可以从下面下载,mymusic.mp3 请自己准备(我这里找不到个头小的 mp3 文件),其它文件请从顶楼下载。WAV 格式的音乐文件也是支持的。
- ; INNO SETUP 脚本文件
- ; 该示例脚本创建带闪屏和背景音乐的安装程序
- [Setup]
- AppName=我的程序
- AppVerName=我的程序 1.5 版本
- DefaultDirName={pf}\我的程序
- DefaultGroupName=我的程序
- [Files]
- ; 打包实现闪屏和背景音乐所必需的插件文件
- Source: "Z:\NSISADDIN\callnsis.dll"; DestDir: "{tmp}"; Flags: dontcopy
- Source: "Z:\NSISADDIN\NewAdvSplash.dll"; DestDir: "{tmp}"; Flags: dontcopy
- Source: "Z:\NSISADDIN\Bass.dll"; DestDir: "{tmp}"; Flags: dontcopy
- ; 打包闪屏和背景音乐素材文件:闪屏图像文件 bmp、gif 或者 jpg 格式, 音乐文件 MP3、WAV 格式
- Source: "Z:\NSISADDIN\splash.gif"; DestDir: "{tmp}"; Flags: dontcopy
- Source: "Z:\NSISADDIN\mymusic.mp3"; DestDir: "{tmp}"; Flags: dontcopy
- ; 以下打包软件本身的文件
- ; 请自己加上
- ; 以下是安装脚本的其它段代码
- ; 请自己加上
- [Code]
- Type
- HSAMPLE = DWORD;
- HCHANNEL = DWORD;
- var
- MusicSwitchLabel0, MusicSwitchLabel1, MusicSwitchLabel2: TNewStaticText;
- sample: HSAMPLE;
- channel: HCHANNEL;
- // 以下是所调用的插件函数
- function BASS_Init(device: Integer; freq, flags: DWORD; win: HWND; clsid: string): Boolean;
- external 'BASS_Init@files:BASS.dll stdcall delayload';
- procedure BASS_Free();
- external 'BASS_Free@files:BASS.dll stdcall delayload';
- function BASS_SampleLoad(mem: BOOL; f: PChar; offset, length, max, flags: DWORD): HSAMPLE;
- external 'BASS_SampleLoad@files:BASS.dll stdcall delayload';
- function BASS_ChannelPlay(handle: DWORD; restart: BOOL): BOOL;
- external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
- function BASS_ChannelPause(handle: DWORD): BOOL;
- external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';
- function BASS_SampleGetChannel(handle: HSAMPLE; onlynew: BOOL): HCHANNEL;
- external 'BASS_SampleGetChannel@files:BASS.dll stdcall delayload';
- procedure callplug(parentwnd: Integer; pluginname,funcname,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10: PChar);
- external 'callplug@files:callnsis.dll stdcall delayload';
- // 以下是点击“关于”按钮后的响应函数
- procedure AboutButtonOnClick(Sender: TObject);
- begin
- MsgBox('这是你的信息。'#13#10'这是你的信息的第二行。', mbInformation, MB_OK);
- end;
- // 以下是点击“打开音乐”按钮后的响应函数
- procedure MusicSwitchLabel1OnClick(Sender: TObject);
- begin
- BASS_ChannelPlay(channel, false);
- MusicSwitchLabel1.Font.Color := clGray;
- MusicSwitchLabel2.Font.Color := clBlue;
- end;
- // 以下是点击“关闭音乐”按钮后的响应函数
- procedure MusicSwitchLabel2OnClick(Sender: TObject);
- begin
- BASS_ChannelPause(channel);
- MusicSwitchLabel2.Font.Color := clGray;
- MusicSwitchLabel1.Font.Color := clBlue;
- end;
- // 安装向导初始化函数
- procedure InitializeWizard();
- var
- AboutButton: TButton;
- BGMusicFile, SplashFile: string;
- begin
- // 创建“关于”按钮
- AboutButton := TButton.Create(WizardForm);
- AboutButton.Left := WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width;
- AboutButton.Top := WizardForm.CancelButton.Top;
- AboutButton.Width := WizardForm.CancelButton.Width;
- AboutButton.Height := WizardForm.CancelButton.Height;
- AboutButton.Caption := '关于(&A)...';
- AboutButton.OnClick := @AboutButtonOnClick;
- AboutButton.Parent := WizardForm;
- // 创建文字标签“音乐:”
- MusicSwitchLabel0 := TNewStaticText.Create(WizardForm);
- MusicSwitchLabel0.Left := AboutButton.Left + ScaleX(90);
- MusicSwitchLabel0.Top := WizardForm.CancelButton.Top + ScaleY(3);
- MusicSwitchLabel0.Width := ScaleX(30);
- MusicSwitchLabel0.Height := ScaleY(12);
- MusicSwitchLabel0.Font.Color := clRed;
- MusicSwitchLabel0.Caption := '音乐:';
- MusicSwitchLabel0.Parent := WizardForm;
- // 创建文字标签作为“打开音乐”按钮(采用 Webdings 字体中的播放符号)
- MusicSwitchLabel1 := TNewStaticText.Create(WizardForm);
- MusicSwitchLabel1.Left := MusicSwitchLabel0.Left + ScaleX(33);
- MusicSwitchLabel1.Top := MusicSwitchLabel0.Top - ScaleY(3);
- MusicSwitchLabel1.Width := ScaleX(20);
- MusicSwitchLabel1.Height := ScaleY(12);
- MusicSwitchLabel1.Font.Color := clGray;
- MusicSwitchLabel1.Font.Name := 'webdings';
- MusicSwitchLabel1.Font.Size := -15;
- MusicSwitchLabel1.Cursor := crCross;
- MusicSwitchLabel1.Caption := #52
- MusicSwitchLabel1.ShowHint:= true;
- MusicSwitchLabel1.Hint:= '打开音乐';
- MusicSwitchLabel1.OnClick := @MusicSwitchLabel1OnClick;
- MusicSwitchLabel1.Parent := WizardForm;
- // 创建文字标签作为“关闭音乐”按钮(采用 Webdings 字体中的暂停符号)
- MusicSwitchLabel2 := TNewStaticText.Create(WizardForm);
- MusicSwitchLabel2.Left := MusicSwitchLabel1.Left + ScaleX(20);
- MusicSwitchLabel2.Top := MusicSwitchLabel0.Top - ScaleY(3);
- MusicSwitchLabel2.Width := ScaleX(20);
- MusicSwitchLabel2.Height := ScaleY(12);
- MusicSwitchLabel2.Font.Color := clBlue;
- MusicSwitchLabel2.Font.Name := 'webdings';
- MusicSwitchLabel2.Font.Size := -15;
- MusicSwitchLabel2.Cursor := crCross;
- MusicSwitchLabel2.Caption := #59
- MusicSwitchLabel2.ShowHint:= true;
- MusicSwitchLabel2.Hint:= '关闭音乐';
- MusicSwitchLabel2.OnClick := @MusicSwitchLabel2OnClick;
- MusicSwitchLabel2.Parent := WizardForm;
- // 释放临时文件
- ExtractTemporaryFile('BASS.dll');
- ExtractTemporaryFile('CallNSIS.DLL');
- ExtractTemporaryFile('NewAdvSplash.DLL');
- ExtractTemporaryFile('mymusic.mp3');
- ExtractTemporaryFile('splash.gif');
- BGMusicFile := ExpandConstant('{tmp}\mymusic.mp3');
- SplashFile := ExpandConstant('{tmp}\splash.gif');
- // 播放背景音乐
- if not BASS_Init(-1,44100,0,0,'') then
- BASS_Free;
- sample := BASS_SampleLoad(false, PChar(BGMusicFile), 0, 0, 1, 4);
- if sample<>0 then
- begin
- channel:= BASS_SampleGetChannel(sample, false);
- BASS_ChannelPlay(channel, true);
- end;
- // 闪屏:显示时间 1600、淡入 800、淡出 500、透明颜色 -2 (表示 gif 图像本身透明)
- callplug(0,ExpandConstant('{tmp}\NewAdvSplash.dll'),'show','1600','800','500','-2',SplashFile,'','','','','');
- // 以下是安装向导初始化函数的其它代码
- // 请自己加上
- end;
- // 以下是其它 CODE 段代码
- // 请自己加上
复制代码 |