title: Procesamiento de Audio en C# .NET - Mezclador, EQ, Efectos description: Pipelines de audio en C# con VisioForge Media Blocks SDK: mezclador, ecualizador, reverberación, reducción de ruido y más de 30 bloques. sidebar_label: Procesamiento y Efectos de Audio
Bloques de Procesamiento y Efectos de Audio para .NET¶
VisioForge Media Blocks SDK proporciona un enfoque basado en pipelines para el procesamiento de audio en C# y .NET. Conecte bloques de audio — conversores, remuestreadores, mezcladores, ecualizadores, efectos y analizadores — para construir cadenas de procesamiento de audio en tiempo real para sus aplicaciones. Cada bloque tiene pines de entrada/salida tipados que se conectan entre sí usando pipeline.Connect().
Para obtener información detallada sobre los parámetros y propiedades de los efectos de audio, consulte la Referencia de Efectos de Audio.
Todos los bloques son multiplataforma y funcionan en Windows, macOS, Linux, iOS y Android.
Procesamiento Básico de Audio¶
Audio Converter¶
El bloque Audio Converter convierte audio de un formato a otro.
Información del bloque¶
Nombre: AudioConverterBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
Sin parámetros configurables. Negocia y convierte automáticamente los formatos de audio entre los elementos conectados.
Elemento GStreamer: audioconvert
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->AudioConverterBlock;
AudioConverterBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var audioConverter = new AudioConverterBlock();
pipeline.Connect(fileSource.AudioOutput, audioConverter.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(audioConverter.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Audio Resampler¶
El bloque Audio Resampler cambia la tasa de muestreo de un flujo de audio.
Información del bloque¶
Nombre: AudioResamplerBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
Configure mediante AudioResamplerSettings:
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Format | AudioFormatX | S16LE | Formato de muestra de audio de destino |
SampleRate | int | 44100 | Tasa de muestreo de destino en Hz |
Channels | int | 2 | Número de canales de audio de destino |
Quality | int | 4 | Calidad de remuestreo (0 = más baja, 10 = mejor) |
ResampleMethod | AudioResamplerMethod | Kaiser | Algoritmo de remuestreo: Nearest, Linear, Cubic, BlackmanNuttall, Kaiser |
Elemento GStreamer: audioresample
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->AudioResamplerBlock;
AudioResamplerBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// Resample to 48000 Hz, stereo
var settings = new AudioResamplerSettings(AudioFormatX.S16LE, 48000, 2);
var audioResampler = new AudioResamplerBlock(settings);
pipeline.Connect(fileSource.AudioOutput, audioResampler.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(audioResampler.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Audio Timestamp Corrector¶
El bloque Audio Timestamp Corrector puede agregar o eliminar cuadros para corregir el flujo de entrada de fuentes inestables.
Información del bloque¶
Nombre: AudioTimestampCorrectorBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
Configure mediante AudioTimestampCorrectorSettings:
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Silent | bool | true | Suprime las señales de notificación para cuadros descartados y duplicados |
SkipToFirst | bool | false | No produce búferes antes de que se reciba el primero |
Tolerance | TimeSpan | 40 ms | Diferencia mínima de marca de tiempo antes de que se agreguen o descarten muestras |
Elemento GStreamer: audiorate
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->AudioTimestampCorrectorBlock;
AudioTimestampCorrectorBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var settings = new AudioTimestampCorrectorSettings();
var corrector = new AudioTimestampCorrectorBlock(settings);
pipeline.Connect(fileSource.AudioOutput, corrector.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(corrector.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Volume¶
El bloque Volume le permite controlar el volumen del flujo de audio.
Información del bloque¶
Nombre: VolumeBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Level | double | 1.0 | Multiplicador del nivel de volumen (0.0 = silencio, 1.0 = original, valores > 1.0 amplifican) |
Mute | bool | false | Silencia el flujo de audio sin cambiar el nivel de volumen |
Elemento GStreamer: volume
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->VolumeBlock;
VolumeBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// Volume: 0.0 (silence) to 1.0 (normal) or higher (amplification)
var volume = new VolumeBlock(0.8);
pipeline.Connect(fileSource.AudioOutput, volume.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(volume.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Mezclador de audio¶
El bloque mezclador de audio mezcla múltiples flujos de audio en uno solo. El bloque mezcla los flujos independientemente de su formato, convirtiendo si es necesario.
Todos los flujos de entrada serán sincronizados. El bloque mezclador maneja la conversión de diferentes formatos de audio de entrada a un formato común para la mezcla. Por defecto, intentará coincidir con el formato de la primera entrada conectada, pero esto puede configurarse explícitamente.
Use la clase AudioMixerSettings para establecer el formato de salida personalizado. Esto es útil si necesita una tasa de muestreo, disposición de canales o formato de audio específico (como S16LE, Float32LE, etc.) para la salida mezclada.
Información del bloque¶
Nombre: AudioMixerBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 (creado dinámicamente) |
| Salida | Audio sin comprimir | 1 |
Configuración¶
Configure mediante AudioMixerSettings:
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Format | AudioInfoX | S16LE, 48000 Hz, 2 ch | Formato de audio de salida (formato de muestra, tasa de muestreo, número de canales) |
Métodos en tiempo de ejecución:
| Método | Descripción |
|---|---|
CreateNewInput() | Crea un nuevo pad de entrada (antes de iniciar el pipeline) |
CreateNewInputLive() | Crea un nuevo pad de entrada durante la reproducción |
AddNewInput(MediaBlockPad) | Conecta una salida de bloque existente como nueva entrada del mezclador durante la reproducción |
RemoveInputLive(MediaBlockPad) | Elimina un pad de entrada durante la reproducción |
SetVolume(MediaBlockPad, double) | Establece el volumen para una entrada específica (0.0–10.0) |
SetMute(MediaBlockPad, bool) | Silencia o activa una entrada específica |
Elemento GStreamer: audiomixer
Pipeline de ejemplo¶
graph LR;
VirtualAudioSourceBlock#1-->AudioMixerBlock;
VirtualAudioSourceBlock#2-->AudioMixerBlock;
AudioMixerBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var audioSource1Block = new VirtualAudioSourceBlock(new VirtualAudioSourceSettings());
var audioSource2Block = new VirtualAudioSourceBlock(new VirtualAudioSourceSettings());
// Configure the mixer with specific output settings if needed
// For example, to output 48kHz, 2-channel, S16LE audio:
// var mixerSettings = new AudioMixerSettings() { Format = new AudioInfoX(AudioFormatX.S16LE, 48000, 2) };
// var audioMixerBlock = new AudioMixerBlock(mixerSettings);
var audioMixerBlock = new AudioMixerBlock(new AudioMixerSettings());
// Each call to CreateNewInput() adds a new input to the mixer
var inputPad1 = audioMixerBlock.CreateNewInput();
pipeline.Connect(audioSource1Block.Output, inputPad1);
var inputPad2 = audioMixerBlock.CreateNewInput();
pipeline.Connect(audioSource2Block.Output, inputPad2);
// Output the mixed audio to the default audio renderer
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(audioMixerBlock.Output, audioRenderer.Input);
await pipeline.StartAsync();
Control de flujos de entrada individuales¶
Puede controlar el volumen y el estado de silencio de los flujos de entrada individuales conectados al AudioMixerBlock. El streamIndex para estos métodos corresponde al orden en que se agregaron las entradas mediante CreateNewInput() o CreateNewInputLive() (comenzando desde 0).
- Establecer volumen: Use el método
SetVolume(int streamIndex, double value). Elvaluevaría de 0.0 (silencio) a 1.0 (volumen normal), y puede ser mayor para amplificación (por ejemplo, hasta 10.0, aunque los detalles pueden depender de los límites de la implementación subyacente). - Establecer silencio: Use el método
SetMute(int streamIndex, bool value). Establezcavalueentruepara silenciar el flujo yfalsepara activarlo.
// Assuming audioMixerBlock is already created and inputs are connected
// Set volume of the first input stream (index 0) to 50%
audioMixerBlock.SetVolume(0, 0.5);
// Mute the second input stream (index 1)
audioMixerBlock.SetMute(1, true);
Gestión dinámica de entradas (pipeline en vivo)¶
El AudioMixerBlock soporta agregar y eliminar entradas dinámicamente mientras el pipeline está en ejecución:
- Agregar entradas: Use el método
CreateNewInputLive()para obtener un nuevo pad de entrada que puede conectarse a una fuente. Los elementos GStreamer subyacentes se configurarán para manejar la nueva entrada. - Eliminar entradas: Use el método
RemoveInputLive(MediaBlockPad blockPad). Esto desconectará el pad de entrada especificado y limpiará los recursos asociados.
Esto es particularmente útil para aplicaciones donde el número de fuentes de audio puede cambiar durante la operación, como una consola de mezcla en vivo o una aplicación de conferencias.
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Capturador de muestras de audio¶
El bloque capturador de muestras de audio le permite acceder a las muestras de audio sin procesar del flujo de audio.
Información del bloque¶
Nombre: AudioSampleGrabberBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
format (constructor) | AudioFormatX | S16LE | Formato de muestra de audio para cuadros capturados |
| Evento | Tipo de Args | Descripción |
|---|---|---|
OnAudioFrameBuffer | AudioFrameBufferEventArgs | Se dispara para cada cuadro de audio capturado con datos de audio sin procesar, tasa de muestreo, canales y marca de tiempo |
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->AudioSampleGrabberBlock;
AudioSampleGrabberBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var audioSampleGrabber = new AudioSampleGrabberBlock();
audioSampleGrabber.SampleGrabbed += (sender, args) =>
{
// Process audio samples
// args.AudioData - audio samples
// args.AudioFormat - audio format
};
pipeline.Connect(fileSource.AudioOutput, audioSampleGrabber.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(audioSampleGrabber.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Efectos de Audio¶
Amplify¶
El bloque amplifica un flujo de audio por un factor de amplificación. Hay varios modos de recorte disponibles.
Use los valores de método y nivel para configurar.
Información del bloque¶
Nombre: AmplifyBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Level | double | 1.0 | Multiplicador de amplificación (1.0 = sin cambio, 2.0 = doble volumen, 0.5 = mitad de volumen) |
Method | AmplifyClippingMethod | Normal | Método de recorte cuando el audio amplificado excede el rango válido |
Valores de AmplifyClippingMethod:
| Valor | Descripción |
|---|---|
Normal | Recorte duro en el nivel máximo |
WrapNegative | Empuja los valores sobreexcitados de regreso desde el lado opuesto |
WrapPositive | Empuja los valores sobreexcitados de regreso desde el mismo lado |
NoClip | Sin recorte aplicado |
Elemento GStreamer: audioamplify
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->AmplifyBlock;
AmplifyBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var amplify = new AmplifyBlock(AmplifyClippingMethod.Normal, 2.0);
pipeline.Connect(fileSource.AudioOutput, amplify.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(amplify.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Echo¶
El bloque Echo agrega efecto de eco al flujo de audio.
Información del bloque¶
Nombre: EchoBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Delay | TimeSpan | 200 ms | Tiempo de retardo del eco entre la señal original y sus repeticiones |
MaxDelay | TimeSpan | 500 ms | Retardo máximo del eco (determina el tamaño del búfer interno). Debe ser >= Delay |
Intensity | float | 0 | Volumen de la señal retardada (0.0 = sin eco, 1.0 = volumen completo) |
Feedback | float | 0 | Cantidad de retroalimentación para repeticiones del eco (0.0 = eco único, valores cercanos a 1.0 = retroalimentación infinita) |
Elemento GStreamer: audioecho
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->EchoBlock;
EchoBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// Delay in ms, strength 0.0 - 1.0
var echo = new EchoBlock(500, 0.5);
pipeline.Connect(fileSource.AudioOutput, echo.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(echo.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Karaoke¶
El bloque Karaoke aplica un efecto de karaoke al flujo de audio, eliminando las voces con panorámica central.
Información del bloque¶
Nombre: KaraokeBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
Configure mediante KaraokeAudioEffect:
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Level | float | 1.0 | Intensidad de supresión vocal (0.0 = sin efecto, 1.0 = supresión máxima) |
MonoLevel | float | 1.0 | Nivel de supresión para contenido mono/canal central (0.0–1.0) |
FilterBand | float | 220 | Frecuencia central de la banda de filtro en Hz dirigida al rango vocal |
FilterWidth | float | 100 | Ancho de la banda de frecuencia a procesar en Hz |
Elemento GStreamer: audiokaraoke
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->KaraokeBlock;
KaraokeBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var settings = new KaraokeAudioEffect();
var karaoke = new KaraokeBlock(settings);
pipeline.Connect(fileSource.AudioOutput, karaoke.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(karaoke.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Reverberación¶
El bloque de reverberación agrega efectos de reverberación al flujo de audio.
Información del bloque¶
Nombre: ReverberationBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
Configure mediante ReverberationAudioEffect:
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
RoomSize | float | 0.5 | Tamaño de la habitación simulada (0.0 = habitación pequeña, 1.0 = sala grande) |
Damping | float | 0.2 | Amortiguación de alta frecuencia (0.0 = brillante, 1.0 = oscuro/amortiguado) |
Width | float | 1.0 | Ancho estéreo de la reverberación (0.0 = mono, 1.0 = estéreo completo) |
Level | float | 0.5 | Nivel de mezcla húmedo/seco (0.0 = solo seco, 1.0 = solo húmedo) |
Elemento GStreamer: freeverb
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->ReverberationBlock;
ReverberationBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var settings = new ReverberationAudioEffect();
var reverb = new ReverberationBlock(settings);
pipeline.Connect(fileSource.AudioOutput, reverb.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(reverb.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Wide Stereo¶
El bloque Wide Stereo mejora la imagen estéreo del audio.
Información del bloque¶
Nombre: WideStereoBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
Configure mediante WideStereoAudioEffect:
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Level | float | 0.01 | Cantidad de ampliación estéreo (0.0 = sin ampliación, valores más altos = imagen estéreo más amplia). Típico: 0.01–0.03 sutil, 0.05–0.10 moderado, 0.15+ fuerte |
Elemento GStreamer: stereo
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->WideStereoBlock;
WideStereoBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var settings = new WideStereoAudioEffect();
var wideStereo = new WideStereoBlock(settings);
pipeline.Connect(fileSource.AudioOutput, wideStereo.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(wideStereo.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Ecualización y Filtrado¶
Balance¶
El bloque le permite controlar el balance entre los canales izquierdo y derecho.
Información del bloque¶
Nombre: AudioBalanceBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Balance | float | 0.0 | Posición del balance estéreo (-1.0 = completamente a la izquierda, 0.0 = centro, +1.0 = completamente a la derecha) |
Elemento GStreamer: audiopanorama
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->AudioBalanceBlock;
AudioBalanceBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// Balance: -1.0 (full left) to 1.0 (full right), 0.0 - center
var balance = new AudioBalanceBlock(0.5);
pipeline.Connect(fileSource.AudioOutput, balance.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(balance.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Ecualizador (10 bandas)¶
El bloque de ecualizador de 10 bandas proporciona un ecualizador de 10 bandas para el procesamiento de audio.
Información del bloque¶
Nombre: Equalizer10Block.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
El ecualizador proporciona 10 bandas de frecuencia fija. Use SetBand(int index, double gain) para ajustar bandas individuales. Rango de ganancia: -24 dB a +12 dB.
| Índice de Banda | Frecuencia Central | Ancho de Banda |
|---|---|---|
| 0 | 29 Hz | 19 Hz |
| 1 | 59 Hz | 39 Hz |
| 2 | 119 Hz | 79 Hz |
| 3 | 237 Hz | 157 Hz |
| 4 | 474 Hz | 314 Hz |
| 5 | 947 Hz | 628 Hz |
| 6 | 1889 Hz | 1257 Hz |
| 7 | 3770 Hz | 2511 Hz |
| 8 | 7523 Hz | 5765 Hz |
| 9 | 15011 Hz | 11498 Hz |
El constructor acepta 10 valores double para las ganancias iniciales de las bandas (en dB), o use SetBand(int index, double gain) en tiempo de ejecución.
Elemento GStreamer: equalizer-10bands
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->Equalizer10Block;
Equalizer10Block-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// Create 10-band equalizer with all bands set to 0 dB
var equalizer = new Equalizer10Block(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
// Or set bands individually
equalizer.SetBand(0, 3); // Band 0 (31 Hz) to +3 dB
equalizer.SetBand(1, 2); // Band 1 (62 Hz) to +2 dB
equalizer.SetBand(9, -3); // Band 9 (16 kHz) to -3 dB
pipeline.Connect(fileSource.AudioOutput, equalizer.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(equalizer.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Ecualizador (Paramétrico)¶
El bloque de ecualizador paramétrico proporciona un ecualizador paramétrico para el procesamiento de audio.
Información del bloque¶
Nombre: EqualizerParametricBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
Use SetNumBands(int count) para establecer el número de bandas (1–64, predeterminado 3), luego configure cada banda con SetState(int index, ParametricEqualizerBand band).
Propiedades de ParametricEqualizerBand:
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Frequency | float | varía | Frecuencia central en Hz |
Gain | float | 0.0 | Ganancia de banda en dB (-24 a +12) |
Bandwidth | float | 1.0 | Ancho de banda en Hz |
Bandas predeterminadas (cuando se configuran 3 bandas):
| Banda | Frecuencia | Ancho de Banda |
|---|---|---|
| 0 | 110 Hz | 100 Hz |
| 1 | 1100 Hz | 1000 Hz |
| 2 | 11000 Hz | 10000 Hz |
Elemento GStreamer: equalizer-nbands
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->EqualizerParametricBlock;
EqualizerParametricBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// Create parametric equalizer
var equalizer = new EqualizerParametricBlock();
// Set up to 4 bands
equalizer.SetBand(0, 100, 1.0, 3); // Band 0: 100 Hz frequency, 1.0 Q, +3 dB gain
equalizer.SetBand(1, 1000, 1.5, -2); // Band 1: 1000 Hz frequency, 1.5 Q, -2 dB gain
pipeline.Connect(fileSource.AudioOutput, equalizer.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(equalizer.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Chebyshev Band Pass/Reject¶
El bloque Chebyshev Band Pass/Reject aplica un filtro pasa banda o rechaza banda al flujo de audio usando filtros de Chebyshev.
Información del bloque¶
Nombre: ChebyshevBandPassRejectBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
Configure mediante ChebyshevBandPassRejectAudioEffect:
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Mode | ChebyshevBandMode | BandPass | Modo de filtro: BandPass (pasar frecuencias en rango) o BandReject (rechazar frecuencias en rango) |
LowerFrequency | float | 220.0 | Frecuencia de corte inferior en Hz |
UpperFrequency | float | 3000.0 | Frecuencia de corte superior en Hz |
Poles | int | 4 | Número de polos del filtro (2–32, debe ser par). Valores más altos = corte más abrupto |
Type | int | 1 | Tipo de filtro Chebyshev: 1 (rizado en banda de paso) o 2 (rizado en banda de rechazo) |
Ripple | float | 0.25 | Cantidad de rizado en dB (Tipo 1: rizado en banda de paso, Tipo 2: rizado en banda de rechazo) |
Elemento GStreamer: audiochebband
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->ChebyshevBandPassRejectBlock;
ChebyshevBandPassRejectBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var settings = new ChebyshevBandPassRejectAudioEffect();
var filter = new ChebyshevBandPassRejectBlock(settings);
pipeline.Connect(fileSource.AudioOutput, filter.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(filter.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Chebyshev Limit¶
El bloque Chebyshev Limit aplica filtrado de paso bajo o paso alto al audio usando filtros de Chebyshev.
Información del bloque¶
Nombre: ChebyshevLimitBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
Configure mediante ChebyshevLimitAudioEffect:
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Mode | ChebyshevLimitMode | LowPass | Modo de filtro: LowPass (eliminar frecuencias altas) o HighPass (eliminar frecuencias bajas) |
CutOffFrequency | float | 1000.0 | Frecuencia de corte en Hz |
Poles | int | 4 | Número de polos del filtro (2–32, debe ser par). Valores más altos = corte más abrupto |
Type | int | 1 | Tipo de filtro Chebyshev: 1 (rizado en banda de paso) o 2 (rizado en banda de rechazo) |
Ripple | float | 0.25 | Cantidad de rizado en dB |
Elemento GStreamer: audiocheblimit
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->ChebyshevLimitBlock;
ChebyshevLimitBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var settings = new ChebyshevLimitAudioEffect();
var filter = new ChebyshevLimitBlock(settings);
pipeline.Connect(fileSource.AudioOutput, filter.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(filter.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Procesamiento Dinámico¶
Compresor/Expansor¶
El bloque compresor/expansor proporciona compresión o expansión del rango dinámico.
Información del bloque¶
Nombre: CompressorExpanderBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
Configure mediante CompressorExpanderAudioEffect:
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Mode | CompressorExpanderMode | Compressor | Modo de procesamiento: Compressor (reducir rango dinámico) o Expander (aumentar rango dinámico) |
Characteristics | CompressorExpanderCharacteristics | HardKnee | Tipo de rodilla: HardKnee (transición abrupta) o SoftKnee (transición gradual) |
Ratio | float | 1.0 | Relación de compresión/expansión (por ejemplo, 2.0 = compresión 2:1) |
Threshold | float | 0.0 | Nivel de umbral (0.0–1.0). La señal por encima de este nivel se comprime/expande |
El constructor acepta 4 parámetros: CompressorExpanderBlock(ratio, threshold, mode, characteristics).
Elemento GStreamer: audiodynamic
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->CompressorExpanderBlock;
CompressorExpanderBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var compressor = new CompressorExpanderBlock(0.5, 0.9, 0.1, 0.5);
pipeline.Connect(fileSource.AudioOutput, compressor.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(compressor.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Scale/Tempo¶
El bloque Scale/Tempo le permite cambiar el tempo y el tono del flujo de audio.
Información del bloque¶
Nombre: ScaleTempoBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Rate | double | 1.0 | Multiplicador de velocidad de reproducción (0.5 = mitad de velocidad, 1.0 = normal, 2.0 = doble velocidad). Se preserva el tono |
Overlap | double | 0.2 | Porcentaje de stride a superponer (0.0–1.0). Valores más altos mejoran la calidad a costa de CPU |
Search | TimeSpan | 14 ms | Longitud de la ventana de búsqueda para la mejor posición de superposición |
Stride | TimeSpan | 30 ms | Longitud del stride de audio de salida |
El constructor acepta un parámetro double rate para la velocidad de reproducción inicial. Use SetRate(double rate) para cambiar en tiempo de ejecución.
Elemento GStreamer: scaletempo
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->ScaleTempoBlock;
ScaleTempoBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// Scale tempo by factor (1.0 is normal, 0.5 is half-speed, 2.0 is double-speed)
var scaleTempo = new ScaleTempoBlock(1.5);
pipeline.Connect(fileSource.AudioOutput, scaleTempo.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(scaleTempo.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Análisis y Medición¶
VU Meter¶
El bloque VU Meter le permite medir el nivel de volumen del flujo de audio.
Información del bloque¶
Nombre: VUMeterBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
Bloque basado en eventos. Suscríbase al evento VolumeUpdated para recibir datos de nivel.
Propiedades del evento VUMeterXData:
| Propiedad | Tipo | Descripción |
|---|---|---|
LeftVolume | double | Nivel de volumen del canal izquierdo en dB |
RightVolume | double | Nivel de volumen del canal derecho en dB |
Elemento GStreamer: level
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->VUMeterBlock;
VUMeterBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var vuMeter = new VUMeterBlock();
vuMeter.VolumeUpdated += (sender, args) =>
{
// Left channel volume in dB
var leftVolume = args.LeftVolume;
// Right channel volume in dB
var rightVolume = args.RightVolume;
Console.WriteLine($"Left: {leftVolume:F2} dB, Right: {rightVolume:F2} dB");
};
pipeline.Connect(fileSource.AudioOutput, vuMeter.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(vuMeter.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Efectos de Audio¶
Audio Effects¶
El bloque AudioEffects proporciona una colección completa de efectos de procesamiento de audio que pueden aplicarse a flujos de audio. Para obtener información detallada sobre los parámetros y propiedades de los efectos, consulte la Referencia de Efectos de Audio.
Información del bloque¶
Nombre: AudioEffectsBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
Gestión de efectos basada en colección. Use los siguientes métodos:
| Método | Descripción |
|---|---|
AddOrUpdate(BaseAudioEffect effect) | Agrega un nuevo efecto o actualiza uno existente del mismo tipo |
Remove<T>() | Elimina el efecto del tipo especificado |
Clear() | Elimina todos los efectos |
Get<T>() | Retorna el efecto del tipo especificado, o null |
Los tipos de efectos soportados incluyen todos los efectos del espacio de nombres VisioForge.Core.Types.X.AudioEffects. Consulte la Referencia de Efectos de Audio para parámetros detallados.
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->AudioEffectsBlock;
AudioEffectsBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var audioEffects = new AudioEffectsBlock();
pipeline.Connect(fileSource.AudioOutput, audioEffects.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(audioEffects.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Normalización de Sonoridad de Audio¶
El bloque AudioLoudNorm normaliza la sonoridad del audio según los estándares EBU R128, asegurando una sonoridad percibida consistente entre diferentes contenidos de audio.
Información del bloque¶
Nombre: AudioLoudNormBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
Configure mediante AudioLoudNormAudioEffect:
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
LoudnessTarget | double | -24.0 | Sonoridad integrada objetivo en LUFS (-70.0 a -5.0) |
LoudnessRangeTarget | double | 7.0 | Rango de sonoridad objetivo en LU (1.0 a 20.0) |
MaxTruePeak | double | -2.0 | Pico verdadero máximo en dBTP (-9.0 a 0.0) |
Offset | double | 0.0 | Ganancia de compensación en LU (-99.0 a 99.0) |
Elemento GStreamer: audioloudnorm
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->AudioLoudNormBlock;
AudioLoudNormBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var loudNorm = new AudioLoudNormBlock();
pipeline.Connect(fileSource.AudioOutput, loudNorm.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(loudNorm.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Reducción de Ruido RNN¶
El bloque AudioRNNoise utiliza reducción de ruido basada en redes neuronales recurrentes (RNN) para eliminar el ruido de fondo de los flujos de audio mientras preserva la calidad del habla.
Información del bloque¶
Nombre: AudioRNNoiseBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
VadThreshold | float | 0.0 | Umbral de Detección de Actividad de Voz (0.0–1.0). Cuando > 0, actúa como puerta: el audio por debajo de esta probabilidad de habla se silencia. 0.0 = solo reducción de ruido, sin compuerta |
Elemento GStreamer: audiornnoise
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->AudioRNNoiseBlock;
AudioRNNoiseBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "noisy_audio.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var rnnoise = new AudioRNNoiseBlock();
pipeline.Connect(fileSource.AudioOutput, rnnoise.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(rnnoise.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Eliminar Silencio¶
El bloque RemoveSilence detecta y elimina automáticamente las porciones silenciosas de los flujos de audio, útil para podcasts, grabaciones de voz y edición de audio.
Información del bloque¶
Nombre: RemoveSilenceBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
Configure mediante RemoveSilenceAudioEffect:
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Threshold | double | 0.05 | Umbral de silencio (0.0–1.0). El audio por debajo de este nivel se considera silencio |
Squash | bool | true | Cuando es verdadero, elimina las porciones silenciosas por completo. Cuando es falso, las deja pasar |
Elemento GStreamer: removesilence
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->RemoveSilenceBlock;
RemoveSilenceBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "podcast.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var removeSilence = new RemoveSilenceBlock();
pipeline.Connect(fileSource.AudioOutput, removeSilence.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(removeSilence.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Filtro Csound¶
El bloque CsoundFilter proporciona síntesis y procesamiento de audio avanzado utilizando el lenguaje de programación de audio Csound.
Información del bloque¶
Nombre: CsoundFilterBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
Configure mediante CsoundAudioEffect:
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
CsdText | string | null | Texto de script CSD de Csound en línea |
Location | string | null | Ruta a un archivo .csd externo (alternativa a CsdText) |
Loop | bool | false | Si se debe repetir la partitura de Csound |
ScoreOffset | double | 0.0 | Desplazamiento de tiempo de la partitura en segundos |
Elemento GStreamer: csoundfilter
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->CsoundFilterBlock;
CsoundFilterBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var csoundSettings = new CsoundFilterSettings
{
CsdPath = "filter.csd" // Csound script file
};
var csound = new CsoundFilterBlock(csoundSettings);
pipeline.Connect(fileSource.AudioOutput, csound.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(csound.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux (requiere Csound).
Nivel EBU R128¶
El bloque EbuR128Level mide la sonoridad del audio según el estándar EBU R128, proporcionando mediciones precisas de sonoridad para cumplimiento de transmisión.
Información del bloque¶
Nombre: EbuR128LevelBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Mode | EbuR128Mode | All | Indicadores de modo de medición: MomentaryLoudness, ShortTermLoudness, GlobalLoudness, LoudnessRange, SamplePeak, TruePeak, All |
PostMessages | bool | true | Si se deben publicar mensajes de bus GStreamer con los resultados de medición |
Interval | TimeSpan | 1 s | Intervalo entre actualizaciones de medición |
Suscríbase al evento LoudnessUpdated para recibir datos de medición.
Elemento GStreamer: ebur128level
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->EbuR128LevelBlock;
EbuR128LevelBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var ebuR128 = new EbuR128LevelBlock();
ebuR128.LoudnessUpdated += (sender, args) =>
{
Console.WriteLine($"Momentary: {args.MomentaryLoudness:F2} LUFS");
Console.WriteLine($"Short-term: {args.ShortTermLoudness:F2} LUFS");
};
pipeline.Connect(fileSource.AudioOutput, ebuR128.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(ebuR128.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
HRTF Render¶
El bloque HRTFRender aplica procesamiento de Función de Transferencia Relacionada con la Cabeza (HRTF) para crear efectos de audio espacial 3D a partir de audio estéreo o multicanal.
Información del bloque¶
Nombre: HRTFRenderBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
HrirFile | string | "" | Ruta al archivo HRIR (Respuesta al Impulso Relacionada con la Cabeza) para renderizado espacial |
InterpolationSteps | ulong | 8 | Número de pasos de interpolación para transiciones espaciales suaves |
BlockLength | ulong | 512 | Longitud del bloque de procesamiento en muestras |
DistanceGain | float | 1.0 | Factor de atenuación de ganancia basado en distancia |
Todas las propiedades soportan actualizaciones en tiempo real durante la reproducción.
Elemento GStreamer: hrtfrender
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->HRTFRenderBlock;
HRTFRenderBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var hrtfSettings = new HRTFRenderSettings
{
Azimuth = 45.0, // Direction in degrees
Elevation = 0.0
};
var hrtf = new HRTFRenderBlock(hrtfSettings);
pipeline.Connect(fileSource.AudioOutput, hrtf.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(hrtf.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
RS Audio Echo¶
El bloque RSAudioEcho proporciona efectos de eco de alta calidad utilizando el plugin GStreamer rsaudiofx.
Información del bloque¶
Nombre: RSAudioEchoBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Delay | TimeSpan | 500 ms | Tiempo de retardo del eco |
MaxDelay | TimeSpan | 1000 ms | Retardo máximo permitido (debe ser >= Delay) |
Intensity | double | 0.5 | Intensidad del eco (0.0–1.0) |
Feedback | double | 0.0 | Cantidad de retroalimentación -- controla las repeticiones del eco (0.0–1.0) |
Todas las propiedades soportan actualizaciones en tiempo real durante la reproducción.
Elemento GStreamer: rsaudioecho
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->RSAudioEchoBlock;
RSAudioEchoBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var echoSettings = new RSAudioEchoSettings
{
Delay = 500, // Delay in milliseconds
Intensity = 0.5, // Echo intensity (0-1)
Feedback = 0.3 // Feedback amount (0-1)
};
var rsEcho = new RSAudioEchoBlock(echoSettings);
pipeline.Connect(fileSource.AudioOutput, rsEcho.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(rsEcho.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux (requiere el plugin rsaudiofx).
Pitch Shifter¶
El PitchBlock cambia el tono de un flujo de audio sin afectar la velocidad de reproducción. Utiliza la biblioteca SoundTouch a través del elemento GStreamer pitch, soportando cambios de -12 a +12 semitonos (una octava abajo a una octava arriba).
Información del bloque¶
Nombre: PitchBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
Semitones | int | 0 | Cambio de tono en semitonos (-12 a +12) |
Pitch | float | 1.0 | Multiplicador directo de tono (1.0 = sin cambio, 2.0 = una octava arriba, 0.5 = una octava abajo) |
Disponibilidad¶
PitchBlock.IsAvailable() retorna true si el elemento GStreamer pitch (plugin SoundTouch) está presente.
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->PitchBlock;
PitchBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var pitchBlock = new PitchBlock(semitones: 5);
pipeline.Connect(fileSource.AudioOutput, pitchBlock.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(pitchBlock.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux.
Detector de Silencio¶
El SilenceDetectorBlock analiza los niveles de audio en tiempo real para detectar períodos de silencio basándose en un umbral configurable en dBFS. Es un bloque de paso -- el audio se reenvía sin cambios mientras los eventos OnSilenceStarted y OnSilenceEnded se disparan en las transiciones de estado. Los períodos detectados pueden recuperarse como lista o exportarse como JSON.
Información del bloque¶
Nombre: SilenceDetectorBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
ThresholdDb | double | -40.0 | Umbral de silencio en dBFS; el audio por debajo de este nivel se trata como silencio |
Métodos clave:
GetSilencePeriods()-- retorna todos los objetosSilencePerioddetectados.FinalizeSilencePeriods(TimeSpan endTime)-- cierra cualquier período en curso y retorna la lista completa.ExportSilencePeriodsJson()-- retorna una cadena JSON con las marcas de tiempo de inicio/fin de cada período detectado.
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->SilenceDetectorBlock;
SilenceDetectorBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var silenceDetector = new SilenceDetectorBlock(thresholdDb: -35.0);
silenceDetector.OnSilenceStarted += (s, e) => Console.WriteLine($"Silence started at {e.Timestamp}");
silenceDetector.OnSilenceEnded += (s, e) => Console.WriteLine($"Silence ended at {e.Timestamp}");
pipeline.Connect(fileSource.AudioOutput, silenceDetector.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(silenceDetector.Output, audioRenderer.Input);
await pipeline.StartAsync();
// After pipeline stops, export detected silence periods
var json = silenceDetector.ExportSilencePeriodsJson();
Console.WriteLine(json);
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Mezcla de Canales Ponderada¶
El WeightedChannelMixBlock mezcla los canales estéreo izquierdo y derecho con pesos ajustables de forma independiente, produciendo una salida mono o estéreo. Se utiliza principalmente para fuentes de doble mono, como audio de karaoke donde un canal lleva una pista instrumental y el otro una mezcla completa.
Los pesos pueden cambiarse en tiempo de ejecución sin reconstruir el pipeline. Valores superiores a 1.0 amplifican el canal pero pueden causar recorte.
Información del bloque¶
Nombre: WeightedChannelMixBlock.
| Dirección del pin | Tipo de medio | Cantidad de pines |
|---|---|---|
| Entrada | Audio estéreo sin comprimir | 1 |
| Salida | Audio sin comprimir | 1 |
Configuración¶
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
LeftChannelWeight | float | 0.5 | Peso de mezcla para el canal izquierdo (0.0–1.0+) |
RightChannelWeight | float | 0.5 | Peso de mezcla para el canal derecho (0.0–1.0+) |
Pipeline de ejemplo¶
graph LR;
UniversalSourceBlock-->WeightedChannelMixBlock;
WeightedChannelMixBlock-->AudioRendererBlock; Código de ejemplo¶
var pipeline = new MediaBlocksPipeline();
var filename = "karaoke.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// Use only the instrumental (left) channel
var mixer = new WeightedChannelMixBlock(leftWeight: 1.0f, rightWeight: 0.0f);
pipeline.Connect(fileSource.AudioOutput, mixer.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(mixer.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plataformas¶
Windows, macOS, Linux, iOS, Android.
Preguntas Frecuentes¶
¿Cómo conecto bloques de audio en un pipeline?
Cree un MediaBlocksPipeline, instancie los bloques que necesite, luego conéctelos usando pipeline.Connect(sourceBlock.Output, destinationBlock.Input). Cada bloque tiene pines de entrada y salida tipados -- el pipeline valida que los pines conectados tengan tipos de medios compatibles.
¿Puedo aplicar múltiples efectos de audio en un solo pipeline?
Sí. Puede encadenar cualquier cantidad de bloques de audio en secuencia. Por ejemplo, conecte una fuente a un bloque ecualizador, luego a un bloque de reverberación, y finalmente a un renderizador. Alternativamente, use el AudioEffectsBlock para aplicar múltiples efectos dentro de un solo bloque. Para parámetros de efectos, consulte la Referencia de Efectos de Audio.
¿Cómo mezclo múltiples fuentes de audio juntas?
Use el AudioMixerBlock para combinar múltiples entradas de audio en una sola salida. Conecte cada fuente a un pin de entrada separado en el mezclador. El mezclador soporta control de volumen por entrada y negociación automática de formato.
¿Cuál es la diferencia entre AudioEffectsBlock y los bloques de efectos individuales?
Los bloques de efectos individuales (como AmplifyBlock, EchoBlock, ReverbBlock) envuelven un solo elemento GStreamer y se conectan como nodos separados del pipeline. El AudioEffectsBlock le permite aplicar múltiples efectos dentro de un bloque agregando instancias de efectos a su colección -- útil cuando necesita varios efectos sin cableado complejo.
¿Los bloques de audio soportan cambios de parámetros en tiempo real?
Sí. Puede modificar las propiedades de los bloques durante la reproducción. Por ejemplo, cambiar el nivel de volumen, ajustar bandas del EQ o actualizar los pesos del mezclador mientras el pipeline está en ejecución. Los cambios toman efecto inmediatamente sin detener el pipeline.