Types/Wave/set_Strings.ps1

<#
.SYNOPSIS
    Sets the strings in a wave
.DESCRIPTION
    Sets any custom strings applied to a wave.

    A frequency can be played on any number of "strings"

    We can think of each vibration within a sound as a literal string,
    vibrating at a frequency.
    
    That's what a lot of "real" music actually is.

    Each string is a harmonic vibration.

    Strings can be present on the note or on this wave.

    If strings is a positive number, each string will vibrate at half the frequency.

    If strings is a negative number, each string will vibrate at twice the frequency.

    If strings can be a list of `[double[]]`,
    each frequency will be generated at that ratio.
#>


if ($args.Length -eq 1 -and $args[0] -as [int]) {
    $this | Add-Member NoteProperty '#Strings' ($args[0] -as [int]) -Force
} else {
    # If we have a variable number of non-integer strings
    # unroll our list of arguments
    $unrollArgs = $args | . { process { $_ } }    
    # and pick out any items that are nonzero `[double]`
    $doubleStrings = foreach ($arg in $unrollArgs) {
        if ($null -ne ($arg -as [double])) {
            $arg -as [double]
        }
    }
    # these are each of the strings.
    $this | Add-Member NoteProperty '#Strings' $doubleStrings -Force
}