kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Herausfinden der Latenzzeit des Audiosystems

(EN google-translate)

(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.

Lösung
  • 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 0-1: Für die Bestimmung der Latenzzeit relevanter Quellcode in info.kramann.tapeecho.TapeEcho.