Extension/Flanger.RoughDraft.Extension.ps1

<#
.Synopsis
    Audio Flanger.
.Description
    Apply a flanging effect to the audio
.LINK
    https://ffmpeg.org/ffmpeg-filters.html#flanger
.EXAMPLE
    Edit-Media -InputPath "a.mp3" -Flanger -FlangerDelay 3 -FlangerDepth 4
.EXAMPLE
    Show-Media -InputPath "a.mp3" -Flanger
#>

[Management.Automation.Cmdlet("(?>Edit|Show)","Media")]   # It extends Edit or Show-Media
param(
# If set, will apply a flanger filter.
[Parameter(Mandatory)]
[switch]
$Flanger,

# Set base delay in milliseconds. Range from 0 to 30. Default value is 0.
[ValidateRange(0,30)]
[int]$FlangerDelay,    
# Set added sweep delay in milliseconds. Range from 0 to 10. Default value is 2.
[ValidateRange(0,10)]
[int]$FlangerDepth,

# Set percentage regeneration (delayed signal feedback). Range from -95 to 95. Default value is 0.
[Alias('FlangerRegen')]
[ValidateRange(-95,95)]
[int]$FlangerRegeneration,

# Set percentage of delayed signal mixed with original. Range from 0 to 100. Default value is 71.
[int]$FlangerWidth,

# Set sweeps per second (Hz). Range from 0.1 to 10. Default value is 0.5.
[ValidateRange(0.1, 10)]
[double]
$FlangerSpeed,
    
# Set swept wave shape, can be triangular or sinusoidal. Default value is sinusoidal.
[ValidateSet("Triangular", "Sinusoidal")]
[string]
$FlangerShape,

# Set swept wave percentage-shift for multi channel. Range from 0 to 100. Default value is 25.
[ValidateRange(0,100)]
[int]$FlangerPhase,

# Set delay-line interpolation, linear or quadratic. Default is linear.
[ValidateSet("Linear", "Quadratic")]
[Alias("FlangerInterp")]
[string]
$FlangerInteroplation    
)

$myCmdMetadata = [Management.Automation.CommandMetaData]$MyInvocation.MyCommand

$filterParams = @(
    foreach ($kv in $PSBoundParameters.GetEnumerator()) {
        if (-not $myCmdMetadata.Parameters[$kv.Key]) { continue }
        $keyName = $kv.Key -replace '^Flanger'
        $keyValue = $kv.Value.ToString().ToLower()
        if (-not $keyName) { continue }
        $keyName =
            if ($keyName -eq 'Interpolation') {
                'interp'
            }
            elseif ($keyName -eq 'Regeneration') {
                'regen'
            } else {
                $keyName.ToLower()
            }
        
        "$keyName=$keyValue"
    }
) -join ':'

"-af"
"flanger=$filterParams" -replace '=$'