VST Plugin Host׼V1.3 For Delphi 
˿׼ٿ׼VSTЧ

ʹõƵΪBass.dll 汾2.4

׼Ϊҫ̸ռ

÷:

DVstHostDVSTEffectDAVDCommonԪļ

Uses DVstHost,DVSTEffect,DAVDCommon



var
 vsthost:TVsthost;


ʼ

vsthost:=TVsthost.Create(nil);

VST

vsthost.VstPlugIns.Add.DLLFileName:=''; //ʼļ
vsthost[0].DLLFileName:='C:\Equal.Dll'; //ļ
vsthost[0].Active:=true;//VST

VSTϢ
vsthost[0].GetVendorString //ȡVST˾
vsthost[0].GetEffectName //ȡVST

vsthost[0].GetProgramName //ȡVSTԤ
vsthost[0].numPrograms //ȡVSTԤĸ
vsthost[0].ProgramNr //VSTԤ


//VSTƵӿں,޷ֵInputΪ뻺,OutputΪ,ͶΪȸ(Single),Ϊ顣
һSampleFrameΪС,͡
vsthost[0].ProcessReplacing(@Input[0], @Output[0], SampleFrame) 


VST溯

vsthost[0].EditOpen(hwnd);//VSTUI档"hwnd"Ϊ
vsthost[0].CloseEdit //رVSTUI

//ʱӺ,ڸVSTṩʱźš˺Timerؼĺ
vsthost[0].Idle;
vsthost[0].EditIdle;

//淵ز
erects:ERECT;
erects:=vsthost[0].EditGetRect;//ʼ
//VSTUIλ
erects.Top //
erects.Left //
erects.Bottom //
erects.Right //

ԸĲȡVSTUIĿ߶
Width:=max(erects.right - erects.left, 60)
Height:=erects.bottom - erects.Top

VSTʱϢͬ
vsthost.VstTimeInfo.SamplePos //ͬλ,λΪ(㷨:*ƵļĲ)
vsthost.VstTimeInfo.PpqPos //ͬλ,λΪPPQ
vsthost.VstTimeInfo.Tempo //ͬ,һΪ120bpm


ڲƵ㷨(16λƵ),ο
Const
   decblock=4608;

type
  TSmallIntArray=array [0..decblock*2] of Smallint;
  PSmallIntArray=^TSmallIntArray;

var
  TmpData:TAVDArrayOfSingleDynArray;

procedure Vstbuffer(Const Chans:integer;Const buffer:Pointer;Const length:DWORD);
var
  i,j,ch:Integer;
  bufflen:DWORD;
const
  DivFak16:Single=1/$8000;
  MulFak16:Single=$7FFF;
begin
  try
    bufflen:=(Length div 4);
    vsthost[0].SetBlockSizeAndSampleRate(bufflen,44100);
    ch:=max(vsthost[0].numInputs,vsthost[0].numOutputs);
    ch:= max(Chans,ch);
    SetLength(TmpData,ch);
    for i:=0 to ch-1 do
    begin
      SetLength(TmpData[i],bufflen);
      if i<Chans then
      begin
        for j:=0 to bufflen-1
          do TmpData[i,j]:=PSmallIntArray(buffer)^[j*Chans+i]*DivFak16;
      end;
    end;
    vsthost[0].ProcessReplacing(@TmpData[0],@TmpData[0], bufflen);
    for i:= 0 to ch-1 do
    begin
      if i<Chans then
      begin
        for j:= 0 to bufflen-1
          do PSmallIntArray(buffer)^[j*Chans+i]:=Round(f_Limit(TmpData[i,j])*MulFak16);
      end;
    end;
  except
  end;
end;



Ҹ˲Գɹĺڱʱ,Ҵ׼ǴһƵȡ,ƵĶΨйվСֻ˳õĺһЩڿʱо

ԭ汾λ:http://sourceforge.net/projects/delphiasiovst/files/Source%20Code/1.3/
