2016-11-07 57 views
1

Bass Audio Library on/off Button中的这段代码是否“暂停”,如何将其更改为“静音”?如何使用Inno Setup中的BASS库将音频静音(更改音量)

我应该改变什么?

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 '[email protected]:bass.dll stdcall'; 
function BASS_StreamCreateFile(mem: BOOL; f: string; offset1: DWORD; 
    offset2: DWORD; length1: DWORD; length2: DWORD; flags: DWORD): HSTREAM; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_Start: BOOL; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_Pause: BOOL; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): BOOL; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_SetConfig(option: DWORD; value: DWORD): BOOL; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_ChannelIsActive(handle: DWORD): DWORD; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_Free: BOOL; 
    external '[email protected]: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('tune.mp3'); 
    if BASS_Init(-1, 44100, 0, 0, 0) then 
    begin 
    SoundStream := BASS_StreamCreateFile(False, 
     ExpandConstant('{tmp}\tune.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 := 40; 
    SoundCtrlButton.Caption := 
     ExpandConstant('{cm:SoundCtrlButtonCaptionSoundOff}'); 
    SoundCtrlButton.OnClick := @SoundCtrlButtonClick; 
    end; 
end; 

procedure DeinitializeSetup; 
begin 
    BASS_Free; 
end; 
+0

我不明白这个问题。你只是想改变*“暂停”*文本* *“静音”*文本?或者你是否真的想要实现“静音”功能,如将音量设置为0%,而不是实际暂停媒体?但是这对于纯音频媒体(.mp3)没有意义,对吧? - 无论如何,你的代码适合我。 - 向我们展示你的'[Files]'部分。你使用了什么'bass.dll'? –

+0

“静音”功能,将音量设置为0%,这有可能吗?我使用[unseseen](http://www.un4seen.com/)'bass.dll' – DDoS

+0

请参阅我的答案。但首先,你需要编写你已经有效的代码。你有一些问题。但这是一个不同的话题。这个对我有用。 –

回答

1

为了控制音量,则使用与BASS_SetConfigoption设置为:

SoundCtrlButtonClick将取代您的问题中暂停/恢复执行相同命名的功能。

var 
    Muted: Boolean; 

procedure SoundCtrlButtonClick(Sender: TObject); 
begin 
    if not Muted then 
    begin 
    if BASS_SetConfig(BASS_CONFIG_GVOL_STREAM, 0) then 
    begin 
     SoundCtrlButton.Caption := 'unmute'; 
     Muted := True; 
    end; 
    end 
    else 
    begin 
    if BASS_SetConfig(BASS_CONFIG_GVOL_STREAM, 2500) then 
    begin 
     SoundCtrlButton.Caption := 'mute'; 
     Muted := False; 
    end; 
    end; 
end; 
+0

Ahm ..我很抱歉地说这个,但是我应该在哪里插入我的代码[script](https://drive.google.com/open?id=0BzPmkOR1ZhRfczU4c3BldWpxMHc)。请 – DDoS

+0

而不是'程序SoundCtrlButtonClick(Sender:TObject); ....结束;'块。 –

+0

我意识到我的实现过于复杂。看到我编辑的答案。 –

相关问题