PowerShell Piano Synthesizer with microtonal intervals

Change log     Repository     Latest update: 20 February 2021

PS-Synth 5 – 144 TET v1.31
PS-Synth 12 Tone Near-Equal Temperament v1.31


The ultimate open source synthesizer with flexibility to change literally everything – standard pitch, sound duration, number of tones per octave, any music temperament (Equal Temperament, Pythagorean Tuning, Just Intonation, etc.). Usually the synths on the market are hard coded to 12 tones per octave, tuned in the Equal Temperament and the option to change the standard pitch of A4 is very rare. That’s why if you want to create an experimental music, building a custom setup is quite complicated.

With this synth there is no limit what you can do. Currently supports up to 1300 tones between 16Hz and 8kHz. The tones are being tuned in Equal Temperament depending on A4 frequency. If you need to change the temperament, simply write your own ratios in the array $Ratios, just search this variable in the script.

Below formulas have been taken from Inigo Quilez.
f(y) = sin(2 * pi * frequency * time) * exp(-time)
f(Y) = f(y) * f(y) * f(y)

How to run

If PowerShell scripts have never been ran on your computer, the default policy may blocks the execution. You must set the execution policy to “Bypass“. Follow these steps:
– Search for PowerShell in the start menu
– Right click on the app and run it as administrator
– Type below command and press Enter:
    Set-ExecutionPolicy Bypass

Prompt will appear to confirm whether you want to change the execution policy.
Type A and press Enter to confirm. Above steps must be done only once on your computer.

Then right click on PS-Synth.ps1 file and choose “Run with PowerShell”.


  • Set the standard pitch of A4 between 416 and 466 Hz. Accepts decimal value.
  • Set the sound duration between 4 and 20 seconds. Accepts decimal value.
  • Set number of tones per octave between 5 and 144.
  • Use arrow keys to shift playing octave up or down.
  • Turn CapsLock on/off to sustain/release the sound.


There is a pseudo, console-based graphic interface. If the console window is too small, the keyboard is divided into 2 parts (see image). To show up 1 row keyboard, the font size must not exceed 12. Hold Ctrl key and use mouse scroll wheel to lower the font. Then maximize the console and press ESC to refresh the interface. The script works in ISE as well (see image).

Just a quick demonstration. I didn’t have time to practice.

Notify of
Inline Feedbacks
View all comments