спасибо за советы. покурю.
но все же либа bass намного проще. события я так и не осилил, но...
как оказалось, легче завести массив потоков и проверять, активны ли они, когда я добавляю новых звуков. все неактивные я чищу и кидаю в них новьё. проблема решена, я полагаю.
var
strm: array [0..255] of HSTREAM;
// ...
if BASS_ChannelIsActive(strm[i]) = 0 then
begin
BASS_StreamFree(strm[i]);
strm[i] := BASS_StreamCreateFile(False, PChar(Filename), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
BASS_ChannelPlay(strm[i], True);
end;