2017-04-30 3 views
3

Ich habe diesen Fehler gesucht und ich habe niemanden mit dem gleichen Fehler gefunden. Ich bin mir ziemlich sicher, dass ich weiß, was dieser Fehler bedeutet, aber ich weiß nicht, wie ich es vermeiden kann.Wie vermeide ich den folgenden Fehler: AVAudioEngineGraph erforderliche Bedingung ist falsch: NULL! = Tippen

Im Grunde ist, was passiert, ich habe einen Anruf über MultipeerConnectivity. Ich verwende eine AVAudioEngine, um Audio aufzunehmen und Audio vom Peer abzuspielen.

Ich habe festgestellt, dass zwischen der Zeit, die der Benutzer gesprochen hat, und der Zeit, die das andere Gerät für die Wiedergabe von Audio benötigt, eine ziemlich große Verzögerung aufgetreten ist. Ich behob das Problem, indem ich den Tap löschte und neu installierte . Dies beseitigt jede Verzögerung vollständig. Manchmal wird jedoch ein Fehler ausgegeben.

Ich erlaube dem Benutzer auch, sein Mikrofon stumm zu schalten, und wenn er stumm klickt, wird der Tipp entfernt. Sobald sie auf die Stummschaltung klicken, wird der Abgriff erneut installiert. manchmal auch in diesem auch den gleichen Fehler wirft:

AVAudioEngineGraph.mm:2707: InputAvailable: erforderlich Bedingung falsch ist: NULL = tippen

Dieser Fehler allerdings völlig zufällig zu sein scheint. Manchmal passiert es, manchmal nicht. Ich konnte den Fehler nicht konsistent reproduzieren.


Meine Vermutung ist, dass dies, weil es einen Wasserhahn zu installieren versucht, in dem ein Hahn bereits vorhanden ist, aber ich weiß nicht, wie es zu vermeiden. Ich denke, ich könnte nur den Bus inkrementieren, auf dem der Tap installiert wird, aber das scheint nicht die beste Option zu sein.

Ich schaute auch, um zu sehen, ob es eine Eigenschaft auf AVAudioInputNode gab, die mir sagen würde, ob es bereits einen Hahn auf einem bestimmten Bus gab, aber ich schien keinen zu finden.

Hat jemand Erfahrung mit diesem Problem?

+0

Ich steckte auch mit diesem Problem. –

+0

@NileshParmar Ich muss noch eine Lösung finden. Wenn ich das tue, werde ich eine Antwort auf diese Frage posten. – Logan

+0

ok danke bitte update bald. –

Antwort

1

Wenn Sie eine bessere Lösung finden, dann lassen Sie mich bitte wissen, was es ist. Dies ist keine 100% ige Komplettlösung, aber es war das Beste, was ich mit der kleinen Hilfe, die ich zu dem Problem bekommen habe, finden konnte.

Ich fand eine Art Workaround, aber es gibt wahrscheinlich immer noch eine bessere Lösung. Das beseitigt das Problem nicht vollständig, ich habe das Problem ein oder zwei Mal gesehen, seit ich die Änderung vorgenommen habe, aber es reduziert definitiv die Chancen, dass es passiert.

Grundsätzlich, was ich tat, wenn ich einen Wasserhahn entfernen, warten Sie, bis es fertig ist, bevor Sie die Installation eines Wasserhahns zulassen. In meinem Fall hatte ich eine Stummschalttaste und ich stellte sicher, dass der Benutzer den Knopf nicht schneller anfassen konnte, als der Hahn entfernt werden konnte. Sobald der Knopf berührt wird, erlaube ich keine Betätigung, bis der Wasserhahn entfernt wird, und reaktiviere dann den Knopf.

Zweitens bin ich mir nicht sicher, ob dies überhaupt etwas bewirkt, aber bevor ich einen tap auf den inputNode installiere, rufe ich zuerst inputNode.reset() und dann inputNode.removeTap (onBus: 0) auf und installiere dann der Wasserhahn.

inputNode.reset() 
inputNode.removeTap(onBus: 0) 
inputNode.installTap(onBus: 0, bufferSize: 4096, format: localInputFormat) { 
    ... 
} 
+0

ok gut. Ich habe eine andere Lösung dafür.was ich zuerst taponbus installiert habe und alle 20 Sekunden starte ich den Timer neu, der angerufen hat, fährt fort, Anerkennung der Aufnahme zu erkennen. Ich habe das Problem nicht zu 100%, sondern zu 95% gelöst. –

Verwandte Themen