Captura de Audio y Grabación de Sonido del Sistema en C# .NET¶
Introducción¶
El VisioForge Video Capture SDK proporciona capacidades de captura de audio para desarrolladores .NET, cubriendo grabación de micrófono, captura de audio del sistema (loopback/altavoz) y grabación de audio combinada. Ya sea que esté construyendo un grabador de podcast, una herramienta de grabación de pantalla con audio o una aplicación de captura de voz, el SDK maneja la enumeración de dispositivos, negociación de formato y codificación.
Esta guía proporciona ejemplos de código completos y ejecutables para los escenarios más comunes de captura de audio usando las APIs de Video Capture SDK X y Media Blocks SDK.
Fuentes de Audio Soportadas¶
- Micrófonos físicos — Micrófonos de escritorio, USB y Bluetooth
- Puertos de entrada de línea — Mezcladores externos o instrumentos
- Audio del sistema (loopback) — Grabe lo que se reproduce a través de sus altavoces o auriculares
- Dispositivos de audio virtuales — Capture audio de otras aplicaciones
- Flujos de red — Audio de RTSP, HTTP y otras fuentes de streaming
Para configuración detallada de fuentes, consulte Fuentes de Audio.
Soporte de Formatos de Audio¶
Formatos con Pérdida¶
- MP3 — Estándar de la industria, tasas de bits ajustables de 8 kbps a 320 kbps
- M4A (AAC) — Excelente relación calidad-tamaño
- Windows Media Audio — Buena compresión con integración Windows
- Ogg Vorbis — Código abierto, excelente calidad a tasas de bits bajas
- Speex — Optimizado para voz
Formatos sin Pérdida¶
Grabar Audio de Micrófono a MP3¶
Esta aplicación de consola graba audio del micrófono predeterminado y lo guarda como archivo MP3.
Paquetes NuGet Requeridos¶
dotnet add package VisioForge.DotNet.Core.TRIAL
dotnet add package VisioForge.DotNet.VideoCapture.TRIAL
Agregue el paquete de redistribución para su plataforma (por ejemplo, VisioForge.DotNet.Redist.Base.Windows.x64).
Ejemplo Completo¶
using System;
using System.IO;
using System.Threading.Tasks;
using VisioForge.Core;
using VisioForge.Core.Types.X.Output;
using VisioForge.Core.Types.X.Sources;
using VisioForge.Core.VideoCaptureX;
class Program
{
static async Task Main(string[] args)
{
// Inicializar SDK
await VisioForgeX.InitSDKAsync();
var videoCapture = new VideoCaptureCoreX();
try
{
// Enumerar dispositivos de captura de audio
var audioDevices = await DeviceEnumerator.Shared.AudioSourcesAsync(
AudioCaptureDeviceAPI.DirectSound);
if (audioDevices.Length == 0)
{
Console.WriteLine("No se encontró dispositivo de captura de audio.");
return;
}
// Mostrar dispositivos disponibles
Console.WriteLine("Dispositivos de audio disponibles:");
for (int i = 0; i < audioDevices.Length; i++)
{
Console.WriteLine($" {i + 1}. {audioDevices[i].DisplayName}");
}
// Seleccionar primer dispositivo (micrófono predeterminado)
var selectedDevice = audioDevices[0];
var audioFormat = selectedDevice.GetDefaultFormat();
var audioSource = selectedDevice.CreateSourceSettingsVC(audioFormat);
// Configurar captura solo de audio
videoCapture.Audio_Source = audioSource;
videoCapture.Video_Source = null;
videoCapture.Video_Play = false;
videoCapture.Audio_Play = false;
videoCapture.Audio_Record = true;
// Configurar salida MP3
string outputPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.MyMusic),
$"mic_recording_{DateTime.Now:yyyyMMdd_HHmmss}.mp3");
var mp3Output = new MP3Output(outputPath);
videoCapture.Outputs_Add(mp3Output, autostart: true);
// Iniciar grabación
await videoCapture.StartAsync();
Console.WriteLine($"Grabando en: {outputPath}");
Console.WriteLine("Presione ENTER para detener...");
Console.ReadLine();
// Detener y guardar
await videoCapture.StopAsync();
Console.WriteLine("Grabación guardada.");
}
finally
{
await videoCapture.DisposeAsync();
VisioForgeX.DestroySDK();
}
}
}
Capturar Audio del Sistema (Altavoz / Loopback)¶
La captura de audio del sistema (también llamada loopback o captura de altavoz) graba cualquier sonido que se reproduce a través del dispositivo de salida de su computadora. Esto se usa comúnmente para grabación de pantalla con audio, captura de llamadas de conferencia o grabación de audio en streaming.
En Windows, la captura de loopback usa la API WASAPI2 para acceder a los dispositivos de salida.
Ejemplo Completo — Video Capture SDK X¶
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using VisioForge.Core;
using VisioForge.Core.Types.X.Output;
using VisioForge.Core.Types.X.Sources;
using VisioForge.Core.VideoCaptureX;
class Program
{
static async Task Main(string[] args)
{
// Inicializar SDK
await VisioForgeX.InitSDKAsync();
var videoCapture = new VideoCaptureCoreX();
try
{
// Enumerar dispositivos de salida de audio WASAPI2 (altavoces/auriculares)
var audioOutputs = await DeviceEnumerator.Shared.AudioOutputsAsync(
AudioOutputDeviceAPI.WASAPI2);
if (audioOutputs.Length == 0)
{
Console.WriteLine("No se encontró dispositivo de salida de audio WASAPI2.");
return;
}
// Mostrar fuentes de loopback disponibles
Console.WriteLine("Dispositivos de loopback disponibles:");
for (int i = 0; i < audioOutputs.Length; i++)
{
Console.WriteLine($" {i + 1}. {audioOutputs[i].Name}");
}
// Seleccionar el primer dispositivo
var outputDevice = audioOutputs[0];
// Crear configuración de fuente loopback
var audioSource = new LoopbackAudioCaptureDeviceSourceSettings(outputDevice);
videoCapture.Audio_Source = audioSource;
// Configurar para captura solo de audio
videoCapture.Audio_Play = false;
videoCapture.Audio_Record = true;
videoCapture.Video_Play = false;
// Configurar salida M4A (AAC)
string outputPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.MyMusic),
$"system_audio_{DateTime.Now:yyyyMMdd_HHmmss}.m4a");
var m4aOutput = new M4AOutput(outputPath);
videoCapture.Outputs_Add(m4aOutput, autostart: true);
// Iniciar captura de audio del sistema
await videoCapture.StartAsync();
Console.WriteLine($"Capturando audio del sistema en: {outputPath}");
Console.WriteLine("Reproduzca algo de audio en su computadora, luego presione ENTER para detener...");
Console.ReadLine();
// Detener y guardar
await videoCapture.StopAsync();
Console.WriteLine("Grabación guardada.");
}
finally
{
await videoCapture.DisposeAsync();
VisioForgeX.DestroySDK();
}
}
}
Ejemplo Completo — Media Blocks SDK¶
El Media Blocks SDK usa un enfoque de pipeline donde conecta bloques de fuente, procesamiento y salida. Este ejemplo captura audio del sistema usando SystemAudioSourceBlock y lo guarda en un archivo M4A.
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using VisioForge.Core;
using VisioForge.Core.MediaBlocks;
using VisioForge.Core.MediaBlocks.Sources;
using VisioForge.Core.MediaBlocks.Sinks;
using VisioForge.Core.Types.X.Sources;
class Program
{
static async Task Main(string[] args)
{
// Inicializar SDK
await VisioForgeX.InitSDKAsync();
MediaBlocksPipeline pipeline = null;
try
{
// Obtener el primer dispositivo de salida WASAPI2 para captura de loopback
var audioOutputs = await DeviceEnumerator.Shared.AudioOutputsAsync(
AudioOutputDeviceAPI.WASAPI2);
if (audioOutputs.Length == 0)
{
Console.WriteLine("No se encontró dispositivo de salida de audio WASAPI2.");
return;
}
var outputDevice = audioOutputs[0];
Console.WriteLine($"Usando dispositivo de loopback: {outputDevice.Name}");
// Crear pipeline
pipeline = new MediaBlocksPipeline();
// Crear fuente de audio loopback
var sourceSettings = new LoopbackAudioCaptureDeviceSourceSettings(outputDevice);
var audioSource = new SystemAudioSourceBlock(sourceSettings);
// Crear salida M4A
string outputPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.MyMusic),
$"system_audio_{DateTime.Now:yyyyMMdd_HHmmss}.m4a");
var output = new M4AOutputBlock(outputPath);
// Conectar fuente a salida
pipeline.Connect(audioSource, output);
// Iniciar pipeline
await pipeline.StartAsync();
Console.WriteLine($"Capturando audio del sistema en: {outputPath}");
Console.WriteLine("Presione ENTER para detener...");
Console.ReadLine();
// Detener pipeline
await pipeline.StopAsync();
Console.WriteLine("Grabación guardada.");
}
finally
{
if (pipeline != null)
{
await pipeline.DisposeAsync();
}
VisioForgeX.DestroySDK();
}
}
}
Características Clave¶
Control de Dispositivos¶
- Enumerar todos los dispositivos de entrada y salida de audio disponibles
- Seleccionar dispositivos de entrada específicos programáticamente
- Establecer niveles de volumen de entrada y estado de silencio
- Monitorear niveles de audio en tiempo real con medidores VU
- Selección automática de dispositivos predeterminados del sistema
Procesamiento Avanzado¶
- Visualización de audio en tiempo real con análisis de espectro y forma de onda
- Reducción de ruido y cancelación de eco
- Control de ganancia y normalización
- Detección de actividad de voz (VAD)
- Gestión de canales estéreo/mono
- Conversión de frecuencia de muestreo
Controles de Grabación¶
- Iniciar, pausar, reanudar y detener grabación
- Gestión de búfer para operación de baja latencia
- Grabaciones temporizadas con parada automática
- División de archivos para grabaciones grandes
- Nombramiento automático de archivos con marcas de tiempo
Notas Multiplataforma¶
| Plataforma | Micrófono | Audio del Sistema (Loopback) |
|---|---|---|
| Windows | DirectSound, WASAPI2 | Loopback WASAPI2 |
| macOS | CoreAudio | No disponible vía SDK |
| Linux | PulseAudio, ALSA | Monitor PulseAudio |
La captura de loopback de audio del sistema es principalmente una característica de Windows usando la API WASAPI2. En Linux, los dispositivos de monitor PulseAudio pueden proporcionar funcionalidad similar.
Mejores Prácticas¶
- Verifique la disponibilidad del dispositivo antes de iniciar la captura — los dispositivos pueden desconectarse en cualquier momento
- Monitoree los niveles de audio durante la grabación para detectar silencio o saturación
- Elija el formato correcto — MP3/M4A para salida comprimida, WAV para máxima calidad, FLAC para compresión sin pérdida
- Use WASAPI2 para captura de loopback en Windows — proporciona la menor latencia y la captura de audio del sistema más confiable
- Maneje errores con elegancia — implemente manejo de errores para eventos de desconexión de dispositivos
- Pruebe en el hardware objetivo — el comportamiento de los dispositivos de audio varía entre sistemas
Aplicaciones de Ejemplo¶
Ejemplos de trabajo completos están disponibles en GitHub:
- Captura de Altavoz — Media Blocks SDK
- Captura de Altavoz — Video Capture SDK X
- Demo de Captura de Audio — Video Capture SDK X