
Шустрый

Профиль
Группа: Участник
Сообщений: 149
Регистрация: 28.6.2009
Репутация: нет Всего: нет
|
В свой плеер хочу добавить эквалайзер. Нашел код реализации через bass_fx.dll. ЕЕ гружу как плагин. Код: Код | unit Unit5;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Bass, ComCtrls, sTrackBar, StdCtrls, sButton;
type TForm5 = class(TForm) sTrackBar1: TsTrackBar; sTrackBar2: TsTrackBar; sTrackBar3: TsTrackBar; sTrackBar4: TsTrackBar; sTrackBar5: TsTrackBar; sTrackBar6: TsTrackBar; sTrackBar7: TsTrackBar; sTrackBar8: TsTrackBar; sTrackBar9: TsTrackBar; sTrackBar10: TsTrackBar; sButton1: TsButton; sButton2: TsButton; procedure FormCreate(Sender: TObject); procedure sTrackBar1Change(Sender: TObject); procedure sButton2Click(Sender: TObject); procedure sTrackBar2Change(Sender: TObject); procedure sTrackBar3Change(Sender: TObject); procedure sTrackBar4Change(Sender: TObject); procedure sTrackBar5Change(Sender: TObject); procedure sTrackBar6Change(Sender: TObject); procedure sTrackBar7Change(Sender: TObject); procedure sTrackBar8Change(Sender: TObject); procedure sTrackBar9Change(Sender: TObject); procedure sTrackBar10Change(Sender: TObject); procedure sButton1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form5: TForm5; fx: array[0..10] of integer; EQEnable: Boolean; p: BASS_DX8_PARAMEQ; pR: BASS_DX8_REVERB;
implementation
uses Unit1;
{$R *.dfm}
function ProgDir: string; begin result := ExtractFilePath(ParamStr(0)); end;
procedure IniEQ; var p1: BASS_CHANNELINFO; begin
if (p1.flags and BASS_SAMPLE_8BITS) > 0 then begin // not 16-bit stereo ShowMessage('16-bit stereo sources only. Please select another.'); Exit; end;
fx[0] := BASS_ChannelSetFX(stream, BASS_FX_DX8_PARAMEQ, 1); fx[1] := BASS_ChannelSetFX(stream, BASS_FX_DX8_PARAMEQ, 1); fx[2] := BASS_ChannelSetFX(stream, BASS_FX_DX8_PARAMEQ, 1); fx[3] := BASS_ChannelSetFX(stream, BASS_FX_DX8_PARAMEQ, 1); fx[4] := BASS_ChannelSetFX(stream, BASS_FX_DX8_PARAMEQ, 1); fx[5] := BASS_ChannelSetFX(stream, BASS_FX_DX8_PARAMEQ, 1); fx[6] := BASS_ChannelSetFX(stream, BASS_FX_DX8_PARAMEQ, 1); fx[7] := BASS_ChannelSetFX(stream, BASS_FX_DX8_PARAMEQ, 1); fx[8] := BASS_ChannelSetFX(stream, BASS_FX_DX8_PARAMEQ, 1); fx[9] := BASS_ChannelSetFX(stream, BASS_FX_DX8_PARAMEQ, 1); fx[10] := BASS_ChannelSetFX(stream, BASS_FX_DX8_REVERB, 1);
//Apply EQ Settings to song p.fGain := 0; p.fBandwidth := 18; p.fCenter := 80; BASS_FXSetParameters(fx[0], @p); p.fCenter := 170; BASS_FXSetParameters(fx[1], @p); p.fCenter := 310; BASS_FXSetParameters(fx[2], @p); p.fCenter := 600; BASS_FXSetParameters(fx[3], @p); p.fCenter := 1000; BASS_FXSetParameters(fx[4], @p); p.fCenter := 3000; BASS_FXSetParameters(fx[5], @p); p.fCenter := 7000; BASS_FXSetParameters(fx[6], @p); p.fCenter := 12000; BASS_FXSetParameters(fx[7], @p); p.fCenter := 14000; BASS_FXSetParameters(fx[8], @p); p.fCenter := 16000; BASS_FXSetParameters(fx[9], @p);
BASS_FXGetParameters(fx[10], @pR); pR.fReverbMix := -96; pR.fReverbTime := 1500; pR.fHighFreqRTRatio := 0.1; BASS_FXSetParameters(fx[10], @pR); EQenable := True; end;
procedure UpdateEQ(Band1, Band2, Band3, Band4, Band5, Band6, Band7, Band8, Band9, Band10: Integer); var i: Integer; begin
BASS_FXGetParameters(fx[0], @p); p.fgain := Band1; BASS_FXSetParameters(fx[0], @p);
BASS_FXGetParameters(fx[1], @p); p.fgain := Band2; BASS_FXSetParameters(fx[1], @p);
BASS_FXGetParameters(fx[2], @p); p.fgain := Band3; BASS_FXSetParameters(fx[2], @p);
BASS_FXGetParameters(fx[3], @p); p.fgain := Band4; BASS_FXSetParameters(fx[3], @p);
BASS_FXGetParameters(fx[4], @p); p.fgain := Band5; BASS_FXSetParameters(fx[4], @p);
BASS_FXGetParameters(fx[5], @p); p.fgain := Band6; BASS_FXSetParameters(fx[5], @p);
BASS_FXGetParameters(fx[6], @p); p.fgain := Band7; BASS_FXSetParameters(fx[6], @p);
BASS_FXGetParameters(fx[7], @p); p.fgain := Band8; BASS_FXSetParameters(fx[7], @p);
BASS_FXGetParameters(fx[8], @p); p.fgain := Band9; BASS_FXSetParameters(fx[8], @p);
BASS_FXGetParameters(fx[9], @p); p.fgain := Band10; BASS_FXSetParameters(fx[9], @p); end;
procedure RemoveEQ; var i: Integer; begin for i := 0 to 9 do begin BASS_ChannelRemoveFX(stream, Fx[i]); end; EQEnable := False; end;
procedure TForm5.FormCreate(Sender: TObject); begin // Form5.Width:= Form1.Width; BASS_PluginLoad(PChar(ProgDir +'bass_fx.dll'), 0); IniEQ; end;
procedure TForm5.sButton1Click(Sender: TObject); begin IniEQ; end;
procedure TForm5.sButton2Click(Sender: TObject); begin RemoveEQ; end;
procedure TForm5.sTrackBar10Change(Sender: TObject); begin UpdateEQ(sTrackBar1.Position, sTrackBar2.Position, sTrackBar3.Position, sTrackBar4.Position, sTrackBar5.Position, sTrackBar6.Position, sTrackBar7.Position, sTrackBar8.Position, sTrackBar9.Position, sTrackBar10.Position); end;
procedure TForm5.sTrackBar1Change(Sender: TObject); begin UpdateEQ(sTrackBar1.Position, sTrackBar2.Position, sTrackBar3.Position, sTrackBar4.Position, sTrackBar5.Position, sTrackBar6.Position, sTrackBar7.Position, sTrackBar8.Position, sTrackBar9.Position, sTrackBar10.Position); end;
procedure TForm5.sTrackBar2Change(Sender: TObject); begin UpdateEQ(sTrackBar1.Position, sTrackBar2.Position, sTrackBar3.Position, sTrackBar4.Position, sTrackBar5.Position, sTrackBar6.Position, sTrackBar7.Position, sTrackBar8.Position, sTrackBar9.Position, sTrackBar10.Position); end;
procedure TForm5.sTrackBar3Change(Sender: TObject); begin UpdateEQ(sTrackBar1.Position, sTrackBar2.Position, sTrackBar3.Position, sTrackBar4.Position, sTrackBar5.Position, sTrackBar6.Position, sTrackBar7.Position, sTrackBar8.Position, sTrackBar9.Position, sTrackBar10.Position); end;
procedure TForm5.sTrackBar4Change(Sender: TObject); begin UpdateEQ(sTrackBar1.Position, sTrackBar2.Position, sTrackBar3.Position, sTrackBar4.Position, sTrackBar5.Position, sTrackBar6.Position, sTrackBar7.Position, sTrackBar8.Position, sTrackBar9.Position, sTrackBar10.Position); end;
procedure TForm5.sTrackBar5Change(Sender: TObject); begin UpdateEQ(sTrackBar1.Position, sTrackBar2.Position, sTrackBar3.Position, sTrackBar4.Position, sTrackBar5.Position, sTrackBar6.Position, sTrackBar7.Position, sTrackBar8.Position, sTrackBar9.Position, sTrackBar10.Position); end;
procedure TForm5.sTrackBar6Change(Sender: TObject); begin UpdateEQ(sTrackBar1.Position, sTrackBar2.Position, sTrackBar3.Position, sTrackBar4.Position, sTrackBar5.Position, sTrackBar6.Position, sTrackBar7.Position, sTrackBar8.Position, sTrackBar9.Position, sTrackBar10.Position); end;
procedure TForm5.sTrackBar7Change(Sender: TObject); begin UpdateEQ(sTrackBar1.Position, sTrackBar2.Position, sTrackBar3.Position, sTrackBar4.Position, sTrackBar5.Position, sTrackBar6.Position, sTrackBar7.Position, sTrackBar8.Position, sTrackBar9.Position, sTrackBar10.Position); end;
procedure TForm5.sTrackBar8Change(Sender: TObject); begin UpdateEQ(sTrackBar1.Position, sTrackBar2.Position, sTrackBar3.Position, sTrackBar4.Position, sTrackBar5.Position, sTrackBar6.Position, sTrackBar7.Position, sTrackBar8.Position, sTrackBar9.Position, sTrackBar10.Position); end;
procedure TForm5.sTrackBar9Change(Sender: TObject); begin UpdateEQ(sTrackBar1.Position, sTrackBar2.Position, sTrackBar3.Position, sTrackBar4.Position, sTrackBar5.Position, sTrackBar6.Position, sTrackBar7.Position, sTrackBar8.Position, sTrackBar9.Position, sTrackBar10.Position); end;
end.
|
Оно при загрузке формы говорит "16-bit stereo sources only. Please select another." и выходит из процедуры. Так тем кодом задумано( не знаю зачем), я его с форума bass`а взял. В чем тут проблема? Помогите пожалуйста
|