Blocs de traitement audio et d'effets pour .NET¶
VisioForge Media Blocks SDK propose une approche par pipeline du traitement audio en C# et .NET. Connectez des blocs audio — convertisseurs, rééchantillonneurs, mélangeurs, égaliseurs, effets et analyseurs — pour construire des chaînes de traitement audio en temps réel pour vos applications. Chaque bloc possède des pins d'entrée/sortie typés que vous reliez avec pipeline.Connect().
Pour les paramètres et propriétés détaillés des effets audio, consultez la Référence des effets audio.
Tous les blocs sont multiplateformes et fonctionnent sous Windows, macOS, Linux, iOS et Android.
Traitement audio de base¶
Convertisseur audio¶
Le bloc convertisseur audio convertit l'audio d'un format à un autre.
Informations sur le bloc¶
Nom : AudioConverterBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
Aucun paramètre configurable. Négocie et convertit automatiquement les formats audio entre les éléments connectés.
Élément GStreamer : audioconvert
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->AudioConverterBlock;
AudioConverterBlock-->AudioRendererBlock; Exemple de code¶
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Rééchantillonneur audio¶
Le bloc de rééchantillonnage audio modifie la fréquence d'échantillonnage d'un flux audio.
Informations sur le bloc¶
Nom : AudioResamplerBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
Configurez via AudioResamplerSettings :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Format | AudioFormatX | S16LE | Format d'échantillon audio cible |
SampleRate | int | 44100 | Fréquence d'échantillonnage cible en Hz |
Channels | int | 2 | Nombre de canaux audio cible |
Quality | int | 4 | Qualité du rééchantillonnage (0 = la plus basse, 10 = la meilleure) |
ResampleMethod | AudioResamplerMethod | Kaiser | Algorithme de rééchantillonnage : Nearest, Linear, Cubic, BlackmanNuttall, Kaiser |
Élément GStreamer : audioresample
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->AudioResamplerBlock;
AudioResamplerBlock-->AudioRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// Rééchantillonner à 48000 Hz, stéréo
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Correcteur d'horodatage audio¶
Le bloc correcteur d'horodatage audio peut ajouter ou retirer des trames pour corriger le flux d'entrée provenant de sources instables.
Informations sur le bloc¶
Nom : AudioTimestampCorrectorBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
Configurez via AudioTimestampCorrectorSettings :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Silent | bool | true | Supprime les signaux de notification pour les trames supprimées et dupliquées |
SkipToFirst | bool | false | Ne produit pas de tampons avant la réception du premier |
Tolerance | TimeSpan | 40 ms | Différence d'horodatage minimale avant l'ajout ou la suppression d'échantillons |
Élément GStreamer : audiorate
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->AudioTimestampCorrectorBlock;
AudioTimestampCorrectorBlock-->AudioRendererBlock; Exemple de code¶
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Délai audio¶
Le bloc de délai audio décale les horodatages du tampon audio pour retarder l'ensemble du flux audio. Utilisez-le lorsque l'audio capturé ou décodé arrive plus tôt que la vidéo et que vous devez corriger la synchronisation A/V, ou lorsqu'une seule branche d'un pipeline audio doit être retardée avant l'enregistrement ou le streaming.
AudioDelayBlock est différent des effets d'écho comme EchoBlock ou RSAudioEchoBlock : il ne mixe pas une copie retardée dans le signal. Il retarde le flux lui-même en appliquant un décalage d'horodatage.
Informations sur le bloc¶
Nom : AudioDelayBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
Configurez via AudioDelaySettings ou passez un TimeSpan directement au constructeur :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Delay | TimeSpan | TimeSpan.Zero | Délai audio non négatif à appliquer au flux |
Sync | bool | true | Synchronise l'élément sous-jacent avec l'horloge du pipeline |
Silent | bool | true | Supprime les messages de handoff de l'élément sous-jacent |
Élément GStreamer : identity avec ts-offset.
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->AudioDelayBlock;
AudioDelayBlock-->AudioRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp4";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// Retarder l'audio de 500 ms.
var audioDelay = new AudioDelayBlock(TimeSpan.FromMilliseconds(500));
pipeline.Connect(fileSource.AudioOutput, audioDelay.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(audioDelay.Output, audioRenderer.Input);
await pipeline.StartAsync();
Retarder uniquement la branche d'enregistrement¶
Lorsque vous prévisualisez et enregistrez en même temps, placez AudioDelayBlock uniquement sur la branche qui nécessite le décalage.
var audioTee = new TeeBlock(2, MediaBlockPadMediaType.Audio);
pipeline.Connect(audioSource.Output, audioTee.Input);
// Branche d'aperçu sans délai supplémentaire.
pipeline.Connect(audioTee.Outputs[0], audioRenderer.Input);
// Branche d'enregistrement avec audio retardé.
var audioDelay = new AudioDelayBlock(TimeSpan.FromMilliseconds(250));
pipeline.Connect(audioTee.Outputs[1], audioDelay.Input);
pipeline.Connect(audioDelay.Output, aacEncoder.Input);
pipeline.Connect(aacEncoder.Output, mp4Sink.CreateNewInput(MediaBlockPadMediaType.Audio));
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Volume¶
Le bloc de volume vous permet de contrôler le volume du flux audio.
Informations sur le bloc¶
Nom : VolumeBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Level | double | 1.0 | Multiplicateur de niveau de volume (0.0 = silence, 1.0 = original, valeurs > 1.0 amplifient) |
Mute | bool | false | Coupe le flux audio sans modifier le niveau de volume |
Élément GStreamer : volume
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->VolumeBlock;
VolumeBlock-->AudioRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// VolumeBlock a un constructeur sans paramètre ; définissez Level sur la propriété (0.0 silence, 1.0 normal, >1.0 amplifié).
var volume = new VolumeBlock { Level = 0.8 };
pipeline.Connect(fileSource.AudioOutput, volume.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(volume.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Mélangeur audio¶
Le bloc mélangeur audio combine plusieurs flux audio en un seul. Le bloc mélange les flux indépendamment de leur format, en effectuant les conversions nécessaires.
Tous les flux d'entrée seront synchronisés. Le bloc mélangeur gère la conversion de différents formats audio d'entrée vers un format commun pour le mixage. Par défaut, il tentera de correspondre au format de la première entrée connectée, mais cela peut être explicitement configuré.
Utilisez la classe AudioMixerSettings pour définir le format de sortie personnalisé. Cela est utile si vous avez besoin d'une fréquence d'échantillonnage, d'une disposition de canaux ou d'un format audio spécifique (comme S16LE, Float32LE, etc.) pour la sortie mélangée.
Informations sur le bloc¶
Nom : AudioMixerBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 (créé dynamiquement) |
| Sortie | Audio non compressé | 1 |
Paramètres¶
Configurez via AudioMixerSettings :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Format | AudioInfoX | S16LE, 48000 Hz, 2 canaux | Format audio de sortie (format d'échantillon, fréquence d'échantillonnage, nombre de canaux) |
Méthodes à l'exécution :
| Méthode | Description |
|---|---|
CreateNewInput() | Crée un nouveau pad d'entrée (avant le démarrage du pipeline) |
CreateNewInputLive() | Crée un nouveau pad d'entrée pendant la lecture |
RemoveInputLive(MediaBlockPad) | Supprime un pad d'entrée pendant la lecture |
SetVolume(int streamIndex, double value) | Définit le volume pour une entrée spécifique par index 0 (0.0–10.0) |
SetMute(int streamIndex, bool value) | Coupe ou réactive une entrée spécifique par index 0 |
Élément GStreamer : audiomixer
Exemple de pipeline¶
graph LR;
VirtualAudioSourceBlock#1-->AudioMixerBlock;
VirtualAudioSourceBlock#2-->AudioMixerBlock;
AudioMixerBlock-->AudioRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var audioSource1Block = new VirtualAudioSourceBlock(new VirtualAudioSourceSettings());
var audioSource2Block = new VirtualAudioSourceBlock(new VirtualAudioSourceSettings());
// Configurer le mélangeur avec des paramètres de sortie spécifiques si nécessaire
// Par exemple, pour sortir en 48 kHz, 2 canaux, audio S16LE :
// var mixerSettings = new AudioMixerSettings() { Format = new AudioInfoX(AudioFormatX.S16LE, 48000, 2) };
// var audioMixerBlock = new AudioMixerBlock(mixerSettings);
var audioMixerBlock = new AudioMixerBlock(new AudioMixerSettings());
// Chaque appel à CreateNewInput() ajoute une nouvelle entrée au mélangeur
var inputPad1 = audioMixerBlock.CreateNewInput();
pipeline.Connect(audioSource1Block.Output, inputPad1);
var inputPad2 = audioMixerBlock.CreateNewInput();
pipeline.Connect(audioSource2Block.Output, inputPad2);
// Sortir l'audio mélangé vers le moteur de rendu audio par défaut
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(audioMixerBlock.Output, audioRenderer.Input);
await pipeline.StartAsync();
Contrôle des flux d'entrée individuels¶
Vous pouvez contrôler le volume et l'état de sourdine de flux d'entrée individuels connectés à l'AudioMixerBlock. Le streamIndex pour ces méthodes correspond à l'ordre dans lequel les entrées ont été ajoutées via CreateNewInput() ou CreateNewInputLive() (à partir de 0).
- Définir le volume : utilisez la méthode
SetVolume(int streamIndex, double value). Lavalueva de 0.0 (silence) à 1.0 (volume normal), et peut être supérieure pour l'amplification (par ex. jusqu'à 10.0, bien que les détails dépendent des limites de l'implémentation sous-jacente). - Définir la sourdine : utilisez la méthode
SetMute(int streamIndex, bool value). Définissezvalueàtruepour couper le flux etfalsepour le réactiver.
// En supposant que audioMixerBlock est déjà créé et que les entrées sont connectées
// Régler le volume du premier flux d'entrée (index 0) à 50 %
audioMixerBlock.SetVolume(0, 0.5);
// Couper le deuxième flux d'entrée (index 1)
audioMixerBlock.SetMute(1, true);
Gestion dynamique des entrées (pipeline en direct)¶
L'AudioMixerBlock prend en charge l'ajout et la suppression d'entrées dynamiquement pendant l'exécution du pipeline :
- Ajout d'entrées : utilisez la méthode
CreateNewInputLive()pour obtenir un nouveau pad d'entrée qui peut être connecté à une source. Les éléments GStreamer sous-jacents seront configurés pour gérer la nouvelle entrée. - Suppression d'entrées : utilisez la méthode
RemoveInputLive(MediaBlockPad blockPad). Cela déconnectera le pad d'entrée spécifié et nettoiera les ressources associées.
Cela est particulièrement utile pour les applications où le nombre de sources audio peut changer en cours d'utilisation, comme une console de mixage en direct ou une application de conférence.
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Capteur d'échantillons audio¶
Le bloc capteur d'échantillons audio vous permet d'accéder aux échantillons audio bruts du flux audio.
Informations sur le bloc¶
Nom : AudioSampleGrabberBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
format (constructeur) | AudioFormatX | S16LE | Format d'échantillon audio pour les trames capturées |
| Événement | Type d'arguments | Description |
|---|---|---|
OnAudioFrameBuffer | AudioFrameBufferEventArgs | Se déclenche pour chaque trame audio capturée avec les données audio brutes, la fréquence d'échantillonnage, les canaux et l'horodatage |
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->AudioSampleGrabberBlock;
AudioSampleGrabberBlock-->AudioRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var audioSampleGrabber = new AudioSampleGrabberBlock();
audioSampleGrabber.OnAudioFrameBuffer += (sender, args) =>
{
// args.Frame.Data — IntPtr vers le tampon PCM brut
// args.Frame.DataSize — longueur en octets du tampon
// args.Frame.Info.Format — AudioFormat (par ex. S16LE, F32LE)
// args.Frame.Info.SampleRate / Channels / BPS
// Définissez args.UpdateData = true si vous modifiez le tampon et voulez le propager en aval.
};
pipeline.Connect(fileSource.AudioOutput, audioSampleGrabber.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(audioSampleGrabber.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Effets audio¶
Amplification¶
Le bloc amplifie un flux audio par un facteur d'amplification. Plusieurs modes d'écrêtage sont disponibles.
Utilisez les valeurs method et level pour la configuration.
Informations sur le bloc¶
Nom : AmplifyBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Level | double | 1.0 | Multiplicateur d'amplification (1.0 = pas de changement, 2.0 = volume doublé, 0.5 = demi-volume) |
Method | AmplifyClippingMethod | Normal | Méthode d'écrêtage lorsque l'audio amplifié dépasse la plage valide |
Valeurs AmplifyClippingMethod :
| Valeur | Description |
|---|---|
Normal | Écrêtage dur au niveau maximum |
WrapNegative | Repousse les valeurs saturées depuis le côté opposé |
WrapPositive | Repousse les valeurs saturées depuis le même côté |
NoClip | Aucun écrêtage appliqué |
Élément GStreamer : audioamplify
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->AmplifyBlock;
AmplifyBlock-->AudioRendererBlock; Exemple de code¶
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Écho¶
Le bloc d'écho ajoute un effet d'écho au flux audio.
Informations sur le bloc¶
Nom : EchoBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Delay | TimeSpan | 200 ms | Temps de délai d'écho entre le signal original et ses répétitions |
MaxDelay | TimeSpan | 500 ms | Délai d'écho maximal (détermine la taille du tampon interne). Doit être >= Delay |
Intensity | float | 0 | Volume du signal retardé (0.0 = pas d'écho, 1.0 = volume plein) |
Feedback | float | 0 | Quantité de feedback pour les répétitions d'écho (0.0 = écho unique, valeurs proches de 1.0 = feedback infini) |
Élément GStreamer : audioecho
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->EchoBlock;
EchoBlock-->AudioRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// EchoBlock a un constructeur sans paramètre ; définissez les propriétés directement.
var echo = new EchoBlock
{
Delay = TimeSpan.FromMilliseconds(200), // délai d'écho
MaxDelay = TimeSpan.FromMilliseconds(500), // taille du tampon interne (doit être >= Delay)
Intensity = 0.5f, // volume du signal retardé (0.0-1.0)
Feedback = 0.3f // quantité de feedback (0.0-proche de 1.0)
};
pipeline.Connect(fileSource.AudioOutput, echo.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(echo.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Karaoké¶
Le bloc karaoké applique un effet karaoké au flux audio en supprimant les voix centrées.
Informations sur le bloc¶
Nom : KaraokeBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
Configurez via KaraokeAudioEffect :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Level | float | 1.0 | Force de suppression vocale (0.0 = pas d'effet, 1.0 = suppression maximale) |
MonoLevel | float | 1.0 | Niveau de suppression pour le contenu mono/centré (0.0–1.0) |
FilterBand | float | 220 | Fréquence centrale de la bande de filtrage en Hz ciblant la plage vocale |
FilterWidth | float | 100 | Largeur de la bande de fréquences à traiter en Hz |
Élément GStreamer : audiokaraoke
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->KaraokeBlock;
KaraokeBlock-->AudioRendererBlock; Exemple de code¶
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Réverbération¶
Le bloc de réverbération ajoute des effets de réverbération au flux audio.
Informations sur le bloc¶
Nom : ReverberationBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
Configurez via ReverberationAudioEffect :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
RoomSize | float | 0.5 | Taille de la pièce simulée (0.0 = petite pièce, 1.0 = grande salle) |
Damping | float | 0.2 | Atténuation des hautes fréquences (0.0 = brillant, 1.0 = sombre/étouffé) |
Width | float | 1.0 | Largeur stéréo de la réverbération (0.0 = mono, 1.0 = stéréo complet) |
Level | float | 0.5 | Niveau de mélange wet/dry (0.0 = sec seulement, 1.0 = humide seulement) |
Élément GStreamer : freeverb
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->ReverberationBlock;
ReverberationBlock-->AudioRendererBlock; Exemple de code¶
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Stéréo large¶
Le bloc stéréo large améliore l'image stéréo de l'audio.
Informations sur le bloc¶
Nom : WideStereoBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
Configurez via WideStereoAudioEffect :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Level | float | 0.01 | Quantité d'élargissement stéréo (0.0 = pas d'élargissement, valeurs plus élevées = image stéréo plus large). Typique : 0.01–0.03 subtil, 0.05–0.10 modéré, 0.15+ fort |
Élément GStreamer : stereo
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->WideStereoBlock;
WideStereoBlock-->AudioRendererBlock; Exemple de code¶
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Égalisation et filtrage¶
Balance¶
Le bloc vous permet de contrôler la balance entre les canaux gauche et droit.
Informations sur le bloc¶
Nom : AudioBalanceBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Balance | float | 0.0 | Position de balance stéréo (-1.0 = gauche complet, 0.0 = centre, +1.0 = droite complet) |
Élément GStreamer : audiopanorama
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->AudioBalanceBlock;
AudioBalanceBlock-->AudioRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// Balance : -1.0 (gauche complet) à 1.0 (droite complet), 0.0 = centre. Le ctor prend un float, pas un double.
var balance = new AudioBalanceBlock(0.5f);
pipeline.Connect(fileSource.AudioOutput, balance.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(balance.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Égaliseur (10 bandes)¶
Le bloc égaliseur 10 bandes fournit un égaliseur 10 bandes pour le traitement audio.
Informations sur le bloc¶
Nom : Equalizer10Block.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
L'égaliseur fournit 10 bandes de fréquence fixes. Utilisez SetBand(int index, double gain) pour ajuster les bandes individuelles. Plage de gain : -24 dB à +12 dB.
| Index de bande | Fréquence centrale | Largeur de bande |
|---|---|---|
| 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 |
Le constructeur est sans paramètre. Utilisez SetBand(int index, double gain) pour ajuster chacune des 10 bandes après construction.
Élément GStreamer : equalizer-10bands
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->Equalizer10Block;
Equalizer10Block-->AudioRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// Créer l'égaliseur 10 bandes (ctor sans paramètre ; les bandes sont à 0 dB par défaut)
var equalizer = new Equalizer10Block();
// Régler les bandes individuellement
equalizer.SetBand(0, 3); // Bande 0 (31 Hz) à +3 dB
equalizer.SetBand(1, 2); // Bande 1 (62 Hz) à +2 dB
equalizer.SetBand(9, -3); // Bande 9 (16 kHz) à -3 dB
pipeline.Connect(fileSource.AudioOutput, equalizer.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(equalizer.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Égaliseur (paramétrique)¶
Le bloc égaliseur paramétrique fournit un égaliseur paramétrique pour le traitement audio.
Informations sur le bloc¶
Nom : EqualizerParametricBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
Utilisez SetNumBands(int count) pour définir le nombre de bandes (1–64, par défaut 3), puis configurez chaque bande avec SetState(int index, ParametricEqualizerBand band).
Propriétés de ParametricEqualizerBand :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Frequency | float | varie | Fréquence centrale en Hz |
Gain | float | 0.0 | Gain de bande en dB (-24 à +12) |
Width | float | 1.0 | Largeur de bande en Hz |
Bandes par défaut (lorsque 3 bandes sont configurées) :
| Bande | Fréquence | Largeur de bande |
|---|---|---|
| 0 | 110 Hz | 100 Hz |
| 1 | 1100 Hz | 1000 Hz |
| 2 | 11000 Hz | 10000 Hz |
Élément GStreamer : equalizer-nbands
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->EqualizerParametricBlock;
EqualizerParametricBlock-->AudioRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// Créer l'égaliseur paramétrique
var equalizer = new EqualizerParametricBlock();
// Configurer le nombre de bandes, puis définir chaque bande via SetState(int index, ParametricEqualizerBand).
// ParametricEqualizerBand(freq : Hz, width : largeur de bande Hz, gain : dB). Propriétés : Frequency, Width, Gain.
equalizer.SetNumBands(4);
equalizer.SetState(0, new ParametricEqualizerBand(freq: 100f, width: 50f, gain: 3f));
equalizer.SetState(1, new ParametricEqualizerBand(freq: 1000f, width: 500f, gain: -2f));
pipeline.Connect(fileSource.AudioOutput, equalizer.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(equalizer.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Chebyshev Band Pass/Reject¶
Le bloc Chebyshev band pass/reject applique un filtre passe-bande ou réjection de bande au flux audio à l'aide de filtres Chebyshev.
Informations sur le bloc¶
Nom : ChebyshevBandPassRejectBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
Configurez via ChebyshevBandPassRejectAudioEffect :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Mode | ChebyshevBandMode | BandPass | Mode de filtre : BandPass (laisser passer les fréquences dans la plage) ou BandReject (rejeter les fréquences dans la plage) |
LowerFrequency | float | 220.0 | Fréquence de coupure basse en Hz |
UpperFrequency | float | 3000.0 | Fréquence de coupure haute en Hz |
Poles | int | 4 | Nombre de pôles du filtre (2–32, doit être pair). Valeurs plus élevées = coupure plus nette |
Type | int | 1 | Type de filtre Chebyshev : 1 (ondulation en bande passante) ou 2 (ondulation en bande atténuée) |
Ripple | float | 0.25 | Quantité d'ondulation en dB (Type 1 : ondulation en bande passante, Type 2 : ondulation en bande atténuée) |
Élément GStreamer : audiochebband
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->ChebyshevBandPassRejectBlock;
ChebyshevBandPassRejectBlock-->AudioRendererBlock; Exemple de code¶
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Chebyshev Limit¶
Le bloc Chebyshev limit applique un filtrage passe-bas ou passe-haut à l'audio à l'aide de filtres Chebyshev.
Informations sur le bloc¶
Nom : ChebyshevLimitBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
Configurez via ChebyshevLimitAudioEffect :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Mode | ChebyshevLimitMode | LowPass | Mode de filtre : LowPass (supprime les hautes fréquences) ou HighPass (supprime les basses fréquences) |
CutOffFrequency | float | 1000.0 | Fréquence de coupure en Hz |
Poles | int | 4 | Nombre de pôles du filtre (2–32, doit être pair). Valeurs plus élevées = coupure plus nette |
Type | int | 1 | Type de filtre Chebyshev : 1 (ondulation en bande passante) ou 2 (ondulation en bande atténuée) |
Ripple | float | 0.25 | Quantité d'ondulation en dB |
Élément GStreamer : audiocheblimit
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->ChebyshevLimitBlock;
ChebyshevLimitBlock-->AudioRendererBlock; Exemple de code¶
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Traitement dynamique¶
Compresseur/Expandeur¶
Le bloc compresseur/expandeur fournit une compression ou expansion de plage dynamique.
Informations sur le bloc¶
Nom : CompressorExpanderBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
Configurez via CompressorExpanderAudioEffect :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Mode | AudioCompressorMode | Compressor | Mode de traitement : Compressor (réduit la plage dynamique) ou Expander (augmente la plage dynamique) |
Characteristics | AudioDynamicCharacteristics | HardKnee | Type de knee : HardKnee (transition abrupte) ou SoftKnee (transition graduelle) |
Ratio | float | 1.0 | Ratio de compression/expansion (par ex. 2.0 = compression 2:1) |
Threshold | float | 0.0 | Niveau de seuil (0.0–1.0). Le signal au-dessus de ce niveau est compressé/expansé |
Le constructeur est sans paramètre. Configurez via les propriétés Ratio, Threshold, Mode et Characteristics après construction.
Élément GStreamer : audiodynamic
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->CompressorExpanderBlock;
CompressorExpanderBlock-->AudioRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// CompressorExpanderBlock a un constructeur sans paramètre ; définissez les propriétés directement.
var compressor = new CompressorExpanderBlock
{
Mode = AudioCompressorMode.Compressor,
Characteristics = AudioDynamicCharacteristics.HardKnee,
Ratio = 4f, // compression 4:1
Threshold = 0.5f // 0.0-1.0 (amplitude linéaire, pas dB sur ce bloc)
};
pipeline.Connect(fileSource.AudioOutput, compressor.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(compressor.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Échelle/Tempo¶
Le bloc échelle/tempo vous permet de modifier le tempo et la hauteur du flux audio.
Informations sur le bloc¶
Nom : ScaleTempoBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Rate | double | 1.0 | Multiplicateur de vitesse de lecture (0.5 = demi-vitesse, 1.0 = normal, 2.0 = vitesse double). La hauteur est préservée |
Overlap | double | 0.2 | Pourcentage de chevauchement (0.0–1.0). Valeurs plus élevées améliorent la qualité au coût du CPU |
Search | TimeSpan | 14 ms | Longueur de la fenêtre de recherche pour la meilleure position de chevauchement |
Stride | TimeSpan | 30 ms | Longueur du pas audio de sortie |
Le constructeur est sans paramètre ; définissez Rate via la propriété (ou l'accesseur sous-jacent SetRate est appelé en interne lorsque Rate est assigné).
Élément GStreamer : scaletempo
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->ScaleTempoBlock;
ScaleTempoBlock-->AudioRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// ScaleTempoBlock a un constructeur sans paramètre ; définissez Rate via la propriété.
// 1.0 = normal, 0.5 = demi-vitesse, 2.0 = vitesse double ; la hauteur est préservée.
var scaleTempo = new ScaleTempoBlock { Rate = 1.5 };
pipeline.Connect(fileSource.AudioOutput, scaleTempo.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(scaleTempo.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Analyse et mesure¶
VU-mètre¶
Le bloc VU-mètre vous permet de mesurer le niveau de volume du flux audio.
Informations sur le bloc¶
Nom : VUMeterBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
Bloc basé sur des événements. Abonnez-vous à l'événement OnAudioVUMeter (type : EventHandler<VUMeterXEventArgs>) pour recevoir les données de niveau.
VUMeterXEventArgs.MeterData transporte une instance VUMeterXData avec des tableaux par canal :
Propriété sur VUMeterXData | Type | Description |
|---|---|---|
ChannelsCount | int | Nombre de canaux audio rapportés |
Peak | double[] | Niveaux de crête par canal (dB) |
RMS | double[] | Niveaux RMS par canal (dB) |
Decay | double[] | Niveaux de decay par canal (dB) |
Élément GStreamer : level
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->VUMeterBlock;
VUMeterBlock-->AudioRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var vuMeter = new VUMeterBlock();
vuMeter.OnAudioVUMeter += (sender, args) =>
{
var data = args.MeterData;
for (int i = 0; i < data.ChannelsCount; i++)
{
Console.WriteLine($"Canal{i} : Peak={data.Peak[i]:F2} dB, RMS={data.RMS[i]:F2} dB");
}
};
pipeline.Connect(fileSource.AudioOutput, vuMeter.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(vuMeter.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Effets audio¶
Effets audio¶
Le bloc AudioEffects fournit une collection complète d'effets de traitement audio qui peuvent être appliqués aux flux audio. Pour les paramètres et propriétés détaillés des effets, consultez la Référence des effets audio.
Informations sur le bloc¶
Nom : AudioEffectsBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
Gestion des effets basée sur une collection. Utilisez les méthodes suivantes :
| Méthode | Description |
|---|---|
AddOrUpdate(BaseAudioEffect effect) | Ajoute un nouvel effet ou met à jour un effet existant du même type |
Remove<T>() | Supprime l'effet du type spécifié |
Clear() | Supprime tous les effets |
Get<T>() | Renvoie l'effet du type spécifié, ou null |
Les types d'effets pris en charge incluent tous les effets de l'espace de noms VisioForge.Core.Types.X.AudioEffects. Consultez la Référence des effets audio pour les paramètres détaillés.
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->AudioEffectsBlock;
AudioEffectsBlock-->AudioRendererBlock; Exemple de code¶
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Normalisation de l'intensité audio¶
Le bloc AudioLoudNorm normalise l'intensité audio selon les normes EBU R128, assurant une intensité perçue cohérente sur différents contenus audio.
Informations sur le bloc¶
Nom : AudioLoudNormBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
Configurez via AudioLoudNormAudioEffect :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
LoudnessTarget | double | -24.0 | Intensité intégrée cible en LUFS (-70.0 à -5.0) |
LoudnessRangeTarget | double | 7.0 | Plage d'intensité cible en LU (1.0 à 20.0) |
MaxTruePeak | double | -2.0 | Crête vraie maximale en dBTP (-9.0 à 0.0) |
Offset | double | 0.0 | Gain de décalage en LU (-99.0 à 99.0) |
Élément GStreamer : audioloudnorm
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->AudioLoudNormBlock;
AudioLoudNormBlock-->AudioRendererBlock; Exemple de code¶
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Réduction de bruit RNN¶
Le bloc AudioRNNoise utilise la réduction de bruit basée sur un réseau de neurones récurrent (RNN) pour supprimer le bruit de fond des flux audio tout en préservant la qualité de la parole.
Informations sur le bloc¶
Nom : AudioRNNoiseBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
VadThreshold | float | 0.0 | Seuil de détection d'activité vocale (0.0–1.0). Lorsque > 0, agit comme une porte : l'audio en dessous de cette probabilité de parole est mis en sourdine. 0.0 = réduction de bruit uniquement, pas de portail |
Élément GStreamer : audiornnoise
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->AudioRNNoiseBlock;
AudioRNNoiseBlock-->AudioRendererBlock; Exemple de code¶
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Suppression de silence¶
Le bloc RemoveSilence détecte et supprime automatiquement les portions silencieuses des flux audio, utile pour les podcasts, les enregistrements vocaux et le montage audio.
Informations sur le bloc¶
Nom : RemoveSilenceBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
Configurez via RemoveSilenceAudioEffect :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Threshold | double | 0.05 | Seuil de silence (0.0–1.0). L'audio en dessous de ce niveau est considéré comme silence |
Squash | bool | true | Lorsque true, supprime entièrement les portions silencieuses. Lorsque false, les laisse passer |
Élément GStreamer : removesilence
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->RemoveSilenceBlock;
RemoveSilenceBlock-->AudioRendererBlock; Exemple de code¶
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Filtre Csound¶
Le bloc CsoundFilter fournit une synthèse et un traitement audio avancés à l'aide du langage de programmation audio Csound.
Informations sur le bloc¶
Nom : CsoundFilterBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
Configurez via CsoundAudioEffect :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
CsdText | string | null | Texte de script CSD Csound inline |
Location | string | null | Chemin vers un fichier .csd externe (alternative à CsdText) |
Loop | bool | false | Si la partition Csound doit être bouclée |
ScoreOffset | double | 0.0 | Décalage temporel de la partition en secondes |
Élément GStreamer : csoundfilter
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->CsoundFilterBlock;
CsoundFilterBlock-->AudioRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// CsoundFilterBlock prend directement le contenu du script Csound (.csd), pas un objet de paramètres.
// Chargez le script depuis le disque et passez le texte au constructeur — définissez optionnellement Loop/ScoreOffset.
var csdText = File.ReadAllText("filter.csd");
var csound = new CsoundFilterBlock(csdText, loop: false, scoreOffset: 0.0);
pipeline.Connect(fileSource.AudioOutput, csound.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(csound.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plateformes¶
Windows, macOS, Linux (nécessite Csound).
Niveau EBU R128¶
Le bloc EbuR128Level mesure l'intensité audio selon la norme EBU R128, fournissant des mesures d'intensité précises pour la conformité de diffusion.
Informations sur le bloc¶
Nom : EbuR128LevelBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Mode | EbuR128Mode | All | Indicateurs de mode de mesure : MomentaryLoudness, ShortTermLoudness, GlobalLoudness, LoudnessRange, SamplePeak, TruePeak, All |
PostMessages | bool | true | Si les messages de bus GStreamer doivent être postés avec les résultats de mesure |
Interval | TimeSpan | 1 s | Intervalle entre les mises à jour de mesure |
EbuR128LevelBlock mesure l'intensité en interne et poste les résultats sur le bus GStreamer lorsque PostMessages = true. Il n'expose pas d'événement managé — lisez la propriété level ou gérez le message de bus vous-même si vous avez besoin des valeurs dans .NET.
Élément GStreamer : ebur128level
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->EbuR128LevelBlock;
EbuR128LevelBlock-->AudioRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
var ebuR128 = new EbuR128LevelBlock
{
Mode = EbuR128Mode.All,
PostMessages = true, // activer les messages de bus GStreamer avec les résultats de mesure
Interval = TimeSpan.FromSeconds(1) // cadence de mesure
};
pipeline.Connect(fileSource.AudioOutput, ebuR128.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(ebuR128.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Rendu HRTF¶
Le bloc HRTFRender applique le traitement Head-Related Transfer Function (HRTF) pour créer des effets audio spatiaux 3D à partir d'audio stéréo ou multicanal.
Informations sur le bloc¶
Nom : HRTFRenderBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
HrirFile | string | "" | Chemin vers le fichier HRIR (Head-Related Impulse Response) pour le rendu spatial |
InterpolationSteps | ulong | 8 | Nombre d'étapes d'interpolation pour les transitions spatiales fluides |
BlockLength | ulong | 512 | Longueur du bloc de traitement en échantillons |
DistanceGain | float | 1.0 | Facteur d'atténuation de gain basé sur la distance |
Toutes les propriétés prennent en charge les mises à jour en temps réel pendant la lecture.
Élément GStreamer : hrtfrender
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->HRTFRenderBlock;
HRTFRenderBlock-->AudioRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// HRTFRenderBlock a un ctor sans paramètre ; configurez via les propriétés.
// Fournissez un fichier HRIR (Head-Related Impulse Response) — requis pour le rendu spatial.
var hrtf = new HRTFRenderBlock
{
HrirFile = "hrir.sofa", // chemin vers le fichier HRIR
InterpolationSteps = 8, // ulong — transitions plus fluides = plus de CPU
BlockLength = 512, // ulong — taille de bloc de traitement
DistanceGain = 1.0f // float — force d'atténuation par distance
};
pipeline.Connect(fileSource.AudioOutput, hrtf.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(hrtf.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Écho audio RS¶
Le bloc RSAudioEcho fournit des effets d'écho de haute qualité à l'aide du plugin GStreamer rsaudiofx.
Informations sur le bloc¶
Nom : RSAudioEchoBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Delay | TimeSpan | 500 ms | Temps de délai d'écho |
MaxDelay | TimeSpan | 1000 ms | Délai maximal autorisé (doit être >= Delay) |
Intensity | double | 0.5 | Intensité d'écho (0.0–1.0) |
Feedback | double | 0.0 | Quantité de feedback — contrôle les répétitions d'écho (0.0–1.0) |
Toutes les propriétés prennent en charge les mises à jour en temps réel pendant la lecture.
Élément GStreamer : rsaudioecho
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->RSAudioEchoBlock;
RSAudioEchoBlock-->AudioRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var filename = "test.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// RSAudioEchoBlock a un ctor sans paramètre ; configurez via les propriétés (Delay/MaxDelay sont des TimeSpan).
var rsEcho = new RSAudioEchoBlock
{
Delay = TimeSpan.FromMilliseconds(500),
MaxDelay = TimeSpan.FromMilliseconds(1000),
Intensity = 0.5, // 0.0-1.0 — volume de l'écho
Feedback = 0.3 // 0.0-0.9 — combien de répétitions avant atténuation
};
pipeline.Connect(fileSource.AudioOutput, rsEcho.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(rsEcho.Output, audioRenderer.Input);
await pipeline.StartAsync();
Plateformes¶
Windows, macOS, Linux (nécessite le plugin rsaudiofx).
Pitch Shifter¶
Le PitchBlock modifie la hauteur d'un flux audio sans affecter la vitesse de lecture. Il utilise la bibliothèque SoundTouch via l'élément GStreamer pitch, prenant en charge des décalages de −12 à +12 demi-tons (une octave vers le bas à une octave vers le haut).
Informations sur le bloc¶
Nom : PitchBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
Semitones | int | 0 | Décalage de hauteur en demi-tons (−12 à +12) |
Pitch | float | 1.0 | Multiplicateur direct de hauteur (1.0 = pas de changement, 2.0 = une octave vers le haut, 0.5 = une octave vers le bas) |
Disponibilité¶
PitchBlock.IsAvailable() renvoie true si l'élément GStreamer pitch (plugin SoundTouch) est présent.
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->PitchBlock;
PitchBlock-->AudioRendererBlock; Exemple de code¶
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();
Plateformes¶
Windows, macOS, Linux.
Détecteur de silence¶
Le SilenceDetectorBlock analyse les niveaux audio en temps réel pour détecter les périodes de silence en fonction d'un seuil dBFS configurable. C'est un bloc de passage — l'audio est transmis inchangé tandis que les événements OnSilenceStarted et OnSilenceEnded se déclenchent aux transitions d'état. Les périodes détectées peuvent être récupérées sous forme de liste ou exportées en JSON.
Informations sur le bloc¶
Nom : SilenceDetectorBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
ThresholdDb | double | -40.0 | Seuil de silence en dBFS ; l'audio en dessous de ce niveau est traité comme du silence |
Méthodes clés :
GetSilencePeriods()— renvoie tous les objetsSilencePerioddétectés.FinalizeSilencePeriods(TimeSpan endTime)— ferme toute période en cours et renvoie la liste complète.ExportSilencePeriodsJson()— renvoie une chaîne JSON avec les horodatages de début/fin pour chaque période détectée.
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->SilenceDetectorBlock;
SilenceDetectorBlock-->AudioRendererBlock; Exemple de code¶
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 commencé à {e.Timestamp}");
silenceDetector.OnSilenceEnded += (s, e) => Console.WriteLine($"Silence terminé à {e.Timestamp}");
pipeline.Connect(fileSource.AudioOutput, silenceDetector.Input);
var audioRenderer = new AudioRendererBlock();
pipeline.Connect(silenceDetector.Output, audioRenderer.Input);
await pipeline.StartAsync();
// Après l'arrêt du pipeline, exporter les périodes de silence détectées
var json = silenceDetector.ExportSilencePeriodsJson();
Console.WriteLine(json);
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Mélange de canaux pondéré¶
Le WeightedChannelMixBlock mélange les canaux stéréo gauche et droit avec des poids réglables indépendamment, produisant une sortie mono ou stéréo. Il est principalement utilisé pour les sources dual-mono comme l'audio karaoké où un canal porte une piste instrumentale et l'autre un mix complet.
Les poids peuvent être modifiés à l'exécution sans reconstruire le pipeline. Les valeurs supérieures à 1.0 amplifient le canal mais peuvent provoquer un écrêtage.
Informations sur le bloc¶
Nom : WeightedChannelMixBlock.
| Direction du pin | Type de média | Nombre de pins |
|---|---|---|
| Entrée | Audio stéréo non compressé | 1 |
| Sortie | Audio non compressé | 1 |
Paramètres¶
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
LeftChannelWeight | float | 0.5 | Poids de mélange pour le canal gauche (0.0–1.0+) |
RightChannelWeight | float | 0.5 | Poids de mélange pour le canal droit (0.0–1.0+) |
Exemple de pipeline¶
graph LR;
UniversalSourceBlock-->WeightedChannelMixBlock;
WeightedChannelMixBlock-->AudioRendererBlock; Exemple de code¶
var pipeline = new MediaBlocksPipeline();
var filename = "karaoke.mp3";
var fileSource = new UniversalSourceBlock(await UniversalSourceSettings.CreateAsync(new Uri(filename)));
// Utiliser uniquement le canal instrumental (gauche)
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();
Plateformes¶
Windows, macOS, Linux, iOS, Android.
Foire aux questions¶
Comment connecter des blocs audio dans un pipeline ?
Créez un MediaBlocksPipeline, instanciez les blocs dont vous avez besoin, puis connectez-les à l'aide de pipeline.Connect(sourceBlock.Output, destinationBlock.Input). Chaque bloc possède des pins d'entrée et de sortie typés — le pipeline valide que les pins connectés ont des types de médias compatibles.
Puis-je appliquer plusieurs effets audio dans un seul pipeline ?
Oui. Vous pouvez enchaîner un nombre quelconque de blocs audio en séquence. Par exemple, connectez une source à un bloc égaliseur, puis à un bloc de réverbération, puis à un moteur de rendu. Alternativement, utilisez l'AudioEffectsBlock pour appliquer plusieurs effets dans un seul bloc. Pour les paramètres d'effet, consultez la Référence des effets audio.
Comment mélanger plusieurs sources audio ensemble ?
Utilisez l'AudioMixerBlock pour combiner plusieurs entrées audio en une seule sortie. Connectez chaque source à un pin d'entrée séparé sur le mélangeur. Le mélangeur prend en charge le contrôle de volume par entrée et la négociation automatique de format.
Quelle est la différence entre AudioEffectsBlock et les blocs d'effet individuels ?
Les blocs d'effet individuels (comme AmplifyBlock, EchoBlock, ReverbBlock) encapsulent un seul élément GStreamer et sont connectés comme des nœuds de pipeline séparés. L'AudioEffectsBlock vous permet d'appliquer plusieurs effets au sein d'un seul bloc en ajoutant des instances d'effets à sa collection — utile lorsque vous avez besoin de plusieurs effets sans câblage complexe.
Les blocs audio prennent-ils en charge les changements de paramètres en temps réel ?
Oui. Vous pouvez modifier les propriétés des blocs pendant la lecture. Par exemple, modifier le niveau de volume, ajuster les bandes EQ ou mettre à jour les poids du mélangeur pendant que le pipeline est en cours d'exécution. Les changements prennent effet immédiatement sans arrêter le pipeline.