BASS 2.0, a mikrofon

0

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?

0

Poradziłem sobie z tym problemem, inicjalizując BASS'a w ten sposób:

BASS_SetConfig(BASS_CONFIG_UPDATEPERIOD, 10);
if not BASS_Init(1, 44100, BASS_DEVICE_LATENCY, Handle, nil) then
ShowMessage('Dźwięk nie został prawidłowo zainicjalizowany');
Info.size:=SizeOf(Info);
BASS_GetInfo(Info);
BASS_SetConfig(BASS_CONFIG_BUFFER, 10+Info.Minbuf);

Jednak pojawiła się następna sprawa. Jak ustawię UPDATEPERIOD na 10, to mikrofon działa normalnie, za to nie chce mi działać odtwarzanie plików mp3, BASS_ErrorGetCode zwraca wtedy jakiś kosmiczny błąd po próbie wywołania BASS_StreamCreateFile. Pliki mp3 zaczynają grać dopiero od UPDATEPERIOD równego 120, jednak wtedy mikrofon znowu zaczyna "przeciągać". Jak pogodzić te dwie rzeczy w jednym programie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1