kramann.info
© Guido Kramann

Login: Passwort:










10.4 Herausfinden der Latenzzeit des Audiosystems

10.4 Find out the latency of the audio system (EN google-translate)

10.4 Sprawdź opóźnienie systemu audio (PL google-translate)

Jedes digitale Signalverarbeitungssystem besitzt eine gewisse Verzögerungszeit, zwischen einem am Eingang anliegenden Signal und dem gleichen Signal, wenn es wieder am Ausgang ausgegeben wird. Für TAPE ECHO war es essentiell diese Zeit zu ermitteln, da nur so zeitlich korrekt einsetzende zweite und dritte Stimmen generiert werden konnten.

Each digital signal processing system has a certain delay time, between one signal present at the input and the same signal when it is output again at the output. For TAPE ECHO it was essential to determine this time, because only so timely correct second and third votes could be generated.

Każdy system cyfrowego przetwarzania sygnału ma określony czas opóźnienia między jednym a drugim sygnał obecny na wejściu i ten sam sygnał, gdy jest ponownie wyprowadzany na wyjściu. W przypadku TAPE ECHO konieczne było określenie tego czasu, ponieważ tylko w porę jest to prawidłowe można generować drugie i trzecie głosowanie.

Lösung
solution
rozwiązanie
  • Bei der Initialisierung wird die Systemzeit t0 genommen und das Mikrofon eingeschaltet.
  • Kommt es zu einem allerersten Audio-Event, d.h. wenn das Mikrovon ein Datenpaket bereithält und onAudioEvent(..) vom System aufgerufen wird, so wird die zeitliche Differenz zu t0 als Latenzzeit genommen.
package info.kramann.tapeecho;
...
import info.kramann.tapeecho.Mikrofon;
...
public class TapeEcho extends Zwischenschicht 
{
    public Mikrofon mikrofon;
    ...
    public void initialisieren()
    {
          ...
    	  mikrofon = new Mikrofon(this);
          ...
    	  //kurz anschalten, um Buffersize und Latenz zu ermitteln
          latenz = System.currentTimeMillis();
          mikrofon.start();                	  
          ...
    }
    ..
    public void onAudioEvent(short[] _data)
    {
      data= _data;
      if(buffakt==0)
      {
    	  latenz = System.currentTimeMillis() - latenz;
    	  latenz_samp = (latenz*(long)sr)/1000;
    	  buffakt = data.length;    	  
          outdata = new short[buffakt*2];
          outdatasize = outdata.length;
          audioTrack.play();
    	  mikrofon.stop();
          ...
      }
   }
   ... 
}      

Code 10.4-1: Für die Bestimmung der Latenzzeit relevanter Quellcode in info.kramann.tapeecho.TapeEcho.