Pilote audio virtuel Mac OS X

je veux créer un périphérique audio virtuel qui récupère les données audio de la sortie par défaut (qui est une sortie IOAudioStream) et les convertit en une entrée IOAudioStream.

j'ai passé en revue la plupart des exemples que j'ai pu trouver, mais ils n'implémentent qu'une fonctionnalité pour copier la sortie IOAudioStream vers l'entrée au plus. Cela signifie qu'il ne convertit l'audio en flux d'entrée que si le périphérique audio est sélectionné comme sortie.

cela devrait être possible, puisque ScreenFlow permet d'enregistrer l'audio de l'ordinateur en installant un kext qui crée un pilote virtuel.

Comment puis-je accéder aux données audio de la sortie par défaut et les envoyer à mon pilote virtuel?

22
demandé sur UpL1nK 2013-08-26 16:02:44

2 réponses

jetez un oeil à l'open-source WavTap , qui est une fourche simplifiée de l'open-source SoundFlower pilote de carte son virtuel. C'est un .kext qui, je crois, fait essentiellement ce que vous voulez.

à titre de référence, voici comment fonctionnent certaines options commerciales à source fermée:

Audio Hijack Pro de Rogue Amoeba

- Capture l'audio du système via un code basé sur l'open-source SoundFlower .kext

- Capture l'audio d'une application en substituant un" patch " framework au CoreAudio normal.cadre lors du lancement de la demande

- Capte l'audio d'une application déjà en cours d'exécution avec l'aide de la haxie " Application Enhancer "(APE) de Unsanity

ces caractéristiques sont marqués comme leur caractéristique "instantanée" (InstantOn.kext).

Ambrosia Software WireTap Studio

- Enregistre l'audio du système et l'audio de l'application via un interne développé .kext

Telestream's ScreenFlow

- Capture l'audio système via un développé en interne .kext. (Version 2.x utilise varaudio.kext; Version 3.x utilise TelestreamAudio.kext)

Macsom's Audio Recorder

- Méthode inconnue

groupe Araelium Screenflick

- Capture l'audio du système à l'aide de la SoundFlower .kext

mise à JOUR #1

Après avoir lu les commentaires de l'auteur, il apparaît le but sous-jacent est d'être en mesure de capturer le son système sans publier le pilote audio virtuel comme un périphérique (qui apparaîtrait dans la liste des préférences du système) et sans changer le périphérique de sortie par défaut courant (ou au moins l'apparence que le périphérique a changé).

SoundFlower: ajoute un dispositif sonore à la liste lors de l'installation

WavTap: ajoute un périphérique sonore à la liste lors de l'installation; sélectionne automatiquement le périphérique lors du démarrage de L'application WavTap; désélectionne automatiquement le périphérique lors de l'arrêt de l'application et resélectionne le périphérique précédent

Audio Hijack Pro: ajoute un périphérique sonore uniquement lorsque la capture audio du son système par défaut est sélectionnée; supprime le périphérique sonore lorsque la capture audio n'est plus sélectionnée et resélectionne le périphérique précédent

WireTap Studio: Unknown

ScreenFlow: capture le son du système sans changer le périphérique de sortie par défaut et sans publier le pilote audio virtuel comme un périphérique

mise à JOUR #2

Une citation de Jeff Moore, un ingénieur D'Apple CoreAudio, en référence à des applications telles que L'écoute électronique et audio Hijack Pro:

"il n'y a pas D'API sur le système qui vous donnera la sortie d'une application spécifique ou l'ensemble du mix allant vers le matériel...[Capturer le son du système] n'est pas supporté par le système et ces gens devaient être intelligents. Il n'y a rien qui vous empêche de faire la même chose, sauf à quel point vous êtes prêt à obtenir vos mains sales. Le fait est que le système audio de Mac OS X a été conçu avant tout pour la performance. Cela nous conduit à une conception où il n'est pas facile à soutenez la fonctionnalité que vous voulez sans imposer des pénalités de performance. Nous avons donc opté pour une meilleure performance au prix de ne pas pouvoir fournir cette fonctionnalité."

si vous souhaitez en savoir plus sur le sujet, consultez ces threads sur la liste de diffusion de L'API CoreAudio:

"la mise sur écoute, L'API de CoreAudio, et la capture système, et les kexts..."

"une autre question sur la capture audio repris par un logiciel"

"capturer l'audio actuellement joué en utilisant CoreAudio sur Mac"

"'détournement audio'"

"sortie audio du système de surveillance comme une prise de courant"

"Capture de la sortie audio dans un fichier"

"Miroir De Sortie Audio "

"système d'enregistrement audio"

questions pertinentes de L'es:

Cacher le périphérique Audio en utilisant kext codeless

si longue histoire courte, vous n'êtes pas susceptible de trouver des exemples D'Apple qui accomplissent ceci, et vous n'êtes pas susceptible de trouver le code source ouvert qui accomplit ceci non plus, à moins que quelqu'un se sent très généreux. Il semble être trop précieuse de renseignements.

43
répondu BigMacAttack 2017-05-23 10:31:30

après des recherches supplémentaires, voici quelques techniques théoriques que j'ai trouvé qui pourraient vous permettre d'accomplir votre but:

  1. similaire au produit Hear de Prosoft Engineering, vous pouvez créer un plugin HAL (user-mode virtual driver) plutôt qu'un .kext (pilote virtuel en mode noyau). Apple a un échantillon de plugin HAL appelé "SampleHardwarePlugIn" et PulseAudio a un ainsi. Cependant, avec sa méthode, Je ne pense pas que vous ayez accès à un flux sonore pré-mixé. Vous devez rassembler tous les flux des différentes applications (qui doivent utiliser CoreAudio pour jouer le son) et les mélanger ensemble pour la capture du son pseudo-système.

  2. créer un périphérique audio virtuel qui est caché [1] [2] de l'interaction avec l'utilisateur. Lorsque l'utilisateur souhaite capturer la valeur par défaut de son, créer par programmation d'un périphérique agrégé qui comprend votre cachés de périphérique virtuel et de l'actuel périphérique audio par défaut. Positionnez temporairement ce périphérique aggregate comme sortie par défaut. De cette façon, vous pouvez à la fois capturer le son par défaut et l'entendre.

    Note latérale: Si Mac OS X permet qu'un périphérique caché soit aussi défini comme périphérique de sortie par défaut, quelles Préférences Système affichera-t-il comme périphérique sélectionné? Si elle montre à la place le périphérique de sortie secondaire tel que sélectionné, alors vous avez l'allusion ajoutée que rien n'a changé.

6
répondu BigMacAttack 2013-09-08 20:10:41