Dem Treiber wird eine Callbackfunktion übergeben, die dann vom Treiber aufgerufen wird (werden soll) wenn er Daten hat bzw. braucht.
In der konkreten Situation sieht das ganze so aus
Code:
procedure TMainForm.BufferSwitchTimeInfo(index: integer; const params: TAsioTime);
begin
// tell the interface that the sample position has changed
PostMessage(
Handle, PM_UpdateSamplePos, params.timeInfo.samplePosition.hi,
params.timeInfo.samplePosition.lo);
Driver.OutputReady; // some asio drivers require this
end;
Was mich eben verwirrt, ist das die Sampleposition sich immer um die Buffergröße erhöht. Wenn es ein Problem mit der Synchronisation / Nachricht wäre, dann müsste der Zähler ja 'hupfen'.