Zrobiłem odtwarzanie na żywo dxwięków z mikrofonu na BASSie. Pobieram dane z mikrofonu, a potem wrzucam je do streamu:
function RecordStreamProc(Handle:HStream; Buffer:Pointer; Length, User:DWord):DWord; stdcall;
var
C, Chunk:Integer;
begin
c:=BASS_ChannelGetData(RecordHandle,0,BASS_DATA_AVAILABLE);
c:=c-length;
if (c>2*chunk+1764) then// buffer has gotten pretty large so remove some
begin
c:=c-chunk; // leave a single 'chunk'
c:=c-(c mod 3); // align to sample boundary
BASS_ChannelGetData(RecordHandle,0,c); // rem
end;
c:=BASS_ChannelGetData(RecordHandle,buffer,length);
if c<length then
GetMem(buffer, length);
result:=length;
end;
I problem polega na tym, że to, co wypływa z głośników, jest opóźnione, a na dodatek jakieś takie rozwlekłe (spowolnione). Próbowałem zmienić inicjalizację
BASS'a na taką:
BASS_Init(1, 44100, MAKELONG(BASS_DEVICE_LATENCY,10), Handle, nil);
Info.size:=SizeOf(Info);
BASS_GetInfo(Info);
BASS_SetConfig(BASS_CONFIG_BUFFER, Round((10+Info.Minbuf)/1000.0));
Niestety, teraz przestało grać w ogóle. Pod BASS'em 1.8 działało to (pomijając kosmetyczne zmiany, aby pasowało do nowej wersji) bez problemu, jednak po przesiadce na wersję 2.0 dzieją się takie właśnie rzeczy. Co jest nie tak?