Files
zmVault/2025-12-19.md
T

3.8 KiB

id, aliases, title, tags
id aliases title tags
2025-12-19
authorship/original
destiny/permanent
status/draft
type/daily

2025-12-19

2025-12-19 06:22

PowerShell module to assist in translating between banjo fingerings and concert notes, as well as between lilypond and conventional notation.

$Db4 = [Pitch]::FromLilyPond("des'")
[Note]::($Db4,1/4).PlayInTime(120)

$str1 = [FrettedStringTuning]::FromOpen([Pitch]::FromLilyPond("d,,,"))
$str1c2 = $str1.Capo(2)

$openGtuning = [FrettedStringInstrumentTuning]::FromStringTunings(@(
    [FrettedStringTuning]::FromOpen([Pitch]::FromLilyPond("d,,,")),
    [FrettedStringTuning]::FromOpen([Pitch]::FromLilyPond("b,,")),
    [FrettedStringTuning]::FromOpen([Pitch]::FromLilyPond("g,")),
    [FrettedStringTuning]::FromOpen([Pitch]::FromLilyPond("d")),
    [FrettedStringTuning]::FromOpen([Pitch]::FromLilyPond("g'")),
    # note: the notation used above is concert octave,
    # banjo is transposed up one octave.
))
[Note]::($openGc2tuning.GetPitchFromFingering(4,11)/4).PlayInTime(120) # play Db4

$openGc2tuning = $openGtuning.Capo(2)
[Note]::($openGc2tuning.GetPitchFromFingering(4,9),1/4).PlayInTime(120) # play Db4

# TODO: class iFrettedStringInstrument
# class Banjo implements iFrettedStringInstrument

class Pitch {
    [Pitch] TransposeOctave([Note]$note1,[Note]$note2) {}
    [Pitch] TransposeOctave([int]$modifier) {}
}

class Duration {
    # 1/4, 1/8, etc.
    # does not encode timing.
}

class Note {
    [Pitch]$_pitch
    [Duration]$_duration
}
classDiagram
    %% simple score definition, does not support polyphony
    class Score {
        List~Note~ notes
        float beatsPerMinute
        +Beep() void
    }

    Score *-- Note
    class Note {
        Pitch pitch
        float beats
        +BeepInTime(int bpm)
    }

    Note *-- Pitch
    class Pitch {
        +Transpose(Pitch from, Pitch to) Pitch
        +TransposeOctave(int modifier) Pitch
        +FromLilyPond(string text) Pitch
        +GetFrequency() float
        +Beep(int milliseconds) void
    }

    class Banjo {
        +FromNamedTuning(string tuningName) Banjo
    }

    Banjo <|.. iFrettedStringInstrument
    class iFrettedStringInstrument {
        -FrettedStringInstrumentTuning tuning
        +GetPitchFromFingering(int string,int fret) Pitch
        +GetFingeringsFromPitch(Pitch pitch) todo
    }

    iFrettedStringInstrument *-- FrettedStringInstrumentTuning
    class FrettedStringInstrumentTuning {
        -List~FrettedStringTuning~ stringTunings
        +GetPitchFromFingering(int string,int fret) Pitch
        +GetFingeringsFromPitch(Pitch pitch) todo
        +Capo(int fret) FrettedStringInstrumentTuning
    }

    FrettedStringInstrumentTuning *-- FrettedStringTuning
    class FrettedStringTuning {
        Pitch openPitch
        int fretOffset
        +GetPitchFromFret(int fret) Pitch
        +SetOffset(int fret) FrettedStringTuning
    }

2025-12-19 10:44

#occupational/takeoff

[!quote] Art Baldwin 2025-12-19, in reference to Howard University East Towers (pp.) When using PVC slab box assemblies where substantial insulation (e.g mineral wool, spray foam) is to be applied, add extension rings to compensate for the thickness

2025-12-19 10:44

#occupational/takeoff

This week (2025w51) William Bonn, as part of units-takeoff for Howard University East Towers, used an Area "Typical - Unit Balconies" for Phase "UNIT - RESIDENTIAL" takeoff. Our senior Joel Jansen approved of the method.

I'd like to use the method tentatively for takeoff strictly typical of all units (e.g. master switches, MSDE's, etc.), but there is potential for significant efficiency gains in treating units like panelboards in switchgear-takeoff: picking one unit type to be typical of many nearly identical types.