Кнопка включения / выключения библиотеки Bass Audio

Как я могу создать кнопку включения / выключения музыки в этом примере:

Воспроизведение звука во время установки Inno Setup

Я хочу использовать image.png.


person Andrezork    schedule 08.02.2013    source источник


Ответы (1)


Следующий скрипт создает кнопку, с помощью которой вы можете воспроизвести или приостановить поток в соответствии с его текущим состоянием:

[Setup]
AppName=Bass Audio Project
AppVersion=1.0
DefaultDirName={pf}\Bass Audio Project

[Files]
Source: "Bass.dll"; Flags: dontcopy
Source: "AudioFile.mp3"; Flags: dontcopy

[CustomMessages]
SoundCtrlButtonCaptionSoundOn=Music on
SoundCtrlButtonCaptionSoundOff=Music off

[Code]
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 = 5;
const
  #ifndef UNICODE
    EncodingFlag = 0;
  #else
    EncodingFlag = BASS_UNICODE;
  #endif
type
  HSTREAM = DWORD;

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_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';

var
  SoundStream: HSTREAM;
  SoundCtrlButton: TNewButton;

procedure SoundCtrlButtonClick(Sender: TObject);
begin
  case BASS_ChannelIsActive(SoundStream) of
    BASS_ACTIVE_PLAYING: 
    begin
      if BASS_Pause then
        SoundCtrlButton.Caption := 
          ExpandConstant('{cm:SoundCtrlButtonCaptionSoundOn}');
    end;
    BASS_ACTIVE_PAUSED: 
    begin
      if BASS_Start then
        SoundCtrlButton.Caption :=
          ExpandConstant('{cm:SoundCtrlButtonCaptionSoundOff}');
    end;
  end;
end;

procedure InitializeWizard;
begin
  ExtractTemporaryFile('AudioFile.mp3');
  if BASS_Init(-1, 44100, 0, 0, 0) then
  begin
    SoundStream := BASS_StreamCreateFile(False, 
      ExpandConstant('{tmp}\AudioFile.mp3'), 0, 0, 0, 0, 
      EncodingFlag or BASS_SAMPLE_LOOP);
    BASS_SetConfig(BASS_CONFIG_GVOL_STREAM, 2500);
    BASS_ChannelPlay(SoundStream, False);

    SoundCtrlButton := TNewButton.Create(WizardForm);
    SoundCtrlButton.Parent := WizardForm;
    SoundCtrlButton.Left := 8;
    SoundCtrlButton.Top := WizardForm.ClientHeight - 
      SoundCtrlButton.Height - 8;
    SoundCtrlButton.Width := 155;
    SoundCtrlButton.Caption :=
      ExpandConstant('{cm:SoundCtrlButtonCaptionSoundOff}');
    SoundCtrlButton.OnClick := @SoundCtrlButtonClick;
  end;
end;

procedure DeinitializeSetup;
begin
  BASS_Free;
end;
person TLama    schedule 08.02.2013
comment
Буду признателен за любые отзывы ... Знаете, это единственная мотивация, которая у меня есть здесь для написания конкретных решений, подобных этому. Я потратил определенное количество времени, чтобы написать его, и теперь у меня есть только один голос за него, без каких-либо отзывов от вас. Это не делает меня удовлетворенным тем, что я сделал, и в следующий раз я дважды подумаю, прежде чем потратить свое время на что-то вроде этого ;-) - person TLama; 11.02.2013
comment
Дорогой TLama, как дела, чувак? Извините за задержку с ответом на ваши советы, я был в небольшой поездке. Ваш сценарий выше работает отлично, однако я хочу использовать кнопку PNG в моем установщике. В настоящее время я использую этот скрипт [ссылка] s17.postimage.org/mh7eadvn3/Sem_t_tulo.jpg .Но если у меня громкость звука Windows составляет 30%, когда я проверяю свой установщик, он автоматически переходит на 100%. Основываясь на сценарии, который я вам показал, как я могу исправить проблему? Заранее спасибо и еще раз извиняюсь за задержку с ответом. - person Andrezork; 13.02.2013