tagscanner tagger tag mac full automatag macos audio kernel driver

macos - tagger - Controlador de audio virtual Mac OS X



tag music mac (2)

Después de una investigación adicional, aquí hay algunas técnicas teóricas que surgieron que podrían permitirle lograr su objetivo:

  1. Al igual que con el producto Hear Prosoft Engineering, puede crear un complemento HAL (controlador virtual en modo de usuario) en lugar de .kext (controlador virtual en modo kernel). Apple tiene un plugin HAL de muestra llamado "SampleHardwarePlugIn" y PulseAudio tiene uno. Sin embargo, con su método no creo que tenga acceso a una transmisión de sonido del sistema premezclado. Tendría que reunir todas las transmisiones de las diversas aplicaciones (que deben usar CoreAudio para reproducir el sonido) y mezclarlas para la captura de sonido del pseudo sistema.

  2. Cree un dispositivo de audio virtual que esté oculto [1] [2] de la interacción del usuario. Cuando el usuario desee capturar el sonido predeterminado, cree un dispositivo agregado que incluya su dispositivo virtual oculto y el dispositivo de sonido predeterminado. Establezca temporalmente este dispositivo agregado como salida predeterminada. De esta manera, puede capturar el sonido predeterminado y escucharlo.
    Nota al margen: si Mac OS X permite que un dispositivo oculto también se configure como el dispositivo de salida predeterminado, ¿qué preferencias del sistema mostraría como el dispositivo seleccionado? Si en cambio muestra el dispositivo de salida secundario como seleccionado, entonces tiene la alusión adicional de que nada ha cambiado.

Quiero crear un dispositivo de audio virtual que obtenga datos de audio de la salida predeterminada (que es una salida IOAudioStream) y los convierta en una entrada IOAudioStream.

Revisé la mayoría de los ejemplos que pude encontrar, sin embargo, solo implementan una característica para copiar el IOAudioStream de salida a la entrada como máximo. Eso significa que solo convierte el audio a una corriente de entrada si el dispositivo de audio se selecciona como salida.

Esto debería ser posible, ya que ScreenFlow permite la grabación de audio de la computadora mediante la instalación de un kext que crea un controlador virtual.

¿Cómo puedo acceder a los datos de audio desde la salida predeterminada y enviarlos a mi controlador virtual?


Eche un vistazo al WavTap código WavTap , que es una bifurcación simplificada del controlador de tarjeta de sonido virtual SoundFlower fuente SoundFlower . Es un .kext que creo que hace sustancialmente lo que quieres.

A modo de referencia, así es cómo funcionan algunas opciones populares de código cerrado:
Rogue Amoeba''s Audio Hijack Pro
-Captura el audio del sistema a través de código basado en el código abierto SoundFlower .kext
-Captura el audio de una aplicación mediante la sustitución de un marco de "parche" para el CoreAudio.framework normal al iniciar la aplicación
-Captura el audio de una aplicación que ya se está ejecutando con la ayuda del Haxie "Application Enhancer" (APE) de Unsanity

Estas características tienen la marca de su función "Instant On" (InstantOn.kext).

Estudio WireTap de Ambrosia Software
-Captura el audio del sistema y el audio de la aplicación a través de un desarrollo interno .kext

Telestream''s ScreenFlow
-Captura el audio del sistema a través de un .kext desarrollado en casa. (La versión 2.x usa varaudio.kext; la versión 3.x usa TelestreamAudio.kext)

Grabadora de audio de Macsome
-Método desconocido

Arielium Group''s Screenflick
-Captura el audio del sistema con SoundFlower .kext

ACTUALIZACIÓN # 1
Después de leer los comentarios del autor, parece que el objetivo subyacente es poder capturar el sonido del sistema sin publicar el controlador de audio virtual como un dispositivo (que aparecería en la lista de Preferencias del sistema) y sin cambiar el dispositivo de salida predeterminado actual (o al menos la apariencia de que el dispositivo ha cambiado).

SoundFlower: agrega un dispositivo de sonido a la lista después de la instalación
WavTap: Agrega un dispositivo de sonido a la lista luego de la instalación; selecciona automáticamente el dispositivo cuando se inicia la aplicación WavTap; desactiva automáticamente el dispositivo cuando la aplicación se apaga y vuelve a seleccionar el dispositivo anterior
Audio Hijack Pro: agrega un dispositivo de sonido solo cuando se selecciona la captura de audio del sonido predeterminado del sistema; elimina el dispositivo de sonido cuando la captura de audio ya no está seleccionada y vuelve a seleccionar el dispositivo anterior
WireTap Studio: Desconocido
ScreenFlow: captura el sonido del sistema sin cambiar el dispositivo de salida predeterminado actual y sin publicar el controlador de audio virtual como dispositivo

ACTUALIZACIÓN # 2
Una cita de Jeff Moore, ingeniero de CoreAudio Apple, en referencia a aplicaciones como WireTap y Audio Hijack Pro:
"No hay API en el sistema que le proporcionen la salida de una aplicación específica o toda la combinación va al hardware ... [Capturar sonido del sistema] no es compatible con el sistema y esa gente tenía que ser inteligente. nada le impide hacer lo mismo, excepto lo dispuesto que está por ensuciarse las manos. El hecho es que el sistema de audio de Mac OS X fue diseñado en primer lugar para el rendimiento. Esto nos lleva a un diseño en el que no es fácil apoyar el la funcionalidad que desea sin imponer sanciones de rendimiento. Por lo tanto, hemos optado por un mejor rendimiento a costa de no poder proporcionar esta función ".

Si desea leer más sobre el tema, consulte estos hilos en la lista de correo de la API CoreAudio:
"WireTap, API de CoreAudio y captura de sistema, y ​​kexts ..."
"Otra pregunta sobre la captura de audio reproducida por un software"
"Captura de audio reproducido actualmente usando CoreAudio en Mac"
"''secuestro de audio''"
"monitoreo de la salida de audio del sistema como un toque de cable"
"Capturar salida de audio en un archivo"
"Duplicación de salida de audio"
"Sistema de grabación de audio"

Preguntas relevantes de SO:
Ocultar dispositivo de audio usando kext sin código

En resumen, no es probable que encuentres ejemplos de Apple que logren esto, y tampoco es probable que encuentres un código fuente abierto que logre esto, a menos que alguien se sienta muy generoso. Parece ser demasiado valioso de información.