[Core Audio] Ausgabegerät einer Cocoa Applikation ändern

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

  • [Core Audio] Ausgabegerät einer Cocoa Applikation ändern

    Hallo,

    ich bin neu in diesem Forum. Ich hoffe, ich bin hier richtig! :)

    Ich entwickle gerade eine Cocoa Applikation, die mittels F-Script Code in eine andere Applikation einspeist.
    Das Einspeisen grundsätzlich funktioniert.
    Meine Anwendung soll nun aber das Ausgabegerät dieser Applikation ändern, bzw. ein Ausgabegerät hinzufügen, wenn es möglich ist.
    Oder gibt es eine weitere (leichtere) Möglichkeit, alle Ausgaben dieser bestimmten Applikation aufzunehmen?

    Vielen Dank im Voraus!
    Herzliche Grüße.
  • Einfachste Möglichkeit: Audio Hijack Pro kaufen :P Ich stell mir das ganze selber zu machen relativ schmerzhaft vor. Aber schau halt mal auf der Website von RogueAmoeba (Hersteller von Audio Hijack), die hatten zumindest früher immer reichlich Tipp und Tricks, wie man solche Dinge anstellen kann, in ihrem Blog.
    C++
  • Danke für die schnelle Antwort!

    Ich habe mir Audio Hijack Pro ja bereits gekauft. Bis jetzt verwende ich ein selbstgeschriebenes AppleScript, das mir diese Arbeit abnimmt.
    Aber ich möchte mich eben von diesem Programm unabhängig machen und sozusagen "volle Kontrolle" übernehmen. ;)
  • Du kannst einen Audiotreiber für ein virtuelles Audiodevice schreiben und das Gerät dann in Audio-MIDI-Setup als Standardgerät für Wiedergabe auswählen. Mit reiner Code Injection wird es schwierig, wenn Du nicht genau weißt, was die Zielanwendung genau macht. Soundflower macht es meines Wissens übrigens genau so.

    Nebenbei: Mir war das alles zu fummelig, ich habe mir ein USB-Gerät gebaut, das sich als Audiogerät ausgibt und die gestreamten Audiodaten auf eine SD-Karte schreibt. Das Tolle: Funktioniert plattformunabhängig.
    Multigrad - 360°-Produktfotografie für den Mac
  • Zuerst war das auch meine Lösung, einen Audiotreiber zu schreiben. Ich habe es erstmal versucht, ihn im Audio-MIDI-Setup manuell erstellen mit "Gerät mit mehreren Ausgängen erstellen", jedoch traten ein paar Probleme auf:
    1. Die Lautstärke konnte nicht mehr geändert werden.
    2. Jede Ausgabe erfolgt über diesen Ausgang. Also kann die Ausgabe auch von mehreren Programm genutzt werden.


    Aber rein theoretisch müsste man doch einen Code entwickeln können, der das Default Output Device einer beliebigen Anwendung mittels Core Audio ändert bzw. abfragt?
  • Die Lautstärke-Sache könnte sich beheben lassen, wenn alle beteiligten Audiogeräte sämtliche Volume-Properties unterstützen. Müsste man mal etwas weiter ausprobieren, sicher weiß ich es nicht. Composite Devices haben es in sich - da passiert eine Menge Clocking-, Resampling- und Remapping-Voodoo im Hintergrund. Sie funktionieren auch nur unter bestimmten Umständen, die man nur schwer allgemein sicherstellen kann. Ich habe mit denen schon sehr merkwürdige Dinge erlebt.

    Von Außen den Default Output anwendungsspezifisch umzubiegen ist meines Wissens nicht vorgesehen. Ich würde es mal mit AudioHardwareSetProperty() mit kAudioHardwarePropertyDefaultOutputDevice versuchen - ich hätte allerdings keine allzu große Hoffnung, dass das ohne Kontolle oder Wissen über Zielanwendungen zuverlässig klappt. Du bohrst sehr tief in die Innereien - das kann leicht mit irgend einem Schlunz der Zielanwendung kollidieren (CoreAudio ist auf Performance optimiert, da gibt es keine tollen Abstraktions- und Sicherungsschichten dazwischen).
    Multigrad - 360°-Produktfotografie für den Mac