Core Audio - bekomme keinen Input im InputRenderProc

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Core Audio - bekomme keinen Input im InputRenderProc

    Hallo,

    vorweg zu mir: Ich bin Autodidakt, Programmieren ist ein Hobby, in Swift fühle ich mich inzwischen zu Hause, C, Obj-C und das Arbeiten mit Pointern ist aber recht neu für mich.

    Ich versuche mich in Core Audio einzuarbeiten, und wie so viele vor mir versuche ich, die Beispiele aus dem Buch "Learning Core Audio" in aktuelles Swift zu übertragen. Seit einem Monat verzweifle ich nun schon daran, einen Playthrough vom Hardware-Input zum Output hinzubekommen (Kapitel 8 aus dem Buch). Es will mir nicht gelingen!

    Ich habe meinen aktuellen Stand als Anhang beigefügt.
    WARNUNG: Vor dem Kompilieren bitte Lautstärke herunterdrehen!!! (s.u.)!!!!!!!!!!!!

    Es wird ein Input-AudioUnit erzeugt, und ein AUGraph mit einem OutputAU, das InputAU holt sich Daten vom Eingangsgerät, schreibt sie in einen RingBuffer (Ich benutze den TPCircularBuffer), das OutputAU holt sich die Daten aus dem RingBuffer. Der Ringbuffer funktioniert auch, wenn ich die Zeilen 61-82 aktiv mache, werden die Daten aus dem Eingangspuffer durch einen Sinuston überschrieben, dieser kommt dann über den RingBuffer im OutputAU an und ist zu hören.

    Wenn ich diesen Teil (61-82) aber auskommentiert lasse, kommt am Ausgang nichts an. In Zeile 54 sollten Audiodaten von der Hardware in den inputBuffer gelesen werden. Offenbar kommt dort aber nichts an. Ich bin jetzt mehrfach alle Schritte der createInputUnit-Funktion im Vergleich mit dem Buch durchgegangen, aber ich finde den Fehler nicht.

    Eine zweite Sache, welche ich nicht verstehe: Manchmal, aber nicht immer, gibt es zu Beginn eine laute Verzerrung zu hören (auch vor dem Sinuston), das deutet darauf hin, dass hier zufällige Daten als Audiodaten missinterpretiert werden, so lange der Buffer noch nicht gefüllt ist. Wie kommt das zustande? Die Buffer werden doch beim Initialisieren mit Nullen gefüllt? Und warum passiert das nicht immer?

    Bin über jede Hilfe dankbar!
    Dateien