Я использую bass lib для воспроизведения 2 звука в моем установщике
- фоновый звук (воспроизводится на всех страницах установщика, кроме страницы лицензии)
- звук воспроизводится только при входе пользователя на страницу лицензии (пауза фонового звука и воспроизведение нового звука)
Я использую некоторую помощь, чтобы получить звук лицензии для работы над этим Вопрос
все работает хорошо (фоновый звук воспроизводится до тех пор, пока пользователь не перейдет на страницу лицензии, на странице лицензии начнется воспроизведение другого звука, и когда пользователь снова перейдет на следующую страницу, воспроизведение фонового звука снова), кроме одной проблемы, если пользователь приостановит фоновую музыку перед страницей лицензии как-то на этот раз когда пользователь снова пытается воспроизвести фоновый звук на странице лицензии, в лучшем слове bass lib пропустить звук на странице лицензии
это мой код для баса в inno setup
const
BASS_SAMPLE_LOOP = 4;
BASS_ACTIVE_STOPPED = 0;
BASS_ACTIVE_PLAYING = 1;
BASS_ACTIVE_STALLED = 2;
BASS_ACTIVE_PAUSED = 3;
BASS_UNICODE = $80000000;
BASS_CONFIG_GVOL_STREAM = {#MusicVolume};
EncodingFlag = BASS_UNICODE;
var
SoundStream: HSTREAM;
LicenseSoundStream: HSTREAM;
//
function BASS_Init(device: LongInt; freq, flags: DWORD; win: HWND; clsid: Cardinal): BOOL;
external 'BASS_Init@files:bass.dll stdcall';
function BASS_StreamCreateFile(mem: BOOL; f: string; offset1: DWORD; offset2: DWORD; length1: DWORD; length2: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:bass.dll stdcall';
function BASS_Start: BOOL;
external 'BASS_Start@files:bass.dll stdcall';
function BASS_Pause: BOOL;
external 'BASS_Pause@files:bass.dll stdcall';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): BOOL;
external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_ChannelPause(handle: DWORD): Boolean;
external 'BASS_ChannelPause@files:bass.dll stdcall';
function BASS_SetConfig(option: DWORD; value: DWORD ): BOOL;
external 'BASS_SetConfig@files:bass.dll stdcall';
function BASS_ChannelIsActive(handle: DWORD): DWORD;
external 'BASS_ChannelIsActive@files:bass.dll stdcall';
function BASS_Free: BOOL;
external 'BASS_Free@files:bass.dll stdcall';
//
procedure MusicButtonClick(Sender: TObject);
begin
case BASS_ChannelIsActive(SoundStream) of
BASS_ACTIVE_PLAYING:
begin
if BASS_Pause then
MusicButton.Caption := ExpandConstant('{cm:MusicButtonCaptionSoundOn}');
end;
BASS_ACTIVE_PAUSED:
begin
if BASS_Start then
MusicButton.Caption := ExpandConstant('{cm:MusicButtonCaptionSoundOff}');
end;
end;
end;
//
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_SetConfig(BASS_CONFIG_GVOL_STREAM, 2500);
ExtractTemporaryFile('{#MusicFile}');
ExtractTemporaryFile('license.mp3');
SoundStream :=
BASS_StreamCreateFile(
False, ExpandConstant('{tmp}\{#MusicFile}'), 0, 0, 0, 0,
BASS_UNICODE or BASS_SAMPLE_LOOP);
LicenseSoundStream :=
BASS_StreamCreateFile(
False, ExpandConstant('{tmp}\license.mp3'), 0, 0, 0, 0, BASS_UNICODE);
BASS_ChannelPlay(SoundStream, False);
end;
{ if page changed to license page }
begin
if CurPageID = wpLicense then
begin
AboutButton.Hide;
WizardForm.DirEdit.Hide;
WizardForm.DirBrowseButton.Hide;
WizardForm.GroupEdit.Hide;
WizardForm.GroupBrowseButton.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.UserInfoNameLabel.Hide;
WizardForm.UserInfoNameEdit.Hide;
WizardForm.BackButton.Visible := False;
MusicButton.Visible := False;
if LicenseSoundStream <> 0 then
begin
if BASS_ChannelIsActive(SoundStream) then BASS_ChannelPause(SoundStream);
BASS_ChannelPlay(LicenseSoundStream, True);
BASS_Start;
end;
end
else
begin
{ On other pages, restore the standard music }
if SoundStream <> 0 then
begin
BASS_ChannelPause(LicenseSoundStream);
BASS_ChannelPlay(SoundStream, False);
MusicButton.Visible := true;
end;
end;
end;
Как я могу это исправить? Благодарность