Extension/AudioExpression.RoughDraft.Extension.ps1
<# .SYNOPSIS Evaluates Audio Expressions .DESCRIPTION Generate or Modify an audio signal using an expression .EXAMPLE Show-Media -AudioExpression "-2+random(0)" # Play white noise .EXAMPLE Show-Media -AudioExpression "0.5*tan(PI*(360-2.5/2)*t)" .EXAMPLE New-Media -AudioExpression "0.5*sin(PI*(720-2.5/2)*t)","0.5*cos(2*PI*(360+2.5/2)*t)" -OutputPath .\Test.mp3 -Duration "00:00:15" .EXAMPLE Edit-Media -AudioExpression "val(0)","-val(1)" -InputPath .\Test.mp3 .LINK https://ffmpeg.org/ffmpeg-filters.html#aevalsrc .LINK https://ffmpeg.org/ffmpeg-filters.html#aeval #> [Management.Automation.Cmdlet("(?>Edit|New|Show)", "Media")] param( # The audio expression. [Parameter(Mandatory)] [string[]] $AudioExpression, # Set the channel layout. The number of channels in the specified layout must be equal to the number of specified expressions. [string[]] $AudioExpressionChannelLayout, # Set the number of samples per channel per each output frame, default to 1024. [int] $AudioExpressionSampleCount, # Specify the sample rate, default to 44100. [int] $AudioExpressionSampleRate ) $filterArgs = @( "exprs=$($AudioExpression -join '|')" if ($AudioExpressionChannelLayout) { "channel_layout=$($AudioExpressionChannelLayout -join '|')" } if ($AudioExpressionSampleCount) { "nb_samples=$AudioExpressionSampleCount" } if ($AudioExpressionSampleRate) { "sample_rate=$AudioExpressionSampleRate" } ) -join ':' if ($command -eq 'Edit-Media') { "-af" "aeval=$filterArgs" -replace '=$' } else { '-f' 'lavfi' '-i' "aevalsrc=$filterArgs" -replace '=$' } |