View Full Version : [Frage] audioeffekt problem
ich hab ein kleines prob, wenn ich als eingabedaten ein file hab. irgendwie spielt er die samples die ich drüberleg gute 2 sekunden zu spät ab. wenn ich die eingabe mit capturedevice mach, dann gehts. es ist kein fehler im meinem zeitsteuerungscode, hab ich schon überprüft.
hmm, interessant... naja, ohne Sourcen kann man den Fehler schwer finden, aber falls du z.b. irgendwo getDuration() verwendest, dann stell sicher, dass du zuvor nach dem Öffnen des Files auf eine "DurationUpdate" (oder so ähnlich) Event gewartet hast, sonst stimmt das, was getDuration() zurückgibt, nicht...
Ansonsten kann ich dir nur sagen, wie ich das mit der Zeitsteuerung mache (und es funktioniert mit Files): nämlich ganz "idiotensicher" mittels der Date Klasse aus java.lang: new Date() bildet die momentane Systemzeit genau ab, mittels Date.before() und Date.after() kannst du die Zeiten untereinander vergleichen -> setze etwa, wenn das erste mal die Process-Methode aufgerufen wird, irgendeine Variable aufs aktuelle Date. Ein Zeit etwa 10 Sekunden später kannst du dann leicht aus dieser Variable erzeugen (konstruktor nimmt auch millisekunden aber jan 1, 1970, 00:00), sobald dann dieses Date erreicht ist, leg das Sample drüber -> funkt zumindest bei mir sehr genau, allerdings nur in Sekunden-Schritten, weil ja process() nur alle Sekunden aufgerufen wird (ich denke aber nicht, das es Sinn macht, eine Anfangszeit auf nicht genau 1sec boundaries zu definieren, den Unterschied täte eh kein Mensch merken...)
so ähnlich hab ichs auch am anfang ghabt, dann probier mal eine datei zu öffnen und in eine datei zu speicher, dann wirst sehen, dass das schneller als echtzeit geht, wodurch eine steuerung mit der systemzeit nicht funken kann.
ich hatte es mit systemtimebase gemacht.
mit getduration arbeit ich auch nicht. ich mach das so( hab ich glaub ich schon mal gepostet):
beim open setz ich curTime uaf null; bei jedem aufruf wird curTimeum die länge des inputbuffers erhöht, dieser wert durch die bytesPerSecond dividiert liefet die zeit in sekunden. das kann ich dann mit den startzeiten der samples vergleichen.
überprüft, ob der effekt funkt hab ich dadurch, dass ich eine ausgebe mach, wenn er samples spielen sollt. wenn ich jetzt als eingabe ein file hab, dann spielt er das sample erst wie gsagt, 2 sekunden nach der ausgabe ab. bei capturedevice input kommt beides gleichzeitig.
sehr strange
ja, ich bin auch davon ausgegangen, dass man sowieso die bitrate in die Zeitabstände einfließen lässt, das mach ich ja auch bei meiner Methode mit dem Date().
Es ist eh jedesmal nur zu Beginn vom Aufruf von process() die Zeit interessant, da sowieso immer ein bißchen "im Voraus" gearbeitet wird: während ein Buffer abgespielt wird, wird der nächste bearbeitet -> das ist vermutlich auch die Quelle deines Problems...
Ich denke nämlich, dass ihm beim Capture Device nichts anderes überbleibt als Echtzeitverarbeitung, da ja die Daten nicht bereits im Vorraus eingelesen werden können...
vBulletin® v3.7.1, Copyright ©2000-2008, Jelsoft Enterprises Ltd.