проблема в воспроизведении мульти звука в inno setup

Я использую bass lib для воспроизведения 2 звука в моем установщике

  1. фоновый звук (воспроизводится на всех страницах установщика, кроме страницы лицензии)
  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;

Как я могу это исправить? Благодарность


person sanab3343    schedule 14.09.2020    source источник
comment
Зачем пытаться воспроизвести звук в установщике? Что, если звук пользователя отключен по умолчанию? (Мне лично это не понравилось бы и, вероятно, вообще не стал бы устанавливать вашу программу.)   -  person Bill_Stewart    schedule 14.09.2020
comment
@Bill_Stewart Я делаю программу для кого-то, у нее есть какая-то dll и какая-то другая часть, поэтому я решил сделать для нее установщик, я говорю человеку, что я планирую делать, и он спрашивает меня, могу ли я добавить звук на страницу лицензии (он хочет текст лицензии тоже должен быть озвучен (максимум 30 секунд)), что я могу сказать кроме "да"?   -  person sanab3343    schedule 15.09.2020
comment
Я бы спросил, какова цель / цель. Я не думаю, что воспроизведение звука в установщике действительно поможет, если я хочу, чтобы пользователь прослушал лицензионное соглашение. Вы не можете заставить пользователя сделать это (человеческая проблема).   -  person Bill_Stewart    schedule 15.09.2020